diff --git a/core/composer.json b/core/composer.json
index c7107ba5f36267588fe18153729c49fb024e6a5b..0a6874f18a1d436605096977f616a723bf9e9a51 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -6,18 +6,19 @@
   "require": {
     "php": ">=5.4.5",
     "sdboyer/gliph": "0.1.*",
-    "symfony/class-loader": "2.6.*",
-    "symfony/console": "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.*",
+    "symfony/class-loader": "2.7.*",
+    "symfony/console": "2.7.*",
+    "symfony/css-selector": "2.7.*",
+    "symfony/dependency-injection": "2.7.*",
+    "symfony/event-dispatcher": "2.7.*",
+    "symfony/http-foundation": "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.*",
     "twig/twig": "1.18.*",
     "doctrine/common": "~2.4.2",
     "doctrine/annotations": "1.2.*",
@@ -34,6 +35,8 @@
     "fabpot/goutte": "^2.0.3",
     "masterminds/html5": "~2.1"
   },
+  "minimum-stability": "dev",
+  "prefer-stable": true,
   "autoload": {
     "psr-4": {
       "Drupal\\Core\\": "lib/Drupal/Core",
diff --git a/core/composer.lock b/core/composer.lock
index a3a54d342af332afa573441730d7599240bcd599..014507970b9e362a903dae740b9673e017dea7d5 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -1,10 +1,10 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "8815752eccc78eaca65ea89fa297746f",
+    "hash": "61a2b6dec8252d78e904d37fbf1637d7",
     "packages": [
         {
             "name": "behat/mink",
@@ -2143,17 +2143,17 @@
         },
         {
             "name": "symfony/browser-kit",
-            "version": "v2.6.6",
+            "version": "v2.6.9",
             "target-dir": "Symfony/Component/BrowserKit",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/BrowserKit.git",
-                "reference": "f21189b0eccbe56528515858ca1d5089a741692f"
+                "reference": "cf950c42947ea2f29c36a1f443202b6134f5c303"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/f21189b0eccbe56528515858ca1d5089a741692f",
-                "reference": "f21189b0eccbe56528515858ca1d5089a741692f",
+                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/cf950c42947ea2f29c36a1f443202b6134f5c303",
+                "reference": "cf950c42947ea2f29c36a1f443202b6134f5c303",
                 "shasum": ""
             },
             "require": {
@@ -2184,36 +2184,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony BrowserKit Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:18:45"
         },
         {
             "name": "symfony/class-loader",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/ClassLoader",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/ClassLoader.git",
-                "reference": "861765b3e5f32979de5bd19ad2577cbb830a29d5"
+                "reference": "fa19598cb708b92d983b34aae313f57c217f9386"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/861765b3e5f32979de5bd19ad2577cbb830a29d5",
-                "reference": "861765b3e5f32979de5bd19ad2577cbb830a29d5",
+                "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/fa19598cb708b92d983b34aae313f57c217f9386",
+                "reference": "fa19598cb708b92d983b34aae313f57c217f9386",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/finder": "~2.0,>=2.0.5",
@@ -2222,11 +2221,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\ClassLoader\\": ""
                 }
             },
@@ -2235,36 +2234,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony ClassLoader Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-27 10:19:51"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/console",
-            "version": "v2.6.7",
-            "target-dir": "Symfony/Component/Console",
+            "version": "v2.7.0-BETA2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272"
+                "reference": "555ba7fc54a538e1b83988e2299db09b6b6dca64"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/ebc5679854aa24ed7d65062e9e3ab0b18a917272",
-                "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/555ba7fc54a538e1b83988e2299db09b6b6dca64",
+                "reference": "555ba7fc54a538e1b83988e2299db09b6b6dca64",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "psr/log": "~1.0",
@@ -2280,11 +2278,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Console\\": ""
                 }
             },
@@ -2304,25 +2302,24 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-02 15:18:45"
+            "time": "2015-05-02 15:21:08"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/CssSelector",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/CssSelector.git",
-                "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4"
+                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/db2c48df9658423a8c168d89f7b971b73d3d74a4",
-                "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
+                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -2330,11 +2327,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\CssSelector\\": ""
                 }
             },
@@ -2343,10 +2340,6 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Jean-François Simon",
                     "email": "jeanfrancois.simon@sensiolabs.com"
@@ -2354,25 +2347,29 @@
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony CssSelector Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-22 16:55:57"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/debug",
-            "version": "v2.6.6",
+            "version": "v2.6.9",
             "target-dir": "Symfony/Component/Debug",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Debug.git",
-                "reference": "d49a46a20a8f0544aedac54466750ad787d3d3e3"
+                "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Debug/zipball/d49a46a20a8f0544aedac54466750ad787d3d3e3",
-                "reference": "d49a46a20a8f0544aedac54466750ad787d3d3e3",
+                "url": "https://api.github.com/repos/symfony/Debug/zipball/4851a041c48e76b91a221db84ab5850daa6a7b33",
+                "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33",
                 "shasum": ""
             },
             "require": {
@@ -2408,36 +2405,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Debug Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-22 16:55:57"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-20 13:09:45"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/DependencyInjection",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DependencyInjection.git",
-                "reference": "8e9007012226b4bd41f8afed855c452cf5edc3a6"
+                "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/8e9007012226b4bd41f8afed855c452cf5edc3a6",
-                "reference": "8e9007012226b4bd41f8afed855c452cf5edc3a6",
+                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
+                "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "conflict": {
                 "symfony/expression-language": "<2.6"
@@ -2456,11 +2452,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\DependencyInjection\\": ""
                 }
             },
@@ -2469,32 +2465,32 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony DependencyInjection Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v2.6.6",
+            "version": "v2.6.9",
             "target-dir": "Symfony/Component/DomCrawler",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DomCrawler.git",
-                "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d"
+                "reference": "c74fe625d8c65fee512de2b40cceabba1b09503b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/8897ebf39c7dfb752a5494fa301845a3fbb9e53d",
-                "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d",
+                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/c74fe625d8c65fee512de2b40cceabba1b09503b",
+                "reference": "c74fe625d8c65fee512de2b40cceabba1b09503b",
                 "shasum": ""
             },
             "require": {
@@ -2523,36 +2519,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony DomCrawler Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-22 14:53:08"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/EventDispatcher",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
+                "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
-                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
+                "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "psr/log": "~1.0",
@@ -2569,11 +2564,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\EventDispatcher\\": ""
                 }
             },
@@ -2582,36 +2577,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony EventDispatcher Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-13 17:37:22"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:21:08"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/HttpFoundation",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpFoundation.git",
-                "reference": "8a6337233f08f7520de97f4ffd6f00e947d892f9"
+                "reference": "729de183da037c125c5f6366bd4f0631ba1a1abb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/8a6337233f08f7520de97f4ffd6f00e947d892f9",
-                "reference": "8a6337233f08f7520de97f4ffd6f00e947d892f9",
+                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/729de183da037c125c5f6366bd4f0631ba1a1abb",
+                "reference": "729de183da037c125c5f6366bd4f0631ba1a1abb",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/expression-language": "~2.4",
@@ -2620,15 +2614,15 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\HttpFoundation\\": ""
                 },
                 "classmap": [
-                    "Symfony/Component/HttpFoundation/Resources/stubs"
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2636,45 +2630,47 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony HttpFoundation Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-04-01 16:50:12"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-22 14:54:25"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/HttpKernel",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpKernel.git",
-                "reference": "3829cacfe21eaf3f73604a62d79183d1f6e792c4"
+                "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/3829cacfe21eaf3f73604a62d79183d1f6e792c4",
-                "reference": "3829cacfe21eaf3f73604a62d79183d1f6e792c4",
+                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
+                "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.9",
                 "psr/log": "~1.0",
                 "symfony/debug": "~2.6,>=2.6.2",
                 "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
                 "symfony/http-foundation": "~2.5,>=2.5.4"
             },
+            "conflict": {
+                "symfony/config": "<2.7"
+            },
             "require-dev": {
                 "symfony/browser-kit": "~2.3",
                 "symfony/class-loader": "~2.1",
-                "symfony/config": "~2.0,>=2.0.5",
+                "symfony/config": "~2.7",
                 "symfony/console": "~2.3",
                 "symfony/css-selector": "~2.0,>=2.0.5",
                 "symfony/dependency-injection": "~2.2",
@@ -2701,11 +2697,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\HttpKernel\\": ""
                 }
             },
@@ -2714,36 +2710,35 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony HttpKernel Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-04-01 16:55:26"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-30 16:52:28"
         },
         {
             "name": "symfony/process",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/Process",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552"
+                "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/a8bebaec1a9dc6cde53e0250e32917579b0be552",
-                "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
+                "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -2751,11 +2746,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Process\\": ""
                 }
             },
@@ -2764,42 +2759,44 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Process Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/routing",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/Routing",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Routing.git",
-                "reference": "4e173a645b63ff60a124f3741b4f15feebd908fa"
+                "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Routing/zipball/4e173a645b63ff60a124f3741b4f15feebd908fa",
-                "reference": "4e173a645b63ff60a124f3741b4f15feebd908fa",
+                "url": "https://api.github.com/repos/symfony/Routing/zipball/6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
+                "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
+            },
+            "conflict": {
+                "symfony/config": "<2.7"
             },
             "require-dev": {
                 "doctrine/annotations": "~1.0",
                 "doctrine/common": "~2.2",
                 "psr/log": "~1.0",
-                "symfony/config": "~2.2",
+                "symfony/config": "~2.7",
                 "symfony/expression-language": "~2.4",
                 "symfony/http-foundation": "~2.3",
                 "symfony/phpunit-bridge": "~2.7",
@@ -2814,11 +2811,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Routing\\": ""
                 }
             },
@@ -2827,54 +2824,65 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Routing Component",
-            "homepage": "http://symfony.com",
+            "homepage": "https://symfony.com",
             "keywords": [
                 "router",
                 "routing",
                 "uri",
                 "url"
             ],
-            "time": "2015-03-30 15:54:10"
+            "time": "2015-05-19 06:58:17"
         },
         {
             "name": "symfony/serializer",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/Serializer",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Serializer.git",
-                "reference": "bf30b882e15945fe8700edcd966eb3f5503820f3"
+                "reference": "634d3adf119396320fba4c14caa01390700e7f3b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Serializer/zipball/bf30b882e15945fe8700edcd966eb3f5503820f3",
-                "reference": "bf30b882e15945fe8700edcd966eb3f5503820f3",
+                "url": "https://api.github.com/repos/symfony/Serializer/zipball/634d3adf119396320fba4c14caa01390700e7f3b",
+                "reference": "634d3adf119396320fba4c14caa01390700e7f3b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
+                "doctrine/annotations": "~1.0",
+                "doctrine/cache": "~1.0",
+                "symfony/config": "~2.2",
+                "symfony/phpunit-bridge": "~2.7",
+                "symfony/property-access": "~2.3",
+                "symfony/yaml": "~2.0"
+            },
+            "suggest": {
+                "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+                "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+                "symfony/config": "For using the XML mapping loader.",
+                "symfony/property-access": "For using the ObjectNormalizer.",
+                "symfony/yaml": "For using the default YAML mapping loader."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Serializer\\": ""
                 }
             },
@@ -2883,40 +2891,42 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Serializer Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-22 16:55:57"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/translation",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/Translation",
+            "version": "v2.7.0-BETA2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Translation.git",
-                "reference": "bd939f05cdaca128f4ddbae1b447d6f0203b60af"
+                "reference": "1be5bbed3938247acd7c5f4e4f29dd32db636b1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Translation/zipball/bd939f05cdaca128f4ddbae1b447d6f0203b60af",
-                "reference": "bd939f05cdaca128f4ddbae1b447d6f0203b60af",
+                "url": "https://api.github.com/repos/symfony/Translation/zipball/1be5bbed3938247acd7c5f4e4f29dd32db636b1f",
+                "reference": "1be5bbed3938247acd7c5f4e4f29dd32db636b1f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
+            },
+            "conflict": {
+                "symfony/config": "<2.7"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~2.3,>=2.3.12",
+                "symfony/config": "~2.7",
                 "symfony/intl": "~2.3",
                 "symfony/phpunit-bridge": "~2.7",
                 "symfony/yaml": "~2.2"
@@ -2929,11 +2939,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Translation\\": ""
                 }
             },
@@ -2942,42 +2952,40 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Translation Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-11 02:35:29"
         },
         {
             "name": "symfony/validator",
-            "version": "2.6.x-dev",
-            "target-dir": "Symfony/Component/Validator",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Validator.git",
-                "reference": "6bb1b474d25cb80617d8da6cb14c955ba914e495"
+                "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Validator/zipball/d667b6a563e233b24ae1599a9fde7a53ddd1c055",
-                "reference": "6bb1b474d25cb80617d8da6cb14c955ba914e495",
+                "url": "https://api.github.com/repos/symfony/Validator/zipball/3a5461a388ff8962790fd5a39e6e2da84ba1e824",
+                "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "symfony/translation": "~2.0,>=2.0.5"
+                "php": ">=5.3.9",
+                "symfony/translation": "~2.4"
             },
             "require-dev": {
                 "doctrine/annotations": "~1.0",
                 "doctrine/cache": "~1.0",
-                "doctrine/common": "~2.3",
                 "egulias/email-validator": "~1.2,>=1.2.1",
                 "symfony/config": "~2.2",
                 "symfony/expression-language": "~2.4",
@@ -3001,11 +3009,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Validator\\": ""
                 }
             },
@@ -3025,25 +3033,24 @@
             ],
             "description": "Symfony Validator Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-05 01:29:27"
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.6.6",
-            "target-dir": "Symfony/Component/Yaml",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "174f009ed36379a801109955fc5a71a49fe62dd4"
+                "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/174f009ed36379a801109955fc5a71a49fe62dd4",
-                "reference": "174f009ed36379a801109955fc5a71a49fe62dd4",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
+                "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -3051,11 +3058,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Yaml\\": ""
                 }
             },
@@ -3064,18 +3071,18 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Yaml Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-03-30 15:54:10"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:21:08"
         },
         {
             "name": "twig/twig",
@@ -3286,11 +3293,9 @@
     ],
     "packages-dev": [],
     "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": {
-        "symfony/validator": 20
-    },
-    "prefer-stable": false,
+    "minimum-stability": "dev",
+    "stability-flags": [],
+    "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
         "php": ">=5.4.5"
diff --git a/core/core.services.yml b/core/core.services.yml
index 3196589a3f2174fd72f861dc6292170d0bd1bc47..2bc5edc1d4ff62614ff1fafac1cf91caeb98d836 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -144,57 +144,49 @@ services:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin, default_backend: cache.backend.chainedfast }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [bootstrap]
   cache.config:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin, default_backend: cache.backend.chainedfast }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [config]
   cache.default:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [default]
   cache.entity:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [entity]
   cache.menu:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [menu]
   cache.render:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [render]
   cache.data:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [data]
   cache.discovery:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin, default_backend: cache.backend.chainedfast }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [discovery]
   cache_router_rebuild_subscriber:
     class: Drupal\Core\EventSubscriber\CacheRouterRebuildSubscriber
@@ -253,13 +245,11 @@ services:
       - { name: backend_overridable }
   config.storage.file:
     class: Drupal\Core\Config\FileStorage
-    factory_class: Drupal\Core\Config\FileStorageFactory
-    factory_method: getActive
+    factory: Drupal\Core\Config\FileStorageFactory::getActive
     public: false
   config.storage.staging:
     class: Drupal\Core\Config\FileStorage
-    factory_class: Drupal\Core\Config\FileStorageFactory
-    factory_method: getStaging
+    factory: Drupal\Core\Config\FileStorageFactory::getStaging
   config.storage.snapshot:
     class: Drupal\Core\Config\DatabaseStorage
     arguments: ['@database', config_snapshot]
@@ -285,8 +275,7 @@ services:
     arguments: ['@config.factory']
   database:
     class: Drupal\Core\Database\Connection
-    factory_class: Drupal\Core\Database\Database
-    factory_method: getConnection
+    factory: Drupal\Core\Database\Database::getConnection
     arguments: [default]
   file_system:
     class: Drupal\Core\File\FileSystem
@@ -324,8 +313,7 @@ services:
   logger.channel_base:
     abstract: true
     class: Drupal\Core\Logger\LoggerChannel
-    factory_method: get
-    factory_service: logger.factory
+    factory: logger.factory:get
   logger.channel.default:
     parent: logger.channel_base
     arguments: ['system']
@@ -340,8 +328,7 @@ services:
     arguments: ['cron']
   logger.channel.file:
     class: Drupal\Core\Logger\LoggerChannel
-    factory_method: get
-    factory_service: logger.factory
+    factory: logger.factory:get
     arguments: ['file']
   logger.channel.form:
     parent: logger.channel_base
@@ -358,8 +345,7 @@ services:
 
   settings:
     class: Drupal\Core\Site\Settings
-    factory_class: Drupal\Core\Site\Settings
-    factory_method: getInstance
+    factory: Drupal\Core\Site\Settings::getInstance
   state:
     class: Drupal\Core\State\State
     arguments: ['@keyvalue']
@@ -546,8 +532,7 @@ services:
     arguments: ['@service_container']
   app.root:
     class: SplString
-    factory_service: 'app.root.factory'
-    factory_method: 'get'
+    factory: app.root.factory:get
     tags:
       - { name: parameter_service }
   app.root.factory:
@@ -617,8 +602,7 @@ services:
       - { name: service_collector, tag: string_translator, call: addTranslator }
   database.replica:
     class: Drupal\Core\Database\Connection
-    factory_class: Drupal\Core\Database\Database
-    factory_method: getConnection
+    factory: Drupal\Core\Database\Database::getConnection
     arguments: [replica]
   typed_data_manager:
     class: Drupal\Core\TypedData\TypedDataManager
diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php
index bac268ffcbca2fc935138b7c5ba08e8116d56804..297f3800c6068b3f293351fee91c5b0d57111ff6 100644
--- a/core/lib/Drupal/Core/Composer/Composer.php
+++ b/core/lib/Drupal/Core/Composer/Composer.php
@@ -24,14 +24,14 @@ public static function preAutoloadDump(Event $event) {
     $package = $composer->getPackage();
     $autoload = $package->getAutoload();
     $autoload['classmap'] = array_merge($autoload['classmap'], array(
-      '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'
+      'vendor/symfony/http-foundation/Request.php',
+      'vendor/symfony/http-foundation/ParameterBag.php',
+      'vendor/symfony/http-foundation/FileBag.php',
+      'vendor/symfony/http-foundation/ServerBag.php',
+      'vendor/symfony/http-foundation/HeaderBag.php',
+      'vendor/symfony/http-kernel/HttpKernel.php',
+      'vendor/symfony/http-kernel/HttpKernelInterface.php',
+      'vendor/symfony/http-kernel/TerminableInterface.php',
     ));
     $package->setAutoload($autoload);
   }
diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
index 16bf0ad9b1cee1d238110861ba58b72fa43240fc..cb8587857328631ab757265ad7fca1f65f44d4b4 100644
--- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
+++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
@@ -43,10 +43,6 @@ public function __construct(ParameterBagInterface $parameterBag = NULL) {
   public function set($id, $service, $scope = self::SCOPE_CONTAINER) {
     SymfonyContainer::set($id, $service, $scope);
 
-    if ($this->hasDefinition($id) && ($definition = $this->getDefinition($id)) && $definition->isSynchronized()) {
-      $this->synchronize($id);
-    }
-
     // Ensure that the _serviceId property is set on synthetic services as well.
     if (isset($this->services[$id]) && is_object($this->services[$id]) && !isset($this->services[$id]->_serviceId)) {
       $this->services[$id]->_serviceId = $id;
diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index 77484de60f2dfe913f046358858e1fa2aeb81d8a..4c7fea9414414858268abb8fa88ff0d4105f9df7 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -83,6 +83,10 @@ public function load($file)
 
         // parameters
         if (isset($content['parameters'])) {
+            if (!is_array($content['parameters'])) {
+                throw new InvalidArgumentException(sprintf('The "parameters" key should contain an array in %s. Check your YAML syntax.', $file));
+            }
+
             foreach ($content['parameters'] as $key => $value) {
                 $this->container->setParameter($key, $this->resolveServices($value));
             }
@@ -108,6 +112,10 @@ private function parseDefinitions($content, $file)
             return;
         }
 
+        if (!is_array($content['services'])) {
+            throw new InvalidArgumentException(sprintf('The "services" key should contain an array in %s. Check your YAML syntax.', $file));
+        }
+
         foreach ($content['services'] as $id => $service) {
             $this->parseDefinition($id, $service, $file);
         }
@@ -128,8 +136,14 @@ private function parseDefinition($id, $service, $file)
             $this->container->setAlias($id, substr($service, 1));
 
             return;
-        } elseif (isset($service['alias'])) {
-            $public = !array_key_exists('public', $service) || (Boolean) $service['public'];
+        }
+
+        if (!is_array($service)) {
+            throw new InvalidArgumentException(sprintf('A service definition must be an array or a string starting with "@" but %s found for service "%s" in %s. Check your YAML syntax.', gettype($service), $id, $file));
+        }
+
+        if (isset($service['alias'])) {
+            $public = !array_key_exists('public', $service) || (bool) $service['public'];
             $this->container->setAlias($id, new Alias($service['alias'], $public));
 
             return;
@@ -154,7 +168,7 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['synchronized'])) {
-            $definition->setSynchronized($service['synchronized']);
+            $definition->setSynchronized($service['synchronized'], 'request' !== $id);
         }
 
         if (isset($service['lazy'])) {
@@ -169,6 +183,19 @@ private function parseDefinition($id, $service, $file)
             $definition->setAbstract($service['abstract']);
         }
 
+        if (isset($service['factory'])) {
+            if (is_string($service['factory'])) {
+                if (strpos($service['factory'], ':') !== false && strpos($service['factory'], '::') === false) {
+                    $parts = explode(':', $service['factory']);
+                    $definition->setFactory(array($this->resolveServices('@'.$parts[0]), $parts[1]));
+                } else {
+                    $definition->setFactory($service['factory']);
+                }
+            } else {
+                $definition->setFactory(array($this->resolveServices($service['factory'][0]), $service['factory'][1]));
+            }
+        }
+
         if (isset($service['factory_class'])) {
             $definition->setFactoryClass($service['factory_class']);
         }
@@ -202,18 +229,33 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['calls'])) {
+            if (!is_array($service['calls'])) {
+                throw new InvalidArgumentException(sprintf('Parameter "calls" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
+            }
+
             foreach ($service['calls'] as $call) {
-                $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
-                $definition->addMethodCall($call[0], $args);
+                if (isset($call['method'])) {
+                    $method = $call['method'];
+                    $args = isset($call['arguments']) ? $this->resolveServices($call['arguments']) : array();
+                } else {
+                    $method = $call[0];
+                    $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
+                }
+
+                $definition->addMethodCall($method, $args);
             }
         }
 
         if (isset($service['tags'])) {
             if (!is_array($service['tags'])) {
-                throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s.', $id, $file));
+                throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
             }
 
             foreach ($service['tags'] as $tag) {
+                if (!is_array($tag)) {
+                    throw new InvalidArgumentException(sprintf('A "tags" entry must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
+                }
+
                 if (!isset($tag['name'])) {
                     throw new InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key for service "%s" in %s.', $id, $file));
                 }
@@ -223,7 +265,7 @@ private function parseDefinition($id, $service, $file)
 
                 foreach ($tag as $attribute => $value) {
                     if (!is_scalar($value) && null !== $value) {
-                        throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", attribute "%s" in %s.', $id, $name, $attribute, $file));
+                        throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", attribute "%s" in %s. Check your YAML syntax.', $id, $name, $attribute, $file));
                     }
                 }
 
@@ -231,6 +273,11 @@ private function parseDefinition($id, $service, $file)
             }
         }
 
+        if (isset($service['decorates'])) {
+            $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
+            $definition->setDecoratedService($service['decorates'], $renameId);
+        }
+
         $this->container->setDefinition($id, $definition);
     }
 
@@ -240,6 +287,8 @@ private function parseDefinition($id, $service, $file)
      * @param string $file
      *
      * @return array The file content
+     *
+     * @throws InvalidArgumentException when the given file is not a local file or when it does not exist
      */
     protected function loadFile($file)
     {
@@ -271,7 +320,7 @@ private function validate($content, $file)
         }
 
         if (!is_array($content)) {
-            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it is not an array.', $file));
+            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid. It should contain an array. Check your YAML syntax.', $file));
         }
 
         if ($invalid_keys = array_diff_key($content, array('parameters' => 1, 'services' => 1))) {
@@ -284,9 +333,9 @@ private function validate($content, $file)
     /**
      * Resolves services.
      *
-     * @param string $value
+     * @param string|array $value
      *
-     * @return Reference
+     * @return array|string|Reference
      */
     private function resolveServices($value)
     {
diff --git a/core/lib/Drupal/Core/RouteProcessor/RouteProcessorCurrent.php b/core/lib/Drupal/Core/RouteProcessor/RouteProcessorCurrent.php
index 17a56b5209f04126d6b76a2031d1895310b3216a..4d5784390117aeafc02434327da4db19fe30dce3 100644
--- a/core/lib/Drupal/Core/RouteProcessor/RouteProcessorCurrent.php
+++ b/core/lib/Drupal/Core/RouteProcessor/RouteProcessorCurrent.php
@@ -39,8 +39,16 @@ public function __construct(RouteMatchInterface $route_match) {
   public function processOutbound($route_name, Route $route, array &$parameters, CacheableMetadata $cacheable_metadata = NULL) {
     if ($route_name === '<current>') {
       if ($current_route = $this->routeMatch->getRouteObject()) {
+        $requirements = $current_route->getRequirements();
+        // Setting _method and _schema is deprecated since 2.7. Using
+        // setMethods() and setSchemes() are now the recommended ways.
+        unset($requirements['_method']);
+        unset($requirements['_schema']);
+        $route->setRequirements($requirements);
+
         $route->setPath($current_route->getPath());
-        $route->setRequirements($current_route->getRequirements());
+        $route->setSchemes($current_route->getSchemes());
+        $route->setMethods($current_route->getMethods());
         $route->setOptions($current_route->getOptions());
         $route->setDefaults($current_route->getDefaults());
         $parameters = array_merge($parameters, $this->routeMatch->getRawParameters()->all());
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index 9c34cde8d75376f742a11a7548123562726fd0c2..a78cf0c73514e828c831ac2c2b15092d44d07eda 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -168,9 +168,13 @@ public function rebuild() {
           'defaults' => array(),
           'requirements' => array(),
           'options' => array(),
+          'host' => NULL,
+          'schemes' => array(),
+          'methods' => array(),
+          'condition' => '',
         );
 
-        $route = new Route($route_info['path'], $route_info['defaults'], $route_info['requirements'], $route_info['options']);
+        $route = new Route($route_info['path'], $route_info['defaults'], $route_info['requirements'], $route_info['options'], $route_info['host'], $route_info['schemes'], $route_info['methods'], $route_info['condition']);
         $collection->add($name, $route);
       }
     }
diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php
index c7686c6d45e7ebf6050d3e749a1a67dd106cbd0b..081a542681dd16a397b8472f911271968a49162a 100644
--- a/core/lib/Drupal/Core/Routing/UrlGenerator.php
+++ b/core/lib/Drupal/Core/Routing/UrlGenerator.php
@@ -345,8 +345,8 @@ public function generateFromRoute($name, $parameters = array(), $options = array
     else {
       $scheme = $this->context->getScheme();
     }
-    $scheme_req = $route->getRequirement('_scheme');
-    if (isset($scheme_req) && ($req = strtolower($scheme_req)) && $scheme !== $req) {
+    $scheme_req = $route->getSchemes();
+    if ($scheme_req && ($req = $scheme_req[0]) && $scheme !== $req) {
       $scheme = $req;
     }
     $port = '';
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraint.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
similarity index 76%
rename from core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraint.php
rename to core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
index e2a0a5f476f61cb4ced3ada523ee297fcd70dc7d..401be6375b70091769a95dba02c1c78cf6320fa7 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraint.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
@@ -2,12 +2,12 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Validation\Plugin\Validation\Constraint\NullConstraint.
+ * Contains \Drupal\Core\Validation\Plugin\Validation\Constraint\IsNullConstraint.
  */
 
 namespace Drupal\Core\Validation\Plugin\Validation\Constraint;
 
-use Symfony\Component\Validator\Constraints\Null;
+use Symfony\Component\Validator\Constraints\IsNull;
 
 /**
  * Null constraint.
@@ -20,4 +20,4 @@
  *   type = false
  * )
  */
-class NullConstraint extends Null { }
+class IsNullConstraint extends IsNull { }
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraintValidator.php
similarity index 85%
rename from core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php
rename to core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraintValidator.php
index b584687311b44636af59462e7c6ddc07efeabe2e..fa1ac35fd706989ea02dee767048e3007699fb1d 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraintValidator.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Validation\Plugin\Validation\Constraint\NullConstraintValidator.
+ * Contains \Drupal\Core\Validation\Plugin\Validation\Constraint\IsNullConstraintValidator.
  */
 
 namespace Drupal\Core\Validation\Plugin\Validation\Constraint;
@@ -11,14 +11,14 @@
 use Drupal\Core\TypedData\ListInterface;
 use Drupal\Core\TypedData\Validation\TypedDataAwareValidatorTrait;
 use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\Constraints\NullValidator;
+use Symfony\Component\Validator\Constraints\IsNullValidator;
 
 /**
  * Null constraint validator.
  *
  * Overrides the symfony validator to handle empty Typed Data structures.
  */
-class NullConstraintValidator extends NullValidator {
+class IsNullConstraintValidator extends IsNullValidator {
 
   use TypedDataAwareValidatorTrait;
 
diff --git a/core/modules/config/tests/config_events_test/src/EventSubscriber.php b/core/modules/config/tests/config_events_test/src/EventSubscriber.php
index b127555a051c3c273e280ef11d039c1574515f01..a15fabb5cd09fca3d8b416568cd90705a1cfe196 100644
--- a/core/modules/config/tests/config_events_test/src/EventSubscriber.php
+++ b/core/modules/config/tests/config_events_test/src/EventSubscriber.php
@@ -37,11 +37,13 @@ public function __construct(StateInterface $state) {
    *
    * @param \Drupal\Core\Config\ConfigCrudEvent $event
    *   The configuration event.
+   * @param string $name
+   *   The event name.
    */
-  public function configEventRecorder(ConfigCrudEvent $event) {
+  public function configEventRecorder(ConfigCrudEvent $event, $name) {
     $config = $event->getConfig();
     $this->state->set('config_events_test.event', array(
-      'event_name' => $event->getName(),
+      'event_name' => $name,
       'current_config_data' => $config->get(),
       'original_config_data' => $config->getOriginal(),
       'raw_config_data' => $config->getRawData()
diff --git a/core/modules/contact/contact.services.yml b/core/modules/contact/contact.services.yml
index 3db0d9fadb2433c1f158c28dbbcf655b371cbbde..dac421071b28b7094736ff3dc4fe7d305db08470 100644
--- a/core/modules/contact/contact.services.yml
+++ b/core/modules/contact/contact.services.yml
@@ -9,6 +9,5 @@ services:
     arguments: ['@plugin.manager.mail', '@language_manager', '@logger.channel.contact', '@string_translation', '@entity.manager']
   logger.channel.contact:
     class: Drupal\Core\Logger\LoggerChannel
-    factory_method: get
-    factory_service: logger.factory
+    factory: logger.factory:get
     arguments: ['contact']
diff --git a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
index 7ed62ba86efc91375ccefea0d658d96471be0750..37a61eef4b3b95e8a1733f826b86faea748148cb 100644
--- a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
+++ b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
@@ -351,7 +351,7 @@ public function massageFormValues(array $values, array $form, FormStateInterface
   public function flagErrors(FieldItemListInterface $items, ConstraintViolationListInterface $violations, array $form, FormStateInterface $form_state) {
     /** @var \Symfony\Component\Validator\ConstraintViolationInterface $violation */
     foreach ($violations as $offset => $violation) {
-      $parameters = $violation->getMessageParameters();
+      $parameters = $violation->getParameters();
       if (isset($parameters['@uri'])) {
         $parameters['@uri'] = static::getUriAsDisplayableString($parameters['@uri']);
         $violations->set($offset, new ConstraintViolation(
@@ -361,7 +361,7 @@ public function flagErrors(FieldItemListInterface $items, ConstraintViolationLis
           $violation->getRoot(),
           $violation->getPropertyPath(),
           $violation->getInvalidValue(),
-          $violation->getMessagePluralization(),
+          $violation->getPlural(),
           $violation->getCode()
         ));
       }
diff --git a/core/modules/migrate/migrate.services.yml b/core/modules/migrate/migrate.services.yml
index 8b6bad75a9e9c21073544e3480ee48397982bc8a..3f2d32d56e7228a81d4bb28868d2ef41f9a1cdd2 100644
--- a/core/modules/migrate/migrate.services.yml
+++ b/core/modules/migrate/migrate.services.yml
@@ -3,8 +3,7 @@ services:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [migrate]
   plugin.manager.migrate.source:
     class: Drupal\migrate\Plugin\MigratePluginManager
diff --git a/core/modules/rest/rest.services.yml b/core/modules/rest/rest.services.yml
index 04f5f1d5828953c30b3ab4d445be3b1ef9638601..6b613e398420cacdffad883b1c3035d7f44d4bda 100644
--- a/core/modules/rest/rest.services.yml
+++ b/core/modules/rest/rest.services.yml
@@ -6,8 +6,7 @@ services:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [rest]
   access_check.rest.csrf:
     class: Drupal\rest\Access\CSRFAccessCheck
diff --git a/core/modules/rest/src/Plugin/ResourceBase.php b/core/modules/rest/src/Plugin/ResourceBase.php
index 6147413163861a7d86924b6ac27c80e2a1793154..5f8065e11a5cc50ce34ae51a747d70516cda78a8 100644
--- a/core/modules/rest/src/Plugin/ResourceBase.php
+++ b/core/modules/rest/src/Plugin/ResourceBase.php
@@ -111,7 +111,7 @@ public function routes() {
 
       switch ($method) {
         case 'POST':
-          $route->setPattern($create_path);
+          $route->setPath($create_path);
           // Restrict the incoming HTTP Content-type header to the known
           // serialization formats.
           $route->addRequirements(array('_content_type_format' => implode('|', $this->serializerFormats)));
@@ -203,10 +203,14 @@ protected function getBaseRoute($canonical_path, $method) {
       // Pass the resource plugin ID along as default property.
       '_plugin' => $this->pluginId,
     ), array(
-      // The HTTP method is a requirement for this route.
-      '_method' => $method,
       '_permission' => "restful $lower_method $this->pluginId",
-    ));
+    ),
+      array(),
+      '',
+      array(),
+      // The HTTP method is a requirement for this route.
+      array($method)
+    );
     return $route;
   }
 
diff --git a/core/modules/rest/src/Plugin/views/display/RestExport.php b/core/modules/rest/src/Plugin/views/display/RestExport.php
index 2efdbc7f396495831e55577a4538ca1cb1550355..32c0110574ae99f7e9a815bbbfcde87e074eccba 100644
--- a/core/modules/rest/src/Plugin/views/display/RestExport.php
+++ b/core/modules/rest/src/Plugin/views/display/RestExport.php
@@ -263,7 +263,7 @@ public function collectRoutes(RouteCollection $collection) {
     if ($route = $collection->get("view.$view_id.$display_id")) {
       $style_plugin = $this->getPlugin('style');
       // REST exports should only respond to get methods.
-      $requirements = array('_method' => 'GET');
+      $route->setMethods(['GET']);
 
       // Format as a string using pipes as a delimiter.
       $requirements['_format'] = implode('|', $style_plugin->getFormats());
diff --git a/core/modules/rest/src/Routing/ResourceRoutes.php b/core/modules/rest/src/Routing/ResourceRoutes.php
index 484c48e8e0b797971bf0fd3d5dd1fbe3141bdfab..f975f27737229b13b065188e35bdd961dfb33af0 100644
--- a/core/modules/rest/src/Routing/ResourceRoutes.php
+++ b/core/modules/rest/src/Routing/ResourceRoutes.php
@@ -74,9 +74,10 @@ protected function alterRoutes(RouteCollection $collection) {
       $plugin = $this->manager->getInstance(array('id' => $id));
 
       foreach ($plugin->routes() as $name => $route) {
-        $method = $route->getRequirement('_method');
+        // @todo: Are multiple methods possible here?
+        $methods = $route->getMethods();
         // Only expose routes where the method is enabled in the configuration.
-        if ($method && isset($enabled_methods[$method])) {
+        if ($methods && ($method = $methods[0]) && $method && isset($enabled_methods[$method])) {
           $route->setRequirement('_access_rest_csrf',  'TRUE');
 
           // Check that authentication providers are defined.
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 2e8702b90de563f91ae24a41d1c8ef1633c91596..721fdd91acb39f72ebfe69751b5e6ce8bd9d242a 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -708,7 +708,8 @@ protected function setUp() {
     if ($this->strictConfigSchema) {
       // Add a listener to validate configuration schema on save.
       $yaml = new \Symfony\Component\Yaml\Yaml();
-      $services = $yaml->parse($directory . '/services.yml');
+      $content = file_get_contents($directory . '/services.yml');
+      $services = $yaml->parse($content);
       $services['services']['simpletest.config_schema_checker'] = [
         'class' => 'Drupal\Core\Config\Testing\ConfigSchemaChecker',
         'arguments' => ['@config.typed'],
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index a3dee258aaa95cdebf401d52f6e8b56ec5db210e..a156905f4d7a25998548ef6a6142425f1b50720f 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -438,8 +438,7 @@
  *   class: Drupal\Core\Cache\CacheBackendInterface
  *   tags:
  *     - { name: cache.bin }
- *   factory_method: get
- *   factory_service: cache_factory
+ *   factory: cache_factory:get
  *   arguments: [nameofbin]
  * @endcode
  * See the @link container Services topic @endlink for more on defining
@@ -683,8 +682,7 @@
  *     class: Drupal\Core\Cache\CacheBackendInterface
  *     tags:
  *       - { name: cache.bin }
- *     factory_method: get
- *     factory_service: cache_factory
+ *     factory: cache_factory:get
  *     arguments: [entity]
  * @endcode
  *
diff --git a/core/modules/system/src/Tests/Routing/RouteProviderTest.php b/core/modules/system/src/Tests/Routing/RouteProviderTest.php
index c9af8868eb302f71f003e69b114921e011c7d504..e316738b72efd2baadce4cbfd7eaaed4251fe8df 100644
--- a/core/modules/system/src/Tests/Routing/RouteProviderTest.php
+++ b/core/modules/system/src/Tests/Routing/RouteProviderTest.php
@@ -385,10 +385,10 @@ public function testRouteByName() {
 
     $route = $provider->getRouteByName('route_a');
     $this->assertEqual($route->getPath(), '/path/one', 'The right route pattern was found.');
-    $this->assertEqual($route->getRequirement('_method'), 'GET', 'The right route method was found.');
+    $this->assertEqual($route->getMethods(), ['GET'], 'The right route method was found.');
     $route = $provider->getRouteByName('route_b');
     $this->assertEqual($route->getPath(), '/path/one', 'The right route pattern was found.');
-    $this->assertEqual($route->getRequirement('_method'), 'PUT', 'The right route method was found.');
+    $this->assertEqual($route->getMethods(), ['PUT'], 'The right route method was found.');
 
     $exception_thrown = FALSE;
     try {
diff --git a/core/modules/toolbar/toolbar.services.yml b/core/modules/toolbar/toolbar.services.yml
index d8110d2f5c8db4ffa8502b3505b42b9b15029ea4..ef39464fc9b77af42fe0b01d953894d00efe9825 100644
--- a/core/modules/toolbar/toolbar.services.yml
+++ b/core/modules/toolbar/toolbar.services.yml
@@ -3,8 +3,7 @@ services:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
       - { name: cache.bin }
-    factory_method: get
-    factory_service: cache_factory
+    factory: cache_factory:get
     arguments: [toolbar]
   toolbar.page_cache_request_policy.allow_toolbar_path:
     class: Drupal\toolbar\PageCache\AllowToolbarPath
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
index fc97787c53559434cc35e9f4147e85338637c079..8a93b6d4da00fcd58b8af46645209a68b74e2f52 100644
--- a/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
@@ -9,9 +9,7 @@
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Tests\UnitTestCase;
-use Drupal\Tests\Core\DependencyInjection\Fixture\BazClass;
 use Drupal\Tests\Core\DependencyInjection\Fixture\BarClass;
-use Symfony\Component\DependencyInjection\Reference;
 
 /**
  * @coversDefaultClass \Drupal\Core\DependencyInjection\ContainerBuilder
@@ -19,28 +17,6 @@
  */
 class ContainerBuilderTest extends UnitTestCase {
 
-  /**
-   * Tests set with a synchronized service.
-   *
-   * @covers ::set
-   */
-  public function testSetOnSynchronizedService() {
-    $container = new ContainerBuilder();
-    $container->register('baz', '\Drupal\Tests\Core\DependencyInjection\Fixture\BazClass')
-      ->setSynchronized(TRUE);
-    $container->register('bar', '\Drupal\Tests\Core\DependencyInjection\Fixture\BarClass')
-      ->addMethodCall('setBaz', array(new Reference('baz')));
-
-    // Ensure that we can set services on a compiled container.
-    $container->compile();
-
-    $container->set('baz', $baz = new BazClass());
-    $this->assertSame($baz, $container->get('bar')->getBaz());
-
-    $container->set('baz', $baz = new BazClass());
-    $this->assertSame($baz, $container->get('bar')->getBaz());
-  }
-
   /**
    * @covers ::get
    */
diff --git a/core/tests/Drupal/Tests/Core/Routing/RoutingFixtures.php b/core/tests/Drupal/Tests/Core/Routing/RoutingFixtures.php
index ffbfb0369b41ba0cffc04bd6d83120bfdc453973..54cd70de76634f5a44b57d8a9753f5327571be86 100644
--- a/core/tests/Drupal/Tests/Core/Routing/RoutingFixtures.php
+++ b/core/tests/Drupal/Tests/Core/Routing/RoutingFixtures.php
@@ -50,20 +50,16 @@ public function staticSampleRouteCollection() {
     $routes = array();
     $routes['route_a'] = array(
       'path' => '/path/one',
-      'requirements' => array(
-        '_method' => 'GET',
-      ),
+      'methods' => array('GET'),
     );
     $routes['route_b'] = array(
       'path' => '/path/one',
-      'requirements' => array(
-        '_method' => 'PUT',
-      ),
+      'methods' => array('PUT'),
     );
     $routes['route_c'] = array(
       'path' => '/path/two',
+      'methods' => array('GET'),
       'requirements' => array(
-        '_method' => 'GET',
         '_format' => 'json'
       ),
     );
@@ -72,8 +68,8 @@ public function staticSampleRouteCollection() {
     );
     $routes['route_e'] = array(
       'path' => '/path/two',
+      'methods' => array('GET', 'HEAD'),
       'requirements' => array(
-        '_method' => 'GET|HEAD',
         '_format' => 'html'
       ),
     );
@@ -90,15 +86,15 @@ public function sampleRouteCollection() {
     $collection = new RouteCollection();
 
     $route = new Route('path/one');
-    $route->setRequirement('_method', 'GET');
+    $route->setMethods(['GET']);
     $collection->add('route_a', $route);
 
     $route = new Route('path/one');
-    $route->setRequirement('_method', 'PUT');
+    $route->setMethods(['PUT']);
     $collection->add('route_b', $route);
 
     $route = new Route('path/two');
-    $route->setRequirement('_method', 'GET');
+    $route->setMethods(['GET']);
     $route->setRequirement('_format', 'json');
     $collection->add('route_c', $route);
 
@@ -106,7 +102,7 @@ public function sampleRouteCollection() {
     $collection->add('route_d', $route);
 
     $route = new Route('path/two');
-    $route->setRequirement('_method', 'GET|HEAD');
+    $route->setMethods(['GET', 'HEAD']);
     $route->setRequirement('_format', 'html');
     $collection->add('route_e', $route);
 
@@ -122,22 +118,22 @@ public function complexRouteCollection() {
     $collection = new RouteCollection();
 
     $route = new Route('/path/{thing}/one');
-    $route->setRequirement('_method', 'GET');
+    $route->setMethods(['GET']);
     $collection->add('route_a', $route);
 
     $route = new Route('/path/{thing}/one');
-    $route->setRequirement('_method', 'PUT');
+    $route->setMethods(['PUT']);
     $collection->add('route_b', $route);
 
     $route = new Route('/somewhere/{item}/over/the/rainbow');
-    $route->setRequirement('_method', 'GET');
+    $route->setMethods(['GET']);
     $collection->add('route_c', $route);
 
     $route = new Route('/another/{thing}/about/{item}');
     $collection->add('route_d', $route);
 
     $route = new Route('/path/add/one');
-    $route->setRequirement('_method', 'GET|HEAD');
+    $route->setMethods(['GET', 'HEAD']);
     $collection->add('route_e', $route);
 
     return $collection;
@@ -152,12 +148,12 @@ public function contentRouteCollection() {
     $collection = new RouteCollection();
 
     $route = new Route('path/three');
-    $route->setRequirement('_method', 'POST');
+    $route->setMethods(['POST']);
     $route->setRequirement('_content_type_format', 'json');
     $collection->add('route_f', $route);
 
     $route = new Route('path/three');
-    $route->setRequirement('_method', 'PATCH');
+    $route->setMethods(['PATCH']);
     $route->setRequirement('_content_type_format', 'xml');
     $collection->add('route_g', $route);
     return $collection;
diff --git a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
index 4685727f5a320e5e3603c6431890b67167db0a0c..677d21461e431c7974ea478094e8fe642d9a72ec 100644
--- a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
@@ -70,7 +70,7 @@ protected function setUp() {
     $first_route = new Route('/test/one');
     $second_route = new Route('/test/two/{narf}');
     $third_route = new Route('/test/two/');
-    $fourth_route = new Route('/test/four', array(), array('_scheme' => 'https'));
+    $fourth_route = new Route('/test/four', array(), array(), array(), '', ['https']);
     $routes->add('test_1', $first_route);
     $routes->add('test_2', $second_route);
     $routes->add('test_3', $third_route);
diff --git a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
index e4faaa756f029c81ead4cca763c3dc003e709c26..26bbe043a8c2218e7edaa3fba6897cabc582f94e 100644
--- a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
+++ b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
@@ -16,6 +16,7 @@
 use Drupal\Core\TypedData\Validation\RecursiveValidator;
 use Drupal\Core\Validation\ConstraintManager;
 use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
 use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\DefaultTranslator;
@@ -81,7 +82,7 @@ protected function setUp() {
     $container->set('typed_data_manager', $this->typedDataManager);
     \Drupal::setContainer($container);
 
-    $translator = new DefaultTranslator();
+    $translator = new IdentityTranslator();
     $this->contextFactory = new ExecutionContextFactory($translator);
     $this->validatorFactory = new ConstraintValidatorFactory();
     $this->recursiveValidator = new RecursiveValidator($this->contextFactory, $this->validatorFactory, $this->typedDataManager);
diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php
index 1b5c7ffe81be70cc69be337dbf9b4b2f2c3b241e..e66d49b53e4f7ef6e792b34eeaba078aa67496ef 100644
--- a/core/vendor/composer/autoload_classmap.php
+++ b/core/vendor/composer/autoload_classmap.php
@@ -425,14 +425,14 @@
     'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php',
     'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php',
     'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php',
-    'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
-    'Symfony\\Component\\HttpFoundation\\FileBag' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php',
-    'Symfony\\Component\\HttpFoundation\\HeaderBag' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php',
-    'Symfony\\Component\\HttpFoundation\\ParameterBag' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php',
-    'Symfony\\Component\\HttpFoundation\\Request' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php',
-    'Symfony\\Component\\HttpFoundation\\ServerBag' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php',
-    'Symfony\\Component\\HttpKernel\\HttpKernel' => $vendorDir . '/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php',
-    'Symfony\\Component\\HttpKernel\\HttpKernelInterface' => $vendorDir . '/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php',
-    'Symfony\\Component\\HttpKernel\\TerminableInterface' => $vendorDir . '/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php',
+    'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Resources/stubs/SessionHandlerInterface.php',
+    'Symfony\\Component\\HttpFoundation\\FileBag' => $vendorDir . '/symfony/http-foundation/FileBag.php',
+    'Symfony\\Component\\HttpFoundation\\HeaderBag' => $vendorDir . '/symfony/http-foundation/HeaderBag.php',
+    'Symfony\\Component\\HttpFoundation\\ParameterBag' => $vendorDir . '/symfony/http-foundation/ParameterBag.php',
+    'Symfony\\Component\\HttpFoundation\\Request' => $vendorDir . '/symfony/http-foundation/Request.php',
+    'Symfony\\Component\\HttpFoundation\\ServerBag' => $vendorDir . '/symfony/http-foundation/ServerBag.php',
+    'Symfony\\Component\\HttpKernel\\HttpKernel' => $vendorDir . '/symfony/http-kernel/HttpKernel.php',
+    'Symfony\\Component\\HttpKernel\\HttpKernelInterface' => $vendorDir . '/symfony/http-kernel/HttpKernelInterface.php',
+    'Symfony\\Component\\HttpKernel\\TerminableInterface' => $vendorDir . '/symfony/http-kernel/TerminableInterface.php',
     'Text_Template' => $vendorDir . '/phpunit/php-text-template/Text/Template.php',
 );
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index c33bac0ad6fc60c01e2b8306234a4413380b8d6e..305ab18c6815cb8762d1081d67ef3a583f722bc5 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -9,21 +9,8 @@
     'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'),
     'org\\bovigo\\vfs\\' => array($vendorDir . '/mikey179/vfsStream/src/main/php'),
     'Twig_' => array($vendorDir . '/twig/twig/lib'),
-    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
-    'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'),
-    'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
-    'Symfony\\Component\\Serializer\\' => array($vendorDir . '/symfony/serializer'),
-    'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
-    'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
-    'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
-    'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
-    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
     'Symfony\\Component\\DomCrawler\\' => array($vendorDir . '/symfony/dom-crawler'),
-    'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'),
     'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
-    'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
-    'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
-    'Symfony\\Component\\ClassLoader\\' => array($vendorDir . '/symfony/class-loader'),
     'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
     'Stack' => array($vendorDir . '/stack/builder/src'),
     'Psr\\Log\\' => array($vendorDir . '/psr/log'),
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index ea6ef86dd1c4f7ac06c8aceee092e54d39517560..af91507e48002f81284b5850fc593a504fd924ea 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -9,6 +9,19 @@
     'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib'),
     'Zend\\Feed\\' => array($vendorDir . '/zendframework/zend-feed'),
     'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper'),
+    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
+    'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'),
+    'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
+    'Symfony\\Component\\Serializer\\' => array($vendorDir . '/symfony/serializer'),
+    'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
+    'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
+    'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
+    'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
+    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+    'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'),
+    'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
+    'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
+    'Symfony\\Component\\ClassLoader\\' => array($vendorDir . '/symfony/class-loader'),
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
     'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
     'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index 41b4c41e2fee8c635684f0be9767bb340c4bac37..ca6969b7daba72b6405c12d14cbe9d506f385dc2 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1425,654 +1425,589 @@
         "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function."
     },
     {
-        "name": "symfony/class-loader",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/ClassLoader",
+        "name": "zendframework/zend-stdlib",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/ClassLoader.git",
-            "reference": "861765b3e5f32979de5bd19ad2577cbb830a29d5"
+            "url": "https://github.com/zendframework/zend-stdlib.git",
+            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/861765b3e5f32979de5bd19ad2577cbb830a29d5",
-            "reference": "861765b3e5f32979de5bd19ad2577cbb830a29d5",
+            "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
+            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.23"
         },
         "require-dev": {
-            "symfony/finder": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7"
+            "zendframework/zend-eventmanager": "self.version",
+            "zendframework/zend-filter": "self.version",
+            "zendframework/zend-serializer": "self.version",
+            "zendframework/zend-servicemanager": "self.version"
+        },
+        "suggest": {
+            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+            "zendframework/zend-filter": "To support naming strategy hydrator usage",
+            "zendframework/zend-serializer": "Zend\\Serializer component",
+            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
         },
-        "time": "2015-03-27 10:19:51",
+        "time": "2015-04-01 18:09:29",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\ClassLoader\\": ""
+            "psr-4": {
+                "Zend\\Stdlib\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
+            "BSD-3-Clause"
         ],
-        "description": "Symfony ClassLoader Component",
-        "homepage": "http://symfony.com"
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "stdlib",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/css-selector",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/CssSelector",
+        "name": "zendframework/zend-escaper",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/CssSelector.git",
-            "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4"
+            "url": "https://github.com/zendframework/zend-escaper.git",
+            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/db2c48df9658423a8c168d89f7b971b73d3d74a4",
-            "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4",
+            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
+            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
-        },
-        "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "php": ">=5.3.23"
         },
-        "time": "2015-03-22 16:55:57",
+        "time": "2015-04-01 18:02:07",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\CssSelector\\": ""
+            "psr-4": {
+                "Zend\\Escaper\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Jean-François Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
+            "BSD-3-Clause"
         ],
-        "description": "Symfony CssSelector Component",
-        "homepage": "http://symfony.com"
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "escaper",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/dependency-injection",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/DependencyInjection",
+        "name": "zendframework/zend-feed",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/DependencyInjection.git",
-            "reference": "8e9007012226b4bd41f8afed855c452cf5edc3a6"
+            "url": "https://github.com/zendframework/zend-feed.git",
+            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/8e9007012226b4bd41f8afed855c452cf5edc3a6",
-            "reference": "8e9007012226b4bd41f8afed855c452cf5edc3a6",
+            "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/0f59e560364f1f1fcb09a96874328ae3ff690db2",
+            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
-        },
-        "conflict": {
-            "symfony/expression-language": "<2.6"
+            "php": ">=5.3.23",
+            "zendframework/zend-escaper": "self.version",
+            "zendframework/zend-stdlib": "self.version"
         },
         "require-dev": {
-            "symfony/config": "~2.2",
-            "symfony/expression-language": "~2.6",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.1"
+            "zendframework/zend-cache": "self.version",
+            "zendframework/zend-db": "self.version",
+            "zendframework/zend-http": "self.version",
+            "zendframework/zend-servicemanager": "self.version",
+            "zendframework/zend-validator": "self.version"
         },
         "suggest": {
-            "symfony/config": "",
-            "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-            "symfony/yaml": ""
+            "zendframework/zend-cache": "Zend\\Cache component",
+            "zendframework/zend-db": "Zend\\Db component",
+            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
+            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
+            "zendframework/zend-validator": "Zend\\Validator component"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-04-01 18:09:25",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\DependencyInjection\\": ""
+            "psr-4": {
+                "Zend\\Feed\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
+            "BSD-3-Clause"
         ],
-        "description": "Symfony DependencyInjection Component",
-        "homepage": "http://symfony.com"
+        "description": "provides functionality for consuming RSS and Atom feeds",
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "feed",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/debug",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Debug",
+        "name": "twig/twig",
+        "version": "v1.18.1",
+        "version_normalized": "1.18.1.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Debug.git",
-            "reference": "d49a46a20a8f0544aedac54466750ad787d3d3e3"
+            "url": "https://github.com/twigphp/Twig.git",
+            "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Debug/zipball/d49a46a20a8f0544aedac54466750ad787d3d3e3",
-            "reference": "d49a46a20a8f0544aedac54466750ad787d3d3e3",
+            "url": "https://api.github.com/repos/twigphp/Twig/zipball/9f70492f44398e276d1b81c1b43adfe6751c7b7f",
+            "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "psr/log": "~1.0"
-        },
-        "conflict": {
-            "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-        },
-        "require-dev": {
-            "symfony/class-loader": "~2.2",
-            "symfony/http-foundation": "~2.1",
-            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
-            "symfony/phpunit-bridge": "~2.7"
-        },
-        "suggest": {
-            "symfony/http-foundation": "",
-            "symfony/http-kernel": ""
+            "php": ">=5.2.7"
         },
-        "time": "2015-03-22 16:55:57",
+        "time": "2015-04-19 08:30:27",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.18-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Debug\\": ""
+                "Twig_": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com",
+                "homepage": "http://fabien.potencier.org",
+                "role": "Lead Developer"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Armin Ronacher",
+                "email": "armin.ronacher@active-4.com",
+                "role": "Project Founder"
+            },
+            {
+                "name": "Twig Team",
+                "homepage": "http://twig.sensiolabs.org/contributors",
+                "role": "Contributors"
             }
         ],
-        "description": "Symfony Debug Component",
-        "homepage": "http://symfony.com"
+        "description": "Twig, the flexible, fast, and secure template language for PHP",
+        "homepage": "http://twig.sensiolabs.org",
+        "keywords": [
+            "templating"
+        ]
     },
     {
-        "name": "symfony/http-foundation",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/HttpFoundation",
+        "name": "sebastian/version",
+        "version": "1.0.5",
+        "version_normalized": "1.0.5.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/HttpFoundation.git",
-            "reference": "8a6337233f08f7520de97f4ffd6f00e947d892f9"
+            "url": "https://github.com/sebastianbergmann/version.git",
+            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/8a6337233f08f7520de97f4ffd6f00e947d892f9",
-            "reference": "8a6337233f08f7520de97f4ffd6f00e947d892f9",
+            "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
+            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
             "shasum": ""
         },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "require-dev": {
-            "symfony/expression-language": "~2.4",
-            "symfony/phpunit-bridge": "~2.7"
-        },
-        "time": "2015-04-01 16:50:12",
+        "time": "2015-02-24 06:35:25",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.6-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\HttpFoundation\\": ""
-            },
             "classmap": [
-                "Symfony/Component/HttpFoundation/Resources/stubs"
+                "src/"
             ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony HttpFoundation Component",
-        "homepage": "http://symfony.com"
+        "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+        "homepage": "https://github.com/sebastianbergmann/version"
     },
     {
-        "name": "symfony/event-dispatcher",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/EventDispatcher",
+        "name": "sebastian/recursion-context",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/EventDispatcher.git",
-            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
+            "url": "https://github.com/sebastianbergmann/recursion-context.git",
+            "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
-            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
+            "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
+            "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/config": "~2.0,>=2.0.5",
-            "symfony/dependency-injection": "~2.6",
-            "symfony/expression-language": "~2.6",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/stopwatch": "~2.3"
-        },
-        "suggest": {
-            "symfony/dependency-injection": "",
-            "symfony/http-kernel": ""
+            "phpunit/phpunit": "~4.4"
         },
-        "time": "2015-03-13 17:37:22",
+        "time": "2015-01-24 09:48:32",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\EventDispatcher\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
+            },
+            {
+                "name": "Adam Harvey",
+                "email": "aharvey@php.net"
             }
         ],
-        "description": "Symfony EventDispatcher Component",
-        "homepage": "http://symfony.com"
+        "description": "Provides functionality to recursively process PHP variables",
+        "homepage": "http://www.github.com/sebastianbergmann/recursion-context"
     },
     {
-        "name": "symfony/http-kernel",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/HttpKernel",
+        "name": "sebastian/exporter",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/HttpKernel.git",
-            "reference": "3829cacfe21eaf3f73604a62d79183d1f6e792c4"
+            "url": "https://github.com/sebastianbergmann/exporter.git",
+            "reference": "84839970d05254c73cde183a721c7af13aede943"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/3829cacfe21eaf3f73604a62d79183d1f6e792c4",
-            "reference": "3829cacfe21eaf3f73604a62d79183d1f6e792c4",
+            "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
+            "reference": "84839970d05254c73cde183a721c7af13aede943",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3",
-            "psr/log": "~1.0",
-            "symfony/debug": "~2.6,>=2.6.2",
-            "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
-            "symfony/http-foundation": "~2.5,>=2.5.4"
+            "sebastian/recursion-context": "~1.0"
         },
         "require-dev": {
-            "symfony/browser-kit": "~2.3",
-            "symfony/class-loader": "~2.1",
-            "symfony/config": "~2.0,>=2.0.5",
-            "symfony/console": "~2.3",
-            "symfony/css-selector": "~2.0,>=2.0.5",
-            "symfony/dependency-injection": "~2.2",
-            "symfony/dom-crawler": "~2.0,>=2.0.5",
-            "symfony/expression-language": "~2.4",
-            "symfony/finder": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.0,>=2.0.5",
-            "symfony/routing": "~2.2",
-            "symfony/stopwatch": "~2.3",
-            "symfony/templating": "~2.2",
-            "symfony/translation": "~2.0,>=2.0.5",
-            "symfony/var-dumper": "~2.6"
-        },
-        "suggest": {
-            "symfony/browser-kit": "",
-            "symfony/class-loader": "",
-            "symfony/config": "",
-            "symfony/console": "",
-            "symfony/dependency-injection": "",
-            "symfony/finder": "",
-            "symfony/var-dumper": ""
+            "phpunit/phpunit": "~4.4"
         },
-        "time": "2015-04-01 16:55:26",
+        "time": "2015-01-27 07:23:06",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.2.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\HttpKernel\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Volker Dusch",
+                "email": "github@wallbash.com"
+            },
+            {
+                "name": "Bernhard Schussek",
+                "email": "bschussek@2bepublished.at"
+            },
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
+            },
+            {
+                "name": "Adam Harvey",
+                "email": "aharvey@php.net"
             }
         ],
-        "description": "Symfony HttpKernel Component",
-        "homepage": "http://symfony.com"
+        "description": "Provides the functionality to export PHP variables for visualization",
+        "homepage": "http://www.github.com/sebastianbergmann/exporter",
+        "keywords": [
+            "export",
+            "exporter"
+        ]
     },
     {
-        "name": "symfony/routing",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Routing",
+        "name": "sebastian/environment",
+        "version": "1.2.2",
+        "version_normalized": "1.2.2.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Routing.git",
-            "reference": "4e173a645b63ff60a124f3741b4f15feebd908fa"
+            "url": "https://github.com/sebastianbergmann/environment.git",
+            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Routing/zipball/4e173a645b63ff60a124f3741b4f15feebd908fa",
-            "reference": "4e173a645b63ff60a124f3741b4f15feebd908fa",
+            "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
+            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3"
         },
         "require-dev": {
-            "doctrine/annotations": "~1.0",
-            "doctrine/common": "~2.2",
-            "psr/log": "~1.0",
-            "symfony/config": "~2.2",
-            "symfony/expression-language": "~2.4",
-            "symfony/http-foundation": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.0,>=2.0.5"
-        },
-        "suggest": {
-            "doctrine/annotations": "For using the annotation loader",
-            "symfony/config": "For using the all-in-one router or any loader",
-            "symfony/expression-language": "For using expression matching",
-            "symfony/yaml": "For using the YAML loader"
+            "phpunit/phpunit": "~4.4"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-01-01 10:01:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.3.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Routing\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Symfony Routing Component",
-        "homepage": "http://symfony.com",
+        "description": "Provides functionality to handle HHVM/PHP environments",
+        "homepage": "http://www.github.com/sebastianbergmann/environment",
         "keywords": [
-            "router",
-            "routing",
-            "uri",
-            "url"
+            "Xdebug",
+            "environment",
+            "hhvm"
         ]
     },
     {
-        "name": "symfony/serializer",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Serializer",
+        "name": "sebastian/diff",
+        "version": "1.3.0",
+        "version_normalized": "1.3.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Serializer.git",
-            "reference": "bf30b882e15945fe8700edcd966eb3f5503820f3"
+            "url": "https://github.com/sebastianbergmann/diff.git",
+            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Serializer/zipball/bf30b882e15945fe8700edcd966eb3f5503820f3",
-            "reference": "bf30b882e15945fe8700edcd966eb3f5503820f3",
+            "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
+            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "phpunit/phpunit": "~4.2"
         },
-        "time": "2015-03-22 16:55:57",
+        "time": "2015-02-22 15:13:53",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.3-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Serializer\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Kore Nordmann",
+                "email": "mail@kore-nordmann.de"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Symfony Serializer Component",
-        "homepage": "http://symfony.com"
+        "description": "Diff implementation",
+        "homepage": "http://www.github.com/sebastianbergmann/diff",
+        "keywords": [
+            "diff"
+        ]
     },
     {
-        "name": "symfony/translation",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Translation",
+        "name": "sebastian/comparator",
+        "version": "1.1.1",
+        "version_normalized": "1.1.1.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Translation.git",
-            "reference": "bd939f05cdaca128f4ddbae1b447d6f0203b60af"
+            "url": "https://github.com/sebastianbergmann/comparator.git",
+            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Translation/zipball/bd939f05cdaca128f4ddbae1b447d6f0203b60af",
-            "reference": "bd939f05cdaca128f4ddbae1b447d6f0203b60af",
+            "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
+            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.3",
+            "sebastian/diff": "~1.2",
+            "sebastian/exporter": "~1.2"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/config": "~2.3,>=2.3.12",
-            "symfony/intl": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.2"
-        },
-        "suggest": {
-            "psr/log": "To use logging capability in translator",
-            "symfony/config": "",
-            "symfony/yaml": ""
+            "phpunit/phpunit": "~4.4"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-01-29 16:28:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.1.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Translation\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Volker Dusch",
+                "email": "github@wallbash.com"
+            },
+            {
+                "name": "Bernhard Schussek",
+                "email": "bschussek@2bepublished.at"
+            },
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Symfony Translation Component",
-        "homepage": "http://symfony.com"
+        "description": "Provides the functionality to compare PHP values for equality",
+        "homepage": "http://www.github.com/sebastianbergmann/comparator",
+        "keywords": [
+            "comparator",
+            "compare",
+            "equality"
+        ]
     },
     {
-        "name": "symfony/process",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Process",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony/Process.git",
-            "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552"
+        "name": "phpdocumentor/reflection-docblock",
+        "version": "2.0.4",
+        "version_normalized": "2.0.4.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Process/zipball/a8bebaec1a9dc6cde53e0250e32917579b0be552",
-            "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552",
+            "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "phpunit/phpunit": "~4.0"
+        },
+        "suggest": {
+            "dflydev/markdown": "~1.0",
+            "erusev/parsedown": "~1.0"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-02-03 12:10:50",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Process\\": ""
+                "phpDocumentor": [
+                    "src/"
+                ]
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2081,50 +2016,45 @@
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Mike van Riel",
+                "email": "mike.vanriel@naenius.com"
             }
-        ],
-        "description": "Symfony Process Component",
-        "homepage": "http://symfony.com"
+        ]
     },
     {
-        "name": "symfony/yaml",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/Yaml",
+        "name": "phpspec/prophecy",
+        "version": "1.4.0",
+        "version_normalized": "1.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Yaml.git",
-            "reference": "174f009ed36379a801109955fc5a71a49fe62dd4"
+            "url": "https://github.com/phpspec/prophecy.git",
+            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Yaml/zipball/174f009ed36379a801109955fc5a71a49fe62dd4",
-            "reference": "174f009ed36379a801109955fc5a71a49fe62dd4",
+            "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
+            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "doctrine/instantiator": "^1.0.2",
+            "phpdocumentor/reflection-docblock": "~2.0",
+            "sebastian/comparator": "~1.1"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "phpspec/phpspec": "~2.0"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-03-27 19:31:25",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.4.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Yaml\\": ""
+                "Prophecy\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2133,315 +2063,353 @@
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Marcello Duarte",
+                "email": "marcello.duarte@gmail.com"
             }
         ],
-        "description": "Symfony Yaml Component",
-        "homepage": "http://symfony.com"
+        "description": "Highly opinionated mocking framework for PHP 5.3+",
+        "homepage": "https://github.com/phpspec/prophecy",
+        "keywords": [
+            "Double",
+            "Dummy",
+            "fake",
+            "mock",
+            "spy",
+            "stub"
+        ]
     },
     {
-        "name": "symfony/dom-crawler",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/DomCrawler",
+        "name": "phpunit/phpunit-mock-objects",
+        "version": "2.3.1",
+        "version_normalized": "2.3.1.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/DomCrawler.git",
-            "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d"
+            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/8897ebf39c7dfb752a5494fa301845a3fbb9e53d",
-            "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c",
+            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "doctrine/instantiator": "~1.0,>=1.0.2",
+            "php": ">=5.3.3",
+            "phpunit/php-text-template": "~1.2"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.3",
-            "symfony/phpunit-bridge": "~2.7"
+            "phpunit/phpunit": "~4.4"
         },
         "suggest": {
-            "symfony/css-selector": ""
+            "ext-soap": "*"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-04-02 05:36:41",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.3.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\DomCrawler\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony DomCrawler Component",
-        "homepage": "http://symfony.com"
+        "description": "Mock Object library for PHPUnit",
+        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+        "keywords": [
+            "mock",
+            "xunit"
+        ]
     },
     {
-        "name": "symfony/browser-kit",
-        "version": "v2.6.6",
-        "version_normalized": "2.6.6.0",
-        "target-dir": "Symfony/Component/BrowserKit",
+        "name": "phpunit/php-token-stream",
+        "version": "1.4.1",
+        "version_normalized": "1.4.1.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/BrowserKit.git",
-            "reference": "f21189b0eccbe56528515858ca1d5089a741692f"
+            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+            "reference": "eab81d02569310739373308137284e0158424330"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/f21189b0eccbe56528515858ca1d5089a741692f",
-            "reference": "f21189b0eccbe56528515858ca1d5089a741692f",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330",
+            "reference": "eab81d02569310739373308137284e0158424330",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "symfony/dom-crawler": "~2.0,>=2.0.5"
+            "ext-tokenizer": "*",
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.0,>=2.0.5"
-        },
-        "suggest": {
-            "symfony/process": ""
+            "phpunit/phpunit": "~4.2"
         },
-        "time": "2015-03-30 15:54:10",
+        "time": "2015-04-08 04:46:07",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "1.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\BrowserKit\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Symfony BrowserKit Component",
-        "homepage": "http://symfony.com"
+        "description": "Wrapper around PHP's tokenizer extension.",
+        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+        "keywords": [
+            "tokenizer"
+        ]
     },
     {
-        "name": "zendframework/zend-stdlib",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "phpunit/php-file-iterator",
+        "version": "1.4.0",
+        "version_normalized": "1.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-stdlib.git",
-            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
+            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
-            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
+            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23"
-        },
-        "require-dev": {
-            "zendframework/zend-eventmanager": "self.version",
-            "zendframework/zend-filter": "self.version",
-            "zendframework/zend-serializer": "self.version",
-            "zendframework/zend-servicemanager": "self.version"
-        },
-        "suggest": {
-            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-            "zendframework/zend-filter": "To support naming strategy hydrator usage",
-            "zendframework/zend-serializer": "Zend\\Serializer component",
-            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
+            "php": ">=5.3.3"
         },
-        "time": "2015-04-01 18:09:29",
+        "time": "2015-04-02 05:19:05",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "1.4.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Zend\\Stdlib\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
             "BSD-3-Clause"
         ],
-        "homepage": "https://github.com/zendframework/zf2",
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
         "keywords": [
-            "stdlib",
-            "zf2"
+            "filesystem",
+            "iterator"
         ]
     },
     {
-        "name": "zendframework/zend-escaper",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "phpunit/php-code-coverage",
+        "version": "2.0.16",
+        "version_normalized": "2.0.16.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-escaper.git",
-            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96"
+            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
-            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/934fd03eb6840508231a7f73eb8940cf32c3b66c",
+            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23"
+            "php": ">=5.3.3",
+            "phpunit/php-file-iterator": "~1.3",
+            "phpunit/php-text-template": "~1.2",
+            "phpunit/php-token-stream": "~1.3",
+            "sebastian/environment": "~1.0",
+            "sebastian/version": "~1.0"
         },
-        "time": "2015-04-01 18:02:07",
+        "require-dev": {
+            "ext-xdebug": ">=2.1.4",
+            "phpunit/phpunit": "~4"
+        },
+        "suggest": {
+            "ext-dom": "*",
+            "ext-xdebug": ">=2.2.1",
+            "ext-xmlwriter": "*"
+        },
+        "time": "2015-04-11 04:35:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Zend\\Escaper\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
             "BSD-3-Clause"
         ],
-        "homepage": "https://github.com/zendframework/zf2",
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.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": [
-            "escaper",
-            "zf2"
+            "coverage",
+            "testing",
+            "xunit"
         ]
     },
     {
-        "name": "zendframework/zend-feed",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "phpunit/phpunit",
+        "version": "4.6.4",
+        "version_normalized": "4.6.4.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-feed.git",
-            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5"
+            "url": "https://github.com/sebastianbergmann/phpunit.git",
+            "reference": "163232991e652e6efed2f8470326fffa61e848e2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/0f59e560364f1f1fcb09a96874328ae3ff690db2",
-            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/163232991e652e6efed2f8470326fffa61e848e2",
+            "reference": "163232991e652e6efed2f8470326fffa61e848e2",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23",
-            "zendframework/zend-escaper": "self.version",
-            "zendframework/zend-stdlib": "self.version"
-        },
-        "require-dev": {
-            "zendframework/zend-cache": "self.version",
-            "zendframework/zend-db": "self.version",
-            "zendframework/zend-http": "self.version",
-            "zendframework/zend-servicemanager": "self.version",
-            "zendframework/zend-validator": "self.version"
+            "ext-dom": "*",
+            "ext-json": "*",
+            "ext-pcre": "*",
+            "ext-reflection": "*",
+            "ext-spl": "*",
+            "php": ">=5.3.3",
+            "phpspec/prophecy": "~1.3,>=1.3.1",
+            "phpunit/php-code-coverage": "~2.0,>=2.0.11",
+            "phpunit/php-file-iterator": "~1.4",
+            "phpunit/php-text-template": "~1.2",
+            "phpunit/php-timer": "~1.0",
+            "phpunit/phpunit-mock-objects": "~2.3",
+            "sebastian/comparator": "~1.1",
+            "sebastian/diff": "~1.2",
+            "sebastian/environment": "~1.2",
+            "sebastian/exporter": "~1.2",
+            "sebastian/global-state": "~1.0",
+            "sebastian/version": "~1.0",
+            "symfony/yaml": "~2.1|~3.0"
         },
         "suggest": {
-            "zendframework/zend-cache": "Zend\\Cache component",
-            "zendframework/zend-db": "Zend\\Db component",
-            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
-            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
-            "zendframework/zend-validator": "Zend\\Validator component"
+            "phpunit/php-invoker": "~1.1"
         },
-        "time": "2015-04-01 18:09:25",
+        "time": "2015-04-11 05:23:21",
+        "bin": [
+            "phpunit"
+        ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "4.6.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Zend\\Feed\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
             "BSD-3-Clause"
         ],
-        "description": "provides functionality for consuming RSS and Atom feeds",
-        "homepage": "https://github.com/zendframework/zf2",
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
+            }
+        ],
+        "description": "The PHP Unit Testing framework.",
+        "homepage": "https://phpunit.de/",
         "keywords": [
-            "feed",
-            "zf2"
+            "phpunit",
+            "testing",
+            "xunit"
         ]
     },
     {
-        "name": "twig/twig",
-        "version": "v1.18.1",
-        "version_normalized": "1.18.1.0",
+        "name": "mikey179/vfsStream",
+        "version": "v1.5.0",
+        "version_normalized": "1.5.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/twigphp/Twig.git",
-            "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f"
+            "url": "https://github.com/mikey179/vfsStream.git",
+            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/twigphp/Twig/zipball/9f70492f44398e276d1b81c1b43adfe6751c7b7f",
-            "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f",
+            "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/4dc0d2f622412f561f5b242b19b98068bbbc883a",
+            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.2.7"
+            "php": ">=5.3.0"
         },
-        "time": "2015-04-19 08:30:27",
+        "require-dev": {
+            "phpunit/phpunit": "~4.5"
+        },
+        "time": "2015-03-29 11:19:49",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.18-dev"
+                "dev-master": "1.5.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Twig_": "lib/"
+                "org\\bovigo\\vfs\\": "src/main/php"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2450,398 +2418,401 @@
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com",
-                "homepage": "http://fabien.potencier.org",
-                "role": "Lead Developer"
-            },
-            {
-                "name": "Armin Ronacher",
-                "email": "armin.ronacher@active-4.com",
-                "role": "Project Founder"
-            },
-            {
-                "name": "Twig Team",
-                "homepage": "http://twig.sensiolabs.org/contributors",
-                "role": "Contributors"
+                "name": "Frank Kleine",
+                "homepage": "http://frankkleine.de/",
+                "role": "Developer"
             }
         ],
-        "description": "Twig, the flexible, fast, and secure template language for PHP",
-        "homepage": "http://twig.sensiolabs.org",
-        "keywords": [
-            "templating"
-        ]
+        "description": "Virtual file system to mock the real file system in unit tests.",
+        "homepage": "http://vfs.bovigo.org/"
     },
     {
-        "name": "sebastian/version",
-        "version": "1.0.5",
-        "version_normalized": "1.0.5.0",
+        "name": "symfony/class-loader",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/version.git",
-            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
+            "url": "https://github.com/symfony/ClassLoader.git",
+            "reference": "fa19598cb708b92d983b34aae313f57c217f9386"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
-            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
+            "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/fa19598cb708b92d983b34aae313f57c217f9386",
+            "reference": "fa19598cb708b92d983b34aae313f57c217f9386",
             "shasum": ""
         },
-        "time": "2015-02-24 06:35:25",
+        "require": {
+            "php": ">=5.3.9"
+        },
+        "require-dev": {
+            "symfony/finder": "~2.0,>=2.0.5",
+            "symfony/phpunit-bridge": "~2.7"
+        },
+        "time": "2015-05-15 13:33:16",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.7-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\ClassLoader\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-        "homepage": "https://github.com/sebastianbergmann/version"
+        "description": "Symfony ClassLoader Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/recursion-context",
-        "version": "1.0.0",
-        "version_normalized": "1.0.0.0",
+        "name": "symfony/console",
+        "version": "v2.7.0-BETA2",
+        "version_normalized": "2.7.0.0-beta2",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/recursion-context.git",
-            "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
+            "url": "https://github.com/symfony/Console.git",
+            "reference": "555ba7fc54a538e1b83988e2299db09b6b6dca64"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
-            "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
+            "url": "https://api.github.com/repos/symfony/Console/zipball/555ba7fc54a538e1b83988e2299db09b6b6dca64",
+            "reference": "555ba7fc54a538e1b83988e2299db09b6b6dca64",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "psr/log": "~1.0",
+            "symfony/event-dispatcher": "~2.1",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/process": "~2.1"
         },
-        "time": "2015-01-24 09:48:32",
+        "suggest": {
+            "psr/log": "For using the console logger",
+            "symfony/event-dispatcher": "",
+            "symfony/process": ""
+        },
+        "time": "2015-05-02 15:21:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Console\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Adam Harvey",
-                "email": "aharvey@php.net"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides functionality to recursively process PHP variables",
-        "homepage": "http://www.github.com/sebastianbergmann/recursion-context"
+        "description": "Symfony Console Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/exporter",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
+        "name": "symfony/css-selector",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/exporter.git",
-            "reference": "84839970d05254c73cde183a721c7af13aede943"
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
-            "reference": "84839970d05254c73cde183a721c7af13aede943",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
+            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "sebastian/recursion-context": "~1.0"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-01-27 07:23:06",
+        "time": "2015-05-15 13:33:16",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.2.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\CssSelector\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Volker Dusch",
-                "email": "github@wallbash.com"
-            },
-            {
-                "name": "Bernhard Schussek",
-                "email": "bschussek@2bepublished.at"
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
             },
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Adam Harvey",
-                "email": "aharvey@php.net"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides the functionality to export PHP variables for visualization",
-        "homepage": "http://www.github.com/sebastianbergmann/exporter",
-        "keywords": [
-            "export",
-            "exporter"
-        ]
+        "description": "Symfony CssSelector Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/environment",
-        "version": "1.2.2",
-        "version_normalized": "1.2.2.0",
+        "name": "symfony/dependency-injection",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/environment.git",
-            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
+            "url": "https://github.com/symfony/DependencyInjection.git",
+            "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
-            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
+            "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
+            "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/expression-language": "<2.6"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "symfony/config": "~2.2",
+            "symfony/expression-language": "~2.6",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.1"
         },
-        "time": "2015-01-01 10:01:08",
+        "suggest": {
+            "symfony/config": "",
+            "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
+            "symfony/yaml": ""
+        },
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\DependencyInjection\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides functionality to handle HHVM/PHP environments",
-        "homepage": "http://www.github.com/sebastianbergmann/environment",
-        "keywords": [
-            "Xdebug",
-            "environment",
-            "hhvm"
-        ]
+        "description": "Symfony DependencyInjection Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/diff",
-        "version": "1.3.0",
-        "version_normalized": "1.3.0.0",
+        "name": "symfony/debug",
+        "version": "v2.6.9",
+        "version_normalized": "2.6.9.0",
+        "target-dir": "Symfony/Component/Debug",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/diff.git",
-            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
+            "url": "https://github.com/symfony/Debug.git",
+            "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
-            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
+            "url": "https://api.github.com/repos/symfony/Debug/zipball/4851a041c48e76b91a221db84ab5850daa6a7b33",
+            "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.3",
+            "psr/log": "~1.0"
+        },
+        "conflict": {
+            "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.2"
+            "symfony/class-loader": "~2.2",
+            "symfony/http-foundation": "~2.1",
+            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-02-22 15:13:53",
+        "suggest": {
+            "symfony/http-foundation": "",
+            "symfony/http-kernel": ""
+        },
+        "time": "2015-05-20 13:09:45",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-0": {
+                "Symfony\\Component\\Debug\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Kore Nordmann",
-                "email": "mail@kore-nordmann.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Diff implementation",
-        "homepage": "http://www.github.com/sebastianbergmann/diff",
-        "keywords": [
-            "diff"
-        ]
+        "description": "Symfony Debug Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/comparator",
-        "version": "1.1.1",
-        "version_normalized": "1.1.1.0",
+        "name": "symfony/http-foundation",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/comparator.git",
-            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
+            "url": "https://github.com/symfony/HttpFoundation.git",
+            "reference": "729de183da037c125c5f6366bd4f0631ba1a1abb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
-            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
+            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/729de183da037c125c5f6366bd4f0631ba1a1abb",
+            "reference": "729de183da037c125c5f6366bd4f0631ba1a1abb",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "sebastian/diff": "~1.2",
-            "sebastian/exporter": "~1.2"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "symfony/expression-language": "~2.4",
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-01-29 16:28:08",
+        "time": "2015-05-22 14:54:25",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.1.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
+            "psr-4": {
+                "Symfony\\Component\\HttpFoundation\\": ""
+            },
             "classmap": [
-                "src/"
+                "Resources/stubs"
             ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Volker Dusch",
-                "email": "github@wallbash.com"
-            },
-            {
-                "name": "Bernhard Schussek",
-                "email": "bschussek@2bepublished.at"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides the functionality to compare PHP values for equality",
-        "homepage": "http://www.github.com/sebastianbergmann/comparator",
-        "keywords": [
-            "comparator",
-            "compare",
-            "equality"
-        ]
+        "description": "Symfony HttpFoundation Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpdocumentor/reflection-docblock",
-        "version": "2.0.4",
-        "version_normalized": "2.0.4.0",
+        "name": "symfony/event-dispatcher",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+            "url": "https://github.com/symfony/EventDispatcher.git",
+            "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
-            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
+            "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.0"
+            "psr/log": "~1.0",
+            "symfony/config": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.6",
+            "symfony/expression-language": "~2.6",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/stopwatch": "~2.3"
         },
         "suggest": {
-            "dflydev/markdown": "~1.0",
-            "erusev/parsedown": "~1.0"
+            "symfony/dependency-injection": "",
+            "symfony/http-kernel": ""
         },
-        "time": "2015-02-03 12:10:50",
+        "time": "2015-05-02 15:21:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "phpDocumentor": [
-                    "src/"
-                ]
+            "psr-4": {
+                "Symfony\\Component\\EventDispatcher\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2850,45 +2821,80 @@
         ],
         "authors": [
             {
-                "name": "Mike van Riel",
-                "email": "mike.vanriel@naenius.com"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
-        ]
+        ],
+        "description": "Symfony EventDispatcher Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpspec/prophecy",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
+        "name": "symfony/http-kernel",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/phpspec/prophecy.git",
-            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5"
+            "url": "https://github.com/symfony/HttpKernel.git",
+            "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
-            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
+            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
+            "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
             "shasum": ""
         },
         "require": {
-            "doctrine/instantiator": "^1.0.2",
-            "phpdocumentor/reflection-docblock": "~2.0",
-            "sebastian/comparator": "~1.1"
+            "php": ">=5.3.9",
+            "psr/log": "~1.0",
+            "symfony/debug": "~2.6,>=2.6.2",
+            "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
+            "symfony/http-foundation": "~2.5,>=2.5.4"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
         },
         "require-dev": {
-            "phpspec/phpspec": "~2.0"
+            "symfony/browser-kit": "~2.3",
+            "symfony/class-loader": "~2.1",
+            "symfony/config": "~2.7",
+            "symfony/console": "~2.3",
+            "symfony/css-selector": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.2",
+            "symfony/dom-crawler": "~2.0,>=2.0.5",
+            "symfony/expression-language": "~2.4",
+            "symfony/finder": "~2.0,>=2.0.5",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/process": "~2.0,>=2.0.5",
+            "symfony/routing": "~2.2",
+            "symfony/stopwatch": "~2.3",
+            "symfony/templating": "~2.2",
+            "symfony/translation": "~2.0,>=2.0.5",
+            "symfony/var-dumper": "~2.6"
         },
-        "time": "2015-03-27 19:31:25",
+        "suggest": {
+            "symfony/browser-kit": "",
+            "symfony/class-loader": "",
+            "symfony/config": "",
+            "symfony/console": "",
+            "symfony/dependency-injection": "",
+            "symfony/finder": "",
+            "symfony/var-dumper": ""
+        },
+        "time": "2015-05-30 16:52:28",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Prophecy\\": "src/"
+            "psr-4": {
+                "Symfony\\Component\\HttpKernel\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2897,376 +2903,371 @@
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Marcello Duarte",
-                "email": "marcello.duarte@gmail.com"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Highly opinionated mocking framework for PHP 5.3+",
-        "homepage": "https://github.com/phpspec/prophecy",
-        "keywords": [
-            "Double",
-            "Dummy",
-            "fake",
-            "mock",
-            "spy",
-            "stub"
-        ]
+        "description": "Symfony HttpKernel Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpunit/phpunit-mock-objects",
-        "version": "2.3.1",
-        "version_normalized": "2.3.1.0",
+        "name": "symfony/routing",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c"
+            "url": "https://github.com/symfony/Routing.git",
+            "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c",
-            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c",
+            "url": "https://api.github.com/repos/symfony/Routing/zipball/6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
+            "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
             "shasum": ""
         },
         "require": {
-            "doctrine/instantiator": "~1.0,>=1.0.2",
-            "php": ">=5.3.3",
-            "phpunit/php-text-template": "~1.2"
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "doctrine/annotations": "~1.0",
+            "doctrine/common": "~2.2",
+            "psr/log": "~1.0",
+            "symfony/config": "~2.7",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.0,>=2.0.5"
         },
         "suggest": {
-            "ext-soap": "*"
+            "doctrine/annotations": "For using the annotation loader",
+            "symfony/config": "For using the all-in-one router or any loader",
+            "symfony/expression-language": "For using expression matching",
+            "symfony/yaml": "For using the YAML loader"
         },
-        "time": "2015-04-02 05:36:41",
+        "time": "2015-05-19 06:58:17",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Routing\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Mock Object library for PHPUnit",
-        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+        "description": "Symfony Routing Component",
+        "homepage": "https://symfony.com",
         "keywords": [
-            "mock",
-            "xunit"
+            "router",
+            "routing",
+            "uri",
+            "url"
         ]
     },
     {
-        "name": "phpunit/php-token-stream",
-        "version": "1.4.1",
-        "version_normalized": "1.4.1.0",
+        "name": "symfony/serializer",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-            "reference": "eab81d02569310739373308137284e0158424330"
+            "url": "https://github.com/symfony/Serializer.git",
+            "reference": "634d3adf119396320fba4c14caa01390700e7f3b"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330",
-            "reference": "eab81d02569310739373308137284e0158424330",
+            "url": "https://api.github.com/repos/symfony/Serializer/zipball/634d3adf119396320fba4c14caa01390700e7f3b",
+            "reference": "634d3adf119396320fba4c14caa01390700e7f3b",
             "shasum": ""
         },
         "require": {
-            "ext-tokenizer": "*",
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.2"
+            "doctrine/annotations": "~1.0",
+            "doctrine/cache": "~1.0",
+            "symfony/config": "~2.2",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/property-access": "~2.3",
+            "symfony/yaml": "~2.0"
         },
-        "time": "2015-04-08 04:46:07",
+        "suggest": {
+            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+            "symfony/config": "For using the XML mapping loader.",
+            "symfony/property-access": "For using the ObjectNormalizer.",
+            "symfony/yaml": "For using the default YAML mapping loader."
+        },
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Serializer\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Wrapper around PHP's tokenizer extension.",
-        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-        "keywords": [
-            "tokenizer"
-        ]
+        "description": "Symfony Serializer Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpunit/php-file-iterator",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
+        "name": "symfony/translation",
+        "version": "v2.7.0-BETA2",
+        "version_normalized": "2.7.0.0-beta2",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
+            "url": "https://github.com/symfony/Translation.git",
+            "reference": "1be5bbed3938247acd7c5f4e4f29dd32db636b1f"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
-            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
+            "url": "https://api.github.com/repos/symfony/Translation/zipball/1be5bbed3938247acd7c5f4e4f29dd32db636b1f",
+            "reference": "1be5bbed3938247acd7c5f4e4f29dd32db636b1f",
             "shasum": ""
         },
-        "require": {
-            "php": ">=5.3.3"
+        "require": {
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
+        },
+        "require-dev": {
+            "psr/log": "~1.0",
+            "symfony/config": "~2.7",
+            "symfony/intl": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.2"
+        },
+        "suggest": {
+            "psr/log": "To use logging capability in translator",
+            "symfony/config": "",
+            "symfony/yaml": ""
         },
-        "time": "2015-04-02 05:19:05",
+        "time": "2015-05-11 02:35:29",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Translation\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-        "keywords": [
-            "filesystem",
-            "iterator"
-        ]
+        "description": "Symfony Translation Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpunit/php-code-coverage",
-        "version": "2.0.16",
-        "version_normalized": "2.0.16.0",
+        "name": "symfony/validator",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c"
+            "url": "https://github.com/symfony/Validator.git",
+            "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/934fd03eb6840508231a7f73eb8940cf32c3b66c",
-            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c",
+            "url": "https://api.github.com/repos/symfony/Validator/zipball/3a5461a388ff8962790fd5a39e6e2da84ba1e824",
+            "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "phpunit/php-file-iterator": "~1.3",
-            "phpunit/php-text-template": "~1.2",
-            "phpunit/php-token-stream": "~1.3",
-            "sebastian/environment": "~1.0",
-            "sebastian/version": "~1.0"
+            "php": ">=5.3.9",
+            "symfony/translation": "~2.4"
         },
         "require-dev": {
-            "ext-xdebug": ">=2.1.4",
-            "phpunit/phpunit": "~4"
+            "doctrine/annotations": "~1.0",
+            "doctrine/cache": "~1.0",
+            "egulias/email-validator": "~1.2,>=1.2.1",
+            "symfony/config": "~2.2",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.1",
+            "symfony/intl": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/property-access": "~2.3",
+            "symfony/yaml": "~2.0,>=2.0.5"
         },
         "suggest": {
-            "ext-dom": "*",
-            "ext-xdebug": ">=2.2.1",
-            "ext-xmlwriter": "*"
+            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+            "egulias/email-validator": "Strict (RFC compliant) email validation",
+            "symfony/config": "",
+            "symfony/expression-language": "For using the 2.4 Expression validator",
+            "symfony/http-foundation": "",
+            "symfony/intl": "",
+            "symfony/property-access": "For using the 2.4 Validator API",
+            "symfony/yaml": ""
         },
-        "time": "2015-04-11 04:35:00",
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Validator\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "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"
-        ]
+        "description": "Symfony Validator Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpunit/phpunit",
-        "version": "4.6.4",
-        "version_normalized": "4.6.4.0",
+        "name": "symfony/process",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/phpunit.git",
-            "reference": "163232991e652e6efed2f8470326fffa61e848e2"
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/163232991e652e6efed2f8470326fffa61e848e2",
-            "reference": "163232991e652e6efed2f8470326fffa61e848e2",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
+            "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
             "shasum": ""
         },
         "require": {
-            "ext-dom": "*",
-            "ext-json": "*",
-            "ext-pcre": "*",
-            "ext-reflection": "*",
-            "ext-spl": "*",
-            "php": ">=5.3.3",
-            "phpspec/prophecy": "~1.3,>=1.3.1",
-            "phpunit/php-code-coverage": "~2.0,>=2.0.11",
-            "phpunit/php-file-iterator": "~1.4",
-            "phpunit/php-text-template": "~1.2",
-            "phpunit/php-timer": "~1.0",
-            "phpunit/phpunit-mock-objects": "~2.3",
-            "sebastian/comparator": "~1.1",
-            "sebastian/diff": "~1.2",
-            "sebastian/environment": "~1.2",
-            "sebastian/exporter": "~1.2",
-            "sebastian/global-state": "~1.0",
-            "sebastian/version": "~1.0",
-            "symfony/yaml": "~2.1|~3.0"
+            "php": ">=5.3.9"
         },
-        "suggest": {
-            "phpunit/php-invoker": "~1.1"
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-04-11 05:23:21",
-        "bin": [
-            "phpunit"
-        ],
+        "time": "2015-05-15 13:33:16",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "4.6.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Process\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "The PHP Unit Testing framework.",
-        "homepage": "https://phpunit.de/",
-        "keywords": [
-            "phpunit",
-            "testing",
-            "xunit"
-        ]
+        "description": "Symfony Process Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "symfony/validator",
-        "version": "2.6.x-dev",
-        "version_normalized": "2.6.9999999.9999999-dev",
-        "target-dir": "Symfony/Component/Validator",
+        "name": "symfony/yaml",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Validator.git",
-            "reference": "6bb1b474d25cb80617d8da6cb14c955ba914e495"
+            "url": "https://github.com/symfony/Yaml.git",
+            "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Validator/zipball/d667b6a563e233b24ae1599a9fde7a53ddd1c055",
-            "reference": "6bb1b474d25cb80617d8da6cb14c955ba914e495",
+            "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
+            "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "symfony/translation": "~2.0,>=2.0.5"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "doctrine/annotations": "~1.0",
-            "doctrine/cache": "~1.0",
-            "doctrine/common": "~2.3",
-            "egulias/email-validator": "~1.2,>=1.2.1",
-            "symfony/config": "~2.2",
-            "symfony/expression-language": "~2.4",
-            "symfony/http-foundation": "~2.1",
-            "symfony/intl": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/property-access": "~2.3",
-            "symfony/yaml": "~2.0,>=2.0.5"
-        },
-        "suggest": {
-            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
-            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
-            "egulias/email-validator": "Strict (RFC compliant) email validation",
-            "symfony/config": "",
-            "symfony/expression-language": "For using the 2.4 Expression validator",
-            "symfony/http-foundation": "",
-            "symfony/intl": "",
-            "symfony/property-access": "For using the 2.4 Validator API",
-            "symfony/yaml": ""
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-05-05 01:29:27",
+        "time": "2015-05-02 15:21:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Validator\\": ""
+            "psr-4": {
+                "Symfony\\Component\\Yaml\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -3283,85 +3284,91 @@
                 "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Symfony Validator Component",
+        "description": "Symfony Yaml Component",
         "homepage": "https://symfony.com"
     },
     {
-        "name": "mikey179/vfsStream",
-        "version": "v1.5.0",
-        "version_normalized": "1.5.0.0",
+        "name": "symfony/dom-crawler",
+        "version": "v2.6.9",
+        "version_normalized": "2.6.9.0",
+        "target-dir": "Symfony/Component/DomCrawler",
         "source": {
             "type": "git",
-            "url": "https://github.com/mikey179/vfsStream.git",
-            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a"
+            "url": "https://github.com/symfony/DomCrawler.git",
+            "reference": "c74fe625d8c65fee512de2b40cceabba1b09503b"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/4dc0d2f622412f561f5b242b19b98068bbbc883a",
-            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a",
+            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/c74fe625d8c65fee512de2b40cceabba1b09503b",
+            "reference": "c74fe625d8c65fee512de2b40cceabba1b09503b",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0"
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.5"
+            "symfony/css-selector": "~2.3",
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-03-29 11:19:49",
+        "suggest": {
+            "symfony/css-selector": ""
+        },
+        "time": "2015-05-22 14:53:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.5.x-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "org\\bovigo\\vfs\\": "src/main/php"
+                "Symfony\\Component\\DomCrawler\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Frank Kleine",
-                "homepage": "http://frankkleine.de/",
-                "role": "Developer"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Virtual file system to mock the real file system in unit tests.",
-        "homepage": "http://vfs.bovigo.org/"
+        "description": "Symfony DomCrawler Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "symfony/console",
-        "version": "v2.6.7",
-        "version_normalized": "2.6.7.0",
-        "target-dir": "Symfony/Component/Console",
+        "name": "symfony/browser-kit",
+        "version": "v2.6.9",
+        "version_normalized": "2.6.9.0",
+        "target-dir": "Symfony/Component/BrowserKit",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Console.git",
-            "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272"
+            "url": "https://github.com/symfony/BrowserKit.git",
+            "reference": "cf950c42947ea2f29c36a1f443202b6134f5c303"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Console/zipball/ebc5679854aa24ed7d65062e9e3ab0b18a917272",
-            "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272",
+            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/cf950c42947ea2f29c36a1f443202b6134f5c303",
+            "reference": "cf950c42947ea2f29c36a1f443202b6134f5c303",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.3",
+            "symfony/dom-crawler": "~2.0,>=2.0.5"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/event-dispatcher": "~2.1",
+            "symfony/css-selector": "~2.0,>=2.0.5",
             "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.1"
+            "symfony/process": "~2.0,>=2.0.5"
         },
         "suggest": {
-            "psr/log": "For using the console logger",
-            "symfony/event-dispatcher": "",
             "symfony/process": ""
         },
         "time": "2015-05-02 15:18:45",
@@ -3374,7 +3381,7 @@
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Console\\": ""
+                "Symfony\\Component\\BrowserKit\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -3391,7 +3398,7 @@
                 "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Symfony Console Component",
+        "description": "Symfony BrowserKit Component",
         "homepage": "https://symfony.com"
     }
 ]
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php
index b8d9dffd9165293cb3476dd15018fc8b6194efc9..b225056f4b70d2d132bada321e28d3b54c8e4ef5 100644
--- a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php
@@ -93,6 +93,7 @@ public function __toString()
             $dateTime = \DateTime::createFromFormat('U', $this->expires, new \DateTimeZone('GMT'));
 
             if ($dateTime === false) {
+                // this throw will provoke PHP fatal
                 throw new \UnexpectedValueException(sprintf('The cookie expiration time "%s" is not valid.'), $this->expires);
             }
 
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json
index 4c98b0aa5c3c1e22f4271db3899d2a95334b6ad9..343ecd3a33d06264ad326585a87b2e43a8307e80 100644
--- a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony BrowserKit Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,7 +12,7 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcClassLoader.php b/core/vendor/symfony/class-loader/ApcClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcClassLoader.php
rename to core/vendor/symfony/class-loader/ApcClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php b/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
similarity index 90%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php
rename to core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
index 65b7b10b239bd8a8834fb276322a4b3bbc6e0077..dd95413caf1005ece32a726cbced877e321cc92b 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\ClassLoader;
 
+trigger_error('The '.__NAMESPACE__.'\ApcUniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ApcClassLoader class instead.', E_USER_DEPRECATED);
+
 /**
  * ApcUniversalClassLoader implements a "universal" autoloader cached in APC for PHP 5.3.
  *
@@ -60,7 +62,8 @@
  *
  * @api
  *
- * @deprecated Deprecated since version 2.4, to be removed in 3.0. Use the ApcClassLoader class instead.
+ * @deprecated since version 2.4, to be removed in 3.0.
+ *             Use the {@link ClassLoader} class instead.
  */
 class ApcUniversalClassLoader extends UniversalClassLoader
 {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/CHANGELOG.md b/core/vendor/symfony/class-loader/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/CHANGELOG.md
rename to core/vendor/symfony/class-loader/CHANGELOG.md
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassCollectionLoader.php b/core/vendor/symfony/class-loader/ClassCollectionLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassCollectionLoader.php
rename to core/vendor/symfony/class-loader/ClassCollectionLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php b/core/vendor/symfony/class-loader/ClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php
rename to core/vendor/symfony/class-loader/ClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassMapGenerator.php b/core/vendor/symfony/class-loader/ClassMapGenerator.php
similarity index 98%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassMapGenerator.php
rename to core/vendor/symfony/class-loader/ClassMapGenerator.php
index 4c2aeab3ac79a028db9acc0d6872072696a1dbd2..112bee87bddce25a0fcb1401502ca42ef3bf44a3 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassMapGenerator.php
+++ b/core/vendor/symfony/class-loader/ClassMapGenerator.php
@@ -95,7 +95,7 @@ private static function findClasses($path)
         $classes = array();
 
         $namespace = '';
-        for ($i = 0, $max = count($tokens); $i < $max; $i++) {
+        for ($i = 0, $max = count($tokens); $i < $max; ++$i) {
             $token = $tokens[$i];
 
             if (is_string($token)) {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugClassLoader.php b/core/vendor/symfony/class-loader/DebugClassLoader.php
similarity index 90%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugClassLoader.php
rename to core/vendor/symfony/class-loader/DebugClassLoader.php
index 897919b20ae2178836154e7d3638e2fc3e627974..351869928c247e90b529a6a1f7259ed83a953b9a 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugClassLoader.php
+++ b/core/vendor/symfony/class-loader/DebugClassLoader.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\ClassLoader;
 
+trigger_error('The '.__NAMESPACE__.'\DebugClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
+
 /**
  * Autoloader checking if the class is really defined in the file found.
  *
@@ -23,7 +25,8 @@
  *
  * @api
  *
- * @deprecated Deprecated since version 2.4, to be removed in 3.0. Use the DebugClassLoader provided by the Debug component instead.
+ * @deprecated since version 2.4, to be removed in 3.0.
+ *             Use {@link \Symfony\Component\Debug\DebugClassLoader} instead.
  */
 class DebugClassLoader
 {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugUniversalClassLoader.php b/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
similarity index 85%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugUniversalClassLoader.php
rename to core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
index 40d847c17858335ec640dd05de4e27913c1d4d42..2a102dbbf423b983e183cbea44504575ab769b8c 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/DebugUniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
@@ -11,12 +11,15 @@
 
 namespace Symfony\Component\ClassLoader;
 
+trigger_error('The '.__NAMESPACE__.'\DebugUniversalClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
+
 /**
  * Checks that the class is actually declared in the included file.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.4, to be removed in 3.0. Use the DebugClassLoader provided by the Debug component instead.
+ * @deprecated since version 2.4, to be removed in 3.0.
+ *             Use the {@link \Symfony\Component\Debug\DebugClassLoader} class instead.
  */
 class DebugUniversalClassLoader extends UniversalClassLoader
 {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/LICENSE b/core/vendor/symfony/class-loader/LICENSE
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/LICENSE
rename to core/vendor/symfony/class-loader/LICENSE
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/MapClassLoader.php b/core/vendor/symfony/class-loader/MapClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/MapClassLoader.php
rename to core/vendor/symfony/class-loader/MapClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Psr4ClassLoader.php b/core/vendor/symfony/class-loader/Psr4ClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Psr4ClassLoader.php
rename to core/vendor/symfony/class-loader/Psr4ClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/README.md b/core/vendor/symfony/class-loader/README.md
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/README.md
rename to core/vendor/symfony/class-loader/README.md
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore b/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php b/core/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php
rename to core/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/ClassLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php
rename to core/vendor/symfony/class-loader/Tests/ClassLoaderTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php b/core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php
rename to core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Namespaced/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Pearlike/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/Pearlike/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/ApcPrefixCollision/A/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/alpha/Apc/NamespaceCollision/A/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/ApcPrefixCollision/A/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/beta/Apc/NamespaceCollision/A/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/fallback/Apc/Pearlike/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/fallback/Apc/Pearlike/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/fallback/Apc/Pearlike/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/fallback/Apc/Pearlike/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/fallback/Namespaced/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Apc/fallback/Namespaced/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/fallback/Namespaced/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Apc/fallback/Namespaced/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/A.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/A.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/A.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/ATrait.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/ATrait.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/ATrait.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/ATrait.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/B.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/B.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/B.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/BTrait.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/BTrait.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/BTrait.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/BTrait.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/CInterface.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/CInterface.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/CInterface.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/CInterface.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/CTrait.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/CTrait.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/CTrait.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/CTrait.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/D.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/D.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/D.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/D.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/E.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/E.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/E.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/E.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/F.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/F.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/F.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/F.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/G.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/G.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/G.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/G.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/GInterface.php b/core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/GInterface.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/ClassesWithParents/GInterface.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/ClassesWithParents/GInterface.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithComments.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/WithComments.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithComments.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced/WithComments.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced2/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Namespaced2/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/WithComments.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/WithComments.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike/WithComments.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike/WithComments.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Baz.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Baz.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Baz.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Baz.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/Pearlike2/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/Pearlike2/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/A/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/A/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/A/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/A/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/A/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/A/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/A/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/A/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/C/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/C/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/C/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/C/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/C/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/C/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/NamespaceCollision/C/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/NamespaceCollision/C/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/A/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/A/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/A/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/A/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/A/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/A/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/A/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/A/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/C/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/C/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/C/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/C/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/C/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/C/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/alpha/PrefixCollision/C/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/alpha/PrefixCollision/C/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/A/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/A/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/A/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/A/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/A/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/A/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/A/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/A/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/C/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/C/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/C/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/C/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/C/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/C/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/NamespaceCollision/C/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/NamespaceCollision/C/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/A/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/A/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/A/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/A/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/A/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/A/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/A/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/A/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/C/B/Bar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/C/B/Bar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/C/B/Bar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/C/B/Bar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/C/B/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/C/B/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/beta/PrefixCollision/C/B/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/beta/PrefixCollision/C/B/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeClass.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeClass.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeClass.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeInterface.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeInterface.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeInterface.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeParent.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/SomeParent.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/SomeParent.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/multipleNs.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/multipleNs.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/multipleNs.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/notAClass.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/notAClass.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/notAClass.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/notAClass.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/notPhpFile.md b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/notPhpFile.md
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/notPhpFile.md
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/notPhpFile.md
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php b/core/vendor/symfony/class-loader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/classmap/sameNsMultipleClasses.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php b/core/vendor/symfony/class-loader/Tests/Fixtures/deps/traits.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/deps/traits.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/deps/traits.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Namespaced/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Namespaced/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Namespaced/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Namespaced/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Namespaced2/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Namespaced2/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Namespaced2/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Namespaced2/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Pearlike/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Pearlike/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Pearlike/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Pearlike/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Pearlike2/FooBar.php b/core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Pearlike2/FooBar.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/fallback/Pearlike2/FooBar.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/fallback/Pearlike2/FooBar.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/includepath/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/includepath/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/includepath/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/includepath/Foo.php
diff --git a/core/vendor/symfony/class-loader/Tests/Fixtures/php5.4/traits.php b/core/vendor/symfony/class-loader/Tests/Fixtures/php5.4/traits.php
new file mode 100644
index 0000000000000000000000000000000000000000..ccdadaf0518f44a9f2a91a0425f3776a7a941ac0
--- /dev/null
+++ b/core/vendor/symfony/class-loader/Tests/Fixtures/php5.4/traits.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace {
+    trait TFoo
+    {
+    }
+
+    class CFoo
+    {
+        use TFoo;
+    }
+}
+
+namespace Foo {
+    trait TBar
+    {
+    }
+
+    interface IBar
+    {
+    }
+
+    trait TFooBar
+    {
+    }
+
+    class CBar implements IBar
+    {
+        use TBar;
+        use TFooBar;
+    }
+}
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Class_With_Underscores.php b/core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Class_With_Underscores.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Class_With_Underscores.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Class_With_Underscores.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Class_With_Underscores.php b/core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Class_With_Underscores.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Class_With_Underscores.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Class_With_Underscores.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Foo.php b/core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Foo.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Foo.php
rename to core/vendor/symfony/class-loader/Tests/Fixtures/psr-4/Lets/Go/Deeper/Foo.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/LegacyApcUniversalClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/LegacyApcUniversalClassLoaderTest.php
rename to core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/LegacyUniversalClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/LegacyUniversalClassLoaderTest.php
rename to core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/Psr4ClassLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php
rename to core/vendor/symfony/class-loader/Tests/Psr4ClassLoaderTest.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php b/core/vendor/symfony/class-loader/UniversalClassLoader.php
similarity index 96%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php
rename to core/vendor/symfony/class-loader/UniversalClassLoader.php
index b664cab7cb3d2cc23a97a8a57fccc6c1a448ffcb..781d3a29a931b7b81263aa2afeb2cc2aa854fa35 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/UniversalClassLoader.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\ClassLoader;
 
+trigger_error('The '.__NAMESPACE__.'\UniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ClassLoader class instead.', E_USER_DEPRECATED);
+
 /**
  * UniversalClassLoader implements a "universal" autoloader for PHP 5.3.
  *
@@ -58,7 +60,8 @@
  *
  * @api
  *
- * @deprecated Deprecated since version 2.4, to be removed in 3.0. Use the ClassLoader class instead.
+ * @deprecated since version 2.4, to be removed in 3.0.
+ *             Use the {@link ClassLoader} class instead.
  */
 class UniversalClassLoader
 {
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/WinCacheClassLoader.php b/core/vendor/symfony/class-loader/WinCacheClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/WinCacheClassLoader.php
rename to core/vendor/symfony/class-loader/WinCacheClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/XcacheClassLoader.php b/core/vendor/symfony/class-loader/XcacheClassLoader.php
similarity index 100%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/XcacheClassLoader.php
rename to core/vendor/symfony/class-loader/XcacheClassLoader.php
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/composer.json b/core/vendor/symfony/class-loader/composer.json
similarity index 68%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/composer.json
rename to core/vendor/symfony/class-loader/composer.json
index 7599de34d9bb84a6dbb54e2e430d532cd6c4405a..6d011b508255499254eb3f54c8f7de05fef17b1f 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/composer.json
+++ b/core/vendor/symfony/class-loader/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony ClassLoader Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,24 +12,23 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "minimum-stability": "dev",
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
         "symfony/finder": "~2.0,>=2.0.5"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\ClassLoader\\": "" }
+        "psr-4": { "Symfony\\Component\\ClassLoader\\": "" }
     },
-    "target-dir": "Symfony/Component/ClassLoader",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/phpunit.xml.dist b/core/vendor/symfony/class-loader/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/phpunit.xml.dist
rename to core/vendor/symfony/class-loader/phpunit.xml.dist
index a1b6c82c10161cc643cb5c209fb34996bc60697e..4856db5be65d10493e2a3ab6c8eacc8dd1ddb59f 100644
--- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/phpunit.xml.dist
+++ b/core/vendor/symfony/class-loader/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony ClassLoader Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Application.php b/core/vendor/symfony/console/Application.php
similarity index 98%
rename from core/vendor/symfony/console/Symfony/Component/Console/Application.php
rename to core/vendor/symfony/console/Application.php
index 571682e13758fda5925018bfa318a4d2dc4510ae..11ac33378f712e264384a3d4efdb6188c4610ee4 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Application.php
+++ b/core/vendor/symfony/console/Application.php
@@ -624,10 +624,12 @@ public static function getAbbreviations($names)
      *
      * @return string A string representing the Application
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asText($namespace = null, $raw = false)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, !$raw);
         $descriptor->describe($output, $this, array('namespace' => $namespace, 'raw_output' => true));
@@ -643,10 +645,12 @@ public function asText($namespace = null, $raw = false)
      *
      * @return string|\DOMDocument An XML string representing the Application
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asXml($namespace = null, $asDom = false)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new XmlDescriptor();
 
         if ($asDom) {
@@ -950,9 +954,9 @@ protected function getDefaultHelperSet()
     {
         return new HelperSet(array(
             new FormatterHelper(),
-            new DialogHelper(),
-            new ProgressHelper(),
-            new TableHelper(),
+            new DialogHelper(false),
+            new ProgressHelper(false),
+            new TableHelper(false),
             new DebugFormatterHelper(),
             new ProcessHelper(),
             new QuestionHelper(),
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md b/core/vendor/symfony/console/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md
rename to core/vendor/symfony/console/CHANGELOG.md
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Command/Command.php b/core/vendor/symfony/console/Command/Command.php
similarity index 92%
rename from core/vendor/symfony/console/Symfony/Component/Console/Command/Command.php
rename to core/vendor/symfony/console/Command/Command.php
index 20dd85bf5f46b7c48f1c3b54da97df4f7d03734c..02e207eac775cc1ea1bee6d913473df1665c8c6c 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Command/Command.php
+++ b/core/vendor/symfony/console/Command/Command.php
@@ -42,7 +42,8 @@ class Command
     private $applicationDefinitionMerged = false;
     private $applicationDefinitionMergedWithArgs = false;
     private $code;
-    private $synopsis;
+    private $synopsis = array();
+    private $usages = array();
     private $helperSet;
 
     /**
@@ -219,7 +220,8 @@ protected function initialize(InputInterface $input, OutputInterface $output)
     public function run(InputInterface $input, OutputInterface $output)
     {
         // force the creation of the synopsis before the merge with the app definition
-        $this->getSynopsis();
+        $this->getSynopsis(true);
+        $this->getSynopsis(false);
 
         // add the application arguments and options
         $this->mergeApplicationDefinition();
@@ -577,15 +579,45 @@ public function getAliases()
     /**
      * Returns the synopsis for the command.
      *
+     * @param bool $short Whether to show the short version of the synopsis (with options folded) or not
+     *
      * @return string The synopsis
      */
-    public function getSynopsis()
+    public function getSynopsis($short = false)
+    {
+        $key = $short ? 'short' : 'long';
+
+        if (!isset($this->synopsis[$key])) {
+            $this->synopsis[$key] = trim(sprintf('%s %s', $this->name, $this->definition->getSynopsis($short)));
+        }
+
+        return $this->synopsis[$key];
+    }
+
+    /**
+     * Add a command usage example.
+     *
+     * @param string $usage The usage, it'll be prefixed with the command name
+     */
+    public function addUsage($usage)
     {
-        if (null === $this->synopsis) {
-            $this->synopsis = trim(sprintf('%s %s', $this->name, $this->definition->getSynopsis()));
+        if (0 !== strpos($usage, $this->name)) {
+            $usage = sprintf('%s %s', $this->name, $usage);
         }
 
-        return $this->synopsis;
+        $this->usages[] = $usage;
+
+        return $this;
+    }
+
+    /**
+     * Returns alternative usages of the command.
+     *
+     * @return array
+     */
+    public function getUsages()
+    {
+        return $this->usages;
     }
 
     /**
@@ -609,10 +641,12 @@ public function getHelper($name)
      *
      * @return string A string representing the command
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asText()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
         $descriptor->describe($output, $this, array('raw_output' => true));
@@ -627,10 +661,12 @@ public function asText()
      *
      * @return string|\DOMDocument An XML string representing the command
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asXml($asDom = false)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new XmlDescriptor();
 
         if ($asDom) {
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php b/core/vendor/symfony/console/Command/HelpCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php
rename to core/vendor/symfony/console/Command/HelpCommand.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php b/core/vendor/symfony/console/Command/ListCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php
rename to core/vendor/symfony/console/Command/ListCommand.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php b/core/vendor/symfony/console/ConsoleEvents.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php
rename to core/vendor/symfony/console/ConsoleEvents.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php b/core/vendor/symfony/console/Descriptor/ApplicationDescription.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php
rename to core/vendor/symfony/console/Descriptor/ApplicationDescription.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php b/core/vendor/symfony/console/Descriptor/Descriptor.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php
rename to core/vendor/symfony/console/Descriptor/Descriptor.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/DescriptorInterface.php b/core/vendor/symfony/console/Descriptor/DescriptorInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/DescriptorInterface.php
rename to core/vendor/symfony/console/Descriptor/DescriptorInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php b/core/vendor/symfony/console/Descriptor/JsonDescriptor.php
similarity index 94%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
rename to core/vendor/symfony/console/Descriptor/JsonDescriptor.php
index 13785a40fe615e463b27fd7b0eba0416c93c6863..8649d3ac456f393535bd8b84d858defc7afa2c7c 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
+++ b/core/vendor/symfony/console/Descriptor/JsonDescriptor.php
@@ -102,7 +102,7 @@ private function getInputArgumentData(InputArgument $argument)
             'name' => $argument->getName(),
             'is_required' => $argument->isRequired(),
             'is_array' => $argument->isArray(),
-            'description' => $argument->getDescription(),
+            'description' => preg_replace('/\s*\R\s*/', ' ', $argument->getDescription()),
             'default' => $argument->getDefault(),
         );
     }
@@ -120,7 +120,7 @@ private function getInputOptionData(InputOption $option)
             'accept_value' => $option->acceptValue(),
             'is_value_required' => $option->isValueRequired(),
             'is_multiple' => $option->isArray(),
-            'description' => $option->getDescription(),
+            'description' => preg_replace('/\s*\R\s*/', ' ', $option->getDescription()),
             'default' => $option->getDefault(),
         );
     }
@@ -157,10 +157,9 @@ private function getCommandData(Command $command)
 
         return array(
             'name' => $command->getName(),
-            'usage' => $command->getSynopsis(),
+            'usage' => array_merge(array($command->getSynopsis()), $command->getUsages(), $command->getAliases()),
             'description' => $command->getDescription(),
             'help' => $command->getProcessedHelp(),
-            'aliases' => $command->getAliases(),
             'definition' => $this->getInputDefinitionData($command->getNativeDefinition()),
         );
     }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php b/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php
similarity index 89%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
rename to core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php
index 78d48b9508be59dbda5b9edabf29e9cfd8237242..10f05168d47d017dafad10524892b3ce5922c738 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
+++ b/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php
@@ -36,7 +36,7 @@ protected function describeInputArgument(InputArgument $argument, array $options
             .'* Name: '.($argument->getName() ?: '<none>')."\n"
             .'* Is required: '.($argument->isRequired() ? 'yes' : 'no')."\n"
             .'* Is array: '.($argument->isArray() ? 'yes' : 'no')."\n"
-            .'* Description: '.($argument->getDescription() ?: '<none>')."\n"
+            .'* Description: '.preg_replace('/\s*\R\s*/', PHP_EOL.'  ', $argument->getDescription() ?: '<none>')."\n"
             .'* Default: `'.str_replace("\n", '', var_export($argument->getDefault(), true)).'`'
         );
     }
@@ -53,7 +53,7 @@ protected function describeInputOption(InputOption $option, array $options = arr
             .'* Accept value: '.($option->acceptValue() ? 'yes' : 'no')."\n"
             .'* Is value required: '.($option->isValueRequired() ? 'yes' : 'no')."\n"
             .'* Is multiple: '.($option->isArray() ? 'yes' : 'no')."\n"
-            .'* Description: '.($option->getDescription() ?: '<none>')."\n"
+            .'* Description: '.preg_replace('/\s*\R\s*/', PHP_EOL.'  ', $option->getDescription() ?: '<none>')."\n"
             .'* Default: `'.str_replace("\n", '', var_export($option->getDefault(), true)).'`'
         );
     }
@@ -96,12 +96,14 @@ protected function describeCommand(Command $command, array $options = array())
             $command->getName()."\n"
             .str_repeat('-', strlen($command->getName()))."\n\n"
             .'* Description: '.($command->getDescription() ?: '<none>')."\n"
-            .'* Usage: `'.$command->getSynopsis().'`'."\n"
-            .'* Aliases: '.(count($command->getAliases()) ? '`'.implode('`, `', $command->getAliases()).'`' : '<none>')
+            .'* Usage:'."\n\n"
+            .array_reduce(array_merge(array($command->getSynopsis()), $command->getAliases(), $command->getUsages()), function ($carry, $usage) {
+                return $carry .= '  * `'.$usage.'`'."\n";
+            })
         );
 
         if ($help = $command->getProcessedHelp()) {
-            $this->write("\n\n");
+            $this->write("\n");
             $this->write($help);
         }
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php b/core/vendor/symfony/console/Descriptor/TextDescriptor.php
similarity index 63%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
rename to core/vendor/symfony/console/Descriptor/TextDescriptor.php
index fcc4411b5e603ce3e50b5f8966a7c781a6befe21..0824463fce96baa01ed942933a5af6b0624c21e8 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
+++ b/core/vendor/symfony/console/Descriptor/TextDescriptor.php
@@ -32,16 +32,19 @@ class TextDescriptor extends Descriptor
     protected function describeInputArgument(InputArgument $argument, array $options = array())
     {
         if (null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) {
-            $default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($argument->getDefault()));
+            $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($argument->getDefault()));
         } else {
             $default = '';
         }
 
-        $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($argument->getName());
+        $totalWidth = isset($options['total_width']) ? $options['total_width'] : strlen($argument->getName());
+        $spacingWidth = $totalWidth - strlen($argument->getName()) + 2;
 
-        $this->writeText(sprintf(" <info>%-${nameWidth}s</info> %s%s",
+        $this->writeText(sprintf("  <info>%s</info>%s%s%s",
             $argument->getName(),
-            str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $argument->getDescription()),
+            str_repeat(' ', $spacingWidth),
+            // + 17 = 2 spaces + <info> + </info> + 2 spaces
+            preg_replace('/\s*\R\s*/', PHP_EOL.str_repeat(' ', $totalWidth + 17), $argument->getDescription()),
             $default
         ), $options);
     }
@@ -52,18 +55,33 @@ protected function describeInputArgument(InputArgument $argument, array $options
     protected function describeInputOption(InputOption $option, array $options = array())
     {
         if ($option->acceptValue() && null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) {
-            $default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($option->getDefault()));
+            $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($option->getDefault()));
         } else {
             $default = '';
         }
 
-        $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($option->getName());
-        $nameWithShortcutWidth = $nameWidth - strlen($option->getName()) - 2;
+        $value = '';
+        if ($option->acceptValue()) {
+            $value = '='.strtoupper($option->getName());
 
-        $this->writeText(sprintf(" <info>%s</info> %-${nameWithShortcutWidth}s%s%s%s",
-            '--'.$option->getName(),
-            $option->getShortcut() ? sprintf('(-%s) ', $option->getShortcut()) : '',
-            str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $option->getDescription()),
+            if ($option->isValueOptional()) {
+                $value = '['.$value.']';
+            }
+        }
+
+        $totalWidth = isset($options['total_width']) ? $options['total_width'] : $this->calculateTotalWidthForOptions(array($option));
+        $synopsis = sprintf('%s%s',
+            $option->getShortcut() ? sprintf('-%s, ', $option->getShortcut()) : '    ',
+            sprintf('--%s%s', $option->getName(), $value)
+        );
+
+        $spacingWidth = $totalWidth - strlen($synopsis) + 2;
+
+        $this->writeText(sprintf("  <info>%s</info>%s%s%s%s",
+            $synopsis,
+            str_repeat(' ', $spacingWidth),
+            // + 17 = 2 spaces + <info> + </info> + 2 spaces
+            preg_replace('/\s*\R\s*/', "\n".str_repeat(' ', $totalWidth + 17), $option->getDescription()),
             $default,
             $option->isArray() ? '<comment> (multiple values allowed)</comment>' : ''
         ), $options);
@@ -74,24 +92,16 @@ protected function describeInputOption(InputOption $option, array $options = arr
      */
     protected function describeInputDefinition(InputDefinition $definition, array $options = array())
     {
-        $nameWidth = 0;
-        foreach ($definition->getOptions() as $option) {
-            $nameLength = strlen($option->getName()) + 2;
-            if ($option->getShortcut()) {
-                $nameLength += strlen($option->getShortcut()) + 3;
-            }
-            $nameWidth = max($nameWidth, $nameLength);
-        }
+        $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions());
         foreach ($definition->getArguments() as $argument) {
-            $nameWidth = max($nameWidth, strlen($argument->getName()));
+            $totalWidth = max($totalWidth, strlen($argument->getName()));
         }
-        ++$nameWidth;
 
         if ($definition->getArguments()) {
             $this->writeText('<comment>Arguments:</comment>', $options);
             $this->writeText("\n");
             foreach ($definition->getArguments() as $argument) {
-                $this->describeInputArgument($argument, array_merge($options, array('name_width' => $nameWidth)));
+                $this->describeInputArgument($argument, array_merge($options, array('total_width' => $totalWidth)));
                 $this->writeText("\n");
             }
         }
@@ -101,11 +111,20 @@ protected function describeInputDefinition(InputDefinition $definition, array $o
         }
 
         if ($definition->getOptions()) {
+            $laterOptions = array();
+
             $this->writeText('<comment>Options:</comment>', $options);
-            $this->writeText("\n");
             foreach ($definition->getOptions() as $option) {
-                $this->describeInputOption($option, array_merge($options, array('name_width' => $nameWidth)));
+                if (strlen($option->getShortcut()) > 1) {
+                    $laterOptions[] = $option;
+                    continue;
+                }
                 $this->writeText("\n");
+                $this->describeInputOption($option, array_merge($options, array('total_width' => $totalWidth)));
+            }
+            foreach ($laterOptions as $option) {
+                $this->writeText("\n");
+                $this->describeInputOption($option, array_merge($options, array('total_width' => $totalWidth)));
             }
         }
     }
@@ -115,27 +134,26 @@ protected function describeInputDefinition(InputDefinition $definition, array $o
      */
     protected function describeCommand(Command $command, array $options = array())
     {
-        $command->getSynopsis();
+        $command->getSynopsis(true);
+        $command->getSynopsis(false);
         $command->mergeApplicationDefinition(false);
 
         $this->writeText('<comment>Usage:</comment>', $options);
-        $this->writeText("\n");
-        $this->writeText(' '.$command->getSynopsis(), $options);
-        $this->writeText("\n");
-
-        if (count($command->getAliases()) > 0) {
+        foreach (array_merge(array($command->getSynopsis(true)), $command->getAliases(), $command->getUsages()) as $usage) {
             $this->writeText("\n");
-            $this->writeText('<comment>Aliases:</comment> <info>'.implode(', ', $command->getAliases()).'</info>', $options);
+            $this->writeText('  '.$usage, $options);
         }
+        $this->writeText("\n");
 
-        if ($definition = $command->getNativeDefinition()) {
+        $definition = $command->getNativeDefinition();
+        if ($definition->getOptions() || $definition->getArguments()) {
             $this->writeText("\n");
             $this->describeInputDefinition($definition, $options);
+            $this->writeText("\n");
         }
 
-        $this->writeText("\n");
-
         if ($help = $command->getProcessedHelp()) {
+            $this->writeText("\n");
             $this->writeText('<comment>Help:</comment>', $options);
             $this->writeText("\n");
             $this->writeText(' '.str_replace("\n", "\n ", $help), $options);
@@ -164,27 +182,12 @@ protected function describeApplication(Application $application, array $options
             }
 
             $this->writeText("<comment>Usage:</comment>\n", $options);
-            $this->writeText(" command [options] [arguments]\n\n", $options);
-            $this->writeText('<comment>Options:</comment>', $options);
-
-            $inputOptions = $application->getDefinition()->getOptions();
-
-            $width = 0;
-            foreach ($inputOptions as $option) {
-                $nameLength = strlen($option->getName()) + 2;
-                if ($option->getShortcut()) {
-                    $nameLength += strlen($option->getShortcut()) + 3;
-                }
-                $width = max($width, $nameLength);
-            }
-            ++$width;
+            $this->writeText("  command [options] [arguments]\n\n", $options);
 
-            foreach ($inputOptions as $option) {
-                $this->writeText("\n", $options);
-                $this->describeInputOption($option, array_merge($options, array('name_width' => $width)));
-            }
+            $this->describeInputDefinition(new InputDefinition($application->getDefinition()->getOptions()), $options);
 
-            $this->writeText("\n\n", $options);
+            $this->writeText("\n");
+            $this->writeText("\n");
 
             $width = $this->getColumnWidth($description->getCommands());
 
@@ -198,12 +201,13 @@ protected function describeApplication(Application $application, array $options
             foreach ($description->getNamespaces() as $namespace) {
                 if (!$describedNamespace && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
                     $this->writeText("\n");
-                    $this->writeText('<comment>'.$namespace['id'].'</comment>', $options);
+                    $this->writeText(' <comment>'.$namespace['id'].'</comment>', $options);
                 }
 
                 foreach ($namespace['commands'] as $name) {
                     $this->writeText("\n");
-                    $this->writeText(sprintf(" <info>%-${width}s</info> %s", $name, $description->getCommand($name)->getDescription()), $options);
+                    $spacingWidth = $width - strlen($name);
+                    $this->writeText(sprintf("  <info>%s</info>%s%s", $name, str_repeat(' ', $spacingWidth), $description->getCommand($name)->getDescription()), $options);
                 }
             }
 
@@ -252,4 +256,27 @@ private function getColumnWidth(array $commands)
 
         return $width + 2;
     }
+
+    /**
+     * @param InputOption[] $options
+     *
+     * @return int
+     */
+    private function calculateTotalWidthForOptions($options)
+    {
+        $totalWidth = 0;
+        foreach ($options as $option) {
+            $nameLength = 4 + strlen($option->getName()) + 2; // - + shortcut + , + whitespace + name + --
+
+            if ($option->acceptValue()) {
+                $valueLength = 1 + strlen($option->getName()); // = + value
+                $valueLength += $option->isValueOptional() ? 2 : 0; // [ + ]
+
+                $nameLength += $valueLength;
+            }
+            $totalWidth = max($totalWidth, $nameLength);
+        }
+
+        return $totalWidth;
+    }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php b/core/vendor/symfony/console/Descriptor/XmlDescriptor.php
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
rename to core/vendor/symfony/console/Descriptor/XmlDescriptor.php
index 5054686697a236e8b9afe85fe6eff44555e1524d..b5676beb3766fcff81419c6ef36e9e7d6c99dcfe 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
+++ b/core/vendor/symfony/console/Descriptor/XmlDescriptor.php
@@ -65,8 +65,11 @@ public function getCommandDocument(Command $command)
         $commandXML->setAttribute('id', $command->getName());
         $commandXML->setAttribute('name', $command->getName());
 
-        $commandXML->appendChild($usageXML = $dom->createElement('usage'));
-        $usageXML->appendChild($dom->createTextNode(sprintf($command->getSynopsis(), '')));
+        $commandXML->appendChild($usagesXML = $dom->createElement('usages'));
+
+        foreach (array_merge(array($command->getSynopsis()), $command->getAliases(), $command->getUsages()) as $usage) {
+            $usagesXML->appendChild($dom->createElement('usage', $usage));
+        }
 
         $commandXML->appendChild($descriptionXML = $dom->createElement('description'));
         $descriptionXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getDescription())));
@@ -74,12 +77,6 @@ public function getCommandDocument(Command $command)
         $commandXML->appendChild($helpXML = $dom->createElement('help'));
         $helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp())));
 
-        $commandXML->appendChild($aliasesXML = $dom->createElement('aliases'));
-        foreach ($command->getAliases() as $alias) {
-            $aliasesXML->appendChild($aliasXML = $dom->createElement('alias'));
-            $aliasXML->appendChild($dom->createTextNode($alias));
-        }
-
         $definitionXML = $this->getInputDefinitionDocument($command->getNativeDefinition());
         $this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0));
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php b/core/vendor/symfony/console/Event/ConsoleCommandEvent.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php
rename to core/vendor/symfony/console/Event/ConsoleCommandEvent.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleEvent.php b/core/vendor/symfony/console/Event/ConsoleEvent.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleEvent.php
rename to core/vendor/symfony/console/Event/ConsoleEvent.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php b/core/vendor/symfony/console/Event/ConsoleExceptionEvent.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php
rename to core/vendor/symfony/console/Event/ConsoleExceptionEvent.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php b/core/vendor/symfony/console/Event/ConsoleTerminateEvent.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php
rename to core/vendor/symfony/console/Event/ConsoleTerminateEvent.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php b/core/vendor/symfony/console/Formatter/OutputFormatter.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php
rename to core/vendor/symfony/console/Formatter/OutputFormatter.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php b/core/vendor/symfony/console/Formatter/OutputFormatterInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php
rename to core/vendor/symfony/console/Formatter/OutputFormatterInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php
rename to core/vendor/symfony/console/Formatter/OutputFormatterStyle.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleInterface.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleInterface.php
rename to core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php
rename to core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/DebugFormatterHelper.php b/core/vendor/symfony/console/Helper/DebugFormatterHelper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/DebugFormatterHelper.php
rename to core/vendor/symfony/console/Helper/DebugFormatterHelper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php b/core/vendor/symfony/console/Helper/DescriptorHelper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php
rename to core/vendor/symfony/console/Helper/DescriptorHelper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php b/core/vendor/symfony/console/Helper/DialogHelper.php
similarity index 97%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
rename to core/vendor/symfony/console/Helper/DialogHelper.php
index 4b5c86d67d84569cd32e50dc44e7d886f4755070..ebac99c9e33437e4c8eb1a6b58e8a884d6743c00 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
+++ b/core/vendor/symfony/console/Helper/DialogHelper.php
@@ -19,8 +19,8 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in 3.0.
- *             Use the question helper instead.
+ * @deprecated since version 2.5, to be removed in 3.0.
+ *             Use {@link \Symfony\Component\Console\Helper\QuestionHelper} instead.
  */
 class DialogHelper extends InputAwareHelper
 {
@@ -28,6 +28,13 @@ class DialogHelper extends InputAwareHelper
     private static $shell;
     private static $stty;
 
+    public function __construct($triggerDeprecationError = true)
+    {
+        if ($triggerDeprecationError) {
+            trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
+        }
+    }
+
     /**
      * Asks the user to select a value.
      *
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/FormatterHelper.php b/core/vendor/symfony/console/Helper/FormatterHelper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/FormatterHelper.php
rename to core/vendor/symfony/console/Helper/FormatterHelper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php b/core/vendor/symfony/console/Helper/Helper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php
rename to core/vendor/symfony/console/Helper/Helper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/HelperInterface.php b/core/vendor/symfony/console/Helper/HelperInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/HelperInterface.php
rename to core/vendor/symfony/console/Helper/HelperInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php b/core/vendor/symfony/console/Helper/HelperSet.php
similarity index 73%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php
rename to core/vendor/symfony/console/Helper/HelperSet.php
index 467be86a85d75b31eb43b33c58a667d0b2689201..52a669d48542bf1f2f0e7143b972bef0d784b995 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php
+++ b/core/vendor/symfony/console/Helper/HelperSet.php
@@ -78,6 +78,14 @@ public function get($name)
             throw new \InvalidArgumentException(sprintf('The helper "%s" is not defined.', $name));
         }
 
+        if ('dialog' === $name && $this->helpers[$name] instanceof DialogHelper) {
+            trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
+        } elseif ('progress' === $name && $this->helpers[$name] instanceof ProgressHelper) {
+            trigger_error('"Symfony\Component\Console\Helper\ProgressHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\ProgressBar" instead.', E_USER_DEPRECATED);
+        } elseif ('table' === $name && $this->helpers[$name] instanceof TableHelper) {
+            trigger_error('"Symfony\Component\Console\Helper\TableHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\Table" instead.', E_USER_DEPRECATED);
+        }
+
         return $this->helpers[$name];
     }
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/InputAwareHelper.php b/core/vendor/symfony/console/Helper/InputAwareHelper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/InputAwareHelper.php
rename to core/vendor/symfony/console/Helper/InputAwareHelper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php b/core/vendor/symfony/console/Helper/ProcessHelper.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php
rename to core/vendor/symfony/console/Helper/ProcessHelper.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php b/core/vendor/symfony/console/Helper/ProgressBar.php
similarity index 96%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php
rename to core/vendor/symfony/console/Helper/ProgressBar.php
index 893664e412f54b73d8979df4db9c15a343980ac2..ae1fdae88259d4b6b6917385eda0b2fc83991939 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php
+++ b/core/vendor/symfony/console/Helper/ProgressBar.php
@@ -171,12 +171,14 @@ public function getMaxSteps()
     /**
      * Gets the progress bar step.
      *
-     * @deprecated since 2.6, to be removed in 3.0. Use {@link getProgress()} instead.
+     * @deprecated since version 2.6, to be removed in 3.0. Use {@link getProgress()} instead.
      *
      * @return int The progress bar step
      */
     public function getStep()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getProgress() method instead.', E_USER_DEPRECATED);
+
         return $this->getProgress();
     }
 
@@ -358,7 +360,7 @@ public function advance($step = 1)
     /**
      * Sets the current progress.
      *
-     * @deprecated since 2.6, to be removed in 3.0. Use {@link setProgress()} instead.
+     * @deprecated since version 2.6, to be removed in 3.0. Use {@link setProgress()} instead.
      *
      * @param int $step The current progress
      *
@@ -366,6 +368,8 @@ public function advance($step = 1)
      */
     public function setCurrent($step)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setProgress() method instead.', E_USER_DEPRECATED);
+
         $this->setProgress($step);
     }
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php b/core/vendor/symfony/console/Helper/ProgressHelper.php
similarity index 96%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php
rename to core/vendor/symfony/console/Helper/ProgressHelper.php
index b82486dde45881e6600d228eed6728af42877c27..fe67e9d026851db56733c7e80893278df394324a 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php
+++ b/core/vendor/symfony/console/Helper/ProgressHelper.php
@@ -20,7 +20,8 @@
  * @author Chris Jones <leeked@gmail.com>
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since 2.5, to be removed in 3.0; use ProgressBar instead.
+ * @deprecated since version 2.5, to be removed in 3.0
+ *             Use {@link ProgressBar} instead.
  */
 class ProgressHelper extends Helper
 {
@@ -117,6 +118,13 @@ class ProgressHelper extends Helper
         array(604800, 'days', 86400),
     );
 
+    public function __construct($triggerDeprecationError = true)
+    {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\ProgressBar class instead.', E_USER_DEPRECATED);
+        }
+    }
+
     /**
      * Sets the progress bar width.
      *
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php b/core/vendor/symfony/console/Helper/QuestionHelper.php
similarity index 93%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php
rename to core/vendor/symfony/console/Helper/QuestionHelper.php
index caa091492c540cac513d0ac0b00f8266d49db0c0..9e4fa02f2c61512ed4a0213db8ff4aee0372691e 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php
+++ b/core/vendor/symfony/console/Helper/QuestionHelper.php
@@ -109,25 +109,11 @@ public function getName()
      */
     public function doAsk(OutputInterface $output, Question $question)
     {
-        $inputStream = $this->inputStream ?: STDIN;
-
-        $message = $question->getQuestion();
-        if ($question instanceof ChoiceQuestion) {
-            $width = max(array_map('strlen', array_keys($question->getChoices())));
-
-            $messages = (array) $question->getQuestion();
-            foreach ($question->getChoices() as $key => $value) {
-                $messages[] = sprintf("  [<info>%-${width}s</info>] %s", $key, $value);
-            }
-
-            $output->writeln($messages);
-
-            $message = $question->getPrompt();
-        }
-
-        $output->write($message);
+        $this->writePrompt($output, $question);
 
+        $inputStream = $this->inputStream ?: STDIN;
         $autocomplete = $question->getAutocompleterValues();
+
         if (null === $autocomplete || !$this->hasSttyAvailable()) {
             $ret = false;
             if ($question->isHidden()) {
@@ -160,6 +146,49 @@ public function doAsk(OutputInterface $output, Question $question)
         return $ret;
     }
 
+    /**
+     * Outputs the question prompt.
+     *
+     * @param OutputInterface $output
+     * @param Question $question
+     */
+    protected function writePrompt(OutputInterface $output, Question $question)
+    {
+        $message = $question->getQuestion();
+
+        if ($question instanceof ChoiceQuestion) {
+            $width = max(array_map('strlen', array_keys($question->getChoices())));
+
+            $messages = (array) $question->getQuestion();
+            foreach ($question->getChoices() as $key => $value) {
+                $messages[] = sprintf("  [<info>%-${width}s</info>] %s", $key, $value);
+            }
+
+            $output->writeln($messages);
+
+            $message = $question->getPrompt();
+        }
+
+        $output->write($message);
+    }
+
+    /**
+     * Outputs an error message.
+     *
+     * @param OutputInterface $output
+     * @param \Exception      $error
+     */
+    protected function writeError(OutputInterface $output, \Exception $error)
+    {
+        if (null !== $this->getHelperSet() && $this->getHelperSet()->has('formatter')) {
+            $message = $this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error');
+        } else {
+            $message = '<error>'.$error->getMessage().'</error>';
+        }
+
+        $output->writeln($message);
+    }
+
     /**
      * Autocompletes a question.
      *
@@ -355,13 +384,7 @@ private function validateAttempts($interviewer, OutputInterface $output, Questio
         $attempts = $question->getMaxAttempts();
         while (null === $attempts || $attempts--) {
             if (null !== $error) {
-                if (null !== $this->getHelperSet() && $this->getHelperSet()->has('formatter')) {
-                    $message = $this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error');
-                } else {
-                    $message = '<error>'.$error->getMessage().'</error>';
-                }
-
-                $output->writeln($message);
+                $this->writeError($output, $error);
             }
 
             try {
diff --git a/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php
new file mode 100644
index 0000000000000000000000000000000000000000..77130f9776ac2ca2ffbb2597d6b9c2c67d940eaa
--- /dev/null
+++ b/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php
@@ -0,0 +1,106 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ChoiceQuestion;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+use Symfony\Component\Console\Question\Question;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+/**
+ * Symfony Style Guide compliant question helper.
+ *
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+class SymfonyQuestionHelper extends QuestionHelper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function ask(InputInterface $input, OutputInterface $output, Question $question)
+    {
+        $validator = $question->getValidator();
+        $question->setValidator(function ($value) use ($validator) {
+            if (null !== $validator && is_callable($validator)) {
+                $value = $validator($value);
+            }
+
+            // make required
+            if (!is_array($value) && !is_bool($value) && 0 === strlen($value)) {
+                throw new \Exception('A value is required.');
+            }
+
+            return $value;
+        });
+
+        return parent::ask($input, $output, $question);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function writePrompt(OutputInterface $output, Question $question)
+    {
+        $text = $question->getQuestion();
+        $default = $question->getDefault();
+
+        switch (true) {
+            case null === $default:
+                $text = sprintf(' <info>%s</info>:', $text);
+
+                break;
+
+            case $question instanceof ConfirmationQuestion:
+                $text = sprintf(' <info>%s (yes/no)</info> [<comment>%s</comment>]:', $text, $default ? 'yes' : 'no');
+
+                break;
+
+            case $question instanceof ChoiceQuestion:
+                $choices = $question->getChoices();
+                $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, $choices[$default]);
+
+                break;
+
+            default:
+                $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, $default);
+        }
+
+        $output->writeln($text);
+
+        if ($question instanceof ChoiceQuestion) {
+            $width = max(array_map('strlen', array_keys($question->getChoices())));
+
+            foreach ($question->getChoices() as $key => $value) {
+                $output->writeln(sprintf("  [<comment>%-${width}s</comment>] %s", $key, $value));
+            }
+        }
+
+        $output->write(' > ');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function writeError(OutputInterface $output, \Exception $error)
+    {
+        if ($output instanceof SymfonyStyle) {
+            $output->newLine();
+            $output->error($error->getMessage());
+
+            return;
+        }
+
+        parent::writeError($output, $error);
+    }
+}
diff --git a/core/vendor/symfony/console/Helper/Table.php b/core/vendor/symfony/console/Helper/Table.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff668a475e8cc3e568ea4473b4fec1a202985b4d
--- /dev/null
+++ b/core/vendor/symfony/console/Helper/Table.php
@@ -0,0 +1,605 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Provides helpers to display a table.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Саша Стаменковић <umpirsky@gmail.com>
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+class Table
+{
+    /**
+     * Table headers.
+     *
+     * @var array
+     */
+    private $headers = array();
+
+    /**
+     * Table rows.
+     *
+     * @var array
+     */
+    private $rows = array();
+
+    /**
+     * Column widths cache.
+     *
+     * @var array
+     */
+    private $columnWidths = array();
+
+    /**
+     * Number of columns cache.
+     *
+     * @var array
+     */
+    private $numberOfColumns;
+
+    /**
+     * @var OutputInterface
+     */
+    private $output;
+
+    /**
+     * @var TableStyle
+     */
+    private $style;
+
+    private static $styles;
+
+    public function __construct(OutputInterface $output)
+    {
+        $this->output = $output;
+
+        if (!self::$styles) {
+            self::$styles = self::initStyles();
+        }
+
+        $this->setStyle('default');
+    }
+
+    /**
+     * Sets a style definition.
+     *
+     * @param string     $name  The style name
+     * @param TableStyle $style A TableStyle instance
+     */
+    public static function setStyleDefinition($name, TableStyle $style)
+    {
+        if (!self::$styles) {
+            self::$styles = self::initStyles();
+        }
+
+        self::$styles[$name] = $style;
+    }
+
+    /**
+     * Gets a style definition by name.
+     *
+     * @param string $name The style name
+     *
+     * @return TableStyle A TableStyle instance
+     */
+    public static function getStyleDefinition($name)
+    {
+        if (!self::$styles) {
+            self::$styles = self::initStyles();
+        }
+
+        if (!self::$styles[$name]) {
+            throw new \InvalidArgumentException(sprintf('Style "%s" is not defined.', $name));
+        }
+
+        return self::$styles[$name];
+    }
+
+    /**
+     * Sets table style.
+     *
+     * @param TableStyle|string $name The style name or a TableStyle instance
+     *
+     * @return Table
+     */
+    public function setStyle($name)
+    {
+        if ($name instanceof TableStyle) {
+            $this->style = $name;
+        } elseif (isset(self::$styles[$name])) {
+            $this->style = self::$styles[$name];
+        } else {
+            throw new \InvalidArgumentException(sprintf('Style "%s" is not defined.', $name));
+        }
+
+        return $this;
+    }
+
+    /**
+     * Gets the current table style.
+     *
+     * @return TableStyle
+     */
+    public function getStyle()
+    {
+        return $this->style;
+    }
+
+    public function setHeaders(array $headers)
+    {
+        $headers = array_values($headers);
+        if (!empty($headers) && !is_array($headers[0])) {
+            $headers = array($headers);
+        }
+
+        $this->headers = $headers;
+
+        return $this;
+    }
+
+    public function setRows(array $rows)
+    {
+        $this->rows = array();
+
+        return $this->addRows($rows);
+    }
+
+    public function addRows(array $rows)
+    {
+        foreach ($rows as $row) {
+            $this->addRow($row);
+        }
+
+        return $this;
+    }
+
+    public function addRow($row)
+    {
+        if ($row instanceof TableSeparator) {
+            $this->rows[] = $row;
+
+            return;
+        }
+
+        if (!is_array($row)) {
+            throw new \InvalidArgumentException('A row must be an array or a TableSeparator instance.');
+        }
+
+        $this->rows[] = array_values($row);
+
+        return $this;
+    }
+
+    public function setRow($column, array $row)
+    {
+        $this->rows[$column] = $row;
+
+        return $this;
+    }
+
+    /**
+     * Renders table to output.
+     *
+     * Example:
+     * +---------------+-----------------------+------------------+
+     * | ISBN          | Title                 | Author           |
+     * +---------------+-----------------------+------------------+
+     * | 99921-58-10-7 | Divine Comedy         | Dante Alighieri  |
+     * | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
+     * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
+     * +---------------+-----------------------+------------------+
+     */
+    public function render()
+    {
+        $this->calculateNumberOfColumns();
+        $this->rows = $this->buildTableRows($this->rows);
+        $this->headers = $this->buildTableRows($this->headers);
+
+        $this->renderRowSeparator();
+        if (!empty($this->headers)) {
+            foreach ($this->headers as $header) {
+                $this->renderRow($header, $this->style->getCellHeaderFormat());
+                $this->renderRowSeparator();
+            }
+        }
+        foreach ($this->rows as $row) {
+            if ($row instanceof TableSeparator) {
+                $this->renderRowSeparator();
+            } else {
+                $this->renderRow($row, $this->style->getCellRowFormat());
+            }
+        }
+        if (!empty($this->rows)) {
+            $this->renderRowSeparator();
+        }
+
+        $this->cleanup();
+    }
+
+    /**
+     * Renders horizontal header separator.
+     *
+     * Example: +-----+-----------+-------+
+     */
+    private function renderRowSeparator()
+    {
+        if (0 === $count = $this->numberOfColumns) {
+            return;
+        }
+
+        if (!$this->style->getHorizontalBorderChar() && !$this->style->getCrossingChar()) {
+            return;
+        }
+
+        $markup = $this->style->getCrossingChar();
+        for ($column = 0; $column < $count; $column++) {
+            $markup .= str_repeat($this->style->getHorizontalBorderChar(), $this->getColumnWidth($column)).$this->style->getCrossingChar();
+        }
+
+        $this->output->writeln(sprintf($this->style->getBorderFormat(), $markup));
+    }
+
+    /**
+     * Renders vertical column separator.
+     */
+    private function renderColumnSeparator()
+    {
+        $this->output->write(sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar()));
+    }
+
+    /**
+     * Renders table row.
+     *
+     * Example: | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
+     *
+     * @param array  $row
+     * @param string $cellFormat
+     */
+    private function renderRow(array $row, $cellFormat)
+    {
+        if (empty($row)) {
+            return;
+        }
+
+        $this->renderColumnSeparator();
+        foreach ($this->getRowColumns($row) as $column) {
+            $this->renderCell($row, $column, $cellFormat);
+            $this->renderColumnSeparator();
+        }
+        $this->output->writeln('');
+    }
+
+    /**
+     * Renders table cell with padding.
+     *
+     * @param array  $row
+     * @param int    $column
+     * @param string $cellFormat
+     */
+    private function renderCell(array $row, $column, $cellFormat)
+    {
+        $cell = isset($row[$column]) ? $row[$column] : '';
+        $width = $this->getColumnWidth($column);
+        if ($cell instanceof TableCell && $cell->getColspan() > 1) {
+            // add the width of the following columns(numbers of colspan).
+            foreach (range($column + 1, $column + $cell->getColspan() - 1) as $nextColumn) {
+                $width += $this->getColumnSeparatorWidth() + $this->getColumnWidth($nextColumn);
+            }
+        }
+
+        // str_pad won't work properly with multi-byte strings, we need to fix the padding
+        if (function_exists('mb_strwidth') && false !== $encoding = mb_detect_encoding($cell)) {
+            $width += strlen($cell) - mb_strwidth($cell, $encoding);
+        }
+
+        if ($cell instanceof TableSeparator) {
+            $this->output->write(sprintf($this->style->getBorderFormat(), str_repeat($this->style->getHorizontalBorderChar(), $width)));
+        } else {
+            $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
+            $content = sprintf($this->style->getCellRowContentFormat(), $cell);
+            $this->output->write(sprintf($cellFormat, str_pad($content, $width, $this->style->getPaddingChar(), $this->style->getPadType())));
+        }
+    }
+
+    /**
+     * Calculate number of columns for this table.
+     */
+    private function calculateNumberOfColumns()
+    {
+        if (null !== $this->numberOfColumns) {
+            return;
+        }
+
+        $columns = array(0);
+        foreach (array_merge($this->headers, $this->rows) as $row) {
+            if ($row instanceof TableSeparator) {
+                continue;
+            }
+
+            $columns[] = $this->getNumberOfColumns($row);
+        }
+
+        return $this->numberOfColumns = max($columns);
+    }
+
+    private function buildTableRows($rows)
+    {
+        $unmergedRows = array();
+        for ($rowKey = 0; $rowKey < count($rows); $rowKey++) {
+            $rows = $this->fillNextRows($rows, $rowKey);
+
+            // Remove any new line breaks and replace it with a new line
+            foreach ($rows[$rowKey] as $column => $cell) {
+                $rows[$rowKey] = $this->fillCells($rows[$rowKey], $column);
+                if (!strstr($cell, "\n")) {
+                    continue;
+                }
+                $lines = explode("\n", $cell);
+                foreach ($lines as $lineKey => $line) {
+                    if ($cell instanceof TableCell) {
+                        $line = new TableCell($line, array('colspan' => $cell->getColspan()));
+                    }
+                    if (0 === $lineKey) {
+                        $rows[$rowKey][$column] = $line;
+                    } else {
+                        $unmergedRows[$rowKey][$lineKey][$column] = $line;
+                    }
+                }
+            }
+        }
+
+        $tableRows = array();
+        foreach ($rows as $rowKey => $row) {
+            $tableRows[] = $row;
+            if (isset($unmergedRows[$rowKey])) {
+                $tableRows = array_merge($tableRows, $unmergedRows[$rowKey]);
+            }
+        }
+
+        return $tableRows;
+    }
+
+    /**
+     * fill rows that contains rowspan > 1.
+     *
+     * @param array $rows
+     * @param array $line
+     *
+     * @return array
+     */
+    private function fillNextRows($rows, $line)
+    {
+        $unmergedRows = array();
+        foreach ($rows[$line] as $column => $cell) {
+            if ($cell instanceof TableCell && $cell->getRowspan() > 1) {
+                $nbLines = $cell->getRowspan()-1;
+                $lines = array($cell);
+                if (strstr($cell, "\n")) {
+                    $lines = explode("\n", $cell);
+                    $nbLines = count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines;
+
+                    $rows[$line][$column] = new TableCell($lines[0], array('colspan' => $cell->getColspan()));
+                    unset($lines[0]);
+                }
+
+                // create a two dimensional array (rowspan x colspan)
+                $unmergedRows = array_replace_recursive(array_fill($line + 1, $nbLines, ''), $unmergedRows);
+                foreach ($unmergedRows as $unmergedRowKey => $unmergedRow) {
+                    $value = isset($lines[$unmergedRowKey - $line]) ? $lines[$unmergedRowKey - $line] : '';
+                    $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, array('colspan' => $cell->getColspan()));
+                }
+            }
+        }
+
+        foreach ($unmergedRows as $unmergedRowKey => $unmergedRow) {
+            // we need to know if $unmergedRow will be merged or inserted into $rows
+            if (isset($rows[$unmergedRowKey]) && is_array($rows[$unmergedRowKey]) && ($this->getNumberOfColumns($rows[$unmergedRowKey]) + $this->getNumberOfColumns($unmergedRows[$unmergedRowKey]) <= $this->numberOfColumns)) {
+                foreach ($unmergedRow as $cellKey => $cell) {
+                    // insert cell into row at cellKey position
+                    array_splice($rows[$unmergedRowKey], $cellKey, 0, array($cell));
+                }
+            } else {
+                $row = $this->copyRow($rows, $unmergedRowKey-1);
+                foreach ($unmergedRow as $column => $cell) {
+                    if (!empty($cell)) {
+                        $row[$column] = $unmergedRow[$column];
+                    }
+                }
+                array_splice($rows, $unmergedRowKey, 0, array($row));
+            }
+        }
+
+        return $rows;
+    }
+
+    /**
+     * fill cells for a row that contains colspan > 1.
+     *
+     * @param array $row
+     * @param array $column
+     *
+     * @return array
+     */
+    private function fillCells($row, $column)
+    {
+        $cell = $row[$column];
+        if ($cell instanceof TableCell && $cell->getColspan() > 1) {
+            foreach (range($column + 1, $column + $cell->getColspan() - 1) as $position) {
+                // insert empty value into rows at column position
+                array_splice($row, $position, 0, '');
+            }
+        }
+
+        return $row;
+    }
+
+    /**
+     * @param array $rows
+     * @param int   $line
+     *
+     * @return array
+     */
+    private function copyRow($rows, $line)
+    {
+        $row = $rows[$line];
+        foreach ($row as $cellKey => $cellValue) {
+            $row[$cellKey] = '';
+            if ($cellValue instanceof TableCell) {
+                $row[$cellKey] = new TableCell('', array('colspan' => $cellValue->getColspan()));
+            }
+        }
+
+        return $row;
+    }
+
+    /**
+     * Gets number of columns by row.
+     *
+     * @param array $row
+     *
+     * @return int
+     */
+    private function getNumberOfColumns(array $row)
+    {
+        $columns = count($row);
+        foreach ($row as $column) {
+            $columns += $column instanceof TableCell ? ($column->getColspan()-1) : 0;
+        }
+
+        return $columns;
+    }
+
+    /**
+     * Gets list of columns for the given row.
+     *
+     * @param array $row
+     *
+     * @return array()
+     */
+    private function getRowColumns($row)
+    {
+        $columns = range(0, $this->numberOfColumns-1);
+        foreach ($row as $cellKey => $cell) {
+            if ($cell instanceof TableCell && $cell->getColspan() > 1) {
+                // exclude grouped columns.
+                $columns = array_diff($columns, range($cellKey+1, $cellKey + $cell->getColspan()-1));
+            }
+        }
+
+        return $columns;
+    }
+
+    /**
+     * Gets column width.
+     *
+     * @param int $column
+     *
+     * @return int
+     */
+    private function getColumnWidth($column)
+    {
+        if (isset($this->columnWidths[$column])) {
+            return $this->columnWidths[$column];
+        }
+
+        foreach (array_merge($this->headers, $this->rows) as $row) {
+            if ($row instanceof TableSeparator) {
+                continue;
+            }
+
+            $lengths[] = $this->getCellWidth($row, $column);
+        }
+
+        return $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
+    }
+
+    /**
+     * Gets column width.
+     *
+     * @param int $column
+     *
+     * @return int
+     */
+    private function getColumnSeparatorWidth()
+    {
+        return strlen(sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar()));
+    }
+
+    /**
+     * Gets cell width.
+     *
+     * @param array $row
+     * @param int   $column
+     *
+     * @return int
+     */
+    private function getCellWidth(array $row, $column)
+    {
+        if (isset($row[$column])) {
+            $cell = $row[$column];
+            if ($cell instanceof TableCell && $cell->getColspan() > 1) {
+                // we assume that cell value will be across more than one column.
+                $cell = substr($cell, 0, strlen($cell)/$cell->getColspan());
+            }
+
+            return Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
+        }
+
+        return 0;
+    }
+
+    /**
+     * Called after rendering to cleanup cache data.
+     */
+    private function cleanup()
+    {
+        $this->columnWidths = array();
+        $this->numberOfColumns = null;
+    }
+
+    private static function initStyles()
+    {
+        $borderless = new TableStyle();
+        $borderless
+            ->setHorizontalBorderChar('=')
+            ->setVerticalBorderChar(' ')
+            ->setCrossingChar(' ')
+        ;
+
+        $compact = new TableStyle();
+        $compact
+            ->setHorizontalBorderChar('')
+            ->setVerticalBorderChar(' ')
+            ->setCrossingChar('')
+            ->setCellRowContentFormat('%s')
+        ;
+
+        $styleGuide = new TableStyle();
+        $styleGuide
+            ->setHorizontalBorderChar('-')
+            ->setVerticalBorderChar(' ')
+            ->setCrossingChar(' ')
+            ->setCellHeaderFormat('%s')
+        ;
+
+        return array(
+            'default' => new TableStyle(),
+            'borderless' => $borderless,
+            'compact' => $compact,
+            'symfony-style-guide' => $styleGuide,
+        );
+    }
+}
diff --git a/core/vendor/symfony/console/Helper/TableCell.php b/core/vendor/symfony/console/Helper/TableCell.php
new file mode 100644
index 0000000000000000000000000000000000000000..aa0d3180799ff96ab9b4813e4337e908fd23f03f
--- /dev/null
+++ b/core/vendor/symfony/console/Helper/TableCell.php
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+/**
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+class TableCell
+{
+    /**
+     * @var string
+     */
+    private $value;
+
+    /**
+     * @var array
+     */
+    private $options = array(
+        'rowspan' => 1,
+        'colspan' => 1,
+    );
+
+    /**
+     * @param string $value
+     * @param array  $options
+     */
+    public function __construct($value = '', array $options = array())
+    {
+        $this->value = $value;
+
+        // check option names
+        if ($diff = array_diff(array_keys($options), array_keys($this->options))) {
+            throw new \InvalidArgumentException(sprintf('The TableCell does not support the following options: \'%s\'.', implode('\', \'', $diff)));
+        }
+
+        $this->options = array_merge($this->options, $options);
+    }
+
+    /**
+     * Returns the cell value.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Gets number of colspan.
+     *
+     * @return int
+     */
+    public function getColspan()
+    {
+        return (int) $this->options['colspan'];
+    }
+
+    /**
+     * Gets number of rowspan.
+     *
+     * @return int
+     */
+    public function getRowspan()
+    {
+        return (int) $this->options['rowspan'];
+    }
+}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php b/core/vendor/symfony/console/Helper/TableHelper.php
similarity index 93%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php
rename to core/vendor/symfony/console/Helper/TableHelper.php
index fc6861cf35ede26ebe2c3a2cdc0d0b39bf71044d..06af5fad9b649a68407969acc79cdae1a96d5742 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php
+++ b/core/vendor/symfony/console/Helper/TableHelper.php
@@ -20,7 +20,8 @@
  * @author Саша Стаменковић <umpirsky@gmail.com>
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since 2.5, to be removed in 3.0; use Table instead.
+ * @deprecated since version 2.5, to be removed in 3.0
+ *             Use {@link Table} instead.
  */
 class TableHelper extends Helper
 {
@@ -33,8 +34,12 @@ class TableHelper extends Helper
      */
     private $table;
 
-    public function __construct()
+    public function __construct($triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\Table class instead.', E_USER_DEPRECATED);
+        }
+
         $this->table = new Table(new NullOutput());
     }
 
diff --git a/core/vendor/symfony/console/Helper/TableSeparator.php b/core/vendor/symfony/console/Helper/TableSeparator.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cbbc6613be361c83aa0f448670f439189feb963
--- /dev/null
+++ b/core/vendor/symfony/console/Helper/TableSeparator.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+/**
+ * Marks a row as being a separator.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class TableSeparator extends TableCell
+{
+    /**
+     * @param string $value
+     * @param array  $options
+     */
+    public function __construct(array $options = array())
+    {
+        parent::__construct('', $options);
+    }
+}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php b/core/vendor/symfony/console/Helper/TableStyle.php
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php
rename to core/vendor/symfony/console/Helper/TableStyle.php
index 580f9abc819dc6654ba4633a4050c1555d414f33..f0f46c71e313b63c9aa3c3c76e866f112166e955 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php
+++ b/core/vendor/symfony/console/Helper/TableStyle.php
@@ -234,6 +234,10 @@ public function getBorderFormat()
      */
     public function setPadType($padType)
     {
+        if (!in_array($padType, array(STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH), true)) {
+            throw new \InvalidArgumentException('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).');
+        }
+
         $this->padType = $padType;
 
         return $this;
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php b/core/vendor/symfony/console/Input/ArgvInput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php
rename to core/vendor/symfony/console/Input/ArgvInput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php b/core/vendor/symfony/console/Input/ArrayInput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php
rename to core/vendor/symfony/console/Input/ArrayInput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/Input.php b/core/vendor/symfony/console/Input/Input.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/Input.php
rename to core/vendor/symfony/console/Input/Input.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php b/core/vendor/symfony/console/Input/InputArgument.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php
rename to core/vendor/symfony/console/Input/InputArgument.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputAwareInterface.php b/core/vendor/symfony/console/Input/InputAwareInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/InputAwareInterface.php
rename to core/vendor/symfony/console/Input/InputAwareInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php b/core/vendor/symfony/console/Input/InputDefinition.php
similarity index 87%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php
rename to core/vendor/symfony/console/Input/InputDefinition.php
index 48edb166c3b528cc09e6cc90db00ad6b2cb8e0f1..7efb849ab2470a2a43b5542200030c702acab192 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php
+++ b/core/vendor/symfony/console/Input/InputDefinition.php
@@ -391,22 +391,50 @@ private function shortcutToName($shortcut)
     /**
      * Gets the synopsis.
      *
+     * @param bool $short Whether to return the short version (with options foloded) or not
+     *
      * @return string The synopsis
      */
-    public function getSynopsis()
+    public function getSynopsis($short = false)
     {
         $elements = array();
-        foreach ($this->getOptions() as $option) {
-            $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : '';
-            $elements[] = sprintf('['.($option->isValueRequired() ? '%s--%s="..."' : ($option->isValueOptional() ? '%s--%s[="..."]' : '%s--%s')).']', $shortcut, $option->getName());
+
+        if ($short && $this->getOptions()) {
+            $elements[] = '[options]';
+        } elseif (!$short) {
+            foreach ($this->getOptions() as $option) {
+                $value = '';
+                if ($option->acceptValue()) {
+                    $value = sprintf(
+                        ' %s%s%s',
+                        $option->isValueOptional() ? '[' : '',
+                        strtoupper($option->getName()),
+                        $option->isValueOptional() ? ']' : ''
+                    );
+                }
+
+                $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : '';
+                $elements[] = sprintf('[%s--%s%s]', $shortcut, $option->getName(), $value);
+            }
+        }
+
+        if (count($elements) && $this->getArguments()) {
+            $elements[] = '[--]';
         }
 
         foreach ($this->getArguments() as $argument) {
-            $elements[] = sprintf($argument->isRequired() ? '%s' : '[%s]', $argument->getName().($argument->isArray() ? '1' : ''));
+            $element = '<'.$argument->getName().'>';
+            if (!$argument->isRequired()) {
+                $element = '['.$element.']';
+            } elseif ($argument->isArray()) {
+                $element = $element.' ('.$element.')';
+            }
 
             if ($argument->isArray()) {
-                $elements[] = sprintf('... [%sN]', $argument->getName());
+                $element .= '...';
             }
+
+            $elements[] = $element;
         }
 
         return implode(' ', $elements);
@@ -417,10 +445,12 @@ public function getSynopsis()
      *
      * @return string A string representing the InputDefinition
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asText()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
         $descriptor->describe($output, $this, array('raw_output' => true));
@@ -435,10 +465,12 @@ public function asText()
      *
      * @return string|\DOMDocument An XML string representing the InputDefinition
      *
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0.
+     * @deprecated since version 2.3, to be removed in 3.0.
      */
     public function asXml($asDom = false)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $descriptor = new XmlDescriptor();
 
         if ($asDom) {
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php b/core/vendor/symfony/console/Input/InputInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php
rename to core/vendor/symfony/console/Input/InputInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php b/core/vendor/symfony/console/Input/InputOption.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php
rename to core/vendor/symfony/console/Input/InputOption.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Input/StringInput.php b/core/vendor/symfony/console/Input/StringInput.php
similarity index 92%
rename from core/vendor/symfony/console/Symfony/Component/Console/Input/StringInput.php
rename to core/vendor/symfony/console/Input/StringInput.php
index 6537e27a6bb3d160c2a71222a3b69585d715f123..40656b3c14887c2c9476380cb5994e0d825c2e0b 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Input/StringInput.php
+++ b/core/vendor/symfony/console/Input/StringInput.php
@@ -39,6 +39,10 @@ class StringInput extends ArgvInput
      */
     public function __construct($input, InputDefinition $definition = null)
     {
+        if ($definition) {
+            trigger_error('The $definition argument of the '.__METHOD__.' method is deprecated and will be removed in 3.0. Set this parameter with the bind() method instead.', E_USER_DEPRECATED);
+        }
+
         parent::__construct(array(), null);
 
         $this->setTokens($this->tokenize($input));
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/LICENSE b/core/vendor/symfony/console/LICENSE
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/LICENSE
rename to core/vendor/symfony/console/LICENSE
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php b/core/vendor/symfony/console/Logger/ConsoleLogger.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php
rename to core/vendor/symfony/console/Logger/ConsoleLogger.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/BufferedOutput.php b/core/vendor/symfony/console/Output/BufferedOutput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/BufferedOutput.php
rename to core/vendor/symfony/console/Output/BufferedOutput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/ConsoleOutput.php b/core/vendor/symfony/console/Output/ConsoleOutput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/ConsoleOutput.php
rename to core/vendor/symfony/console/Output/ConsoleOutput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/ConsoleOutputInterface.php b/core/vendor/symfony/console/Output/ConsoleOutputInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/ConsoleOutputInterface.php
rename to core/vendor/symfony/console/Output/ConsoleOutputInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php b/core/vendor/symfony/console/Output/NullOutput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php
rename to core/vendor/symfony/console/Output/NullOutput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/Output.php b/core/vendor/symfony/console/Output/Output.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/Output.php
rename to core/vendor/symfony/console/Output/Output.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php b/core/vendor/symfony/console/Output/OutputInterface.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php
rename to core/vendor/symfony/console/Output/OutputInterface.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php b/core/vendor/symfony/console/Output/StreamOutput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php
rename to core/vendor/symfony/console/Output/StreamOutput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php b/core/vendor/symfony/console/Question/ChoiceQuestion.php
similarity index 75%
rename from core/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php
rename to core/vendor/symfony/console/Question/ChoiceQuestion.php
index e1da7a8c5e3a43d83414f533a95b0b5b44187998..ce4ff67779e7e07535a3c74a3257baed7368281a 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php
+++ b/core/vendor/symfony/console/Question/ChoiceQuestion.php
@@ -36,7 +36,7 @@ public function __construct($question, array $choices, $default = null)
 
         $this->choices = $choices;
         $this->setValidator($this->getDefaultValidator());
-        $this->setAutocompleterValues(array_keys($choices));
+        $this->setAutocompleterValues($choices);
     }
 
     /**
@@ -117,8 +117,9 @@ private function getDefaultValidator()
         $choices = $this->choices;
         $errorMessage = $this->errorMessage;
         $multiselect = $this->multiselect;
+        $isAssoc = $this->isAssoc($choices);
 
-        return function ($selected) use ($choices, $errorMessage, $multiselect) {
+        return function ($selected) use ($choices, $errorMessage, $multiselect, $isAssoc) {
             // Collapse all spaces.
             $selectedChoices = str_replace(' ', '', $selected);
 
@@ -134,17 +135,40 @@ private function getDefaultValidator()
 
             $multiselectChoices = array();
             foreach ($selectedChoices as $value) {
-                if (empty($choices[$value])) {
+                $results = array();
+                foreach ($choices as $key => $choice) {
+                    if ($choice === $value) {
+                        $results[] = $key;
+                    }
+                }
+
+                if (count($results) > 1) {
+                    throw new \InvalidArgumentException(sprintf('The provided answer is ambiguous. Value should be one of %s.', implode(' or ', $results)));
+                }
+
+                $result = array_search($value, $choices);
+
+                if (!$isAssoc) {
+                    if (!empty($result)) {
+                        $result = $choices[$result];
+                    } elseif (isset($choices[$value])) {
+                        $result = $choices[$value];
+                    }
+                } elseif (empty($result) && array_key_exists($value, $choices)) {
+                    $result = $value;
+                }
+
+                if (empty($result)) {
                     throw new \InvalidArgumentException(sprintf($errorMessage, $value));
                 }
-                array_push($multiselectChoices, $choices[$value]);
+                array_push($multiselectChoices, $result);
             }
 
             if ($multiselect) {
                 return $multiselectChoices;
             }
 
-            return $choices[$selected];
+            return current($multiselectChoices);
         };
     }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php b/core/vendor/symfony/console/Question/ConfirmationQuestion.php
similarity index 59%
rename from core/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php
rename to core/vendor/symfony/console/Question/ConfirmationQuestion.php
index 09ac74ff65d793b685eb3b99634cc262ba03ddda..9e55859053f8e07e500ef5454a8a936a34494684 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php
+++ b/core/vendor/symfony/console/Question/ConfirmationQuestion.php
@@ -18,16 +18,20 @@
  */
 class ConfirmationQuestion extends Question
 {
+    private $trueAnswerRegex;
+
     /**
      * Constructor.
      *
-     * @param string $question The question to ask to the user
-     * @param bool   $default  The default answer to return, true or false
+     * @param string $question   The question to ask to the user
+     * @param bool   $default    The default answer to return, true or false
+     * @param string $trueAnswerRegex A regex to match the "yes" answer
      */
-    public function __construct($question, $default = true)
+    public function __construct($question, $default = true, $trueAnswerRegex = '/^y/i')
     {
         parent::__construct($question, (bool) $default);
 
+        $this->trueAnswerRegex = $trueAnswerRegex;
         $this->setNormalizer($this->getDefaultNormalizer());
     }
 
@@ -39,17 +43,19 @@ public function __construct($question, $default = true)
     private function getDefaultNormalizer()
     {
         $default = $this->getDefault();
+        $regex = $this->trueAnswerRegex;
 
-        return function ($answer) use ($default) {
+        return function ($answer) use ($default, $regex) {
             if (is_bool($answer)) {
                 return $answer;
             }
 
+            $answerIsTrue = (bool) preg_match($regex, $answer);
             if (false === $default) {
-                return $answer && 'y' === strtolower($answer[0]);
+                return $answer && $answerIsTrue;
             }
 
-            return !$answer || 'y' === strtolower($answer[0]);
+            return !$answer || $answerIsTrue;
         };
     }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Question/Question.php b/core/vendor/symfony/console/Question/Question.php
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Question/Question.php
rename to core/vendor/symfony/console/Question/Question.php
index 9f776d57903ed99b86a6e34e3ae001b1a655e8ab..01702b208fda5518e569db0bcc1936e5bf700d02 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Question/Question.php
+++ b/core/vendor/symfony/console/Question/Question.php
@@ -135,6 +135,10 @@ public function getAutocompleterValues()
      */
     public function setAutocompleterValues($values)
     {
+        if (is_array($values) && $this->isAssoc($values)) {
+            $values = array_merge(array_keys($values), array_values($values));
+        }
+
         if (null !== $values && !is_array($values)) {
             if (!$values instanceof \Traversable || $values instanceof \Countable) {
                 throw new \InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.');
@@ -235,4 +239,9 @@ public function getNormalizer()
     {
         return $this->normalizer;
     }
+
+    protected function isAssoc($array)
+    {
+        return (bool) count(array_filter(array_keys($array), 'is_string'));
+    }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/README.md b/core/vendor/symfony/console/README.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/README.md
rename to core/vendor/symfony/console/README.md
diff --git a/core/vendor/symfony/console/Resources/bin/hiddeninput.exe b/core/vendor/symfony/console/Resources/bin/hiddeninput.exe
new file mode 100644
index 0000000000000000000000000000000000000000..b59fd5b7935e856dc92af806dd500f9346b0e92a
--- /dev/null
+++ b/core/vendor/symfony/console/Resources/bin/hiddeninput.exe
@@ -0,0 +1,21 @@
+MZ�������ÿÿ��¸�������@�����������������������������������è���º�´	Í!¸LÍ!This program cannot be run in DOS mode.
+$�������Æ,Í;§Bž;§Bž;§Bž2ßמ:§Bž2ßÁž-§Bž2ßÆž9§Bž2ßÑž?§Bža9ž8§Bž;§Cž§Bž2ßÈž:§Bž2ßÖž:§Bž2ßÓž:§BžRich;§Bž��������PE��L�¬MoO��������à�	��
+���������8������ ����@����������������������`�����?œ���@���������������������������"��P����@�� �������������������P��p���!�����������������������������8!��@������������ ��Ø���������������������������.text���	������
+����������������� ��`.rdata��Î	��� ���
+�����������������@��@.data������0��������������������@��À.rsrc��� ���@��������������������@��@.reloc��Ì���P������"��������������@��B��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j$¸æ@�èx��jöÿ @�ƒeÐ�‹ðEÐPVÿ� @�‹EЃàûPVÿ @�MÔÿX @�ƒeü�EÔPÿ5H @�ÿL @�YYÿ5\ @�EÔPÿ5` @�ÿD @�YY‹ÈÿP @�ƒMüÿMÔÿT @�3ÀèH��Ã;
�0@�uóÃé¬��h€@�è£��¡l3@�Ç$40@�ÿ5h3@�£40@�h$0@�h(0@�h 0@�ÿ  @�ƒÄ£00@�…À}jè¹��YÃjh"@�è��3Û‰]üd¡���‹p‰]ä¿€3@�SVWÿ0 @�;Ãt;Æu3öF‰uäëhè��ÿ4 @�ëÚ3öF¡|3@�;Æu
+jè\��Yë;¡|3@�…Àu,‰5|3@�hð @�hä @�è§��YY…ÀtÇEüþÿÿÿ¸ÿ���éÝ���‰5<0@�¡|3@�;Æuhà @�hØ @�èl��YYÇ|3@����9]äuSWÿ8 @�9Œ3@�thŒ3@�èƒ��Y…Àt
+SjSÿŒ3@�¡$0@�‹
¼ @�‰ÿ5$0@�ÿ5(0@�ÿ5 0@�èþÿÿƒÄ£80@�9,0@�u7PÿÀ @�‹Eì‹‹	‰MàPQèŽ��YYËeè‹Eà£80@�3Û9,0@�uPÿh @�9<0@�uÿœ @�ÇEüþÿÿÿ¡80@�èû��øMZ��f9��@�t3ÀëM¡<�@�€��@�8PE��ué·Hù��tù��uÕƒ¸„���vÌ3É9ˆø���ëƒxtv¼3É9ˆè���•Á‹Áj£,0@�ÿp @�jÿÿl @�YY£„3@�£ˆ3@�ÿÌ @�‹
t3@�‰ÿˆ @�‹
p3@�‰¡¨ @�‹�£x3@�èV��è¬��ƒ=0@��uhµ@�ÿ¬ @�Yèg��ƒ=0@�ÿu	jÿÿ° @�Y3ÀÃè{��éŸýÿÿ‹ÿU‹ìì(��£H1@�‰
D1@�‰@1@�‰<1@�‰581@�‰=41@�fŒ`1@�fŒ
T1@�fŒ01@�fŒ,1@�fŒ%(1@�fŒ-$1@�œX1@�‹E�£L1@�‹E£P1@�E£\1@�‹…àüÿÿǘ0@���¡P1@�£L0@�Ç@0@�	�ÀÇD0@����¡�0@�‰…Øüÿÿ¡0@�‰…Üüÿÿÿ @�£0@�jè?��Yj�ÿ  @�h!@�ÿ$ @�ƒ=0@��ujè��Yh	�Àÿ( @�Pÿ, @�ÉËÿU‹ì‹E‹�8csmàu*ƒxu$‹@= “t=!“t="“t=�@™uèÐ��3À]Â�hH@�ÿ  @�3ÀÃÿ%¤ @�jh("@�èb��ÿ5ˆ3@�‹5Œ @�ÿÖY‰EäƒøÿuÿuÿÄ @�Yëgjè’��Yƒeü�ÿ5ˆ3@�ÿÖ‰Eäÿ5„3@�ÿÖYY‰EàEàPEäPÿu‹5l @�ÿÖYPèU��‰EÜÿuäÿÖ£ˆ3@�ÿuàÿփģ„3@�ÇEüþÿÿÿè	���‹EÜè��Ãjè��YËÿU‹ìÿuèNÿÿÿ÷ØÀ÷ØYH]ËÿV¸ü!@�¾ü!@�W‹ø;Æs‹…ÀtÿЃÇ;þrñ_^ËÿV¸"@�¾"@�W‹ø;Æs‹…ÀtÿЃÇ;þrñ_^Ãÿ%È @�ÌÌÌÌ‹ÿU‹ì‹M¸MZ��f9t3À]ËA<Á8PE��uï3Ò¹��f9H”‹Â]ÃÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ì‹E‹H<È·ASV·q3ÒWD…öv‹}‹H;ùr	‹XÙ;ûr
+BƒÀ(;Örè3À_^[]ÃÌÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ìjþhH"@�he@�d¡����PƒìSVW¡�0@�1Eø3ÅPEðd£����‰eèÇEü����h��@�è*ÿÿÿƒÄ…ÀtU‹E-��@�Ph��@�èPÿÿÿƒÄ…Àt;‹@$Áè÷ЃàÇEüþÿÿÿ‹Mðd‰
����Y_^[‹å]ËEì‹‹3Ò=��À”‹ÂËeèÇEüþÿÿÿ3À‹Mðd‰
����Y_^[‹å]ÃÌÿ%¸ @�ÿ%´ @�ÌÌhe@�dÿ5����‹D$‰l$l$+àSVW¡�0@�1Eü3ÅP‰eèÿuø‹EüÇEüþÿÿÿ‰EøEðd£����ËMðd‰
����Y__^[‹å]QËÿU‹ìÿuÿuÿuÿuh‡@�h�0@�èç���ƒÄ]ËÿVh���h���3öVèÙ���ƒÄ…Àt
VVVVVèÂ���ƒÄ^Ã3ÀËÿU‹ìƒì¡�0@�ƒeø�ƒeü�SW¿Næ@»»��ÿÿ;Çt
…Ãt	÷У0@�ë`VEøPÿ< @�‹uü3uøÿ @�3ðÿ @�3ðÿ @�3ðEðPÿ @�‹Eô3Eð3ð;÷u¾Oæ@»ë…óu‹ÆÁàð‰5�0@�÷Ö‰50@�^_[ÉÃÿ%t @�ÿ%x @�ÿ%| @�ÿ%€ @�ÿ%„ @�ÿ% @�ÿ%” @�ÿ%˜ @�ÿ%Ð @�Pdÿ5����D$+d$SVW‰(‹è¡�0@�3ÅP‰EðÿuüÇEüÿÿÿÿEôd£����ËMôd‰
����Y__^[‹å]QËMð3Íè¯÷ÿÿéÝÿÿÿMÔÿ%T @�‹T$B‹JÌ3Èè÷ÿÿ‹Jü3Èè†÷ÿÿ¸l"@�ésÿÿÿ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������¸#��Ê#��Ü#��ˆ)��r)��b)��H)��4)��)��ú(��æ(��Ò(��´(��¬(��–(��ž)������ú#��à$��%��Ê%��&��d&��®&��¤$������('��Ä'��Ö'��è'��þ'��(��((��6(��¦'��H(��Z(��t(��†(��'��'���'��–'��‚'��l'��^'��R'��F'��>'��>(��0'��¶'��¸)����������–@���������W@�Š@���������������������¬MoO�������l���€!��€��@0@�˜0@�bad allocation������H������������������������������������������������������������0@�ð!@����RSDSÑŒ³´J¨!öÌëLZ����c:\users\seld\documents\visual studio 2010\Projects\hiddeninp\Release\hiddeninp.pdb�����e��æ������������������þÿÿÿ����Ðÿÿÿ����þÿÿÿ@�@�����þÿÿÿ����Ìÿÿÿ����þÿÿÿ����:@�����þÿÿÿ����Øÿÿÿ����þÿÿÿË@�ß@�ÿÿÿÿÝ@�"“���d"@������������������������à"����������ì#��� ��$#����������ô&��D ��H#����������(��h ����������������������¸#��Ê#��Ü#��ˆ)��r)��b)��H)��4)��)��ú(��æ(��Ò(��´(��¬(��–(��ž)������ú#��à$��%��Ê%��&��d&��®&��¤$������('��Ä'��Ö'��è'��þ'��(��((��6(��¦'��H(��Z(��t(��†(��'��'���'��–'��‚'��l'��^'��R'��F'��>'��>(��0'��¶'��¸)������•GetConsoleMode��·SetConsoleMode��;GetStdHandle��KERNEL32.dll���??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z�‘?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A��J?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A�Â�??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z�??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z��_??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ��{??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ��³?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z��MSVCP90.dll�_amsg_exit��Ÿ�__getmainargs�,_cexit��|_exit�f�_XcptFilter�Ìexit�� �__initenv�_initterm�_initterm_e�<_configthreadlocale�ã�__setusermatherr��_adjust_fdiv��Ë�__p__commode��Ï�__p__fmode��j_encode_pointer�à�__set_app_type��K_crt_debugger_hook��C�?terminate@@YAXXZ�MSVCR90.dll�æ_unlock�–�__dllonexit�v_lock�_onexit�`_decode_pointer�s_except_handler4_common�_invoke_watson��?_controlfp_s��½InterlockedExchange�!Sleep�ºInterlockedCompareExchange��-TerminateProcess��©GetCurrentProcess�>UnhandledExceptionFilter��SetUnhandledExceptionFilter�ÑIsDebuggerPresent�TQueryPerformanceCounter�fGetTickCount��­GetCurrentThreadId��ªGetCurrentProcessId�OGetSystemTimeAsFileTime�s�__CxxFrameHandler3����������������������������������������������������Næ@»±¿Dÿÿÿÿÿÿÿÿþÿÿÿ���$!@���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��€���8��€�����������������P��€�����������������h��€��������������	��€�����������������	����� @��(��ä������ÈC��V��ä������(4���V�S�_�V�E�R�S�I�O�N�_�I�N�F�O�����½ïþ������������������������������������������†���S�t�r�i�n�g�F�i�l�e�I�n�f�o���b���0�4�0�9�0�4�b�0���Ê�Q��F�i�l�e�D�e�s�c�r�i�p�t�i�o�n�����R�e�a�d�s� �f�r�o�m� �s�t�d�i�n� �w�i�t�h�o�u�t� �l�e�a�k�i�n�g� �i�n�f�o� �t�o� �t�h�e� �t�e�r�m�i�n�a�l� �a�n�d� �o�u�t�p�u�t�s� �b�a�c�k� �t�o� �s�t�d�o�u�t�����6���F�i�l�e�V�e�r�s�i�o�n�����1�,� �0�,� �0�,� �0�����8���I�n�t�e�r�n�a�l�N�a�m�e���h�i�d�d�e�n�i�n�p�u�t���P���L�e�g�a�l�C�o�p�y�r�i�g�h�t���J�o�r�d�i� �B�o�g�g�i�a�n�o� �-� �2�0�1�2���H���O�r�i�g�i�n�a�l�F�i�l�e�n�a�m�e���h�i�d�d�e�n�i�n�p�u�t�.�e�x�e���:�
��P�r�o�d�u�c�t�N�a�m�e�����H�i�d�d�e�n� �I�n�p�u�t�����:���P�r�o�d�u�c�t�V�e�r�s�i�o�n���1�,� �0�,� �0�,� �0�����D����V�a�r�F�i�l�e�I�n�f�o�����$����T�r�a�n�s�l�a�t�i�o�n�����	°<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+    <security>
+      <requestedPrivileges>
+        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+  <dependency>
+    <dependentAssembly>
+      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
+    </dependentAssembly>
+  </dependency>
+</assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING���@��00!0/080F0L0T0^0d0n0{0‰0—0¡0¨0®0³0¸0½0Â0È0Ð0ä0ÿ01#1-1@1J1O1T1v1{1„1‰1–1§1­1´1È1Í1Ó1Û1á1ç1ô1ú12"2*23292A2M2_2j2p2¹2¿2Ç2Î2Ó2Ù2ß2ç2í2ô2û2333%303N3T3Z3`3f3l3s3z33ˆ33–33¥3­3µ3Á3Ê3Ï3Õ3ß3è3ó3ÿ34444%4;4B4‹4‘4š4¡4¬4²4Æ4Û4æ4þ45!5^5c5„5‰5¨5H6M6_6}6‘6—6�77
7*7w7|7Á7ä7ñ7ý78
88=8E8P8V8\8b8h8n8t8z8€8œ8â89��� ��$���Ü0è0ì01 1t1x12 2@2\2`2h2t2�0�����0��������������������������������������������������������������������������������������������������������������������������������������������������
\ No newline at end of file
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Shell.php b/core/vendor/symfony/console/Shell.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Shell.php
rename to core/vendor/symfony/console/Shell.php
diff --git a/core/vendor/symfony/console/Style/OutputStyle.php b/core/vendor/symfony/console/Style/OutputStyle.php
new file mode 100644
index 0000000000000000000000000000000000000000..13ed05b13dc4a2621e61c851a6b85f5ff7994153
--- /dev/null
+++ b/core/vendor/symfony/console/Style/OutputStyle.php
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Style;
+
+use Symfony\Component\Console\Formatter\OutputFormatterInterface;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Decorates output to add console style guide helpers
+ *
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+abstract class OutputStyle implements OutputInterface, StyleInterface
+{
+    private $output;
+
+    /**
+     * @param OutputInterface $output
+     */
+    public function __construct(OutputInterface $output)
+    {
+        $this->output = $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function newLine($count = 1)
+    {
+        $this->output->write(str_repeat(PHP_EOL, $count));
+    }
+
+    /**
+     * @param int $max
+     *
+     * @return ProgressBar
+     */
+    public function createProgressBar($max = 0)
+    {
+        return new ProgressBar($this->output, $max);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
+    {
+        $this->output->write($messages, $newline, $type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function writeln($messages, $type = self::OUTPUT_NORMAL)
+    {
+        $this->output->writeln($messages, $type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setVerbosity($level)
+    {
+        $this->output->setVerbosity($level);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getVerbosity()
+    {
+        return $this->output->getVerbosity();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setDecorated($decorated)
+    {
+        $this->output->setDecorated($decorated);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isDecorated()
+    {
+        return $this->output->isDecorated();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setFormatter(OutputFormatterInterface $formatter)
+    {
+        $this->output->setFormatter($formatter);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFormatter()
+    {
+        return $this->output->getFormatter();
+    }
+}
diff --git a/core/vendor/symfony/console/Style/StyleInterface.php b/core/vendor/symfony/console/Style/StyleInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..214782e3939fdbfb28102bf45deb4bd076f0cb58
--- /dev/null
+++ b/core/vendor/symfony/console/Style/StyleInterface.php
@@ -0,0 +1,159 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Style;
+
+/**
+ * Output style helpers
+ *
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+interface StyleInterface
+{
+    /**
+     * Formats a command title.
+     *
+     * @param string $message
+     */
+    public function title($message);
+
+    /**
+     * Formats a section title.
+     *
+     * @param string $message
+     */
+    public function section($message);
+
+    /**
+     * Formats a list.
+     *
+     * @param array $elements
+     */
+    public function listing(array $elements);
+
+    /**
+     * Formats informational text.
+     *
+     * @param string|array $message
+     */
+    public function text($message);
+
+    /**
+     * Formats a success result bar.
+     *
+     * @param string|array $message
+     */
+    public function success($message);
+
+    /**
+     * Formats an error result bar.
+     *
+     * @param string|array $message
+     */
+    public function error($message);
+
+    /**
+     * Formats an warning result bar.
+     *
+     * @param string|array $message
+     */
+    public function warning($message);
+
+    /**
+     * Formats a note admonition.
+     *
+     * @param string|array $message
+     */
+    public function note($message);
+
+    /**
+     * Formats a caution admonition.
+     *
+     * @param string|array $message
+     */
+    public function caution($message);
+
+    /**
+     * Formats a table.
+     *
+     * @param array $headers
+     * @param array $rows
+     */
+    public function table(array $headers, array $rows);
+
+    /**
+     * Asks a question.
+     *
+     * @param string          $question
+     * @param string|null     $default
+     * @param callable|null   $validator
+     *
+     * @return string
+     */
+    public function ask($question, $default = null, $validator = null);
+
+    /**
+     * Asks a question with the user input hidden.
+     *
+     * @param string        $question
+     * @param callable|null $validator
+     *
+     * @return string
+     */
+    public function askHidden($question, $validator = null);
+
+    /**
+     * Asks for confirmation.
+     *
+     * @param string $question
+     * @param bool   $default
+     *
+     * @return bool
+     */
+    public function confirm($question, $default = true);
+
+    /**
+     * Asks a choice question.
+     *
+     * @param string          $question
+     * @param array           $choices
+     * @param string|int|null $default
+     *
+     * @return string
+     */
+    public function choice($question, array $choices, $default = null);
+
+    /**
+     * Add newline(s)
+     *
+     * @param int $count The number of newlines
+     */
+    public function newLine($count = 1);
+
+    /**
+     * Starts the progress output.
+     *
+     * @param int $max Maximum steps (0 if unknown)
+     */
+    public function progressStart($max = 0);
+
+    /**
+     * Advances the progress output X steps.
+     *
+     * @param int $step Number of steps to advance
+     */
+    public function progressAdvance($step = 1);
+
+    /**
+     * Finishes the progress output.
+     */
+    public function progressFinish();
+}
diff --git a/core/vendor/symfony/console/Style/SymfonyStyle.php b/core/vendor/symfony/console/Style/SymfonyStyle.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ccccc9df3c59577b6cb02fecd0bca4b710575c7
--- /dev/null
+++ b/core/vendor/symfony/console/Style/SymfonyStyle.php
@@ -0,0 +1,323 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Style;
+
+use Symfony\Component\Console\Application;
+use Symfony\Component\Console\Formatter\OutputFormatter;
+use Symfony\Component\Console\Helper\Helper;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Helper\SymfonyQuestionHelper;
+use Symfony\Component\Console\Helper\Table;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ChoiceQuestion;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+use Symfony\Component\Console\Question\Question;
+
+/**
+ * Output decorator helpers for the Symfony Style Guide.
+ *
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+class SymfonyStyle extends OutputStyle
+{
+    const MAX_LINE_LENGTH = 120;
+
+    private $input;
+    private $questionHelper;
+    private $progressBar;
+    private $lineLength;
+
+    /**
+     * @param InputInterface  $input
+     * @param OutputInterface $output
+     */
+    public function __construct(InputInterface $input, OutputInterface $output)
+    {
+        $this->input = $input;
+        $this->lineLength = min($this->getTerminalWidth(), self::MAX_LINE_LENGTH);
+
+        parent::__construct($output);
+    }
+
+    /**
+     * Formats a message as a block of text.
+     *
+     * @param string|array $messages  The message to write in the block
+     * @param string|null  $type      The block type (added in [] on first line)
+     * @param string|null  $style     The style to apply to the whole block
+     * @param string       $prefix    The prefix for the block
+     * @param bool         $padding   Whether to add vertical padding
+     */
+    public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false)
+    {
+        $messages = array_values((array) $messages);
+        $lines = array();
+
+        // add type
+        if (null !== $type) {
+            $messages[0] = sprintf('[%s] %s', $type, $messages[0]);
+        }
+
+        // wrap and add newlines for each element
+        foreach ($messages as $key => $message) {
+            $message = OutputFormatter::escape($message);
+            $lines = array_merge($lines, explode("\n", wordwrap($message, $this->lineLength - Helper::strlen($prefix))));
+
+            if (count($messages) > 1 && $key < count($messages) - 1) {
+                $lines[] = '';
+            }
+        }
+
+        if ($padding && $this->isDecorated()) {
+            array_unshift($lines, '');
+            $lines[] = '';
+        }
+
+        foreach ($lines as &$line) {
+            $line = sprintf('%s%s', $prefix, $line);
+            $line .= str_repeat(' ', $this->lineLength - Helper::strlen($line));
+
+            if ($style) {
+                $line = sprintf('<%s>%s</>', $style, $line);
+            }
+        }
+
+        $this->writeln(implode("\n", $lines)."\n");
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function title($message)
+    {
+        $this->writeln(sprintf("\n<comment>%s</>\n<comment>%s</>\n", $message, str_repeat('=', strlen($message))));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function section($message)
+    {
+        $this->writeln(sprintf("<comment>%s</>\n<comment>%s</>\n", $message, str_repeat('-', strlen($message))));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function listing(array $elements)
+    {
+        $elements = array_map(function ($element) {
+                return sprintf(' * %s', $element);
+            },
+            $elements
+        );
+
+        $this->writeln(implode("\n", $elements)."\n");
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function text($message)
+    {
+        if (!is_array($message)) {
+            $this->writeln(sprintf(' // %s', $message));
+
+            return;
+        }
+
+        foreach ($message as $element) {
+            $this->text($element);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function success($message)
+    {
+        $this->block($message, 'OK', 'fg=white;bg=green', ' ', true);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function error($message)
+    {
+        $this->block($message, 'ERROR', 'fg=white;bg=red', ' ', true);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function warning($message)
+    {
+        $this->block($message, 'WARNING', 'fg=white;bg=red', ' ', true);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function note($message)
+    {
+        $this->block($message, 'NOTE', 'fg=yellow', ' ! ');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function caution($message)
+    {
+        $this->block($message, 'CAUTION', 'fg=white;bg=red', ' ! ', true);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function table(array $headers, array $rows)
+    {
+        $headers = array_map(function ($value) { return sprintf('<info>%s</>', $value); }, $headers);
+
+        $table = new Table($this);
+        $table->setHeaders($headers);
+        $table->setRows($rows);
+        $table->setStyle('symfony-style-guide');
+
+        $table->render();
+        $this->newLine();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function ask($question, $default = null, $validator = null)
+    {
+        $question = new Question($question, $default);
+        $question->setValidator($validator);
+
+        return $this->askQuestion($question, $validator);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function askHidden($question, $validator = null)
+    {
+        $question = new Question($question);
+        $question->setHidden(true);
+
+        return $this->askQuestion($question, $validator);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function confirm($question, $default = true)
+    {
+        return $this->askQuestion(new ConfirmationQuestion($question, $default));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function choice($question, array $choices, $default = null)
+    {
+        if (null !== $default) {
+            $values = array_flip($choices);
+            $default = $values[$default];
+        }
+
+        return $this->askQuestion(new ChoiceQuestion($question, $choices, $default));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function progressStart($max = 0)
+    {
+        $this->progressBar = $this->createProgressBar($max);
+        $this->progressBar->start();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function progressAdvance($step = 1)
+    {
+        $this->getProgressBar()->advance($step);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function progressFinish()
+    {
+        $this->getProgressBar()->finish();
+        $this->newLine(2);
+        $this->progressBar = null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function createProgressBar($max = 0)
+    {
+        $progressBar = parent::createProgressBar($max);
+
+        if ('\\' === DIRECTORY_SEPARATOR) {
+            $progressBar->setEmptyBarCharacter('â–‘'); // light shade character \u2591
+            $progressBar->setProgressCharacter('');
+            $progressBar->setBarCharacter('â–“'); // dark shade character \u2593
+        }
+
+        return $progressBar;
+    }
+
+    /**
+     * @param Question $question
+     *
+     * @return string
+     */
+    public function askQuestion(Question $question)
+    {
+        if (!$this->questionHelper) {
+            $this->questionHelper = new SymfonyQuestionHelper();
+        }
+
+        $answer = $this->questionHelper->ask($this->input, $this, $question);
+
+        $this->newLine();
+
+        return $answer;
+    }
+
+    /**
+     * @return ProgressBar
+     */
+    private function getProgressBar()
+    {
+        if (!$this->progressBar) {
+            throw new \RuntimeException('The ProgressBar is not started.');
+        }
+
+        return $this->progressBar;
+    }
+
+    private function getTerminalWidth()
+    {
+        $application = new Application();
+        $dimensions = $application->getTerminalDimensions();
+
+        return $dimensions[0] ?: self::MAX_LINE_LENGTH;
+    }
+}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php b/core/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php
deleted file mode 100644
index 7766cbccc661909d90b17b90d30d484a39ef4cc7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php
+++ /dev/null
@@ -1,410 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Helper;
-
-use Symfony\Component\Console\Output\OutputInterface;
-
-/**
- * Provides helpers to display a table.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Саша Стаменковић <umpirsky@gmail.com>
- */
-class Table
-{
-    /**
-     * Table headers.
-     *
-     * @var array
-     */
-    private $headers = array();
-
-    /**
-     * Table rows.
-     *
-     * @var array
-     */
-    private $rows = array();
-
-    /**
-     * Column widths cache.
-     *
-     * @var array
-     */
-    private $columnWidths = array();
-
-    /**
-     * Number of columns cache.
-     *
-     * @var array
-     */
-    private $numberOfColumns;
-
-    /**
-     * @var OutputInterface
-     */
-    private $output;
-
-    /**
-     * @var TableStyle
-     */
-    private $style;
-
-    private static $styles;
-
-    public function __construct(OutputInterface $output)
-    {
-        $this->output = $output;
-
-        if (!self::$styles) {
-            self::$styles = self::initStyles();
-        }
-
-        $this->setStyle('default');
-    }
-
-    /**
-     * Sets a style definition.
-     *
-     * @param string     $name  The style name
-     * @param TableStyle $style A TableStyle instance
-     */
-    public static function setStyleDefinition($name, TableStyle $style)
-    {
-        if (!self::$styles) {
-            self::$styles = self::initStyles();
-        }
-
-        self::$styles[$name] = $style;
-    }
-
-    /**
-     * Gets a style definition by name.
-     *
-     * @param string $name The style name
-     *
-     * @return TableStyle A TableStyle instance
-     */
-    public static function getStyleDefinition($name)
-    {
-        if (!self::$styles) {
-            self::$styles = self::initStyles();
-        }
-
-        if (!self::$styles[$name]) {
-            throw new \InvalidArgumentException(sprintf('Style "%s" is not defined.', $name));
-        }
-
-        return self::$styles[$name];
-    }
-
-    /**
-     * Sets table style.
-     *
-     * @param TableStyle|string $name The style name or a TableStyle instance
-     *
-     * @return Table
-     */
-    public function setStyle($name)
-    {
-        if ($name instanceof TableStyle) {
-            $this->style = $name;
-        } elseif (isset(self::$styles[$name])) {
-            $this->style = self::$styles[$name];
-        } else {
-            throw new \InvalidArgumentException(sprintf('Style "%s" is not defined.', $name));
-        }
-
-        return $this;
-    }
-
-    /**
-     * Gets the current table style.
-     *
-     * @return TableStyle
-     */
-    public function getStyle()
-    {
-        return $this->style;
-    }
-
-    public function setHeaders(array $headers)
-    {
-        $this->headers = array_values($headers);
-
-        return $this;
-    }
-
-    public function setRows(array $rows)
-    {
-        $this->rows = array();
-
-        return $this->addRows($rows);
-    }
-
-    public function addRows(array $rows)
-    {
-        foreach ($rows as $row) {
-            $this->addRow($row);
-        }
-
-        return $this;
-    }
-
-    public function addRow($row)
-    {
-        if ($row instanceof TableSeparator) {
-            $this->rows[] = $row;
-
-            return;
-        }
-
-        if (!is_array($row)) {
-            throw new \InvalidArgumentException('A row must be an array or a TableSeparator instance.');
-        }
-
-        $this->rows[] = array_values($row);
-
-        end($this->rows);
-        $rowKey = key($this->rows);
-        reset($this->rows);
-
-        foreach ($row as $key => $cellValue) {
-            if (false === strpos($cellValue, "\n")) {
-                continue;
-            }
-
-            $lines = explode("\n", $cellValue);
-            $this->rows[$rowKey][$key] = $lines[0];
-            unset($lines[0]);
-
-            foreach ($lines as $lineKey => $line) {
-                $nextRowKey = $rowKey + $lineKey + 1;
-
-                if (isset($this->rows[$nextRowKey])) {
-                    $this->rows[$nextRowKey][$key] = $line;
-                } else {
-                    $this->rows[$nextRowKey] = array($key => $line);
-                }
-            }
-        }
-
-        return $this;
-    }
-
-    public function setRow($column, array $row)
-    {
-        $this->rows[$column] = $row;
-
-        return $this;
-    }
-
-    /**
-     * Renders table to output.
-     *
-     * Example:
-     * +---------------+-----------------------+------------------+
-     * | ISBN          | Title                 | Author           |
-     * +---------------+-----------------------+------------------+
-     * | 99921-58-10-7 | Divine Comedy         | Dante Alighieri  |
-     * | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
-     * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
-     * +---------------+-----------------------+------------------+
-     */
-    public function render()
-    {
-        $this->renderRowSeparator();
-        $this->renderRow($this->headers, $this->style->getCellHeaderFormat());
-        if (!empty($this->headers)) {
-            $this->renderRowSeparator();
-        }
-        foreach ($this->rows as $row) {
-            if ($row instanceof TableSeparator) {
-                $this->renderRowSeparator();
-            } else {
-                $this->renderRow($row, $this->style->getCellRowFormat());
-            }
-        }
-        if (!empty($this->rows)) {
-            $this->renderRowSeparator();
-        }
-
-        $this->cleanup();
-    }
-
-    /**
-     * Renders horizontal header separator.
-     *
-     * Example: +-----+-----------+-------+
-     */
-    private function renderRowSeparator()
-    {
-        if (0 === $count = $this->getNumberOfColumns()) {
-            return;
-        }
-
-        if (!$this->style->getHorizontalBorderChar() && !$this->style->getCrossingChar()) {
-            return;
-        }
-
-        $markup = $this->style->getCrossingChar();
-        for ($column = 0; $column < $count; $column++) {
-            $markup .= str_repeat($this->style->getHorizontalBorderChar(), $this->getColumnWidth($column)).$this->style->getCrossingChar();
-        }
-
-        $this->output->writeln(sprintf($this->style->getBorderFormat(), $markup));
-    }
-
-    /**
-     * Renders vertical column separator.
-     */
-    private function renderColumnSeparator()
-    {
-        $this->output->write(sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar()));
-    }
-
-    /**
-     * Renders table row.
-     *
-     * Example: | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
-     *
-     * @param array  $row
-     * @param string $cellFormat
-     */
-    private function renderRow(array $row, $cellFormat)
-    {
-        if (empty($row)) {
-            return;
-        }
-
-        $this->renderColumnSeparator();
-        for ($column = 0, $count = $this->getNumberOfColumns(); $column < $count; $column++) {
-            $this->renderCell($row, $column, $cellFormat);
-            $this->renderColumnSeparator();
-        }
-        $this->output->writeln('');
-    }
-
-    /**
-     * Renders table cell with padding.
-     *
-     * @param array  $row
-     * @param int    $column
-     * @param string $cellFormat
-     */
-    private function renderCell(array $row, $column, $cellFormat)
-    {
-        $cell = isset($row[$column]) ? $row[$column] : '';
-        $width = $this->getColumnWidth($column);
-
-        // str_pad won't work properly with multi-byte strings, we need to fix the padding
-        if (function_exists('mb_strwidth') && false !== $encoding = mb_detect_encoding($cell)) {
-            $width += strlen($cell) - mb_strwidth($cell, $encoding);
-        }
-
-        $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
-
-        $content = sprintf($this->style->getCellRowContentFormat(), $cell);
-
-        $this->output->write(sprintf($cellFormat, str_pad($content, $width, $this->style->getPaddingChar(), $this->style->getPadType())));
-    }
-
-    /**
-     * Gets number of columns for this table.
-     *
-     * @return int
-     */
-    private function getNumberOfColumns()
-    {
-        if (null !== $this->numberOfColumns) {
-            return $this->numberOfColumns;
-        }
-
-        $columns = array(count($this->headers));
-        foreach ($this->rows as $row) {
-            $columns[] = count($row);
-        }
-
-        return $this->numberOfColumns = max($columns);
-    }
-
-    /**
-     * Gets column width.
-     *
-     * @param int $column
-     *
-     * @return int
-     */
-    private function getColumnWidth($column)
-    {
-        if (isset($this->columnWidths[$column])) {
-            return $this->columnWidths[$column];
-        }
-
-        $lengths = array($this->getCellWidth($this->headers, $column));
-        foreach ($this->rows as $row) {
-            if ($row instanceof TableSeparator) {
-                continue;
-            }
-
-            $lengths[] = $this->getCellWidth($row, $column);
-        }
-
-        return $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2;
-    }
-
-    /**
-     * Gets cell width.
-     *
-     * @param array $row
-     * @param int   $column
-     *
-     * @return int
-     */
-    private function getCellWidth(array $row, $column)
-    {
-        return isset($row[$column]) ? Helper::strlenWithoutDecoration($this->output->getFormatter(), $row[$column]) : 0;
-    }
-
-    /**
-     * Called after rendering to cleanup cache data.
-     */
-    private function cleanup()
-    {
-        $this->columnWidths = array();
-        $this->numberOfColumns = null;
-    }
-
-    private static function initStyles()
-    {
-        $borderless = new TableStyle();
-        $borderless
-            ->setHorizontalBorderChar('=')
-            ->setVerticalBorderChar(' ')
-            ->setCrossingChar(' ')
-        ;
-
-        $compact = new TableStyle();
-        $compact
-            ->setHorizontalBorderChar('')
-            ->setVerticalBorderChar(' ')
-            ->setCrossingChar('')
-            ->setCellRowContentFormat('%s')
-        ;
-
-        return array(
-            'default' => new TableStyle(),
-            'borderless' => $borderless,
-            'compact' => $compact,
-        );
-    }
-}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
deleted file mode 100644
index 7f8d92eefc1e35109c2aa3c0fb276997e3fe0b00..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}}],"namespaces":[{"id":"_global","commands":["help","list"]}]}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
deleted file mode 100644
index f3a1968effc723a4b97330af52cc45c1387199e5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<info>Console Tool</info>
-
-<comment>Usage:</comment>
- command [options] [arguments]
-
-<comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message
- <info>--quiet</info> (-q)          Do not output any message
- <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version
- <info>--ansi</info>                Force ANSI output
- <info>--no-ansi</info>             Disable ANSI output
- <info>--no-interaction</info> (-n) Do not ask any interactive question
-
-<comment>Available commands:</comment>
- <info>help  </info> Displays help for a command
- <info>list  </info> Lists commands
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
deleted file mode 100644
index 1655d47e6215707814e64a52b79998ce256599f7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
+++ /dev/null
@@ -1 +0,0 @@
-{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"descriptor:command1","usage":"descriptor:command1","description":"command 1 description","help":"command 1 help","aliases":["alias1","alias2"],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"descriptor:command2","usage":"descriptor:command2 [-o|--option_name] argument_name","description":"command 2 description","help":"command 2 help","aliases":[],"definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}}],"namespaces":[{"id":"_global","commands":["alias1","alias2","help","list"]},{"id":"descriptor","commands":["descriptor:command1","descriptor:command2"]}]}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
deleted file mode 100644
index a640a8d2d2e06b458918de34bcf5994e1feaef79..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-<info>My Symfony application</info> version <comment>v1.0</comment>
-
-<comment>Usage:</comment>
- command [options] [arguments]
-
-<comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message
- <info>--quiet</info> (-q)          Do not output any message
- <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version
- <info>--ansi</info>                Force ANSI output
- <info>--no-ansi</info>             Disable ANSI output
- <info>--no-interaction</info> (-n) Do not ask any interactive question
-
-<comment>Available commands:</comment>
- <info>alias1               </info> command 1 description
- <info>alias2               </info> command 1 description
- <info>help                 </info> Displays help for a command
- <info>list                 </info> Lists commands
-<comment>descriptor</comment>
- <info>descriptor:command1  </info> command 1 description
- <info>descriptor:command2  </info> command 2 description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt
deleted file mode 100644
index d9734fe30a4162feed1da5cbf00fef48d65b41c4..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-<info>Console Tool</info>
-
-<comment>Usage:</comment>
- command [options] [arguments]
-
-<comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message
- <info>--quiet</info> (-q)          Do not output any message
- <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version
- <info>--ansi</info>                Force ANSI output
- <info>--no-ansi</info>             Disable ANSI output
- <info>--no-interaction</info> (-n) Do not ask any interactive question
-
-<comment>Available commands:</comment>
- <info>afoobar  </info> The foo:bar command
- <info>help     </info> Displays help for a command
- <info>list     </info> Lists commands
-<comment>foo</comment>
- <info>foo:bar  </info> The foo:bar command
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt
deleted file mode 100644
index 49992cfe3b62183eff113e51468cfc7f70ed194f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-<info>Console Tool</info>
-
-<comment>Usage:</comment>
- command [options] [arguments]
-
-<comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message
- <info>--quiet</info> (-q)          Do not output any message
- <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version
- <info>--ansi</info>                Force ANSI output
- <info>--no-ansi</info>             Disable ANSI output
- <info>--no-interaction</info> (-n) Do not ask any interactive question
-
-<comment>Available commands for the "foo" namespace:</comment>
- <info>foo:bar  </info> The foo:bar command
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt
deleted file mode 100644
index 9bd08b5474c64a36987af2330502c1606b85e7dd..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Console Tool
-
-Usage:
- command [options] [arguments]
-
-Options:
- --help (-h)           Display this help message
- --quiet (-q)          Do not output any message
- --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- --version (-V)        Display this application version
- --ansi                Force ANSI output
- --no-ansi             Disable ANSI output
- --no-interaction (-n) Do not ask any interactive question
-
-Available commands:
- help   Displays help for a command
- list   Lists commands
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt
deleted file mode 100644
index 6963c0f164ef506fef9fb5943c482f0c492c3c0e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-Usage:
- help [--xml] [--format="..."] [--raw] [command_name]
-
-Arguments:
- command               The command to execute
- command_name          The command name (default: "help")
-
-Options:
- --xml                 To output help as XML
- --format              To output help in other formats (default: "txt")
- --raw                 To output raw command help
- --help (-h)           Display this help message
- --quiet (-q)          Do not output any message
- --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- --version (-V)        Display this application version
- --ansi                Force ANSI output
- --no-ansi             Disable ANSI output
- --no-interaction (-n) Do not ask any interactive question
-
-Help:
- The help command displays help for a given command:
- 
-   php app/console help list
- 
- You can also output the help in other formats by using the --format option:
- 
-   php app/console help --format=xml list
- 
- To display the list of available commands, please use the list command.
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.json b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.json
deleted file mode 100644
index 0c1675dbcef4208a3519b5aa831ad8de5b312268..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"descriptor:command1","usage":"descriptor:command1","description":"command 1 description","help":"command 1 help","aliases":["alias1","alias2"],"definition":{"arguments":[],"options":[]}}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.txt
deleted file mode 100644
index 2375ac0e63d8d1679c3a3d0d5f1b47c2ed4f65c4..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-<comment>Usage:</comment>
- descriptor:command1
-
-<comment>Aliases:</comment> <info>alias1, alias2</info>
-
-<comment>Help:</comment>
- command 1 help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.json b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.json
deleted file mode 100644
index 493b584669ef995a1f9c2b9e485963248b3f4915..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"descriptor:command2","usage":"descriptor:command2 [-o|--option_name] argument_name","description":"command 2 description","help":"command 2 help","aliases":[],"definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}}}}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.txt
deleted file mode 100644
index 1da9f3d29fa0530e2f69c8baa12d573805428497..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<comment>Usage:</comment>
- descriptor:command2 [-o|--option_name] argument_name
-
-<comment>Arguments:</comment>
- <info>argument_name     </info> 
-
-<comment>Options:</comment>
- <info>--option_name</info> (-o) 
-
-<comment>Help:</comment>
- command 2 help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt
deleted file mode 100644
index 5d703512f766723af514d49e504a326501262806..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<comment>Usage:</comment>
- namespace:name
-
-<comment>Aliases:</comment> <info>name</info>
-<comment>Arguments:</comment>
- <info>command              </info> The command to execute
-
-<comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message
- <info>--quiet</info> (-q)          Do not output any message
- <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version
- <info>--ansi</info>                Force ANSI output
- <info>--no-ansi</info>             Disable ANSI output
- <info>--no-interaction</info> (-n) Do not ask any interactive question
-
-<comment>Help:</comment>
- help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/definition_astext.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/definition_astext.txt
deleted file mode 100644
index a7d7e0d5134ecbdc1ff13514fa321ddc796a7255..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/definition_astext.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<comment>Arguments:</comment>
- <info>foo       </info> The foo argument
- <info>baz       </info> The baz argument<comment> (default: true)</comment>
- <info>bar       </info> The bar argument<comment> (default: ["http://foo.com/"])</comment>
-
-<comment>Options:</comment>
- <info>--foo</info> (-f) The foo option
- <info>--baz</info>      The baz option<comment> (default: false)</comment>
- <info>--bar</info> (-b) The bar option<comment> (default: "bar")</comment>
- <info>--qux</info>      The qux option<comment> (default: ["http://foo.com/","bar"])</comment><comment> (multiple values allowed)</comment>
- <info>--qux2</info>     The qux2 option<comment> (default: {"foo":"bar"})</comment><comment> (multiple values allowed)</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.txt
deleted file mode 100644
index 111e5157f892dbba0b6a1484aae8b72e969c1faa..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>argument_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.txt
deleted file mode 100644
index 9497b1ce01a96ba7c4055e34617c3a4511a52c9f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>argument_name</info> argument description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.txt
deleted file mode 100644
index c421fc9117cad1af5c4ab3b5e13195a802a86206..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>argument_name</info> argument description<comment> (default: "default_value")</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.txt
deleted file mode 100644
index c6fb2ccc7b5b1b375c87dddc610d00cd71100c44..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-<comment>Options:</comment>
- <info>--option_name</info> (-o)
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.txt
deleted file mode 100644
index e17c61c3adf4bba5b2335d7be2ba23066aeff52d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<comment>Arguments:</comment>
- <info>argument_name     </info> 
-
-<comment>Options:</comment>
- <info>--option_name</info> (-o)
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.txt
deleted file mode 100644
index daf83d07ea74886b9ca4773d75d37ea3216768d1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>--option_name</info> (-o)
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.txt
deleted file mode 100644
index 627e3c1ce5db83a85e4f0258403ba341f3d2340d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>--option_name</info> (-o) option description<comment> (default: "default_value")</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.txt
deleted file mode 100644
index b88b12d2b3e706e10bd616cb37d0fdb593583982..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>--option_name</info> (-o) option description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.txt b/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.txt
deleted file mode 100644
index 5dba5e6e87422a75584c215876821c783e3cc6d8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.txt
+++ /dev/null
@@ -1 +0,0 @@
- <info>--option_name</info> (-o) option description<comment> (multiple values allowed)</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php b/core/vendor/symfony/console/Tester/ApplicationTester.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php
rename to core/vendor/symfony/console/Tester/ApplicationTester.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php b/core/vendor/symfony/console/Tester/CommandTester.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php
rename to core/vendor/symfony/console/Tester/CommandTester.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php b/core/vendor/symfony/console/Tests/ApplicationTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php
rename to core/vendor/symfony/console/Tests/ApplicationTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php b/core/vendor/symfony/console/Tests/Command/CommandTest.php
similarity index 98%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php
rename to core/vendor/symfony/console/Tests/Command/CommandTest.php
index c35617d19ab3ee9a6851c483ad4e10da19f64f0a..08761163eb2d874a3776dffa6c4c69aa8660c705 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php
+++ b/core/vendor/symfony/console/Tests/Command/CommandTest.php
@@ -154,8 +154,8 @@ public function testGetSynopsis()
     {
         $command = new \TestCommand();
         $command->addOption('foo');
-        $command->addArgument('foo');
-        $this->assertEquals('namespace:name [--foo] [foo]', $command->getSynopsis(), '->getSynopsis() returns the synopsis');
+        $command->addArgument('bar');
+        $this->assertEquals('namespace:name [--foo] [--] [<bar>]', $command->getSynopsis(), '->getSynopsis() returns the synopsis');
     }
 
     public function testGetHelper()
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/HelpCommandTest.php b/core/vendor/symfony/console/Tests/Command/HelpCommandTest.php
similarity index 52%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/HelpCommandTest.php
rename to core/vendor/symfony/console/Tests/Command/HelpCommandTest.php
index ea69c8ba3b508e3bb6b4db45ee39a55b48769845..9e068587f82ba9a4b9cfc2e1dc281ef923535082 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/HelpCommandTest.php
+++ b/core/vendor/symfony/console/Tests/Command/HelpCommandTest.php
@@ -23,8 +23,10 @@ public function testExecuteForCommandAlias()
         $command = new HelpCommand();
         $command->setApplication(new Application());
         $commandTester = new CommandTester($command);
-        $commandTester->execute(array('command_name' => 'li'));
-        $this->assertRegExp('/list \[--xml\] \[--raw\] \[--format="\.\.\."\] \[namespace\]/', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $commandTester->execute(array('command_name' => 'li'), array('decorated' => false));
+        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
     }
 
     public function testExecuteForCommand()
@@ -32,8 +34,10 @@ public function testExecuteForCommand()
         $command = new HelpCommand();
         $commandTester = new CommandTester($command);
         $command->setCommand(new ListCommand());
-        $commandTester->execute(array());
-        $this->assertRegExp('/list \[--xml\] \[--raw\] \[--format="\.\.\."\] \[namespace\]/', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $commandTester->execute(array(), array('decorated' => false));
+        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
     }
 
     public function testExecuteForCommandWithXmlOption()
@@ -42,7 +46,7 @@ public function testExecuteForCommandWithXmlOption()
         $commandTester = new CommandTester($command);
         $command->setCommand(new ListCommand());
         $commandTester->execute(array('--format' => 'xml'));
-        $this->assertRegExp('/<command/', $commandTester->getDisplay(), '->execute() returns an XML help text if --xml is passed');
+        $this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --xml is passed');
     }
 
     public function testExecuteForApplicationCommand()
@@ -50,7 +54,9 @@ public function testExecuteForApplicationCommand()
         $application = new Application();
         $commandTester = new CommandTester($application->get('help'));
         $commandTester->execute(array('command_name' => 'list'));
-        $this->assertRegExp('/list \[--xml\] \[--raw\] \[--format="\.\.\."\] \[namespace\]/', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
     }
 
     public function testExecuteForApplicationCommandWithXmlOption()
@@ -58,7 +64,7 @@ public function testExecuteForApplicationCommandWithXmlOption()
         $application = new Application();
         $commandTester = new CommandTester($application->get('help'));
         $commandTester->execute(array('command_name' => 'list', '--format' => 'xml'));
-        $this->assertRegExp('/list \[--xml\] \[--raw\] \[--format="\.\.\."\] \[namespace\]/', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertRegExp('/<command/', $commandTester->getDisplay(), '->execute() returns an XML help text if --format=xml is passed');
+        $this->assertContains('list [--xml] [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --format=xml is passed');
     }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php b/core/vendor/symfony/console/Tests/Command/ListCommandTest.php
similarity index 93%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php
rename to core/vendor/symfony/console/Tests/Command/ListCommandTest.php
index fbb9feeb68731d0e00a5d4cf867a2fd97f26cd59..3578d48856afba569720e4f9ab9285cad8d5cabb 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php
+++ b/core/vendor/symfony/console/Tests/Command/ListCommandTest.php
@@ -22,7 +22,7 @@ public function testExecuteListsCommands()
         $commandTester = new CommandTester($command = $application->get('list'));
         $commandTester->execute(array('command' => $command->getName()), array('decorated' => false));
 
-        $this->assertRegExp('/help   Displays help for a command/', $commandTester->getDisplay(), '->execute() returns a list of available commands');
+        $this->assertRegExp('/help\s{2,}Displays help for a command/', $commandTester->getDisplay(), '->execute() returns a list of available commands');
     }
 
     public function testExecuteListsCommandsWithXmlOption()
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/AbstractDescriptorTest.php b/core/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php
similarity index 97%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/AbstractDescriptorTest.php
rename to core/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php
index 406c6599ba1ea76e6ee43403a7ab2474c2d945a7..f582e7f5ad7975059e2e4216978b8a913a730a96 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/AbstractDescriptorTest.php
+++ b/core/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php
@@ -96,7 +96,7 @@ private function getDescriptionTestData(array $objects)
         return $data;
     }
 
-    private function assertDescription($expectedDescription, $describedObject)
+    protected function assertDescription($expectedDescription, $describedObject)
     {
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
         $this->getDescriptor()->describe($output, $describedObject, array('raw_output' => true));
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/JsonDescriptorTest.php b/core/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php
similarity index 54%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/JsonDescriptorTest.php
rename to core/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php
index 943ea2956a6b315728ece9ddff162048ae50d22d..f9a15612b3f995177cb997f3a3a3d8e85d792b3f 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/JsonDescriptorTest.php
+++ b/core/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Console\Tests\Descriptor;
 
 use Symfony\Component\Console\Descriptor\JsonDescriptor;
+use Symfony\Component\Console\Output\BufferedOutput;
 
 class JsonDescriptorTest extends AbstractDescriptorTest
 {
@@ -24,4 +25,11 @@ protected function getFormat()
     {
         return 'json';
     }
+
+    protected function assertDescription($expectedDescription, $describedObject)
+    {
+        $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
+        $this->getDescriptor()->describe($output, $describedObject, array('raw_output' => true));
+        $this->assertEquals(json_decode(trim($expectedDescription), true), json_decode(trim(str_replace(PHP_EOL, "\n", $output->fetch())), true));
+    }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/MarkdownDescriptorTest.php b/core/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/MarkdownDescriptorTest.php
rename to core/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/ObjectsProvider.php b/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
similarity index 91%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/ObjectsProvider.php
rename to core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
index a3c49d74fe04811d93eea8ff75e1330cd699c012..1f40d2e6a02e7d4b0ffe1edffd6f96710102f981 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/ObjectsProvider.php
+++ b/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
@@ -30,6 +30,7 @@ public static function getInputArguments()
             'input_argument_1' => new InputArgument('argument_name', InputArgument::REQUIRED),
             'input_argument_2' => new InputArgument('argument_name', InputArgument::IS_ARRAY, 'argument description'),
             'input_argument_3' => new InputArgument('argument_name', InputArgument::OPTIONAL, 'argument description', 'default_value'),
+            'input_argument_4' => new InputArgument('argument_name', InputArgument::REQUIRED, "multiline\nargument description"),
         );
     }
 
@@ -40,6 +41,7 @@ public static function getInputOptions()
             'input_option_2' => new InputOption('option_name', 'o', InputOption::VALUE_OPTIONAL, 'option description', 'default_value'),
             'input_option_3' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, 'option description'),
             'input_option_4' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'option description', array()),
+            'input_option_5' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, "multiline\noption description"),
         );
     }
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/TextDescriptorTest.php b/core/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/TextDescriptorTest.php
rename to core/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/XmlDescriptorTest.php b/core/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/XmlDescriptorTest.php
rename to core/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/BarBucCommand.php b/core/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/BarBucCommand.php
rename to core/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication1.php b/core/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication1.php
rename to core/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication2.php b/core/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication2.php
rename to core/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand1.php b/core/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand1.php
rename to core/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand2.php b/core/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php
similarity index 89%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand2.php
rename to core/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php
index bc04ca9141272653c675883b5d8cd1d31189f592..51106b96116a65a67af10184231023f4de2e652c 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand2.php
+++ b/core/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php
@@ -23,6 +23,8 @@ protected function configure()
             ->setName('descriptor:command2')
             ->setDescription('command 2 description')
             ->setHelp('command 2 help')
+            ->addUsage('-o|--option_name <argument_name>')
+            ->addUsage('<argument_name>')
             ->addArgument('argument_name', InputArgument::REQUIRED)
             ->addOption('option_name', 'o', InputOption::VALUE_NONE)
         ;
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DummyOutput.php b/core/vendor/symfony/console/Tests/Fixtures/DummyOutput.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DummyOutput.php
rename to core/vendor/symfony/console/Tests/Fixtures/DummyOutput.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo1Command.php b/core/vendor/symfony/console/Tests/Fixtures/Foo1Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo1Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/Foo1Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo2Command.php b/core/vendor/symfony/console/Tests/Fixtures/Foo2Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo2Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/Foo2Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php b/core/vendor/symfony/console/Tests/Fixtures/Foo3Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo3Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/Foo3Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo4Command.php b/core/vendor/symfony/console/Tests/Fixtures/Foo4Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo4Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/Foo4Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo5Command.php b/core/vendor/symfony/console/Tests/Fixtures/Foo5Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/Foo5Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/Foo5Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooCommand.php b/core/vendor/symfony/console/Tests/Fixtures/FooCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooCommand.php
rename to core/vendor/symfony/console/Tests/Fixtures/FooCommand.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced1Command.php b/core/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced1Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced2Command.php b/core/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced2Command.php
rename to core/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FoobarCommand.php b/core/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FoobarCommand.php
rename to core/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/TestCommand.php b/core/vendor/symfony/console/Tests/Fixtures/TestCommand.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/TestCommand.php
rename to core/vendor/symfony/console/Tests/Fixtures/TestCommand.php
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_1.json b/core/vendor/symfony/console/Tests/Fixtures/application_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa4ae9a0dc9d09c28b350561e2861c8067c00551
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_1.json
@@ -0,0 +1 @@
+{"commands":[{"name":"help","usage":["help [--xml] [--format FORMAT] [--raw] [--] [<command_name>]"],"description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":["list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]"],"description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}}],"namespaces":[{"id":"_global","commands":["help","list"]}]}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md b/core/vendor/symfony/console/Tests/Fixtures/application_1.md
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
rename to core/vendor/symfony/console/Tests/Fixtures/application_1.md
index e3804162df345d2b597218bf91494f8286f2cb08..c389061389238fab26a6d25fe3b5169136a975a5 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_1.md
@@ -8,8 +8,9 @@ help
 ----
 
 * Description: Displays help for a command
-* Usage: `help [--xml] [--format="..."] [--raw] [command_name]`
-* Aliases: <none>
+* Usage:
+
+  * `help [--xml] [--format FORMAT] [--raw] [--] [<command_name>]`
 
 The <info>help</info> command displays help for a given command:
 
@@ -137,8 +138,9 @@ list
 ----
 
 * Description: Lists commands
-* Usage: `list [--xml] [--raw] [--format="..."] [namespace]`
-* Aliases: <none>
+* Usage:
+
+  * `list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]`
 
 The <info>list</info> command lists all commands:
 
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c4cf8f2164cf467fe0492d4767e9fb10b722f3cd
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_1.txt
@@ -0,0 +1,17 @@
+<info>Console Tool</info>
+
+<comment>Usage:</comment>
+  command [options] [arguments]
+
+<comment>Options:</comment>
+  <info>-h, --help</info>            Display this help message
+  <info>-q, --quiet</info>           Do not output any message
+  <info>-V, --version</info>         Display this application version
+  <info>    --ansi</info>            Force ANSI output
+  <info>    --no-ansi</info>         Disable ANSI output
+  <info>-n, --no-interaction</info>  Do not ask any interactive question
+  <info>-v|vv|vvv, --verbose</info>  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+<comment>Available commands:</comment>
+  <info>help</info>  Displays help for a command
+  <info>list</info>  Lists commands
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml b/core/vendor/symfony/console/Tests/Fixtures/application_1.xml
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
rename to core/vendor/symfony/console/Tests/Fixtures/application_1.xml
index 176310886f1d5b797f93f25165efa7e84a0add17..ed84905a06865ddc3cf3f90d9b6b42e695305276 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_1.xml
@@ -2,7 +2,9 @@
 <symfony>
   <commands>
     <command id="help" name="help">
-      <usage>help [--xml] [--format="..."] [--raw] [command_name]</usage>
+      <usages>
+        <usage>help [--xml] [--format FORMAT] [--raw] [--] [&lt;command_name&gt;]</usage>
+      </usages>
       <description>Displays help for a command</description>
       <help>The &lt;info&gt;help&lt;/info&gt; command displays help for a given command:
  
@@ -13,7 +15,6 @@
    &lt;info&gt;php app/console help --format=xml list&lt;/info&gt;
  
  To display the list of available commands, please use the &lt;info&gt;list&lt;/info&gt; command.</help>
-      <aliases/>
       <arguments>
         <argument name="command_name" is_required="0" is_array="0">
           <description>The command name</description>
@@ -59,7 +60,9 @@
       </options>
     </command>
     <command id="list" name="list">
-      <usage>list [--xml] [--raw] [--format="..."] [namespace]</usage>
+      <usages>
+        <usage>list [--xml] [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]</usage>
+      </usages>
       <description>Lists commands</description>
       <help>The &lt;info&gt;list&lt;/info&gt; command lists all commands:
  
@@ -76,7 +79,6 @@
  It's also possible to get raw list of commands (useful for embedding command runner):
  
    &lt;info&gt;php app/console list --raw&lt;/info&gt;</help>
-      <aliases/>
       <arguments>
         <argument name="namespace" is_required="0" is_array="0">
           <description>The namespace name</description>
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_2.json b/core/vendor/symfony/console/Tests/Fixtures/application_2.json
new file mode 100644
index 0000000000000000000000000000000000000000..241d4813b98b4840bf42d45a371fe450bc335858
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_2.json
@@ -0,0 +1 @@
+{"commands":[{"name":"help","usage":["help [--xml] [--format FORMAT] [--raw] [--] [<command_name>]"],"description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":["list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]"],"description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"descriptor:command1","usage":["descriptor:command1", "alias1", "alias2"],"description":"command 1 description","help":"command 1 help","definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"descriptor:command2","usage":["descriptor:command2 [-o|--option_name] [--] <argument_name>", "descriptor:command2 -o|--option_name <argument_name>", "descriptor:command2 <argument_name>"],"description":"command 2 description","help":"command 2 help","definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}}],"namespaces":[{"id":"_global","commands":["alias1","alias2","help","list"]},{"id":"descriptor","commands":["descriptor:command1","descriptor:command2"]}]}
\ No newline at end of file
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md b/core/vendor/symfony/console/Tests/Fixtures/application_2.md
similarity index 94%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
rename to core/vendor/symfony/console/Tests/Fixtures/application_2.md
index 7492886ea3a00b2824df9fb31068a17af4bf16a8..8e0bfd35025302a22e6b044f32ba369fb21de44d 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_2.md
@@ -15,8 +15,9 @@ help
 ----
 
 * Description: Displays help for a command
-* Usage: `help [--xml] [--format="..."] [--raw] [command_name]`
-* Aliases: <none>
+* Usage:
+
+  * `help [--xml] [--format FORMAT] [--raw] [--] [<command_name>]`
 
 The <info>help</info> command displays help for a given command:
 
@@ -144,8 +145,9 @@ list
 ----
 
 * Description: Lists commands
-* Usage: `list [--xml] [--raw] [--format="..."] [namespace]`
-* Aliases: <none>
+* Usage:
+
+  * `list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]`
 
 The <info>list</info> command lists all commands:
 
@@ -209,8 +211,11 @@ descriptor:command1
 -------------------
 
 * Description: command 1 description
-* Usage: `descriptor:command1`
-* Aliases: `alias1`, `alias2`
+* Usage:
+
+  * `descriptor:command1`
+  * `alias1`
+  * `alias2`
 
 command 1 help
 
@@ -290,8 +295,11 @@ descriptor:command2
 -------------------
 
 * Description: command 2 description
-* Usage: `descriptor:command2 [-o|--option_name] argument_name`
-* Aliases: <none>
+* Usage:
+
+  * `descriptor:command2 [-o|--option_name] [--] <argument_name>`
+  * `descriptor:command2 -o|--option_name <argument_name>`
+  * `descriptor:command2 <argument_name>`
 
 command 2 help
 
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..292aa829d809d47097f6bd9ae30cfc0bb282c3ba
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_2.txt
@@ -0,0 +1,22 @@
+<info>My Symfony application</info> version <comment>v1.0</comment>
+
+<comment>Usage:</comment>
+  command [options] [arguments]
+
+<comment>Options:</comment>
+  <info>-h, --help</info>            Display this help message
+  <info>-q, --quiet</info>           Do not output any message
+  <info>-V, --version</info>         Display this application version
+  <info>    --ansi</info>            Force ANSI output
+  <info>    --no-ansi</info>         Disable ANSI output
+  <info>-n, --no-interaction</info>  Do not ask any interactive question
+  <info>-v|vv|vvv, --verbose</info>  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+<comment>Available commands:</comment>
+  <info>alias1</info>               command 1 description
+  <info>alias2</info>               command 1 description
+  <info>help</info>                 Displays help for a command
+  <info>list</info>                 Lists commands
+ <comment>descriptor</comment>
+  <info>descriptor:command1</info>  command 1 description
+  <info>descriptor:command2</info>  command 2 description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml b/core/vendor/symfony/console/Tests/Fixtures/application_2.xml
similarity index 92%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
rename to core/vendor/symfony/console/Tests/Fixtures/application_2.xml
index a7d65b4f86ce64c11c15dec59f07fedb5befe903..18e5db1f64a5e977e97fc6f31fcfd6bd80e2da7d 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_2.xml
@@ -2,7 +2,9 @@
 <symfony name="My Symfony application" version="v1.0">
   <commands>
     <command id="help" name="help">
-      <usage>help [--xml] [--format="..."] [--raw] [command_name]</usage>
+      <usages>
+        <usage>help [--xml] [--format FORMAT] [--raw] [--] [&lt;command_name&gt;]</usage>
+      </usages>
       <description>Displays help for a command</description>
       <help>The &lt;info&gt;help&lt;/info&gt; command displays help for a given command:
  
@@ -13,7 +15,6 @@
    &lt;info&gt;php app/console help --format=xml list&lt;/info&gt;
  
  To display the list of available commands, please use the &lt;info&gt;list&lt;/info&gt; command.</help>
-      <aliases/>
       <arguments>
         <argument name="command_name" is_required="0" is_array="0">
           <description>The command name</description>
@@ -59,7 +60,9 @@
       </options>
     </command>
     <command id="list" name="list">
-      <usage>list [--xml] [--raw] [--format="..."] [namespace]</usage>
+      <usages>
+        <usage>list [--xml] [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]</usage>
+      </usages>
       <description>Lists commands</description>
       <help>The &lt;info&gt;list&lt;/info&gt; command lists all commands:
  
@@ -76,7 +79,6 @@
  It's also possible to get raw list of commands (useful for embedding command runner):
  
    &lt;info&gt;php app/console list --raw&lt;/info&gt;</help>
-      <aliases/>
       <arguments>
         <argument name="namespace" is_required="0" is_array="0">
           <description>The namespace name</description>
@@ -99,13 +101,13 @@
       </options>
     </command>
     <command id="descriptor:command1" name="descriptor:command1">
-      <usage>descriptor:command1</usage>
+      <usages>
+        <usage>descriptor:command1</usage>
+        <usage>alias1</usage>
+        <usage>alias2</usage>
+      </usages>
       <description>command 1 description</description>
       <help>command 1 help</help>
-      <aliases>
-        <alias>alias1</alias>
-        <alias>alias2</alias>
-      </aliases>
       <arguments/>
       <options>
         <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
@@ -132,10 +134,13 @@
       </options>
     </command>
     <command id="descriptor:command2" name="descriptor:command2">
-      <usage>descriptor:command2 [-o|--option_name] argument_name</usage>
+      <usages>
+        <usage>descriptor:command2 [-o|--option_name] [--] &lt;argument_name&gt;</usage>
+        <usage>descriptor:command2 -o|--option_name &lt;argument_name&gt;</usage>
+        <usage>descriptor:command2 &lt;argument_name&gt;</usage>
+      </usages>
       <description>command 2 description</description>
       <help>command 2 help</help>
-      <aliases/>
       <arguments>
         <argument name="argument_name" is_required="1" is_array="0">
           <description></description>
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_astext1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_astext1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..19dacb23bf7bc7a039f1eab472b960d1a85886d6
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_astext1.txt
@@ -0,0 +1,20 @@
+<info>Console Tool</info>
+
+<comment>Usage:</comment>
+  command [options] [arguments]
+
+<comment>Options:</comment>
+  <info>-h, --help</info>            Display this help message
+  <info>-q, --quiet</info>           Do not output any message
+  <info>-V, --version</info>         Display this application version
+  <info>    --ansi</info>            Force ANSI output
+  <info>    --no-ansi</info>         Disable ANSI output
+  <info>-n, --no-interaction</info>  Do not ask any interactive question
+  <info>-v|vv|vvv, --verbose</info>  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+<comment>Available commands:</comment>
+  <info>afoobar</info>  The foo:bar command
+  <info>help</info>     Displays help for a command
+  <info>list</info>     Lists commands
+ <comment>foo</comment>
+  <info>foo:bar</info>  The foo:bar command
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_astext2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_astext2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c99ccdda7a6c6388dffc7e3a8fb9c3d6ca88f32a
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_astext2.txt
@@ -0,0 +1,16 @@
+<info>Console Tool</info>
+
+<comment>Usage:</comment>
+  command [options] [arguments]
+
+<comment>Options:</comment>
+  <info>-h, --help</info>            Display this help message
+  <info>-q, --quiet</info>           Do not output any message
+  <info>-V, --version</info>         Display this application version
+  <info>    --ansi</info>            Force ANSI output
+  <info>    --no-ansi</info>         Disable ANSI output
+  <info>-n, --no-interaction</info>  Do not ask any interactive question
+  <info>-v|vv|vvv, --verbose</info>  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+<comment>Available commands for the "foo" namespace:</comment>
+  <info>foo:bar</info>  The foo:bar command
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_asxml1.txt
similarity index 94%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_asxml1.txt
index d9567819a17f1c97e2334a84c326741eadfbbdfe..edc9d3f894ac27b9bb1262ca38804920653ddd8e 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_asxml1.txt
@@ -2,7 +2,9 @@
 <symfony>
   <commands>
     <command id="help" name="help">
-  <usage>help [--xml] [--format="..."] [--raw] [command_name]</usage>
+    <usages>
+      <usage>help [--xml] [--format FORMAT] [--raw] [--] [&lt;command_name&gt;]</usage>
+    </usages>
   <description>Displays help for a command</description>
   <help>The &lt;info&gt;help&lt;/info&gt; command displays help for a given command:
  
@@ -13,7 +15,6 @@
    &lt;info&gt;php app/console help --format=xml list&lt;/info&gt;
  
  To display the list of available commands, please use the &lt;info&gt;list&lt;/info&gt; command.</help>
-  <aliases />
   <arguments>
     <argument name="command_name" is_required="0" is_array="0">
       <description>The command name</description>
@@ -59,7 +60,9 @@
   </options>
 </command>
     <command id="list" name="list">
-  <usage>list [--xml] [--raw] [--format="..."] [namespace]</usage>
+    <usages>
+      <usage>list [--xml] [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]</usage>
+    </usages>
   <description>Lists commands</description>
   <help>The &lt;info&gt;list&lt;/info&gt; command lists all commands:
  
@@ -76,7 +79,6 @@
  It's also possible to get raw list of commands (useful for embedding command runner):
  
    &lt;info&gt;php app/console list --raw&lt;/info&gt;</help>
-  <aliases/>
   <arguments>
     <argument name="namespace" is_required="0" is_array="0">
       <description>The namespace name</description>
@@ -99,12 +101,12 @@
   </options>
 </command>
     <command id="foo:bar" name="foo:bar">
-  <usage>foo:bar</usage>
+    <usages>
+      <usage>foo:bar</usage>
+      <usage>afoobar</usage>
+    </usages>
   <description>The foo:bar command</description>
   <help/>
-  <aliases>
-    <alias>afoobar</alias>
-  </aliases>
   <arguments/>
     <options>
       <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_asxml2.txt
similarity index 94%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_asxml2.txt
index 0b30b201f2ff7ced74eec8f940003a2653005fbb..8fa3b699eba030dbc47e38a2d74ca130d7720dcd 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_asxml2.txt
@@ -2,12 +2,12 @@
 <symfony>
   <commands namespace="foo">
     <command id="foo:bar" name="foo:bar">
-  <usage>foo:bar</usage>
+    <usages>
+      <usage>foo:bar</usage>
+      <usage>afoobar</usage>
+    </usages>
   <description>The foo:bar command</description>
   <help/>
-  <aliases>
-    <alias>afoobar</alias>
-  </aliases>
   <arguments/>
     <options>
       <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt b/core/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception1.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt
similarity index 73%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception2.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt
index c758129bee967c2f7f3a684055debd9ce9873fdc..3d9d363b698976f56dd76db4cb9d52425ae1e606 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception2.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt
@@ -6,6 +6,6 @@
                                       
 
 
-list [--xml] [--raw] [--format="..."] [namespace]
+list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]
 
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception3.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception3.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception3decorated.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception3decorated.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception4.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception4.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth1.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_renderexception_doublewidth2.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_run1.txt b/core/vendor/symfony/console/Tests/Fixtures/application_run1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0dc2730983f4bc214a66dcfcdfac6ebdc898c5c4
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_run1.txt
@@ -0,0 +1,17 @@
+Console Tool
+
+Usage:
+  command [options] [arguments]
+
+Options:
+  -h, --help            Display this help message
+  -q, --quiet           Do not output any message
+  -V, --version         Display this application version
+      --ansi            Force ANSI output
+      --no-ansi         Disable ANSI output
+  -n, --no-interaction  Do not ask any interactive question
+  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+Available commands:
+  help  Displays help for a command
+  list  Lists commands
diff --git a/core/vendor/symfony/console/Tests/Fixtures/application_run2.txt b/core/vendor/symfony/console/Tests/Fixtures/application_run2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4f7699751772902dbd6a4986edeb6d77a01c32ad
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_run2.txt
@@ -0,0 +1,29 @@
+Usage:
+  help [options] [--] [<command_name>]
+
+Arguments:
+  command               The command to execute
+  command_name          The command name [default: "help"]
+
+Options:
+      --xml             To output help as XML
+      --format=FORMAT   To output help in other formats [default: "txt"]
+      --raw             To output raw command help
+  -h, --help            Display this help message
+  -q, --quiet           Do not output any message
+  -V, --version         Display this application version
+      --ansi            Force ANSI output
+      --no-ansi         Disable ANSI output
+  -n, --no-interaction  Do not ask any interactive question
+  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+Help:
+ The help command displays help for a given command:
+ 
+   php app/console help list
+ 
+ You can also output the help in other formats by using the --format option:
+ 
+   php app/console help --format=xml list
+ 
+ To display the list of available commands, please use the list command.
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run3.txt b/core/vendor/symfony/console/Tests/Fixtures/application_run3.txt
similarity index 64%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run3.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_run3.txt
index 01397755054e49e432b5d4c6e35cc8f18306ea6d..748982475360f2be18656c5a21f8932c9f51c365 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run3.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/application_run3.txt
@@ -1,13 +1,13 @@
 Usage:
- list [--xml] [--raw] [--format="..."] [namespace]
+  list [options] [--] [<namespace>]
 
 Arguments:
- namespace  The namespace name
+  namespace            The namespace name
 
 Options:
- --xml      To output list as XML
- --raw      To output raw command list
- --format   To output list in other formats (default: "txt")
+      --xml            To output list as XML
+      --raw            To output raw command list
+      --format=FORMAT  To output list in other formats [default: "txt"]
 
 Help:
  The list command lists all commands:
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run4.txt b/core/vendor/symfony/console/Tests/Fixtures/application_run4.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run4.txt
rename to core/vendor/symfony/console/Tests/Fixtures/application_run4.txt
diff --git a/core/vendor/symfony/console/Tests/Fixtures/command_1.json b/core/vendor/symfony/console/Tests/Fixtures/command_1.json
new file mode 100644
index 0000000000000000000000000000000000000000..20f310b457eb07735b69b0adfd93a0c252eadacf
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_1.json
@@ -0,0 +1 @@
+{"name":"descriptor:command1","usage":["descriptor:command1", "alias1", "alias2"],"description":"command 1 description","help":"command 1 help","definition":{"arguments":[],"options":[]}}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.md b/core/vendor/symfony/console/Tests/Fixtures/command_1.md
similarity index 60%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.md
rename to core/vendor/symfony/console/Tests/Fixtures/command_1.md
index 2cef9a2d781ed18940687f1f3b852fb490a6e1ce..34ed3ea7709b3f4901390d71f1904ceb3249102a 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.md
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_1.md
@@ -2,7 +2,10 @@ descriptor:command1
 -------------------
 
 * Description: command 1 description
-* Usage: `descriptor:command1`
-* Aliases: `alias1`, `alias2`
+* Usage:
+
+  * `descriptor:command1`
+  * `alias1`
+  * `alias2`
 
 command 1 help
diff --git a/core/vendor/symfony/console/Tests/Fixtures/command_1.txt b/core/vendor/symfony/console/Tests/Fixtures/command_1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..28e14a057a75a59c77a011b8cb58ee471bccc1a6
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_1.txt
@@ -0,0 +1,7 @@
+<comment>Usage:</comment>
+  descriptor:command1
+  alias1
+  alias2
+
+<comment>Help:</comment>
+ command 1 help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.xml b/core/vendor/symfony/console/Tests/Fixtures/command_1.xml
similarity index 65%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.xml
rename to core/vendor/symfony/console/Tests/Fixtures/command_1.xml
index dcfa6fa5044e763ff230bec430147118b4593d4c..838b9bd91f837b06fd844d649f848d0f6f7df538 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.xml
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_1.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <command id="descriptor:command1" name="descriptor:command1">
-  <usage>descriptor:command1</usage>
+  <usages>
+    <usage>descriptor:command1</usage>
+    <usage>alias1</usage>
+    <usage>alias2</usage>
+  </usages>
   <description>command 1 description</description>
   <help>command 1 help</help>
-  <aliases>
-    <alias>alias1</alias>
-    <alias>alias2</alias>
-  </aliases>
   <arguments/>
   <options/>
 </command>
diff --git a/core/vendor/symfony/console/Tests/Fixtures/command_2.json b/core/vendor/symfony/console/Tests/Fixtures/command_2.json
new file mode 100644
index 0000000000000000000000000000000000000000..38edd1e2098db4a045bfe43ced88766e574a070b
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_2.json
@@ -0,0 +1 @@
+{"name":"descriptor:command2","usage":["descriptor:command2 [-o|--option_name] [--] <argument_name>", "descriptor:command2 -o|--option_name <argument_name>", "descriptor:command2 <argument_name>"],"description":"command 2 description","help":"command 2 help","definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}}}}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.md b/core/vendor/symfony/console/Tests/Fixtures/command_2.md
similarity index 69%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.md
rename to core/vendor/symfony/console/Tests/Fixtures/command_2.md
index 5257c0d3f2cfc4a88709a47f3b7eb8c68d4b4efe..6f538b640794718c12b6f626fb5fec352f9471a8 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.md
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_2.md
@@ -2,8 +2,11 @@ descriptor:command2
 -------------------
 
 * Description: command 2 description
-* Usage: `descriptor:command2 [-o|--option_name] argument_name`
-* Aliases: <none>
+* Usage:
+
+  * `descriptor:command2 [-o|--option_name] [--] <argument_name>`
+  * `descriptor:command2 -o|--option_name <argument_name>`
+  * `descriptor:command2 <argument_name>`
 
 command 2 help
 
diff --git a/core/vendor/symfony/console/Tests/Fixtures/command_2.txt b/core/vendor/symfony/console/Tests/Fixtures/command_2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..72f7ce05869d2333b892f7b4ea7af810f1d0af69
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_2.txt
@@ -0,0 +1,13 @@
+<comment>Usage:</comment>
+  descriptor:command2 [options] [--] <argument_name>
+  descriptor:command2 -o|--option_name <argument_name>
+  descriptor:command2 <argument_name>
+
+<comment>Arguments:</comment>
+  <info>argument_name</info>      
+
+<comment>Options:</comment>
+  <info>-o, --option_name</info>  
+
+<comment>Help:</comment>
+ command 2 help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.xml b/core/vendor/symfony/console/Tests/Fixtures/command_2.xml
similarity index 68%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.xml
rename to core/vendor/symfony/console/Tests/Fixtures/command_2.xml
index c411c36c3d285201a0d036569988622d33995b28..67364caa4ede3b3df9af073ee479b45a769a4bbe 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.xml
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_2.xml
@@ -1,9 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <command id="descriptor:command2" name="descriptor:command2">
-  <usage>descriptor:command2 [-o|--option_name] argument_name</usage>
+  <usages>
+    <usage>descriptor:command2 [-o|--option_name] [--] &lt;argument_name&gt;</usage>
+    <usage>descriptor:command2 -o|--option_name &lt;argument_name&gt;</usage>
+    <usage>descriptor:command2 &lt;argument_name&gt;</usage>
+  </usages>
   <description>command 2 description</description>
   <help>command 2 help</help>
-  <aliases/>
   <arguments>
     <argument name="argument_name" is_required="1" is_array="0">
       <description></description>
diff --git a/core/vendor/symfony/console/Tests/Fixtures/command_astext.txt b/core/vendor/symfony/console/Tests/Fixtures/command_astext.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e206388078db02778f248ff5b0996c44b7d0d20
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_astext.txt
@@ -0,0 +1,18 @@
+<comment>Usage:</comment>
+  namespace:name
+  name
+
+<comment>Arguments:</comment>
+  <info>command</info>               The command to execute
+
+<comment>Options:</comment>
+  <info>-h, --help</info>            Display this help message
+  <info>-q, --quiet</info>           Do not output any message
+  <info>-V, --version</info>         Display this application version
+  <info>    --ansi</info>            Force ANSI output
+  <info>    --no-ansi</info>         Disable ANSI output
+  <info>-n, --no-interaction</info>  Do not ask any interactive question
+  <info>-v|vv|vvv, --verbose</info>  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+<comment>Help:</comment>
+ help
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt b/core/vendor/symfony/console/Tests/Fixtures/command_asxml.txt
similarity index 95%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt
rename to core/vendor/symfony/console/Tests/Fixtures/command_asxml.txt
index 57542faad5b8f3008a027abeed805ee33860c125..5e776238aa0a1cd01a09b7f7d271389badded26d 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/command_asxml.txt
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <command id="namespace:name" name="namespace:name">
-  <usage>namespace:name</usage>
+  <usages>
+    <usage>namespace:name</usage>
+    <usage>name</usage>
+  </usages>
   <description>description</description>
   <help>help</help>
-  <aliases>
-    <alias>name</alias>
-  </aliases>
   <arguments>
     <argument name="command" is_required="1" is_array="0">
       <description>The command to execute</description>
diff --git a/core/vendor/symfony/console/Tests/Fixtures/definition_astext.txt b/core/vendor/symfony/console/Tests/Fixtures/definition_astext.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0431c072ab2206158c175f27a87dd694ad449d41
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/definition_astext.txt
@@ -0,0 +1,11 @@
+<comment>Arguments:</comment>
+  <info>foo</info>                The foo argument
+  <info>baz</info>                The baz argument<comment> [default: true]</comment>
+  <info>bar</info>                The bar argument<comment> [default: ["http://foo.com/"]]</comment>
+
+<comment>Options:</comment>
+  <info>-f, --foo=FOO</info>      The foo option
+  <info>    --baz[=BAZ]</info>    The baz option<comment> [default: false]</comment>
+  <info>-b, --bar[=BAR]</info>    The bar option<comment> [default: "bar"]</comment>
+  <info>    --qux[=QUX]</info>    The qux option<comment> [default: ["http://foo.com/","bar"]]</comment><comment> (multiple values allowed)</comment>
+  <info>    --qux2[=QUX2]</info>  The qux2 option<comment> [default: {"foo":"bar"}]</comment><comment> (multiple values allowed)</comment>
\ No newline at end of file
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/definition_asxml.txt b/core/vendor/symfony/console/Tests/Fixtures/definition_asxml.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/definition_asxml.txt
rename to core/vendor/symfony/console/Tests/Fixtures/definition_asxml.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.json b/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_1.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.md b/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_1.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt b/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..55035183f67f095be7457244d8be246c23a5c07e
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt
@@ -0,0 +1 @@
+  <info>argument_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.xml b/core/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.json b/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_2.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.md b/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_2.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt b/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e713660743f750408509e9370329944f4c8f462b
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt
@@ -0,0 +1 @@
+  <info>argument_name</info>  argument description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.xml b/core/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.json b/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_3.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.md b/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_3.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt b/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6b76639e001283fb566aad8bb32fc46be189ab58
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt
@@ -0,0 +1 @@
+  <info>argument_name</info>  argument description<comment> [default: "default_value"]</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.xml b/core/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.json b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.json
new file mode 100644
index 0000000000000000000000000000000000000000..8067a4d1b127942f97099ba6f99497141b7bd46f
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.json
@@ -0,0 +1 @@
+{"name":"argument_name","is_required":true,"is_array":false,"description":"multiline argument description","default":null}
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.md b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.md
new file mode 100644
index 0000000000000000000000000000000000000000..f026ab37672bfa86acbbda2e55c84f0f8fd0eee6
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.md
@@ -0,0 +1,8 @@
+**argument_name:**
+
+* Name: argument_name
+* Is required: yes
+* Is array: no
+* Description: multiline
+  argument description
+* Default: `NULL`
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aa74e8ceb250703ad976e076730a18f3e13aae57
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt
@@ -0,0 +1,2 @@
+  <info>argument_name</info>  multiline
+                              argument description
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ca135ec2cb488e54b8b9f8c92131c1c941645ed
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<argument name="argument_name" is_required="1" is_array="0">
+  <description>multiline
+argument description</description>
+  <defaults/>
+</argument>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.json b/core/vendor/symfony/console/Tests/Fixtures/input_definition_1.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_1.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.md b/core/vendor/symfony/console/Tests/Fixtures/input_definition_1.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_1.md
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.txt b/core/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.txt
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.xml b/core/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.json b/core/vendor/symfony/console/Tests/Fixtures/input_definition_2.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_2.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.md b/core/vendor/symfony/console/Tests/Fixtures/input_definition_2.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_2.md
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.txt b/core/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt
similarity index 50%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.txt
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt
index 0db9f66263a71e6c24e2ecae22b38b28c75b9044..73b0f308a90ede39f56054d2fdba704b44408002 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.txt
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt
@@ -1,2 +1,2 @@
 <comment>Arguments:</comment>
- <info>argument_name </info>
+  <info>argument_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.xml b/core/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.json b/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_3.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.md b/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_3.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt b/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c02766fd3c113746eb5319be9a974487d49836a5
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt
@@ -0,0 +1,2 @@
+<comment>Options:</comment>
+  <info>-o, --option_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.xml b/core/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.json b/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_4.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.md b/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_4.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt b/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..63aa81d2d1643e38886d76b071e29c53d11e74c2
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt
@@ -0,0 +1,5 @@
+<comment>Arguments:</comment>
+  <info>argument_name</info>      
+
+<comment>Options:</comment>
+  <info>-o, --option_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.xml b/core/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_1.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_1.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_1.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_1.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_1.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3a5e4eede487b1803bba97e66dd42ff7928abd5d
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_1.txt
@@ -0,0 +1 @@
+  <info>-o, --option_name</info>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_1.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_1.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_2.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_2.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_2.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_2.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_2.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1009eff162e6b6fe0e26c0db1862de5699c03112
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_2.txt
@@ -0,0 +1 @@
+  <info>-o, --option_name[=OPTION_NAME]</info>  option description<comment> [default: "default_value"]</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_2.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_2.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_3.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_3.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_3.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_3.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_3.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..947bb6527bb9b43b60b82facd13c70cf7f2a22dc
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_3.txt
@@ -0,0 +1 @@
+  <info>-o, --option_name=OPTION_NAME</info>  option description
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_3.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_3.xml
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_4.json
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.json
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_4.json
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_4.md
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.md
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_4.md
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_4.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..27edf77b4b81a1f968b1d5bc8ba0aa4881a4fc52
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_4.txt
@@ -0,0 +1 @@
+  <info>-o, --option_name[=OPTION_NAME]</info>  option description<comment> (multiple values allowed)</comment>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_4.xml
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.xml
rename to core/vendor/symfony/console/Tests/Fixtures/input_option_4.xml
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_5.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.json
new file mode 100644
index 0000000000000000000000000000000000000000..35a1405fa436d98e7911534b9a13ed6526f9d487
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.json
@@ -0,0 +1 @@
+{"name":"--option_name","shortcut":"-o","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"multiline option description","default":null}
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_5.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.md
new file mode 100644
index 0000000000000000000000000000000000000000..82f51cad30ddfa024a7c500ce7ae610ab94a7e48
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.md
@@ -0,0 +1,10 @@
+**option_name:**
+
+* Name: `--option_name`
+* Shortcut: `-o`
+* Accept value: yes
+* Is value required: yes
+* Is multiple: no
+* Description: multiline
+  option description
+* Default: `NULL`
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_5.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4368883cc721731a6aad67129b5b6cd99d448f96
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.txt
@@ -0,0 +1,2 @@
+  <info>-o, --option_name=OPTION_NAME</info>  multiline
+                                              option description
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_5.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..90040ccd029873ecfed7e6d7b03483aa40707ba3
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Fixtures/input_option_5.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<option name="--option_name" shortcut="-o" accept_value="1" is_value_required="1" is_multiple="0">
+  <description>multiline
+option description</description>
+  <defaults/>
+</option>
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterStyleStackTest.php b/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterStyleStackTest.php
rename to core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterStyleTest.php b/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterStyleTest.php
rename to core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php b/core/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php
rename to core/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php b/core/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php b/core/vendor/symfony/console/Tests/Helper/HelperSetTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php
rename to core/vendor/symfony/console/Tests/Helper/HelperSetTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyDialogHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyDialogHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php b/core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php b/core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php
rename to core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php b/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
similarity index 78%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php
rename to core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
index 0ab08493710166f52e72673aed5cbfd0af96a683..ccd889b0aa24c575af838d798a4f6a3e0d843a03 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
@@ -143,27 +143,39 @@ public function testAskHiddenResponse()
         $this->assertEquals('8AM', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
     }
 
-    public function testAskConfirmation()
+    /**
+     * @dataProvider getAskConfirmationData
+     */
+    public function testAskConfirmation($question, $expected, $default = true)
     {
         $dialog = new QuestionHelper();
 
-        $dialog->setInputStream($this->getInputStream("\n\n"));
-        $question = new ConfirmationQuestion('Do you like French fries?');
-        $this->assertTrue($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
-        $question = new ConfirmationQuestion('Do you like French fries?', false);
-        $this->assertFalse($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
+        $dialog->setInputStream($this->getInputStream($question."\n"));
+        $question = new ConfirmationQuestion('Do you like French fries?', $default);
+        $this->assertEquals($expected, $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question), 'confirmation question should '.($expected ? 'pass' : 'cancel'));
+    }
+
+    public function getAskConfirmationData()
+    {
+        return array(
+            array('', true),
+            array('', false, false),
+            array('y', true),
+            array('yes', true),
+            array('n', false),
+            array('no', false),
+        );
+    }
 
-        $dialog->setInputStream($this->getInputStream("y\nyes\n"));
-        $question = new ConfirmationQuestion('Do you like French fries?', false);
+    public function testAskConfirmationWithCustomTrueAnswer()
+    {
+        $dialog = new QuestionHelper();
+
+        $dialog->setInputStream($this->getInputStream("j\ny\n"));
+        $question = new ConfirmationQuestion('Do you like French fries?', false, '/^(j|y)/i');
         $this->assertTrue($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
-        $question = new ConfirmationQuestion('Do you like French fries?', false);
+        $question = new ConfirmationQuestion('Do you like French fries?', false, '/^(j|y)/i');
         $this->assertTrue($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
-
-        $dialog->setInputStream($this->getInputStream("n\nno\n"));
-        $question = new ConfirmationQuestion('Do you like French fries?', true);
-        $this->assertFalse($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
-        $question = new ConfirmationQuestion('Do you like French fries?', true);
-        $this->assertFalse($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
     }
 
     public function testAskAndValidate()
@@ -198,6 +210,60 @@ public function testAskAndValidate()
         }
     }
 
+    /**
+     * @dataProvider answerProvider
+     */
+    public function testSelectChoiceFromChoiceList($providedAnswer, $expectedValue)
+    {
+        $possibleChoices = array(
+            'env_1' => 'My environment 1',
+            'env_2' => 'My environment',
+            'env_3' => 'My environment',
+        );
+
+        $dialog = new QuestionHelper();
+        $dialog->setInputStream($this->getInputStream($providedAnswer."\n"));
+        $helperSet = new HelperSet(array(new FormatterHelper()));
+        $dialog->setHelperSet($helperSet);
+
+        $question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
+        $answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
+
+        $this->assertSame($expectedValue, $answer);
+    }
+
+    public function testAmbiguousChoiceFromChoicelist()
+    {
+        $possibleChoices = array(
+            'env_1' => 'My environment 1',
+            'env_2' => 'My environment',
+            'env_3' => 'My environment',
+        );
+
+        $dialog = new QuestionHelper();
+        $dialog->setInputStream($this->getInputStream("My environment\n"));
+        $helperSet = new HelperSet(array(new FormatterHelper()));
+        $dialog->setHelperSet($helperSet);
+
+        $question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
+
+        try {
+            $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
+        } catch (\InvalidArgumentException $e) {
+            $this->assertEquals('The provided answer is ambiguous. Value should be one of env_2 or env_3.', $e->getMessage());
+        }
+    }
+
+    public function answerProvider()
+    {
+        return array(
+            array('env_1', 'env_1'),
+            array('env_2', 'env_2'),
+            array('env_3', 'env_3'),
+            array('My environment 1', 'env_1'),
+        );
+    }
+
     public function testNoInteraction()
     {
         $dialog = new QuestionHelper();
diff --git a/core/vendor/symfony/console/Tests/Helper/TableStyleTest.php b/core/vendor/symfony/console/Tests/Helper/TableStyleTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..587d8414e6e201939dd9c8c393c634e2ebfab33f
--- /dev/null
+++ b/core/vendor/symfony/console/Tests/Helper/TableStyleTest.php
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Helper\TableStyle;
+
+class TableStyleTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException        \InvalidArgumentException
+     * @expectedExceptionMessage Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).
+     */
+    public function testSetPadTypeWithInvalidType()
+    {
+        $style = new TableStyle();
+        $style->setPadType('TEST');
+    }
+}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableTest.php b/core/vendor/symfony/console/Tests/Helper/TableTest.php
similarity index 57%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableTest.php
rename to core/vendor/symfony/console/Tests/Helper/TableTest.php
index 18a2ab6bcffbb79d4edbdcca4deda69fafb18266..3db51f45b0ab9c4e80c2a8eb91eabdd0f0058f90 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/TableTest.php
@@ -14,6 +14,7 @@
 use Symfony\Component\Console\Helper\Table;
 use Symfony\Component\Console\Helper\TableStyle;
 use Symfony\Component\Console\Helper\TableSeparator;
+use Symfony\Component\Console\Helper\TableCell;
 use Symfony\Component\Console\Output\StreamOutput;
 
 class TableTest extends \PHPUnit_Framework_TestCase
@@ -250,6 +251,214 @@ public function testRenderProvider()
 | 9971-5-0210-0                    | A Tale of Two Cities | Charles Dickens |
 +----------------------------------+----------------------+-----------------+
 
+TABLE
+            ),
+            'Cell with colspan' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
+                    new TableSeparator(),
+                    array(new TableCell('Divine Comedy(Dante Alighieri)', array('colspan' => 3))),
+                    new TableSeparator(),
+                    array(
+                        new TableCell('Arduino: A Quick-Start Guide', array('colspan' => 2)),
+                        'Mark Schmidt',
+                    ),
+                    new TableSeparator(),
+                    array(
+                        '9971-5-0210-0',
+                        new TableCell("A Tale of \nTwo Cities", array('colspan' => 2)),
+                    ),
+                ),
+                'default',
+<<<TABLE
++----------------+---------------+-----------------+
+| ISBN           | Title         | Author          |
++----------------+---------------+-----------------+
+| 99921-58-10-7  | Divine Comedy | Dante Alighieri |
++----------------+---------------+-----------------+
+| Divine Comedy(Dante Alighieri)                   |
++----------------+---------------+-----------------+
+| Arduino: A Quick-Start Guide   | Mark Schmidt    |
++----------------+---------------+-----------------+
+| 9971-5-0210-0  | A Tale of                       |
+|                | Two Cities                      |
++----------------+---------------+-----------------+
+
+TABLE
+            ),
+            'Cell with rowspan' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array(
+                        new TableCell('9971-5-0210-0', array('rowspan' => 3)),
+                        'Divine Comedy',
+                        'Dante Alighieri',
+                    ),
+                    array('A Tale of Two Cities', 'Charles Dickens'),
+                    array("The Lord of \nthe Rings", "J. R. \nR. Tolkien"),
+                    new TableSeparator(),
+                    array('80-902734-1-6', new TableCell("And Then \nThere \nWere None", array('rowspan' => 3)), 'Agatha Christie'),
+                    array('80-902734-1-7', 'Test'),
+                ),
+                'default',
+<<<TABLE
++---------------+----------------------+-----------------+
+| ISBN          | Title                | Author          |
++---------------+----------------------+-----------------+
+| 9971-5-0210-0 | Divine Comedy        | Dante Alighieri |
+|               | A Tale of Two Cities | Charles Dickens |
+|               | The Lord of          | J. R.           |
+|               | the Rings            | R. Tolkien      |
++---------------+----------------------+-----------------+
+| 80-902734-1-6 | And Then             | Agatha Christie |
+| 80-902734-1-7 | There                | Test            |
+|               | Were None            |                 |
++---------------+----------------------+-----------------+
+
+TABLE
+            ),
+            'Cell with rowspan and colspan' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array(
+                        new TableCell('9971-5-0210-0', array('rowspan' => 2, 'colspan' => 2)),
+                        'Dante Alighieri',
+                    ),
+                    array('Charles Dickens'),
+                    new TableSeparator(),
+                    array(
+                        'Dante Alighieri',
+                        new TableCell('9971-5-0210-0', array('rowspan' => 3, 'colspan' => 2)),
+                    ),
+                    array('J. R. R. Tolkien'),
+                    array('J. R. R'),
+                ),
+                'default',
+<<<TABLE
++------------------+--------+-----------------+
+| ISBN             | Title  | Author          |
++------------------+--------+-----------------+
+| 9971-5-0210-0             | Dante Alighieri |
+|                           | Charles Dickens |
++------------------+--------+-----------------+
+| Dante Alighieri  | 9971-5-0210-0            |
+| J. R. R. Tolkien |                          |
+| J. R. R          |                          |
++------------------+--------+-----------------+
+
+TABLE
+            ),
+            'Cell with rowspan and colspan contains new line break' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array(
+                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
+                        'Dante Alighieri',
+                    ),
+                    array('Charles Dickens'),
+                    new TableSeparator(),
+                    array(
+                        'Dante Alighieri',
+                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
+                    ),
+                    array('Charles Dickens'),
+                    new TableSeparator(),
+                    array(
+                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
+                        new TableCell("Dante \nAlighieri", array('rowspan' => 2, 'colspan' => 1)),
+                    ),
+                ),
+                'default',
+<<<TABLE
++-----------------+-------+-----------------+
+| ISBN            | Title | Author          |
++-----------------+-------+-----------------+
+| 9971                    | Dante Alighieri |
+| -5-                     | Charles Dickens |
+| 021                     |                 |
+| 0-0                     |                 |
++-----------------+-------+-----------------+
+| Dante Alighieri | 9971                    |
+| Charles Dickens | -5-                     |
+|                 | 021                     |
+|                 | 0-0                     |
++-----------------+-------+-----------------+
+| 9971                    | Dante           |
+| -5-                     | Alighieri       |
+| 021                     |                 |
+| 0-0                     |                 |
++-----------------+-------+-----------------+
+
+TABLE
+            ),
+            'Cell with rowspan and colspan without using TableSeparator' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array(
+                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
+                        'Dante Alighieri',
+                    ),
+                    array('Charles Dickens'),
+                    array(
+                        'Dante Alighieri',
+                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
+                    ),
+                    array('Charles Dickens'),
+                ),
+                'default',
+<<<TABLE
++-----------------+-------+-----------------+
+| ISBN            | Title | Author          |
++-----------------+-------+-----------------+
+| 9971                    | Dante Alighieri |
+| -5-                     | Charles Dickens |
+| 021                     |                 |
+| 0-0                     |                 |
+| Dante Alighieri | 9971                    |
+| Charles Dickens | -5-                     |
+|                 | 021                     |
+|                 | 0-0                     |
++-----------------+-------+-----------------+
+
+TABLE
+            ),
+            'Cell with rowspan and colspan with separator inside a rowspan' => array(
+                array('ISBN', 'Author'),
+                array(
+                    array(
+                        new TableCell("9971-5-0210-0", array('rowspan' => 3, 'colspan' => 1)),
+                        'Dante Alighieri',
+                    ),
+                    array(new TableSeparator()),
+                    array('Charles Dickens'),
+                ),
+                'default',
+<<<TABLE
++---------------+-----------------+
+| ISBN          | Author          |
++---------------+-----------------+
+| 9971-5-0210-0 | Dante Alighieri |
+|               |-----------------|
+|               | Charles Dickens |
++---------------+-----------------+
+
+TABLE
+            ),
+            'Multiple header lines' => array(
+                array(
+                    array(new TableCell('Main title', array('colspan' => 3))),
+                    array('ISBN', 'Title', 'Author'),
+                ),
+                array(),
+                'default',
+<<<TABLE
++------+-------+--------+
+| Main title            |
++------+-------+--------+
+| ISBN | Title | Author |
++------+-------+--------+
+
 TABLE
             ),
         );
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/core/vendor/symfony/console/Tests/Input/ArgvInputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
rename to core/vendor/symfony/console/Tests/Input/ArgvInputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php b/core/vendor/symfony/console/Tests/Input/ArrayInputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php
rename to core/vendor/symfony/console/Tests/Input/ArrayInputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php b/core/vendor/symfony/console/Tests/Input/InputArgumentTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php
rename to core/vendor/symfony/console/Tests/Input/InputArgumentTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php b/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
similarity index 89%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php
rename to core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
index ce0654de8a16f5be0b477f7485ea24a3d11451b8..74d755f54e2f59792cff4b908e455f1ef2dd9a97 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php
+++ b/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
@@ -352,25 +352,35 @@ public function testGetOptionDefaults()
         $this->assertSame($defaults, $definition->getOptionDefaults(), '->getOptionDefaults() returns the default values for all options');
     }
 
-    public function testGetSynopsis()
-    {
-        $definition = new InputDefinition(array(new InputOption('foo')));
-        $this->assertEquals('[--foo]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputOption('foo', 'f')));
-        $this->assertEquals('[-f|--foo]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)));
-        $this->assertEquals('[-f|--foo="..."]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)));
-        $this->assertEquals('[-f|--foo[="..."]]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-
-        $definition = new InputDefinition(array(new InputArgument('foo')));
-        $this->assertEquals('[foo]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED)));
-        $this->assertEquals('foo', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputArgument('foo', InputArgument::IS_ARRAY)));
-        $this->assertEquals('[foo1] ... [fooN]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
-        $definition = new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED | InputArgument::IS_ARRAY)));
-        $this->assertEquals('foo1 ... [fooN]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
+    /**
+     * @dataProvider getGetSynopsisData
+     */
+    public function testGetSynopsis(InputDefinition $definition, $expectedSynopsis, $message = null)
+    {
+        $this->assertEquals($expectedSynopsis, $definition->getSynopsis(), $message ? '->getSynopsis() '.$message : '');
+    }
+
+    public function getGetSynopsisData()
+    {
+        return array(
+            array(new InputDefinition(array(new InputOption('foo'))), '[--foo]', 'puts optional options in square brackets'),
+            array(new InputDefinition(array(new InputOption('foo', 'f'))), '[-f|--foo]', 'separates shortcut with a pipe'),
+            array(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))), '[-f|--foo FOO]', 'uses shortcut as value placeholder'),
+            array(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL))), '[-f|--foo [FOO]]', 'puts optional values in square brackets'),
+
+            array(new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED))), '<foo>', 'puts arguments in angle brackets'),
+            array(new InputDefinition(array(new InputArgument('foo'))), '[<foo>]', 'puts optional arguments in square brackets'),
+            array(new InputDefinition(array(new InputArgument('foo', InputArgument::IS_ARRAY))), '[<foo>]...', 'uses an ellipsis for array arguments'),
+            array(new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED | InputArgument::IS_ARRAY))), '<foo> (<foo>)...', 'uses parenthesis and ellipsis for required array arguments'),
+
+            array(new InputDefinition(array(new InputOption('foo'), new InputArgument('foo', InputArgument::REQUIRED))), '[--foo] [--] <foo>', 'puts [--] between options and arguments'),
+        );
+    }
+    
+    public function testGetShortSynopsis()
+    {
+        $definition = new InputDefinition(array(new InputOption('foo'), new InputOption('bar'), new InputArgument('cat')));
+        $this->assertEquals('[options] [--] [<cat>]', $definition->getSynopsis(true), '->getSynopsis(true) groups options in [options]');
     }
 
     /**
@@ -390,6 +400,7 @@ public function testLegacyAsText()
             new InputOption('qux', '', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The qux option', array('http://foo.com/', 'bar')),
             new InputOption('qux2', '', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The qux2 option', array('foo' => 'bar')),
         ));
+        
         $this->assertStringEqualsFile(self::$fixtures.'/definition_astext.txt', $definition->asText(), '->asText() returns a textual representation of the InputDefinition');
     }
 
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php b/core/vendor/symfony/console/Tests/Input/InputOptionTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php
rename to core/vendor/symfony/console/Tests/Input/InputOptionTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputTest.php b/core/vendor/symfony/console/Tests/Input/InputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputTest.php
rename to core/vendor/symfony/console/Tests/Input/InputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php b/core/vendor/symfony/console/Tests/Input/StringInputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php
rename to core/vendor/symfony/console/Tests/Input/StringInputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php b/core/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php
rename to core/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/ConsoleOutputTest.php b/core/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/ConsoleOutputTest.php
rename to core/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/NullOutputTest.php b/core/vendor/symfony/console/Tests/Output/NullOutputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/NullOutputTest.php
rename to core/vendor/symfony/console/Tests/Output/NullOutputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/OutputTest.php b/core/vendor/symfony/console/Tests/Output/OutputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/OutputTest.php
rename to core/vendor/symfony/console/Tests/Output/OutputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/StreamOutputTest.php b/core/vendor/symfony/console/Tests/Output/StreamOutputTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Output/StreamOutputTest.php
rename to core/vendor/symfony/console/Tests/Output/StreamOutputTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Tester/ApplicationTesterTest.php b/core/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Tester/ApplicationTesterTest.php
rename to core/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Tests/Tester/CommandTesterTest.php b/core/vendor/symfony/console/Tests/Tester/CommandTesterTest.php
similarity index 100%
rename from core/vendor/symfony/console/Symfony/Component/Console/Tests/Tester/CommandTesterTest.php
rename to core/vendor/symfony/console/Tests/Tester/CommandTesterTest.php
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/composer.json b/core/vendor/symfony/console/composer.json
similarity index 84%
rename from core/vendor/symfony/console/Symfony/Component/Console/composer.json
rename to core/vendor/symfony/console/composer.json
index 2efbd2cbb9a94f53c8ae6238134741f8280cefd4..16b7b8124527549efd2565423bc88db0c798d863 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/composer.json
+++ b/core/vendor/symfony/console/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
@@ -30,13 +30,12 @@
         "psr/log": "For using the console logger"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\Console\\": "" }
+        "psr-4": { "Symfony\\Component\\Console\\": "" }
     },
-    "target-dir": "Symfony/Component/Console",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist b/core/vendor/symfony/console/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist
rename to core/vendor/symfony/console/phpunit.xml.dist
index 729c433aa69e829115be8f982643c6db5eb6ee27..ae0dcbeaba41caed478a06c712549b110e68039a 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist
+++ b/core/vendor/symfony/console/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony Console Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CHANGELOG.md b/core/vendor/symfony/css-selector/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CHANGELOG.md
rename to core/vendor/symfony/css-selector/CHANGELOG.md
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php b/core/vendor/symfony/css-selector/CssSelector.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
rename to core/vendor/symfony/css-selector/CssSelector.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExceptionInterface.php b/core/vendor/symfony/css-selector/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExceptionInterface.php
rename to core/vendor/symfony/css-selector/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php b/core/vendor/symfony/css-selector/Exception/ExpressionErrorException.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php
rename to core/vendor/symfony/css-selector/Exception/ExpressionErrorException.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php b/core/vendor/symfony/css-selector/Exception/InternalErrorException.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php
rename to core/vendor/symfony/css-selector/Exception/InternalErrorException.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ParseException.php b/core/vendor/symfony/css-selector/Exception/ParseException.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ParseException.php
rename to core/vendor/symfony/css-selector/Exception/ParseException.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php b/core/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php
rename to core/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/LICENSE b/core/vendor/symfony/css-selector/LICENSE
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/LICENSE
rename to core/vendor/symfony/css-selector/LICENSE
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AbstractNode.php b/core/vendor/symfony/css-selector/Node/AbstractNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AbstractNode.php
rename to core/vendor/symfony/css-selector/Node/AbstractNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttributeNode.php b/core/vendor/symfony/css-selector/Node/AttributeNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttributeNode.php
rename to core/vendor/symfony/css-selector/Node/AttributeNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ClassNode.php b/core/vendor/symfony/css-selector/Node/ClassNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ClassNode.php
rename to core/vendor/symfony/css-selector/Node/ClassNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php b/core/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php
rename to core/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ElementNode.php b/core/vendor/symfony/css-selector/Node/ElementNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ElementNode.php
rename to core/vendor/symfony/css-selector/Node/ElementNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/FunctionNode.php b/core/vendor/symfony/css-selector/Node/FunctionNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/FunctionNode.php
rename to core/vendor/symfony/css-selector/Node/FunctionNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/HashNode.php b/core/vendor/symfony/css-selector/Node/HashNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/HashNode.php
rename to core/vendor/symfony/css-selector/Node/HashNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NegationNode.php b/core/vendor/symfony/css-selector/Node/NegationNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NegationNode.php
rename to core/vendor/symfony/css-selector/Node/NegationNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NodeInterface.php b/core/vendor/symfony/css-selector/Node/NodeInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NodeInterface.php
rename to core/vendor/symfony/css-selector/Node/NodeInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/PseudoNode.php b/core/vendor/symfony/css-selector/Node/PseudoNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/PseudoNode.php
rename to core/vendor/symfony/css-selector/Node/PseudoNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/SelectorNode.php b/core/vendor/symfony/css-selector/Node/SelectorNode.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/SelectorNode.php
rename to core/vendor/symfony/css-selector/Node/SelectorNode.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php b/core/vendor/symfony/css-selector/Node/Specificity.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php
rename to core/vendor/symfony/css-selector/Node/Specificity.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HandlerInterface.php b/core/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HandlerInterface.php
rename to core/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php b/core/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php
rename to core/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Parser.php b/core/vendor/symfony/css-selector/Parser/Parser.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Parser.php
rename to core/vendor/symfony/css-selector/Parser/Parser.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/ParserInterface.php b/core/vendor/symfony/css-selector/Parser/ParserInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/ParserInterface.php
rename to core/vendor/symfony/css-selector/Parser/ParserInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Reader.php b/core/vendor/symfony/css-selector/Parser/Reader.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Reader.php
rename to core/vendor/symfony/css-selector/Parser/Reader.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php b/core/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php
rename to core/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php b/core/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php
rename to core/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php b/core/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php
rename to core/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php b/core/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php
rename to core/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php b/core/vendor/symfony/css-selector/Parser/Token.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php
rename to core/vendor/symfony/css-selector/Parser/Token.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php b/core/vendor/symfony/css-selector/Parser/TokenStream.php
similarity index 98%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php
rename to core/vendor/symfony/css-selector/Parser/TokenStream.php
index 8184b832b3c2529aee32f8eed002eb0fe095a279..c0525d7a833642e279016d779d12c2ba4dc9a32f 100644
--- a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php
+++ b/core/vendor/symfony/css-selector/Parser/TokenStream.php
@@ -100,7 +100,7 @@ public function getNext()
             throw new InternalErrorException('Unexpected token stream end.');
         }
 
-        return $this->tokens[$this->cursor ++];
+        return $this->tokens[$this->cursor++];
     }
 
     /**
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php b/core/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php
rename to core/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php b/core/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php
rename to core/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php b/core/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php
rename to core/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md b/core/vendor/symfony/css-selector/README.md
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
rename to core/vendor/symfony/css-selector/README.md
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php b/core/vendor/symfony/css-selector/Tests/CssSelectorTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php
rename to core/vendor/symfony/css-selector/Tests/CssSelectorTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AbstractNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AbstractNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttributeNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttributeNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ClassNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ClassNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/CombinedSelectorNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/CombinedSelectorNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ElementNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ElementNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/FunctionNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/FunctionNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/HashNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/HashNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/NegationNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/NegationNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/PseudoNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/PseudoNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SelectorNodeTest.php b/core/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SelectorNodeTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php b/core/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php
rename to core/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/AbstractHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/AbstractHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/CommentHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/CommentHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/HashHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/HashHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/IdentifierHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/IdentifierHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/NumberHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/NumberHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/StringHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/StringHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/WhitespaceHandlerTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/WhitespaceHandlerTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ParserTest.php b/core/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ParserTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ReaderTest.php b/core/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ReaderTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ClassParserTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ClassParserTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ElementParserTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ElementParserTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/EmptyStringParserTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/EmptyStringParserTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/HashParserTest.php b/core/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/HashParserTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/TokenStreamTest.php b/core/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/TokenStreamTest.php
rename to core/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/ids.html b/core/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/ids.html
rename to core/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/lang.xml b/core/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/lang.xml
rename to core/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/shakespear.html b/core/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/shakespear.html
rename to core/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php b/core/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php
rename to core/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/ExtensionInterface.php b/core/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/ExtensionInterface.php
rename to core/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
similarity index 99%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
index 0086240c81fd4828319d1310c9e43fdb18121677..41ece8a42208cb418bf96aba86f193e243e0b25a 100644
--- a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php
+++ b/core/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
@@ -84,7 +84,7 @@ public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $las
 
         if ($last) {
             $expr = 'last() - '.$expr;
-            $b--;
+            --$b;
         }
 
         if (0 !== $b) {
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php b/core/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php
rename to core/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php b/core/vendor/symfony/css-selector/XPath/Translator.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php
rename to core/vendor/symfony/css-selector/XPath/Translator.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/TranslatorInterface.php b/core/vendor/symfony/css-selector/XPath/TranslatorInterface.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/TranslatorInterface.php
rename to core/vendor/symfony/css-selector/XPath/TranslatorInterface.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php b/core/vendor/symfony/css-selector/XPath/XPathExpr.php
similarity index 100%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php
rename to core/vendor/symfony/css-selector/XPath/XPathExpr.php
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json b/core/vendor/symfony/css-selector/composer.json
similarity index 71%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
rename to core/vendor/symfony/css-selector/composer.json
index 831b8eb45efa97ec196d6e6a1835629cf27d730c..c7aebf7098550603d78c6987840a95ddc807651f 100644
--- a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
+++ b/core/vendor/symfony/css-selector/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony CssSelector Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -16,23 +16,22 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\CssSelector\\": "" }
+        "psr-4": { "Symfony\\Component\\CssSelector\\": "" }
     },
-    "target-dir": "Symfony/Component/CssSelector",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist b/core/vendor/symfony/css-selector/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
rename to core/vendor/symfony/css-selector/phpunit.xml.dist
index bc57cfcdfa8d8b0dcb16f7986ca4f075e7ee101b..14a320c873c115384af40a0e2c9cb511806c31a3 100644
--- a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
+++ b/core/vendor/symfony/css-selector/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony CssSelector Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php
index 48e4a2d69e73723e02f276d300bb01af05e8e114..eed05c191f19812f1c0290f1daab8298ee0d8bc1 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php
@@ -14,6 +14,7 @@
 use Psr\Log\LogLevel;
 use Psr\Log\LoggerInterface;
 use Symfony\Component\Debug\Exception\ContextErrorException;
+use Symfony\Component\Debug\Exception\FatalBaseException;
 use Symfony\Component\Debug\Exception\FatalErrorException;
 use Symfony\Component\Debug\Exception\OutOfMemoryException;
 use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler;
@@ -101,7 +102,7 @@ class ErrorHandler
     private static $stackedErrorLevels = array();
 
     /**
-     * Same init value as thrownErrors
+     * Same init value as thrownErrors.
      *
      * @deprecated since 2.6, to be removed in 3.0.
      */
@@ -240,7 +241,7 @@ public function setExceptionHandler($handler)
     }
 
     /**
-     * Sets the error levels that are to be thrown.
+     * Sets the PHP error levels that throw an exception when a PHP error occurs.
      *
      * @param int  $levels  A bit field of E_* constants for thrown errors
      * @param bool $replace Replace or amend the previous value
@@ -263,7 +264,7 @@ public function throwAt($levels, $replace = false)
     }
 
     /**
-     * Sets the error levels that are logged or thrown with their local scope.
+     * Sets the PHP error levels for which local variables are preserved.
      *
      * @param int  $levels  A bit field of E_* constants for scoped errors
      * @param bool $replace Replace or amend the previous value
@@ -282,7 +283,7 @@ public function scopeAt($levels, $replace = false)
     }
 
     /**
-     * Sets the error levels that are logged with their stack trace.
+     * Sets the PHP error levels for which the stack trace is preserved.
      *
      * @param int  $levels  A bit field of E_* constants for traced errors
      * @param bool $replace Replace or amend the previous value
@@ -356,69 +357,71 @@ public function handleError($type, $message, $file, $line, array $context)
         $throw = $this->thrownErrors & $type & $level;
         $type &= $level | $this->screamedErrors;
 
-        if ($type && ($log || $throw)) {
-            if (PHP_VERSION_ID < 50400 && isset($context['GLOBALS']) && ($this->scopedErrors & $type)) {
-                $e = $context;                  // Whatever the signature of the method,
-                unset($e['GLOBALS'], $context); // $context is always a reference in 5.3
-                $context = $e;
-            }
+        if (!$type || (!$log && !$throw)) {
+            return $type && $log;
+        }
 
-            if ($throw) {
-                if (($this->scopedErrors & $type) && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
-                    // Checking for class existence is a work around for https://bugs.php.net/42098
-                    $throw = new ContextErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line, $context);
-                } else {
-                    $throw = new \ErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line);
-                }
+        if (PHP_VERSION_ID < 50400 && isset($context['GLOBALS']) && ($this->scopedErrors & $type)) {
+            $e = $context;                  // Whatever the signature of the method,
+            unset($e['GLOBALS'], $context); // $context is always a reference in 5.3
+            $context = $e;
+        }
 
-                if (PHP_VERSION_ID <= 50407 && (PHP_VERSION_ID >= 50400 || PHP_VERSION_ID <= 50317)) {
-                    // Exceptions thrown from error handlers are sometimes not caught by the exception
-                    // handler and shutdown handlers are bypassed before 5.4.8/5.3.18.
-                    // We temporarily re-enable display_errors to prevent any blank page related to this bug.
+        if ($throw) {
+            if (($this->scopedErrors & $type) && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
+                // Checking for class existence is a work around for https://bugs.php.net/42098
+                $throw = new ContextErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line, $context);
+            } else {
+                $throw = new \ErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line);
+            }
 
-                    $throw->errorHandlerCanary = new ErrorHandlerCanary();
-                }
+            if (PHP_VERSION_ID <= 50407 && (PHP_VERSION_ID >= 50400 || PHP_VERSION_ID <= 50317)) {
+                // Exceptions thrown from error handlers are sometimes not caught by the exception
+                // handler and shutdown handlers are bypassed before 5.4.8/5.3.18.
+                // We temporarily re-enable display_errors to prevent any blank page related to this bug.
 
-                throw $throw;
+                $throw->errorHandlerCanary = new ErrorHandlerCanary();
             }
 
-            // For duplicated errors, log the trace only once
-            $e = md5("{$type}/{$line}/{$file}\x00{$message}", true);
-            $trace = true;
+            throw $throw;
+        }
 
-            if (!($this->tracedErrors & $type) || isset($this->loggedTraces[$e])) {
-                $trace = false;
-            } else {
-                $this->loggedTraces[$e] = 1;
-            }
+        // For duplicated errors, log the trace only once
+        $e = md5("{$type}/{$line}/{$file}\x00{$message}", true);
+        $trace = true;
 
-            $e = compact('type', 'file', 'line', 'level');
+        if (!($this->tracedErrors & $type) || isset($this->loggedTraces[$e])) {
+            $trace = false;
+        } else {
+            $this->loggedTraces[$e] = 1;
+        }
+
+        $e = compact('type', 'file', 'line', 'level');
 
-            if ($type & $level) {
-                if ($this->scopedErrors & $type) {
-                    $e['context'] = $context;
-                    if ($trace) {
-                        $e['stack'] = debug_backtrace(true); // Provide object
-                    }
-                } elseif ($trace) {
-                    $e['stack'] = debug_backtrace(PHP_VERSION_ID >= 50306 ? DEBUG_BACKTRACE_IGNORE_ARGS : false);
+        if ($type & $level) {
+            if ($this->scopedErrors & $type) {
+                $e['scope_vars'] = $context;
+                if ($trace) {
+                    $e['stack'] = debug_backtrace(true); // Provide object
                 }
+            } elseif ($trace) {
+                $e['stack'] = debug_backtrace(PHP_VERSION_ID >= 50306 ? DEBUG_BACKTRACE_IGNORE_ARGS : false);
             }
+        }
 
-            if ($this->isRecursive) {
-                $log = 0;
-            } elseif (self::$stackedErrorLevels) {
-                self::$stackedErrors[] = array($this->loggers[$type], $message, $e);
-            } else {
-                try {
-                    $this->isRecursive = true;
-                    $this->loggers[$type][0]->log($this->loggers[$type][1], $message, $e);
-                    $this->isRecursive = false;
-                } catch (\Exception $e) {
-                    $this->isRecursive = false;
-
-                    throw $e;
-                }
+        if ($this->isRecursive) {
+            $log = 0;
+        } elseif (self::$stackedErrorLevels) {
+            self::$stackedErrors[] = array($this->loggers[$type], $message, $e);
+        } else {
+            try {
+                $this->isRecursive = true;
+                $this->loggers[$type][0]->log(($type & $level) ? $this->loggers[$type][1] : LogLevel::DEBUG, $message, $e);
+                $this->isRecursive = false;
+            } catch (\Exception $e) {
+                $this->isRecursive = false;
+
+                throw $e;
             }
         }
 
@@ -428,23 +431,34 @@ public function handleError($type, $message, $file, $line, array $context)
     /**
      * Handles an exception by logging then forwarding it to an other handler.
      *
-     * @param \Exception $exception An exception to handle
-     * @param array      $error     An array as returned by error_get_last()
+     * @param \Exception|\BaseException $exception An exception to handle
+     * @param array                     $error     An array as returned by error_get_last()
      *
      * @internal
      */
-    public function handleException(\Exception $exception, array $error = null)
+    public function handleException($exception, array $error = null)
     {
-        $level = error_reporting();
-        if ($this->loggedErrors & E_ERROR & ($level | $this->screamedErrors)) {
+        if (!$exception instanceof \Exception) {
+            $exception = new FatalBaseException($exception);
+        }
+        $type = $exception instanceof FatalErrorException ? $exception->getSeverity() : E_ERROR;
+
+        if ($this->loggedErrors & $type) {
             $e = array(
-                'type' => E_ERROR,
+                'type' => $type,
                 'file' => $exception->getFile(),
                 'line' => $exception->getLine(),
-                'level' => $level,
+                'level' => error_reporting(),
                 'stack' => $exception->getTrace(),
             );
-            if ($exception instanceof FatalErrorException) {
+            if ($exception instanceof FatalBaseException) {
+                $error = array(
+                    'type' => $type,
+                    'message' => $message = $exception->getMessage(),
+                    'file' => $e['file'],
+                    'line' => $e['line'],
+                );
+            } elseif ($exception instanceof FatalErrorException) {
                 $message = 'Fatal '.$exception->getMessage();
             } elseif ($exception instanceof \ErrorException) {
                 $message = 'Uncaught '.$exception->getMessage();
@@ -474,6 +488,9 @@ public function handleException(\Exception $exception, array $error = null)
         } catch (\Exception $handlerException) {
             $this->exceptionHandler = null;
             $this->handleException($handlerException);
+        } catch (\BaseException $handlerException) {
+            $this->exceptionHandler = null;
+            $this->handleException($handlerException);
         }
     }
 
@@ -487,40 +504,44 @@ public function handleException(\Exception $exception, array $error = null)
     public static function handleFatalError(array $error = null)
     {
         self::$reservedMemory = '';
+
         $handler = set_error_handler('var_dump', 0);
         $handler = is_array($handler) ? $handler[0] : null;
         restore_error_handler();
-        if ($handler instanceof self) {
-            if (null === $error) {
-                $error = error_get_last();
-            }
 
-            try {
-                while (self::$stackedErrorLevels) {
-                    static::unstackErrors();
-                }
-            } catch (\Exception $exception) {
-                // Handled below
-            }
+        if (!$handler instanceof self) {
+            return;
+        }
 
-            if ($error && ($error['type'] & (E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR))) {
-                // Let's not throw anymore but keep logging
-                $handler->throwAt(0, true);
+        if (null === $error) {
+            $error = error_get_last();
+        }
 
-                if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
-                    $exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false);
-                } else {
-                    $exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true);
-                }
-            } elseif (!isset($exception)) {
-                return;
+        try {
+            while (self::$stackedErrorLevels) {
+                static::unstackErrors();
             }
+        } catch (\Exception $exception) {
+            // Handled below
+        }
 
-            try {
-                $handler->handleException($exception, $error);
-            } catch (FatalErrorException $e) {
-                // Ignore this re-throw
+        if ($error && ($error['type'] & (E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR))) {
+            // Let's not throw anymore but keep logging
+            $handler->throwAt(0, true);
+
+            if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
+                $exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false);
+            } else {
+                $exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true);
             }
+        } elseif (!isset($exception)) {
+            return;
+        }
+
+        try {
+            $handler->handleException($exception, $error);
+        } catch (FatalErrorException $e) {
+            // Ignore this re-throw
         }
     }
 
@@ -541,7 +562,7 @@ public static function stackErrors()
     }
 
     /**
-     * Unstacks stacked errors and forwards to the logger
+     * Unstacks stacked errors and forwards to the logger.
      */
     public static function unstackErrors()
     {
@@ -660,7 +681,7 @@ public function handleFatal()
 }
 
 /**
- * Private class used to work around https://bugs.php.net/54275
+ * Private class used to work around https://bugs.php.net/54275.
  *
  * @author Nicolas Grekas <p@tchwork.com>
  *
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalBaseException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalBaseException.php
new file mode 100644
index 0000000000000000000000000000000000000000..769d30ccb13d26a7018b89159bc4650a5cfb01ec
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalBaseException.php
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Debug\Exception;
+
+/**
+ * Base Fatal Error Exception.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class FatalBaseException extends FatalErrorException
+{
+    public function __construct(\BaseException $e)
+    {
+        if ($e instanceof \ParseException) {
+            $message = 'Parse error: '.$e->getMessage();
+            $severity = E_PARSE;
+        } elseif ($e instanceof \TypeException) {
+            $message = 'Type error: '.$e->getMessage();
+            $severity = E_RECOVERABLE_ERROR;
+        } else {
+            $message = 'Fatal error: '.$e->getMessage();
+            $severity = E_ERROR;
+        }
+
+        \ErrorException::__construct(
+            $message,
+            $e->getCode(),
+            $severity,
+            $e->getFile(),
+            $e->getLine()
+        );
+
+        $this->setTrace($e->getTrace());
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php
index 662502146a94fa21cd68ec162e62b9a134648cf6..bc66741bc8751c6ac53cfcc8fb27dfcfaaab46e8 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php
@@ -371,7 +371,7 @@ private function formatClass($class)
     {
         $parts = explode('\\', $class);
 
-        return sprintf("<abbr title=\"%s\">%s</abbr>", $class, array_pop($parts));
+        return sprintf('<abbr title="%s">%s</abbr>', $class, array_pop($parts));
     }
 
     private function formatPath($path, $line)
@@ -380,7 +380,7 @@ private function formatPath($path, $line)
         $file = preg_match('#[^/\\\\]*$#', $path, $file) ? $file[0] : $path;
 
         if ($linkFormat = $this->fileLinkFormat) {
-            $link = str_replace(array('%f', '%l'), array($path, $line), $linkFormat);
+            $link = strtr($this->escapeHtml($linkFormat), array('%f' => $path, '%l' => (int) $line));
 
             return sprintf(' in <a href="%s" title="Go to source">%s line %d</a>', $link, $file, $line);
         }
@@ -422,7 +422,7 @@ private function formatArgs(array $args)
     }
 
     /**
-     * Returns an UTF-8 and HTML encoded string
+     * Returns an UTF-8 and HTML encoded string.
      */
     protected static function utf8Htmlize($str)
     {
@@ -441,7 +441,7 @@ protected static function utf8Htmlize($str)
     }
 
     /**
-     * HTML-encodes a string
+     * HTML-encodes a string.
      */
     private function escapeHtml($str)
     {
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
index c75f17edff344c71587459cbd6c27513975439d7..abfe90d79262a871adfc0a7e2398ce7596dab6b5 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
@@ -77,7 +77,7 @@ public function handleError(array $error, FatalErrorException $exception)
     /**
      * Tries to guess the full namespace for a given class name.
      *
-     * By default, it looks for PSR-0 classes registered via a Symfony or a Composer
+     * By default, it looks for PSR-0 and PSR-4 classes registered via a Symfony or a Composer
      * autoloader (that should cover all common cases).
      *
      * @param string $class A class name (without its namespace)
@@ -101,7 +101,7 @@ private function getClassCandidates($class)
             if ($function[0] instanceof DebugClassLoader) {
                 $function = $function[0]->getClassLoader();
 
-                // Since 2.5, returning an object from DebugClassLoader::getClassLoader() is @deprecated
+                // @deprecated since version 2.5. Returning an object from DebugClassLoader::getClassLoader() is deprecated.
                 if (is_object($function)) {
                     $function = array($function);
                 }
@@ -118,6 +118,13 @@ private function getClassCandidates($class)
                     }
                 }
             }
+            if ($function[0] instanceof ComposerClassLoader) {
+                foreach ($function[0]->getPrefixesPsr4() as $prefix => $paths) {
+                    foreach ($paths as $path) {
+                        $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix));
+                    }
+                }
+            }
         }
 
         return array_unique($classes);
@@ -132,13 +139,13 @@ private function getClassCandidates($class)
      */
     private function findClassInPath($path, $class, $prefix)
     {
-        if (!$path = realpath($path)) {
+        if (!$path = realpath($path.'/'.strtr($prefix, '\\_', '//')) ?: realpath($path.'/'.dirname(strtr($prefix, '\\_', '//'))) ?: realpath($path)) {
             return array();
         }
 
         $classes = array();
         $filename = $class.'.php';
-        foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
+        foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
             if ($filename == $file->getFileName() && $class = $this->convertFileToClass($path, $file->getPathName(), $prefix)) {
                 $classes[] = $class;
             }
@@ -160,13 +167,21 @@ private function convertFileToClass($path, $file, $prefix)
             // namespaced class
             $namespacedClass = str_replace(array($path.DIRECTORY_SEPARATOR, '.php', '/'), array('', '', '\\'), $file),
             // namespaced class (with target dir)
-            $namespacedClassTargetDir = $prefix.str_replace(array($path.DIRECTORY_SEPARATOR, '.php', '/'), array('', '', '\\'), $file),
+            $prefix.$namespacedClass,
+            // namespaced class (with target dir and separator)
+            $prefix.'\\'.$namespacedClass,
             // PEAR class
             str_replace('\\', '_', $namespacedClass),
             // PEAR class (with target dir)
-            str_replace('\\', '_', $namespacedClassTargetDir),
+            str_replace('\\', '_', $prefix.$namespacedClass),
+            // PEAR class (with target dir and separator)
+            str_replace('\\', '_', $prefix.'\\'.$namespacedClass),
         );
 
+        if ($prefix) {
+            $candidates = array_filter($candidates, function ($candidate) use ($prefix) {return 0 === strpos($candidate, $prefix);});
+        }
+
         // We cannot use the autoloader here as most of them use require; but if the class
         // is not found, the new autoloader call will require the file again leading to a
         // "cannot redeclare class" error.
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php
index 1d6f6b4715bd206612a2c1bb15b8f3850c1793d2..169f4210ed58ea4f5cd2f1acb4863b48d8a6767f 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php
@@ -61,6 +61,10 @@ public function testIdempotence()
 
     public function testUnsilencing()
     {
+        if (PHP_VERSION_ID >= 70000) {
+            $this->markTestSkipped('PHP7 throws exceptions, unsilencing is not required anymore.');
+        }
+
         ob_start();
 
         $this->iniSet('log_errors', 0);
@@ -100,9 +104,14 @@ class ChildTestingStacking extends TestingStacking { function foo($bar) {} }
             // if an exception is thrown, the test passed
             restore_error_handler();
             restore_exception_handler();
-            $this->assertEquals(E_STRICT, $exception->getSeverity());
             $this->assertStringStartsWith(__FILE__, $exception->getFile());
-            $this->assertRegexp('/^Runtime Notice: Declaration/', $exception->getMessage());
+            if (PHP_VERSION_ID < 70000) {
+                $this->assertRegexp('/^Runtime Notice: Declaration/', $exception->getMessage());
+                $this->assertEquals(E_STRICT, $exception->getSeverity());
+            } else {
+                $this->assertRegexp('/^Warning: Declaration/', $exception->getMessage());
+                $this->assertEquals(E_WARNING, $exception->getSeverity());
+            }
         } catch (\Exception $exception) {
             restore_error_handler();
             restore_exception_handler();
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
index 0f52680370984b1a036b6151e9b118b31bf3ba7c..1b3f7b41ed92d54376ed56650a774f8c4dcfdfb9 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
@@ -336,7 +336,7 @@ public function testHandleFatalError()
             $logArgCheck = function ($level, $message, $context) use ($that) {
                 $that->assertEquals('Fatal Parse Error: foo', $message);
                 $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_ERROR);
+                $that->assertEquals($context['type'], E_PARSE);
             };
 
             $logger
@@ -345,7 +345,7 @@ public function testHandleFatalError()
                 ->will($this->returnCallback($logArgCheck))
             ;
 
-            $handler->setDefaultLogger($logger, E_ERROR);
+            $handler->setDefaultLogger($logger, E_PARSE);
 
             $handler->handleFatalError($error);
 
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php
index 923c47ffa0738d2dd877dd9fff949e2960873af2..99eaf497d5b4d58fca5e5d00ee5c4eb56fe1f409 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php
@@ -189,9 +189,9 @@ public function testRecursionInArguments()
     public function testTooBigArray()
     {
         $a = array();
-        for ($i = 0; $i < 20; $i++) {
-            for ($j = 0; $j < 50; $j++) {
-                for ($k = 0; $k < 10; $k++) {
+        for ($i = 0; $i < 20; ++$i) {
+            for ($j = 0; $j < 50; ++$j) {
+                for ($k = 0; $k < 10; ++$k) {
                     $a[$i][$j][$k] = 'value';
                 }
             }
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
index 06b22a83c8de3268e07e8a4ff065eb6d47aadf47..6ac3374d8e2c789a103071f0f90975508e620cda 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
@@ -15,18 +15,52 @@
 use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
 use Symfony\Component\Debug\Exception\FatalErrorException;
 use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
+use Symfony\Component\Debug\DebugClassLoader;
+use Composer\Autoload\ClassLoader as ComposerClassLoader;
 
 class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
 {
+    public static function setUpBeforeClass()
+    {
+        foreach (spl_autoload_functions() as $function) {
+            if (!is_array($function)) {
+                continue;
+            }
+
+            // get class loaders wrapped by DebugClassLoader
+            if ($function[0] instanceof DebugClassLoader) {
+                $function = $function[0]->getClassLoader();
+            }
+
+            if ($function[0] instanceof ComposerClassLoader) {
+                $function[0]->add('Symfony_Component_Debug_Tests_Fixtures', dirname(dirname(dirname(dirname(dirname(__DIR__))))));
+                break;
+            }
+        }
+    }
+
     /**
      * @dataProvider provideClassNotFoundData
      */
-    public function testHandleClassNotFound($error, $translatedMessage)
+    public function testHandleClassNotFound($error, $translatedMessage, $autoloader = null)
     {
+        if ($autoloader) {
+            // Unregister all autoloaders to ensure the custom provided
+            // autoloader is the only one to be used during the test run.
+            $autoloaders = spl_autoload_functions();
+            array_map('spl_autoload_unregister', $autoloaders);
+            spl_autoload_register($autoloader);
+        }
+
         $handler = new ClassNotFoundFatalErrorHandler();
 
         $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
 
+        if ($autoloader) {
+            spl_autoload_unregister($autoloader);
+            array_map('spl_autoload_register', $autoloaders);
+        }
+
         $this->assertInstanceof('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
         $this->assertSame($translatedMessage, $exception->getMessage());
         $this->assertSame($error['type'], $exception->getSeverity());
@@ -35,35 +69,37 @@ public function testHandleClassNotFound($error, $translatedMessage)
     }
 
     /**
-     * @dataProvider provideLegacyClassNotFoundData
      * @group legacy
      */
-    public function testLegacyHandleClassNotFound($error, $translatedMessage, $autoloader)
+    public function testLegacyHandleClassNotFound()
     {
         $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
 
-        // Unregister all autoloaders to ensure the custom provided
-        // autoloader is the only one to be used during the test run.
-        $autoloaders = spl_autoload_functions();
-        array_map('spl_autoload_unregister', $autoloaders);
-        spl_autoload_register($autoloader);
-
-        $handler = new ClassNotFoundFatalErrorHandler();
-
-        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
-
-        spl_autoload_unregister($autoloader);
-        array_map('spl_autoload_register', $autoloaders);
+        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
+        $symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
+        $symfonyUniversalClassLoader->registerPrefixes($prefixes);
 
-        $this->assertInstanceof('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
-        $this->assertSame($translatedMessage, $exception->getMessage());
-        $this->assertSame($error['type'], $exception->getSeverity());
-        $this->assertSame($error['file'], $exception->getFile());
-        $this->assertSame($error['line'], $exception->getLine());
+        $this->testHandleClassNotFound(
+            array(
+                'type' => 1,
+                'line' => 12,
+                'file' => 'foo.php',
+                'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
+            ),
+            "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+            array($symfonyUniversalClassLoader, 'loadClass')
+        );
     }
 
     public function provideClassNotFoundData()
     {
+        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
+
+        $symfonyAutoloader = new SymfonyClassLoader();
+        $symfonyAutoloader->addPrefixes($prefixes);
+
+        $debugClassLoader = new DebugClassLoader(array($symfonyAutoloader, 'loadClass'));
+
         return array(
             array(
                 array(
@@ -110,20 +146,6 @@ public function provideClassNotFoundData()
                 ),
                 "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
             ),
-        );
-    }
-
-    public function provideLegacyClassNotFoundData()
-    {
-        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
-
-        $symfonyAutoloader = new SymfonyClassLoader();
-        $symfonyAutoloader->addPrefixes($prefixes);
-
-        $symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
-        $symfonyUniversalClassLoader->registerPrefixes($prefixes);
-
-        return array(
             array(
                 array(
                     'type' => 1,
@@ -142,7 +164,7 @@ public function provideLegacyClassNotFoundData()
                     'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
                 ),
                 "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-                array($symfonyUniversalClassLoader, 'loadClass'),
+                array($debugClassLoader, 'loadClass'),
             ),
             array(
                 array(
@@ -159,11 +181,11 @@ function ($className) { /* do nothing here */ },
 
     public function testCannotRedeclareClass()
     {
-        if (!file_exists(__DIR__.'/../FIXTURES/REQUIREDTWICE.PHP')) {
+        if (!file_exists(__DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP')) {
             $this->markTestSkipped('Can only be run on case insensitive filesystems');
         }
 
-        require_once __DIR__.'/../FIXTURES/REQUIREDTWICE.PHP';
+        require_once __DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP';
 
         $error = array(
             'type' => 1,
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php
deleted file mode 100644
index 3c42d67b8a94d8d41086ff1df37033f98cc50e6a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-class RequiredTwice
-{
-}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures2/RequiredTwice.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures2/RequiredTwice.php
new file mode 100644
index 0000000000000000000000000000000000000000..604bc37ff1f04b83951836c9b1c293efd6dc4952
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures2/RequiredTwice.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures2;
+
+class RequiredTwice
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json b/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json
index a7a3871df7ba097a13e1ca85b7d5ea4c1a3edc2f..2d101813a53ef7751d7b6ea286688f5f1db15582 100644
--- a/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Debug Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,7 +12,7 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Alias.php b/core/vendor/symfony/dependency-injection/Alias.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Alias.php
rename to core/vendor/symfony/dependency-injection/Alias.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/CHANGELOG.md b/core/vendor/symfony/dependency-injection/CHANGELOG.md
similarity index 95%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/CHANGELOG.md
rename to core/vendor/symfony/dependency-injection/CHANGELOG.md
index b78e440974b2cf0dbaf42d6a5ace1b16674f33f5..427294319e57a80968386bc3b3a0426cd41bc755 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/CHANGELOG.md
+++ b/core/vendor/symfony/dependency-injection/CHANGELOG.md
@@ -1,6 +1,11 @@
 CHANGELOG
 =========
 
+2.7.0
+-----
+
+ * deprecated synchronized services
+
 2.6.0
 -----
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/AnalyzeServiceReferencesPass.php b/core/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
similarity index 96%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/AnalyzeServiceReferencesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
index c5ecb2d5040b5cedf08c922580696fc2ec4e6e46..5120eb6215c1ae11abe007b742265f2ad59ae48d 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/AnalyzeServiceReferencesPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
@@ -71,8 +71,8 @@ public function process(ContainerBuilder $container)
             $this->currentDefinition = $definition;
 
             $this->processArguments($definition->getArguments());
-            if ($definition->getFactoryService()) {
-                $this->processArguments(array(new Reference($definition->getFactoryService())));
+            if ($definition->getFactoryService(false)) {
+                $this->processArguments(array(new Reference($definition->getFactoryService(false))));
             }
             if (is_array($definition->getFactory())) {
                 $this->processArguments($definition->getFactory());
@@ -118,8 +118,8 @@ private function processArguments(array $arguments)
                 if (is_array($argument->getFactory())) {
                     $this->processArguments($argument->getFactory());
                 }
-                if ($argument->getFactoryService()) {
-                    $this->processArguments(array(new Reference($argument->getFactoryService())));
+                if ($argument->getFactoryService(false)) {
+                    $this->processArguments(array(new Reference($argument->getFactoryService(false))));
                 }
             }
         }
diff --git a/core/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php b/core/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1f05e03ec02c9dd602a89c22b4d7157d2973843
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Compiler;
+
+use Symfony\Component\DependencyInjection\Alias;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+
+/**
+ * Sets a service to be an alias of another one, given a format pattern.
+ */
+class AutoAliasServicePass implements CompilerPassInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function process(ContainerBuilder $container)
+    {
+        foreach ($container->findTaggedServiceIds('auto_alias') as $serviceId => $tags) {
+            foreach ($tags as $tag) {
+                if (!isset($tag['format'])) {
+                    throw new InvalidArgumentException(sprintf('Missing tag information "format" on auto_alias service "%s".', $serviceId));
+                }
+
+                $aliasId = $container->getParameterBag()->resolveValue($tag['format']);
+                if ($container->hasDefinition($aliasId) || $container->hasAlias($aliasId)) {
+                    $container->setAlias($serviceId, new Alias($aliasId));
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php b/core/vendor/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckDefinitionValidityPass.php b/core/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php
similarity index 95%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckDefinitionValidityPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php
index ce89f24e183e3b5d6fab47e8fdcb0f9e193619ba..219e66313d13b6c98d93efe7d20dbba146633030 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckDefinitionValidityPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php
@@ -50,13 +50,13 @@ public function process(ContainerBuilder $container)
                 throw new RuntimeException(sprintf('A synthetic service ("%s") cannot be of scope "prototype".', $id));
             }
 
-            if ($definition->getFactory() && ($definition->getFactoryClass() || $definition->getFactoryService() || $definition->getFactoryMethod())) {
+            if ($definition->getFactory() && ($definition->getFactoryClass(false) || $definition->getFactoryService(false) || $definition->getFactoryMethod(false))) {
                 throw new RuntimeException(sprintf('A service ("%s") can use either the old or the new factory syntax, not both.', $id));
             }
 
             // non-synthetic, non-abstract service has class
             if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass()) {
-                if ($definition->getFactory() || $definition->getFactoryClass() || $definition->getFactoryService()) {
+                if ($definition->getFactory() || $definition->getFactoryClass(false) || $definition->getFactoryService(false)) {
                     throw new RuntimeException(sprintf('Please add the class to service "%s" even if it is constructed by a factory since we might need to add method calls based on compile-time checks.', $id));
                 }
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php b/core/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckReferenceValidityPass.php b/core/vendor/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CheckReferenceValidityPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/Compiler.php b/core/vendor/symfony/dependency-injection/Compiler/Compiler.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/Compiler.php
rename to core/vendor/symfony/dependency-injection/Compiler/Compiler.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CompilerPassInterface.php b/core/vendor/symfony/dependency-injection/Compiler/CompilerPassInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/CompilerPassInterface.php
rename to core/vendor/symfony/dependency-injection/Compiler/CompilerPassInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php b/core/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php
rename to core/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php b/core/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php
similarity index 92%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php
index d9a656f78777a657f80cddeaf811fd16abdedf94..026700d2263d64fd3a8bb351e9817aeba136f037 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php
@@ -62,6 +62,12 @@ public function process(ContainerBuilder $container)
             $definition->setProperties(
                 $this->inlineArguments($container, $definition->getProperties())
             );
+
+            $configurator = $this->inlineArguments($container, array($definition->getConfigurator()));
+            $definition->setConfigurator($configurator[0]);
+
+            $factory = $this->inlineArguments($container, array($definition->getFactory()));
+            $definition->setFactory($factory[0]);
         }
     }
 
@@ -142,7 +148,7 @@ private function isInlineableDefinition(ContainerBuilder $container, $id, Defini
             return false;
         }
 
-        if (count($ids) > 1 && $definition->getFactoryService()) {
+        if (count($ids) > 1 && $definition->getFactoryService(false)) {
             return false;
         }
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/LoggingFormatter.php b/core/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/LoggingFormatter.php
rename to core/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php b/core/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/PassConfig.php b/core/vendor/symfony/dependency-injection/Compiler/PassConfig.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/PassConfig.php
rename to core/vendor/symfony/dependency-injection/Compiler/PassConfig.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemoveAbstractDefinitionsPass.php b/core/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemoveAbstractDefinitionsPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemovePrivateAliasesPass.php b/core/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemovePrivateAliasesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemoveUnusedDefinitionsPass.php b/core/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RemoveUnusedDefinitionsPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RepeatablePassInterface.php b/core/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RepeatablePassInterface.php
rename to core/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RepeatedPass.php b/core/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/RepeatedPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php b/core/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
similarity index 90%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
index c1db3e04d6bbc4c11a556372e2ac042fd5c7d8c6..0efc6b500b5d44f1a384ad543f8b641d4d517358 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
@@ -39,7 +39,7 @@ public function process(ContainerBuilder $container)
         $this->compiler = $container->getCompiler();
         $this->formatter = $this->compiler->getLoggingFormatter();
 
-        foreach (array_keys($container->getDefinitions()) as $id) {
+        foreach ($container->getDefinitions() as $id => $definition) {
             // yes, we are specifically fetching the definition from the
             // container to ensure we are not operating on stale data
             $definition = $container->getDefinition($id);
@@ -81,9 +81,15 @@ private function resolveDefinition($id, DefinitionDecorator $definition)
         $def->setArguments($parentDef->getArguments());
         $def->setMethodCalls($parentDef->getMethodCalls());
         $def->setProperties($parentDef->getProperties());
-        $def->setFactoryClass($parentDef->getFactoryClass());
-        $def->setFactoryMethod($parentDef->getFactoryMethod());
-        $def->setFactoryService($parentDef->getFactoryService());
+        if ($parentDef->getFactoryClass(false)) {
+            $def->setFactoryClass($parentDef->getFactoryClass(false));
+        }
+        if ($parentDef->getFactoryMethod(false)) {
+            $def->setFactoryMethod($parentDef->getFactoryMethod(false));
+        }
+        if ($parentDef->getFactoryService(false)) {
+            $def->setFactoryService($parentDef->getFactoryService(false));
+        }
         $def->setFactory($parentDef->getFactory());
         $def->setConfigurator($parentDef->getConfigurator());
         $def->setFile($parentDef->getFile());
@@ -96,13 +102,13 @@ private function resolveDefinition($id, DefinitionDecorator $definition)
             $def->setClass($definition->getClass());
         }
         if (isset($changes['factory_class'])) {
-            $def->setFactoryClass($definition->getFactoryClass());
+            $def->setFactoryClass($definition->getFactoryClass(false));
         }
         if (isset($changes['factory_method'])) {
-            $def->setFactoryMethod($definition->getFactoryMethod());
+            $def->setFactoryMethod($definition->getFactoryMethod(false));
         }
         if (isset($changes['factory_service'])) {
-            $def->setFactoryService($definition->getFactoryService());
+            $def->setFactoryService($definition->getFactoryService(false));
         }
         if (isset($changes['factory'])) {
             $def->setFactory($definition->getFactory());
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
similarity index 92%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
index 35d46cf83d224b69d409180dc834de6792e66d4c..0a789676c96f485ccf573865b5a5a65209a84809 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
@@ -37,7 +37,9 @@ public function process(ContainerBuilder $container)
                 $definition->setClass($parameterBag->resolveValue($definition->getClass()));
                 $definition->setFile($parameterBag->resolveValue($definition->getFile()));
                 $definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
-                $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass()));
+                if ($definition->getFactoryClass(false)) {
+                    $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass()));
+                }
 
                 $factory = $definition->getFactory();
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php
rename to core/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraph.php b/core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraph.php
rename to core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraphEdge.php b/core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraphEdge.php
rename to core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraphNode.php b/core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraphNode.php
rename to core/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php b/core/vendor/symfony/dependency-injection/Container.php
similarity index 87%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php
rename to core/vendor/symfony/dependency-injection/Container.php
index a969db3036c6f16d600546beba99cca18ad223d1..f0db5de6bc4e64fd8676f4c6e030b066890c196d 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php
+++ b/core/vendor/symfony/dependency-injection/Container.php
@@ -76,6 +76,8 @@ class Container implements IntrospectableContainerInterface
     protected $scopeStacks = array();
     protected $loading = array();
 
+    private $underscoreMap = array('_' => '', '.' => '_', '\\' => '_');
+
     /**
      * Constructor.
      *
@@ -86,8 +88,6 @@ class Container implements IntrospectableContainerInterface
     public function __construct(ParameterBagInterface $parameterBag = null)
     {
         $this->parameterBag = $parameterBag ?: new ParameterBag();
-
-        $this->set('service_container', $this);
     }
 
     /**
@@ -213,7 +213,7 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER)
 
         $this->services[$id] = $service;
 
-        if (method_exists($this, $method = 'synchronize'.strtr($id, array('_' => '', '.' => '_', '\\' => '_')).'Service')) {
+        if (method_exists($this, $method = 'synchronize'.strtr($id, $this->underscoreMap).'Service')) {
             $this->$method();
         }
 
@@ -237,17 +237,20 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER)
      */
     public function has($id)
     {
-        $id = strtolower($id);
-
-        if ('service_container' === $id) {
-            return true;
+        for ($i = 2;;) {
+            if ('service_container' === $id
+                || isset($this->aliases[$id])
+                || isset($this->services[$id])
+                || array_key_exists($id, $this->services)
+            ) {
+                return true;
+            }
+            if (--$i && $id !== $lcId = strtolower($id)) {
+                $id = $lcId;
+            } else {
+                return method_exists($this, 'get'.strtr($id, $this->underscoreMap).'Service');
+            }
         }
-
-        return isset($this->services[$id])
-            || array_key_exists($id, $this->services)
-            || isset($this->aliases[$id])
-            || method_exists($this, 'get'.strtr($id, array('_' => '', '.' => '_', '\\' => '_')).'Service')
-        ;
     }
 
     /**
@@ -261,7 +264,6 @@ public function has($id)
      *
      * @return object The associated service
      *
-     * @throws InvalidArgumentException          if the service is not defined
      * @throws ServiceCircularReferenceException When a circular reference is detected
      * @throws ServiceNotFoundException          When the service is not defined
      * @throws \Exception                        if an exception has been thrown when the service has been resolved
@@ -276,10 +278,7 @@ public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE
         // available services. Service IDs are case insensitive, however since
         // this method can be called thousands of times during a request, avoid
         // calling strtolower() unless necessary.
-        foreach (array(false, true) as $strtolower) {
-            if ($strtolower) {
-                $id = strtolower($id);
-            }
+        for ($i = 2;;) {
             if ('service_container' === $id) {
                 return $this;
             }
@@ -290,57 +289,60 @@ public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE
             if (isset($this->services[$id]) || array_key_exists($id, $this->services)) {
                 return $this->services[$id];
             }
-        }
 
-        if (isset($this->loading[$id])) {
-            throw new ServiceCircularReferenceException($id, array_keys($this->loading));
-        }
+            if (isset($this->loading[$id])) {
+                throw new ServiceCircularReferenceException($id, array_keys($this->loading));
+            }
 
-        if (isset($this->methodMap[$id])) {
-            $method = $this->methodMap[$id];
-        } elseif (method_exists($this, $method = 'get'.strtr($id, array('_' => '', '.' => '_', '\\' => '_')).'Service')) {
-            // $method is set to the right value, proceed
-        } else {
-            if (self::EXCEPTION_ON_INVALID_REFERENCE === $invalidBehavior) {
-                if (!$id) {
-                    throw new ServiceNotFoundException($id);
-                }
+            if (isset($this->methodMap[$id])) {
+                $method = $this->methodMap[$id];
+            } elseif (--$i && $id !== $lcId = strtolower($id)) {
+                $id = $lcId;
+                continue;
+            } elseif (method_exists($this, $method = 'get'.strtr($id, $this->underscoreMap).'Service')) {
+                // $method is set to the right value, proceed
+            } else {
+                if (self::EXCEPTION_ON_INVALID_REFERENCE === $invalidBehavior) {
+                    if (!$id) {
+                        throw new ServiceNotFoundException($id);
+                    }
 
-                $alternatives = array();
-                foreach (array_keys($this->services) as $key) {
-                    $lev = levenshtein($id, $key);
-                    if ($lev <= strlen($id) / 3 || false !== strpos($key, $id)) {
-                        $alternatives[] = $key;
+                    $alternatives = array();
+                    foreach ($this->services as $key => $associatedService) {
+                        $lev = levenshtein($id, $key);
+                        if ($lev <= strlen($id) / 3 || false !== strpos($key, $id)) {
+                            $alternatives[] = $key;
+                        }
                     }
+
+                    throw new ServiceNotFoundException($id, null, null, $alternatives);
                 }
 
-                throw new ServiceNotFoundException($id, null, null, $alternatives);
+                return;
             }
 
-            return;
-        }
+            $this->loading[$id] = true;
 
-        $this->loading[$id] = true;
+            try {
+                $service = $this->$method();
+            } catch (\Exception $e) {
+                unset($this->loading[$id]);
 
-        try {
-            $service = $this->$method();
-        } catch (\Exception $e) {
-            unset($this->loading[$id]);
+                if (array_key_exists($id, $this->services)) {
+                    unset($this->services[$id]);
+                }
 
-            if (array_key_exists($id, $this->services)) {
-                unset($this->services[$id]);
-            }
+                if ($e instanceof InactiveScopeException && self::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) {
+                    return;
+                }
 
-            if ($e instanceof InactiveScopeException && self::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) {
-                return;
+                throw $e;
             }
 
-            throw $e;
-        }
-
-        unset($this->loading[$id]);
+            unset($this->loading[$id]);
 
-        return $service;
+            return $service;
+        }
     }
 
     /**
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAware.php b/core/vendor/symfony/dependency-injection/ContainerAware.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAware.php
rename to core/vendor/symfony/dependency-injection/ContainerAware.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAwareInterface.php b/core/vendor/symfony/dependency-injection/ContainerAwareInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAwareInterface.php
rename to core/vendor/symfony/dependency-injection/ContainerAwareInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAwareTrait.php b/core/vendor/symfony/dependency-injection/ContainerAwareTrait.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerAwareTrait.php
rename to core/vendor/symfony/dependency-injection/ContainerAwareTrait.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php b/core/vendor/symfony/dependency-injection/ContainerBuilder.php
similarity index 96%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php
rename to core/vendor/symfony/dependency-injection/ContainerBuilder.php
index 5857195a2a57a4d616429e5841bfd03bf9b3e3be..b7104a06e74682913b6a94663b431d77ea4f290f 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php
+++ b/core/vendor/symfony/dependency-injection/ContainerBuilder.php
@@ -412,7 +412,7 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER)
 
         parent::set($id, $service, $scope);
 
-        if (isset($this->obsoleteDefinitions[$id]) && $this->obsoleteDefinitions[$id]->isSynchronized()) {
+        if (isset($this->obsoleteDefinitions[$id]) && $this->obsoleteDefinitions[$id]->isSynchronized(false)) {
             $this->synchronize($id);
         }
     }
@@ -470,7 +470,7 @@ public function get($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INV
             return $service;
         }
 
-        if (!$this->hasDefinition($id) && isset($this->aliasDefinitions[$id])) {
+        if (!array_key_exists($id, $this->definitions) && isset($this->aliasDefinitions[$id])) {
             return $this->get($this->aliasDefinitions[$id]);
         }
 
@@ -684,7 +684,7 @@ public function setAlias($alias, $id)
             throw new InvalidArgumentException('$id must be a string, or an Alias object.');
         }
 
-        if ($alias === strtolower($id)) {
+        if ($alias === (string) $id) {
             throw new InvalidArgumentException(sprintf('An alias can not reference itself, got a circular reference on "%s".', $alias));
         }
 
@@ -746,7 +746,7 @@ public function getAlias($id)
     {
         $id = strtolower($id);
 
-        if (!$this->hasAlias($id)) {
+        if (!isset($this->aliasDefinitions[$id])) {
             throw new InvalidArgumentException(sprintf('The service alias "%s" does not exist.', $id));
         }
 
@@ -768,7 +768,7 @@ public function getAlias($id)
      */
     public function register($id, $class = null)
     {
-        return $this->setDefinition(strtolower($id), new Definition($class));
+        return $this->setDefinition($id, new Definition($class));
     }
 
     /**
@@ -864,7 +864,7 @@ public function getDefinition($id)
     {
         $id = strtolower($id);
 
-        if (!$this->hasDefinition($id)) {
+        if (!array_key_exists($id, $this->definitions)) {
             throw new InvalidArgumentException(sprintf('The service definition "%s" does not exist.', $id));
         }
 
@@ -886,8 +886,10 @@ public function getDefinition($id)
      */
     public function findDefinition($id)
     {
-        while ($this->hasAlias($id)) {
-            $id = (string) $this->getAlias($id);
+        $id = strtolower($id);
+
+        while (isset($this->aliasDefinitions[$id])) {
+            $id = (string) $this->aliasDefinitions[$id];
         }
 
         return $this->getDefinition($id);
@@ -948,16 +950,16 @@ public function createService(Definition $definition, $id, $tryProxy = true)
             }
 
             $service = call_user_func_array($factory, $arguments);
-        } elseif (null !== $definition->getFactoryMethod()) {
-            if (null !== $definition->getFactoryClass()) {
-                $factory = $parameterBag->resolveValue($definition->getFactoryClass());
-            } elseif (null !== $definition->getFactoryService()) {
-                $factory = $this->get($parameterBag->resolveValue($definition->getFactoryService()));
+        } elseif (null !== $definition->getFactoryMethod(false)) {
+            if (null !== $definition->getFactoryClass(false)) {
+                $factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
+            } elseif (null !== $definition->getFactoryService(false)) {
+                $factory = $this->get($parameterBag->resolveValue($definition->getFactoryService(false)));
             } else {
                 throw new RuntimeException(sprintf('Cannot create service "%s" from factory method without a factory service or factory class.', $id));
             }
 
-            $service = call_user_func_array(array($factory, $definition->getFactoryMethod()), $arguments);
+            $service = call_user_func_array(array($factory, $definition->getFactoryMethod(false)), $arguments);
         } else {
             $r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
 
@@ -1119,9 +1121,15 @@ private function getProxyInstantiator()
      * service by calling all methods referencing it.
      *
      * @param string $id A service id
+     *
+     * @deprecated since version 2.7, will be removed in 3.0.
      */
     private function synchronize($id)
     {
+        if ('request' !== $id) {
+            trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
+        }
+
         foreach ($this->definitions as $definitionId => $definition) {
             // only check initialized services
             if (!$this->initialized($definitionId)) {
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerInterface.php b/core/vendor/symfony/dependency-injection/ContainerInterface.php
similarity index 97%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerInterface.php
rename to core/vendor/symfony/dependency-injection/ContainerInterface.php
index 0f32089dcc93f9fc561ab4dfebc75c8d0a119b6d..19e800b3144da1572d3042e197b508e11ddb44a9 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerInterface.php
+++ b/core/vendor/symfony/dependency-injection/ContainerInterface.php
@@ -50,7 +50,6 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER);
      *
      * @return object The associated service
      *
-     * @throws InvalidArgumentException          if the service is not defined
      * @throws ServiceCircularReferenceException When a circular reference is detected
      * @throws ServiceNotFoundException          When the service is not defined
      *
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Definition.php b/core/vendor/symfony/dependency-injection/Definition.php
similarity index 87%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Definition.php
rename to core/vendor/symfony/dependency-injection/Definition.php
index bdc75e04173cbcca3f298a7cda3bfa335973de01..9d02be4f6907f9e5cb31c4252bb009439c707955 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Definition.php
+++ b/core/vendor/symfony/dependency-injection/Definition.php
@@ -94,10 +94,12 @@ public function getFactory()
      * @return Definition The current instance
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     public function setFactoryClass($factoryClass)
     {
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryClass), E_USER_DEPRECATED);
+
         $this->factoryClass = $factoryClass;
 
         return $this;
@@ -109,10 +111,14 @@ public function setFactoryClass($factoryClass)
      * @return string|null The factory class name
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
-    public function getFactoryClass()
+    public function getFactoryClass($triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         return $this->factoryClass;
     }
 
@@ -124,10 +130,12 @@ public function getFactoryClass()
      * @return Definition The current instance
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     public function setFactoryMethod($factoryMethod)
     {
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryMethod), E_USER_DEPRECATED);
+
         $this->factoryMethod = $factoryMethod;
 
         return $this;
@@ -174,10 +182,14 @@ public function getDecoratedService()
      * @return string|null The factory method name
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
-    public function getFactoryMethod()
+    public function getFactoryMethod($triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         return $this->factoryMethod;
     }
 
@@ -189,10 +201,12 @@ public function getFactoryMethod()
      * @return Definition The current instance
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     public function setFactoryService($factoryService)
     {
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryService), E_USER_DEPRECATED);
+
         $this->factoryService = $factoryService;
 
         return $this;
@@ -204,10 +218,14 @@ public function setFactoryService($factoryService)
      * @return string|null The factory service id
      *
      * @api
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
-    public function getFactoryService()
+    public function getFactoryService($triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         return $this->factoryService;
     }
 
@@ -643,9 +661,15 @@ public function isPublic()
      * @return Definition The current instance
      *
      * @api
+     *
+     * @deprecated since version 2.7, will be removed in 3.0.
      */
-    public function setSynchronized($boolean)
+    public function setSynchronized($boolean, $triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         $this->synchronized = (bool) $boolean;
 
         return $this;
@@ -657,9 +681,15 @@ public function setSynchronized($boolean)
      * @return bool
      *
      * @api
+     *
+     * @deprecated since version 2.7, will be removed in 3.0.
      */
-    public function isSynchronized()
+    public function isSynchronized($triggerDeprecationError = true)
     {
+        if ($triggerDeprecationError) {
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         return $this->synchronized;
     }
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php b/core/vendor/symfony/dependency-injection/DefinitionDecorator.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php
rename to core/vendor/symfony/dependency-injection/DefinitionDecorator.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/Dumper.php b/core/vendor/symfony/dependency-injection/Dumper/Dumper.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/Dumper.php
rename to core/vendor/symfony/dependency-injection/Dumper/Dumper.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php b/core/vendor/symfony/dependency-injection/Dumper/DumperInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php
rename to core/vendor/symfony/dependency-injection/Dumper/DumperInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/GraphvizDumper.php b/core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/GraphvizDumper.php
rename to core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
similarity index 96%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
rename to core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
index 6a75df81e15cbffa08e3e25ff0f7f5a3afb4e002..75c955ab3681d7c66b23aeb7c1f22fbd3ad24fb7 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
+++ b/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
@@ -560,7 +560,7 @@ private function addService($id, $definition)
         if ($definition->isSynthetic()) {
             $return[] = '@throws RuntimeException always since this service is expected to be injected dynamically';
         } elseif ($class = $definition->getClass()) {
-            $return[] = sprintf('@return %s A %s instance.', 0 === strpos($class, '%') ? 'object' : "\\".$class, $class);
+            $return[] = sprintf('@return %s A %s instance.', 0 === strpos($class, '%') ? 'object' : '\\'.$class, $class);
         } elseif ($definition->getFactory()) {
             $factory = $definition->getFactory();
             if (is_string($factory)) {
@@ -572,10 +572,10 @@ private function addService($id, $definition)
                     $return[] = sprintf('@return object An instance returned by %s::%s().', $factory[0]->getClass(), $factory[1]);
                 }
             }
-        } elseif ($definition->getFactoryClass()) {
-            $return[] = sprintf('@return object An instance returned by %s::%s().', $definition->getFactoryClass(), $definition->getFactoryMethod());
-        } elseif ($definition->getFactoryService()) {
-            $return[] = sprintf('@return object An instance returned by %s::%s().', $definition->getFactoryService(), $definition->getFactoryMethod());
+        } elseif ($definition->getFactoryClass(false)) {
+            $return[] = sprintf('@return object An instance returned by %s::%s().', $definition->getFactoryClass(false), $definition->getFactoryMethod(false));
+        } elseif ($definition->getFactoryService(false)) {
+            $return[] = sprintf('@return object An instance returned by %s::%s().', $definition->getFactoryService(false), $definition->getFactoryMethod(false));
         }
 
         $scope = $definition->getScope();
@@ -695,13 +695,19 @@ private function addServices()
      * @param Definition $definition A Definition instance
      *
      * @return string|null
+     *
+     * @deprecated since version 2.7, will be removed in 3.0.
      */
     private function addServiceSynchronizer($id, Definition $definition)
     {
-        if (!$definition->isSynchronized()) {
+        if (!$definition->isSynchronized(false)) {
             return;
         }
 
+        if ('request' !== $id) {
+            trigger_error('Synchronized services were deprecated in version 2.7 and won\'t work anymore in 3.0.', E_USER_DEPRECATED);
+        }
+
         $code = '';
         foreach ($this->container->getDefinitions() as $definitionId => $definition) {
             foreach ($definition->getMethodCalls() as $call) {
@@ -768,20 +774,20 @@ private function addNewInstance($id, Definition $definition, $return, $instantia
             }
 
             return sprintf("        $return{$instantiation}\\%s(%s);\n", $callable, $arguments ? implode(', ', $arguments) : '');
-        } elseif (null !== $definition->getFactoryMethod()) {
-            if (null !== $definition->getFactoryClass()) {
-                $class = $this->dumpValue($definition->getFactoryClass());
+        } elseif (null !== $definition->getFactoryMethod(false)) {
+            if (null !== $definition->getFactoryClass(false)) {
+                $class = $this->dumpValue($definition->getFactoryClass(false));
 
                 // If the class is a string we can optimize call_user_func away
                 if (strpos($class, "'") === 0) {
-                    return sprintf("        $return{$instantiation}%s::%s(%s);\n", $this->dumpLiteralClass($class), $definition->getFactoryMethod(), $arguments ? implode(', ', $arguments) : '');
+                    return sprintf("        $return{$instantiation}%s::%s(%s);\n", $this->dumpLiteralClass($class), $definition->getFactoryMethod(false), $arguments ? implode(', ', $arguments) : '');
                 }
 
-                return sprintf("        $return{$instantiation}call_user_func(array(%s, '%s')%s);\n", $this->dumpValue($definition->getFactoryClass()), $definition->getFactoryMethod(), $arguments ? ', '.implode(', ', $arguments) : '');
+                return sprintf("        $return{$instantiation}call_user_func(array(%s, '%s')%s);\n", $this->dumpValue($definition->getFactoryClass(false)), $definition->getFactoryMethod(false), $arguments ? ', '.implode(', ', $arguments) : '');
             }
 
-            if (null !== $definition->getFactoryService()) {
-                return sprintf("        $return{$instantiation}%s->%s(%s);\n", $this->getServiceCall($definition->getFactoryService()), $definition->getFactoryMethod(), implode(', ', $arguments));
+            if (null !== $definition->getFactoryService(false)) {
+                return sprintf("        $return{$instantiation}%s->%s(%s);\n", $this->getServiceCall($definition->getFactoryService(false)), $definition->getFactoryMethod(false), implode(', ', $arguments));
             }
 
             throw new RuntimeException(sprintf('Factory method requires a factory service or factory class in service definition for %s', $id));
@@ -898,9 +904,6 @@ public function __construct()
         \$this->services =
         \$this->scopedServices =
         \$this->scopeStacks = array();
-
-        \$this->set('service_container', \$this);
-
 EOF;
 
         $code .= "\n";
@@ -1328,19 +1331,19 @@ private function dumpValue($value, $interpolate = true)
                 throw new RuntimeException('Cannot dump definition because of invalid factory');
             }
 
-            if (null !== $value->getFactoryMethod()) {
-                if (null !== $value->getFactoryClass()) {
-                    return sprintf("call_user_func(array(%s, '%s')%s)", $this->dumpValue($value->getFactoryClass()), $value->getFactoryMethod(), count($arguments) > 0 ? ', '.implode(', ', $arguments) : '');
-                } elseif (null !== $value->getFactoryService()) {
-                    $service = $this->dumpValue($value->getFactoryService());
+            if (null !== $value->getFactoryMethod(false)) {
+                if (null !== $value->getFactoryClass(false)) {
+                    return sprintf("call_user_func(array(%s, '%s')%s)", $this->dumpValue($value->getFactoryClass(false)), $value->getFactoryMethod(false), count($arguments) > 0 ? ', '.implode(', ', $arguments) : '');
+                } elseif (null !== $value->getFactoryService(false)) {
+                    $service = $this->dumpValue($value->getFactoryService(false));
 
-                    return sprintf('%s->%s(%s)', 0 === strpos($service, '$') ? sprintf('$this->get(%s)', $service) : $this->getServiceCall($value->getFactoryService()), $value->getFactoryMethod(), implode(', ', $arguments));
+                    return sprintf('%s->%s(%s)', 0 === strpos($service, '$') ? sprintf('$this->get(%s)', $service) : $this->getServiceCall($value->getFactoryService(false)), $value->getFactoryMethod(false), implode(', ', $arguments));
                 } else {
                     throw new RuntimeException('Cannot dump definitions which have factory method without factory service or factory class.');
                 }
             }
 
-            return sprintf("new \\%s(%s)", substr(str_replace('\\\\', '\\', $class), 1, -1), implode(', ', $arguments));
+            return sprintf('new \\%s(%s)', substr(str_replace('\\\\', '\\', $class), 1, -1), implode(', ', $arguments));
         } elseif ($value instanceof Variable) {
             return '$'.$value;
         } elseif ($value instanceof Reference) {
@@ -1404,12 +1407,15 @@ public function dumpParameter($name)
     }
 
     /**
-     * @deprecated Deprecated since 2.6.2, to be removed in 3.0. Use Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider instead.
+     * @deprecated since version 2.6.2, to be removed in 3.0.
+     *             Use \Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider instead.
      *
      * @param ExpressionFunctionProviderInterface $provider
      */
     public function addExpressionLanguageProvider(ExpressionFunctionProviderInterface $provider)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6.2 and will be removed in 3.0. Use the Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider method instead.', E_USER_DEPRECATED);
+
         $this->expressionLanguageProviders[] = $provider;
     }
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/core/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
similarity index 93%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
rename to core/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
index 5fed552ea98cdc8bcbd0b2bd9e3ec631ba81c8fb..40486c4595543961d53d86d5160128550a59f678 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
+++ b/core/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
@@ -117,14 +117,14 @@ private function addService($definition, $id, \DOMElement $parent)
         if ($definition->getClass()) {
             $service->setAttribute('class', $definition->getClass());
         }
-        if ($definition->getFactoryMethod()) {
-            $service->setAttribute('factory-method', $definition->getFactoryMethod());
+        if ($definition->getFactoryMethod(false)) {
+            $service->setAttribute('factory-method', $definition->getFactoryMethod(false));
         }
-        if ($definition->getFactoryClass()) {
-            $service->setAttribute('factory-class', $definition->getFactoryClass());
+        if ($definition->getFactoryClass(false)) {
+            $service->setAttribute('factory-class', $definition->getFactoryClass(false));
         }
-        if ($definition->getFactoryService()) {
-            $service->setAttribute('factory-service', $definition->getFactoryService());
+        if ($definition->getFactoryService(false)) {
+            $service->setAttribute('factory-service', $definition->getFactoryService(false));
         }
         if (ContainerInterface::SCOPE_CONTAINER !== $scope = $definition->getScope()) {
             $service->setAttribute('scope', $scope);
@@ -135,7 +135,7 @@ private function addService($definition, $id, \DOMElement $parent)
         if ($definition->isSynthetic()) {
             $service->setAttribute('synthetic', 'true');
         }
-        if ($definition->isSynchronized()) {
+        if ($definition->isSynchronized(false)) {
             $service->setAttribute('synchronized', 'true');
         }
         if ($definition->isLazy()) {
@@ -178,7 +178,11 @@ private function addService($definition, $id, \DOMElement $parent)
 
         if ($callable = $definition->getFactory()) {
             $factory = $this->document->createElement('factory');
-            if (is_array($callable)) {
+
+            if (is_array($callable) && $callable[0] instanceof Definition) {
+                $this->addService($callable[0], null, $factory);
+                $factory->setAttribute('method', $callable[1]);
+            } elseif (is_array($callable)) {
                 $factory->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]);
                 $factory->setAttribute('method', $callable[1]);
             } else {
@@ -189,7 +193,11 @@ private function addService($definition, $id, \DOMElement $parent)
 
         if ($callable = $definition->getConfigurator()) {
             $configurator = $this->document->createElement('configurator');
-            if (is_array($callable)) {
+
+            if (is_array($callable) && $callable[0] instanceof Definition) {
+                $this->addService($callable[0], null, $configurator);
+                $configurator->setAttribute('method', $callable[1]);
+            } elseif (is_array($callable)) {
                 $configurator->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]);
                 $configurator->setAttribute('method', $callable[1]);
             } else {
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php b/core/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
similarity index 93%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
rename to core/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
index 66ecfd870946da51412c91e35a201152a3b66e30..832929cd049c0ea3ab144b55dc1e822cf2bee335 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
+++ b/core/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
@@ -18,7 +18,6 @@
 use Symfony\Component\DependencyInjection\Parameter;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Exception\RuntimeException;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\ExpressionLanguage\Expression;
 
 /**
@@ -32,20 +31,6 @@ class YamlDumper extends Dumper
 {
     private $dumper;
 
-    /**
-     * Constructor.
-     *
-     * @param ContainerBuilder $container The service container to dump
-     *
-     * @api
-     */
-    public function __construct(ContainerBuilder $container)
-    {
-        parent::__construct($container);
-
-        $this->dumper = new YmlDumper();
-    }
-
     /**
      * Dumps the service container as an YAML string.
      *
@@ -57,6 +42,14 @@ public function __construct(ContainerBuilder $container)
      */
     public function dump(array $options = array())
     {
+        if (!class_exists('Symfony\Component\Yaml\Dumper')) {
+            throw new RuntimeException('Unable to dump the container as the Symfony Yaml Component is not installed.');
+        }
+
+        if (null === $this->dumper) {
+            $this->dumper = new YmlDumper();
+        }
+
         return $this->addParameters()."\n".$this->addServices();
     }
 
@@ -103,24 +96,24 @@ private function addService($id, $definition)
             $code .= sprintf("        synthetic: true\n");
         }
 
-        if ($definition->isSynchronized()) {
+        if ($definition->isSynchronized(false)) {
             $code .= sprintf("        synchronized: true\n");
         }
 
-        if ($definition->getFactoryClass()) {
-            $code .= sprintf("        factory_class: %s\n", $definition->getFactoryClass());
+        if ($definition->getFactoryClass(false)) {
+            $code .= sprintf("        factory_class: %s\n", $definition->getFactoryClass(false));
         }
 
         if ($definition->isLazy()) {
             $code .= sprintf("        lazy: true\n");
         }
 
-        if ($definition->getFactoryMethod()) {
-            $code .= sprintf("        factory_method: %s\n", $definition->getFactoryMethod());
+        if ($definition->getFactoryMethod(false)) {
+            $code .= sprintf("        factory_method: %s\n", $definition->getFactoryMethod(false));
         }
 
-        if ($definition->getFactoryService()) {
-            $code .= sprintf("        factory_service: %s\n", $definition->getFactoryService());
+        if ($definition->getFactoryService(false)) {
+            $code .= sprintf("        factory_service: %s\n", $definition->getFactoryService(false));
         }
 
         if ($definition->getArguments()) {
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/BadMethodCallException.php b/core/vendor/symfony/dependency-injection/Exception/BadMethodCallException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/BadMethodCallException.php
rename to core/vendor/symfony/dependency-injection/Exception/BadMethodCallException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ExceptionInterface.php b/core/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ExceptionInterface.php
rename to core/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/InactiveScopeException.php b/core/vendor/symfony/dependency-injection/Exception/InactiveScopeException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/InactiveScopeException.php
rename to core/vendor/symfony/dependency-injection/Exception/InactiveScopeException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/InvalidArgumentException.php b/core/vendor/symfony/dependency-injection/Exception/InvalidArgumentException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/InvalidArgumentException.php
rename to core/vendor/symfony/dependency-injection/Exception/InvalidArgumentException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/LogicException.php b/core/vendor/symfony/dependency-injection/Exception/LogicException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/LogicException.php
rename to core/vendor/symfony/dependency-injection/Exception/LogicException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/OutOfBoundsException.php b/core/vendor/symfony/dependency-injection/Exception/OutOfBoundsException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/OutOfBoundsException.php
rename to core/vendor/symfony/dependency-injection/Exception/OutOfBoundsException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ParameterCircularReferenceException.php b/core/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ParameterCircularReferenceException.php
rename to core/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ParameterNotFoundException.php b/core/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ParameterNotFoundException.php
rename to core/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/RuntimeException.php b/core/vendor/symfony/dependency-injection/Exception/RuntimeException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/RuntimeException.php
rename to core/vendor/symfony/dependency-injection/Exception/RuntimeException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ScopeCrossingInjectionException.php b/core/vendor/symfony/dependency-injection/Exception/ScopeCrossingInjectionException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ScopeCrossingInjectionException.php
rename to core/vendor/symfony/dependency-injection/Exception/ScopeCrossingInjectionException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ScopeWideningInjectionException.php b/core/vendor/symfony/dependency-injection/Exception/ScopeWideningInjectionException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ScopeWideningInjectionException.php
rename to core/vendor/symfony/dependency-injection/Exception/ScopeWideningInjectionException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ServiceCircularReferenceException.php b/core/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ServiceCircularReferenceException.php
rename to core/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ServiceNotFoundException.php b/core/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Exception/ServiceNotFoundException.php
rename to core/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ExpressionLanguage.php b/core/vendor/symfony/dependency-injection/ExpressionLanguage.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ExpressionLanguage.php
rename to core/vendor/symfony/dependency-injection/ExpressionLanguage.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ExpressionLanguageProvider.php b/core/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ExpressionLanguageProvider.php
rename to core/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/ConfigurationExtensionInterface.php b/core/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/ConfigurationExtensionInterface.php
rename to core/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/Extension.php b/core/vendor/symfony/dependency-injection/Extension/Extension.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/Extension.php
rename to core/vendor/symfony/dependency-injection/Extension/Extension.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php b/core/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php
rename to core/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/PrependExtensionInterface.php b/core/vendor/symfony/dependency-injection/Extension/PrependExtensionInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Extension/PrependExtensionInterface.php
rename to core/vendor/symfony/dependency-injection/Extension/PrependExtensionInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/IntrospectableContainerInterface.php b/core/vendor/symfony/dependency-injection/IntrospectableContainerInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/IntrospectableContainerInterface.php
rename to core/vendor/symfony/dependency-injection/IntrospectableContainerInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LICENSE b/core/vendor/symfony/dependency-injection/LICENSE
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LICENSE
rename to core/vendor/symfony/dependency-injection/LICENSE
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/Instantiator/InstantiatorInterface.php b/core/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/Instantiator/InstantiatorInterface.php
rename to core/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/Instantiator/RealServiceInstantiator.php b/core/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/Instantiator/RealServiceInstantiator.php
rename to core/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php b/core/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php
rename to core/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php b/core/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php
rename to core/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/ClosureLoader.php b/core/vendor/symfony/dependency-injection/Loader/ClosureLoader.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/ClosureLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/ClosureLoader.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/FileLoader.php b/core/vendor/symfony/dependency-injection/Loader/FileLoader.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/FileLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/FileLoader.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/IniFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/IniFileLoader.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/IniFileLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/IniFileLoader.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/PhpFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/PhpFileLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
similarity index 92%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
index 514f4f396f1a9cf6bdb5fe975cb9e300e5d11125..f81d8d6931974665c627e98d77bda25067215a94 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
+++ b/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
@@ -116,25 +116,27 @@ private function parseDefinitions(\DOMDocument $xml, $file)
         }
 
         foreach ($services as $service) {
-            $this->parseDefinition((string) $service->getAttribute('id'), $service, $file);
+            if (null !== $definition = $this->parseDefinition($service, $file)) {
+                $this->container->setDefinition((string) $service->getAttribute('id'), $definition);
+            }
         }
     }
 
     /**
      * Parses an individual Definition.
      *
-     * @param string      $id
      * @param \DOMElement $service
-     * @param string      $file
+     *
+     * @return Definition|null
      */
-    private function parseDefinition($id, \DOMElement $service, $file)
+    private function parseDefinition(\DOMElement $service)
     {
         if ($alias = $service->getAttribute('alias')) {
             $public = true;
             if ($publicAttr = $service->getAttribute('public')) {
                 $public = XmlUtils::phpize($publicAttr);
             }
-            $this->container->setAlias($id, new Alias($alias, $public));
+            $this->container->setAlias((string) $service->getAttribute('id'), new Alias($alias, $public));
 
             return;
         }
@@ -145,13 +147,17 @@ private function parseDefinition($id, \DOMElement $service, $file)
             $definition = new Definition();
         }
 
-        foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'synchronized', 'lazy', 'abstract') as $key) {
+        foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'lazy', 'abstract') as $key) {
             if ($value = $service->getAttribute($key)) {
                 $method = 'set'.str_replace('-', '', $key);
                 $definition->$method(XmlUtils::phpize($value));
             }
         }
 
+        if ($value = $service->getAttribute('synchronized')) {
+            $definition->setSynchronized(XmlUtils::phpize($value), 'request' !== (string) $service->getAttribute('id'));
+        }
+
         if ($files = $this->getChildren($service, 'file')) {
             $definition->setFile($files[0]->nodeValue);
         }
@@ -164,7 +170,11 @@ private function parseDefinition($id, \DOMElement $service, $file)
             if ($function = $factory->getAttribute('function')) {
                 $definition->setFactory($function);
             } else {
-                if ($childService = $factory->getAttribute('service')) {
+                $factoryService = $this->getChildren($factory, 'service');
+
+                if (isset($factoryService[0])) {
+                    $class = $this->parseDefinition($factoryService[0]);
+                } elseif ($childService = $factory->getAttribute('service')) {
                     $class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
                 } else {
                     $class = $factory->getAttribute('class');
@@ -179,7 +189,11 @@ private function parseDefinition($id, \DOMElement $service, $file)
             if ($function = $configurator->getAttribute('function')) {
                 $definition->setConfigurator($function);
             } else {
-                if ($childService = $configurator->getAttribute('service')) {
+                $configuratorService = $this->getChildren($configurator, 'service');
+
+                if (isset($configuratorService[0])) {
+                    $class = $this->parseDefinition($configuratorService[0]);
+                } elseif ($childService = $configurator->getAttribute('service')) {
                     $class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
                 } else {
                     $class = $configurator->getAttribute('class');
@@ -215,7 +229,7 @@ private function parseDefinition($id, \DOMElement $service, $file)
             $definition->setDecoratedService($value, $renameId);
         }
 
-        $this->container->setDefinition($id, $definition);
+        return $definition;
     }
 
     /**
@@ -291,7 +305,9 @@ private function processAnonymousServices(\DOMDocument $xml, $file)
             // we could not use the constant false here, because of XML parsing
             $domElement->setAttribute('public', 'false');
 
-            $this->parseDefinition($id, $domElement, $file);
+            if (null !== $definition = $this->parseDefinition($domElement, $file)) {
+                $this->container->setDefinition($id, $definition);
+            }
 
             if (true === $wild) {
                 $tmpDomElement = new \DOMElement('_services', null, self::NS);
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
similarity index 93%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
rename to core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
index 85f6ee69625354a1fb3c169d3a57f40cb6018fd4..ae9613a612742c889b6a7ab8936a14865bddd91c 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
+++ b/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
@@ -17,6 +17,7 @@
 use Symfony\Component\DependencyInjection\Definition;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
 use Symfony\Component\Config\Resource\FileResource;
 use Symfony\Component\Yaml\Parser as YamlParser;
 use Symfony\Component\ExpressionLanguage\Expression;
@@ -74,7 +75,7 @@ public function load($resource, $type = null)
      */
     public function supports($resource, $type = null)
     {
-        return is_string($resource) && 'yml' === pathinfo($resource, PATHINFO_EXTENSION);
+        return is_string($resource) && in_array(pathinfo($resource, PATHINFO_EXTENSION), array('yml', 'yaml'), true);
     }
 
     /**
@@ -171,7 +172,7 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['synchronized'])) {
-            $definition->setSynchronized($service['synchronized']);
+            $definition->setSynchronized($service['synchronized'], 'request' !== $id);
         }
 
         if (isset($service['lazy'])) {
@@ -237,8 +238,15 @@ private function parseDefinition($id, $service, $file)
             }
 
             foreach ($service['calls'] as $call) {
-                $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
-                $definition->addMethodCall($call[0], $args);
+                if (isset($call['method'])) {
+                    $method = $call['method'];
+                    $args = isset($call['arguments']) ? $this->resolveServices($call['arguments']) : array();
+                } else {
+                    $method = $call[0];
+                    $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
+                }
+
+                $definition->addMethodCall($method, $args);
             }
         }
 
@@ -288,6 +296,10 @@ private function parseDefinition($id, $service, $file)
      */
     protected function loadFile($file)
     {
+        if (!class_exists('Symfony\Component\Yaml\Parser')) {
+            throw new RuntimeException('Unable to load YAML config files as the Symfony Yaml Component is not installed.');
+        }
+
         if (!stream_is_local($file)) {
             throw new InvalidArgumentException(sprintf('This is not a local file "%s".', $file));
         }
@@ -323,7 +335,7 @@ private function validate($content, $file)
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid. It should contain an array. Check your YAML syntax.', $file));
         }
 
-        foreach (array_keys($content) as $namespace) {
+        foreach ($content as $namespace => $data) {
             if (in_array($namespace, array('imports', 'parameters', 'services'))) {
                 continue;
             }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd b/core/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd
similarity index 98%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd
rename to core/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd
index 966f4de07fe4302520b2f67f295645ffb96a47e7..ac2cba7a80ce0681f78cc99c35e530e82d1eba12 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd
+++ b/core/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd
@@ -65,6 +65,9 @@
   </xsd:complexType>
 
   <xsd:complexType name="callable">
+    <xsd:choice minOccurs="0" maxOccurs="1">
+      <xsd:element name="service" type="service" minOccurs="0" maxOccurs="1" />
+    </xsd:choice>
     <xsd:attribute name="id" type="xsd:string" />
     <xsd:attribute name="service" type="xsd:string" />
     <xsd:attribute name="class" type="xsd:string" />
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Parameter.php b/core/vendor/symfony/dependency-injection/Parameter.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Parameter.php
rename to core/vendor/symfony/dependency-injection/Parameter.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/FrozenParameterBag.php b/core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/FrozenParameterBag.php
rename to core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php b/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
similarity index 99%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php
rename to core/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
index 593479313b9e47f706a7e3a39467f552986844da..e4f4da19d1d851b6a577d36208573dbedbb0de64 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php
+++ b/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
@@ -96,7 +96,7 @@ public function get($name)
             }
 
             $alternatives = array();
-            foreach (array_keys($this->parameters) as $key) {
+            foreach ($this->parameters as $key => $parameterValue) {
                 $lev = levenshtein($name, $key);
                 if ($lev <= strlen($name) / 3 || false !== strpos($key, $name)) {
                     $alternatives[] = $key;
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/ParameterBagInterface.php b/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ParameterBag/ParameterBagInterface.php
rename to core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/README.md b/core/vendor/symfony/dependency-injection/README.md
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/README.md
rename to core/vendor/symfony/dependency-injection/README.md
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Reference.php b/core/vendor/symfony/dependency-injection/Reference.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Reference.php
rename to core/vendor/symfony/dependency-injection/Reference.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Scope.php b/core/vendor/symfony/dependency-injection/Scope.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Scope.php
rename to core/vendor/symfony/dependency-injection/Scope.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ScopeInterface.php b/core/vendor/symfony/dependency-injection/ScopeInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ScopeInterface.php
rename to core/vendor/symfony/dependency-injection/ScopeInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/SimpleXMLElement.php b/core/vendor/symfony/dependency-injection/SimpleXMLElement.php
similarity index 94%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/SimpleXMLElement.php
rename to core/vendor/symfony/dependency-injection/SimpleXMLElement.php
index 2e20b6cf31b7332f4293a04607211ae7058fc011..1b318fd9e4231bb11b237dcafea89e909e94c5cf 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/SimpleXMLElement.php
+++ b/core/vendor/symfony/dependency-injection/SimpleXMLElement.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\DependencyInjection;
 
+trigger_error('The '.__NAMESPACE__.'\SimpleXMLElement method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
 use Symfony\Component\Config\Util\XmlUtils;
 use Symfony\Component\ExpressionLanguage\Expression;
 
@@ -19,7 +21,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  */
 class SimpleXMLElement extends \SimpleXMLElement
 {
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectWithXsdExtensionInPhar.phar b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectWithXsdExtensionInPhar.phar
deleted file mode 100644
index 402e17b2f2146572088215a07892fcb219fc3b43..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectWithXsdExtensionInPhar.phar
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php require_once "phar://ProjectWithXsdExtensionInPhar.phar/ProjectWithXsdExtensionInPhar.php"; __HALT_COMPILER(); ?>
-£����������"���ProjectWithXsdExtensionInPhar.phar����!���ProjectWithXsdExtensionInPhar.php~��ÿakM~��õ ÷¯¶���������schema/project-1.0.xsd¸��ÿakM¸��Qp£´¶������<?php
-
-class ProjectWithXsdExtensionInPhar extends ProjectExtension
-{
-    public function getXsdValidationBasePath()
-    {
-        return __DIR__.'/schema';
-    }
-
-    public function getNamespace()
-    {
-        return 'http://www.example.com/schema/projectwithxsdinphar';
-    }
-
-    public function getAlias()
-    {
-        return 'projectwithxsdinphar';
-    }
-}<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsd:schema xmlns="http://www.example.com/schema/projectwithxsdinphar"
-    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-    targetNamespace="http://www.example.com/schema/projectwithxsdinphar"
-    elementFormDefault="qualified">
-
-  <xsd:element name="bar" type="bar" />
-
-  <xsd:complexType name="bar">
-    <xsd:attribute name="foo" type="xsd:string" />
-  </xsd:complexType>
-</xsd:schema>W¬î©]ʯ¦`¡5,,)E°àYÃ���GBMB
\ No newline at end of file
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/TaggedContainerInterface.php b/core/vendor/symfony/dependency-injection/TaggedContainerInterface.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/TaggedContainerInterface.php
rename to core/vendor/symfony/dependency-injection/TaggedContainerInterface.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..368ec3c5cd46aff6de3000ceb543814162b661bd
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Tests\Compiler;
+
+use Symfony\Component\DependencyInjection\Compiler\AutoAliasServicePass;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+class AutoAliasServicePassTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException
+     */
+    public function testProcessWithMissingParameter()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('example')
+          ->addTag('auto_alias', array('format' => '%non_existing%.example'));
+
+        $pass = new AutoAliasServicePass();
+        $pass->process($container);
+    }
+
+    /**
+     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
+     */
+    public function testProcessWithMissingFormat()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('example')
+          ->addTag('auto_alias', array());
+        $container->setParameter('existing', 'mysql');
+
+        $pass = new AutoAliasServicePass();
+        $pass->process($container);
+    }
+
+    public function testProcessWithNonExistingAlias()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassDefault')
+          ->addTag('auto_alias', array('format' => '%existing%.example'));
+        $container->setParameter('existing', 'mysql');
+
+        $pass = new AutoAliasServicePass();
+        $pass->process($container);
+
+        $this->assertEquals('Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassDefault', $container->getDefinition('example')->getClass());
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassDefault', $container->get('example'));
+    }
+
+    public function testProcessWithExistingAlias()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassDefault')
+          ->addTag('auto_alias', array('format' => '%existing%.example'));
+
+        $container->register('mysql.example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassMysql');
+        $container->setParameter('existing', 'mysql');
+
+        $pass = new AutoAliasServicePass();
+        $pass->process($container);
+
+        $this->assertTrue($container->hasAlias('example'));
+        $this->assertEquals('mysql.example', $container->getAlias('example'));
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassMysql', $container->get('example'));
+    }
+
+    public function testProcessWithManualAlias()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassDefault')
+          ->addTag('auto_alias', array('format' => '%existing%.example'));
+
+        $container->register('mysql.example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassMysql');
+        $container->register('mariadb.example', 'Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassMariadb');
+        $container->setAlias('example', 'mariadb.example');
+        $container->setParameter('existing', 'mysql');
+
+        $pass = new AutoAliasServicePass();
+        $pass->process($container);
+
+        $this->assertTrue($container->hasAlias('example'));
+        $this->assertEquals('mariadb.example', $container->getAlias('example'));
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Tests\Compiler\ServiceClassMariaDb', $container->get('example'));
+    }
+}
+
+class ServiceClassDefault
+{
+}
+
+class ServiceClassMysql extends ServiceClassDefault
+{
+}
+
+class ServiceClassMariaDb extends ServiceClassMysql
+{
+}
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckCircularReferencesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckCircularReferencesPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckDefinitionValidityPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
similarity index 95%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckDefinitionValidityPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
index ed04a8b18ce5a66a752908910884d94eb397dcb7..09ae3c413a75a065b8f9a22f56444629ae79d3a6 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckDefinitionValidityPassTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
@@ -52,9 +52,12 @@ public function testProcessDetectsNonSyntheticNonAbstractDefinitionWithoutClass(
 
     /**
      * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
+     * @group legacy
      */
-    public function testProcessDetectsBothFactorySyntaxesUsed()
+    public function testLegacyProcessDetectsBothFactorySyntaxesUsed()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->register('a')->setFactory(array('a', 'b'))->setFactoryClass('a');
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckReferenceValidityPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/CheckReferenceValidityPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/DecoratorServicePassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/DecoratorServicePassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/InlineServiceDefinitionsPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
similarity index 87%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
index baefa1d0fff92f62af65ca08b108dfda6ebe34a8..590ca4cfae2f9b0dd158f765630e1add2c054590 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
@@ -237,40 +237,6 @@ public function testProcessDoesNotInlineWhenServiceReferencesItself()
         $this->assertSame($ref, $calls[0][1][0]);
     }
 
-    public function testProcessDoesNotInlineFactories()
-    {
-        $container = new ContainerBuilder();
-        $container
-            ->register('foo.factory')
-            ->setPublic(false)
-        ;
-        $container
-            ->register('foo')
-            ->setFactory(array(new Reference('foo.factory'), 'getFoo'))
-        ;
-        $this->process($container);
-
-        $factory = $container->getDefinition('foo')->getFactory();
-        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Reference', $factory[0]);
-    }
-
-    public function testProcessDoesNotInlineConfigurators()
-    {
-        $container = new ContainerBuilder();
-        $container
-            ->register('foo.configurator')
-            ->setPublic(false)
-        ;
-        $container
-            ->register('foo')
-            ->setConfigurator(array(new Reference('foo.configurator'), 'getFoo'))
-        ;
-        $this->process($container);
-
-        $configurator = $container->getDefinition('foo')->getConfigurator();
-        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Reference', $configurator[0]);
-    }
-
     protected function process(ContainerBuilder $container)
     {
         $repeatedPass = new RepeatedPass(array(new AnalyzeServiceReferencesPass(), new InlineServiceDefinitionsPass()));
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/RemoveUnusedDefinitionsPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/RemoveUnusedDefinitionsPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/RemoveUnusedDefinitionsPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/RemoveUnusedDefinitionsPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInvalidReferencesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInvalidReferencesPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInvalidReferencesPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInvalidReferencesPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php b/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
similarity index 97%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
index 51c59d272d525a24d90fd56ab8ba9b2182cd8ea8..5f6fdd1d1715c7823523dc669b5b6ea384f4568e 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
@@ -190,6 +190,13 @@ public function testAliases()
         $this->assertTrue($builder->has('bar'), '->setAlias() defines a new service');
         $this->assertTrue($builder->get('bar') === $builder->get('foo'), '->setAlias() creates a service that is an alias to another one');
 
+        try {
+            $builder->setAlias('foobar', 'foobar');
+            $this->fail('->setAlias() throws an InvalidArgumentException if the alias references itself');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertEquals('An alias can not reference itself, got a circular reference on "foobar".', $e->getMessage(), '->setAlias() throws an InvalidArgumentException if the alias references itself');
+        }
+
         try {
             $builder->getAlias('foobar');
             $this->fail('->getAlias() throws an InvalidArgumentException if the alias does not exist');
@@ -331,7 +338,14 @@ public function testCreateServiceFactory()
         $this->assertTrue($builder->get('qux')->called, '->createService() calls the factory method to create the service instance');
         $this->assertTrue($builder->get('bar')->called, '->createService() uses anonymous service as factory');
         $this->assertTrue($builder->get('baz')->called, '->createService() uses another service as factory');
+    }
+
+    public function testLegacyCreateServiceFactory()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
 
+        $builder = new ContainerBuilder();
+        $builder->register('bar', 'Bar\FooClass');
         $builder
             ->register('foo1', 'Bar\FooClass')
             ->setFactoryClass('%foo_class%')
@@ -347,8 +361,10 @@ public function testCreateServiceFactory()
     /**
      * @covers Symfony\Component\DependencyInjection\ContainerBuilder::createService
      */
-    public function testCreateServiceFactoryService()
+    public function testLegacyCreateServiceFactoryService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $builder = new ContainerBuilder();
         $builder->register('foo_service', 'Bar\FooClass');
         $builder
@@ -711,8 +727,13 @@ public function testNoExceptionWhenSetSyntheticServiceOnAFrozenContainer()
         $this->assertEquals($a, $container->get('a'));
     }
 
-    public function testSetOnSynchronizedService()
+    /**
+     * @group legacy
+     */
+    public function testLegacySetOnSynchronizedService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->register('baz', 'BazClass')
             ->setSynchronized(true)
@@ -728,8 +749,13 @@ public function testSetOnSynchronizedService()
         $this->assertSame($baz, $container->get('bar')->getBaz());
     }
 
-    public function testSynchronizedServiceWithScopes()
+    /**
+     * @group legacy
+     */
+    public function testLegacySynchronizedServiceWithScopes()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->addScope(new Scope('foo'));
         $container->register('baz', 'BazClass')
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php b/core/vendor/symfony/dependency-injection/Tests/ContainerTest.php
similarity index 99%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ContainerTest.php
index 2ce50ee5f982b0f23e86956593ff1501d7f17445..dd8358e929962ed42706e60b5c599caf31474e72 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/ContainerTest.php
@@ -322,7 +322,7 @@ public function testEnterLeaveCurrentScope()
 
         $container->enterScope('foo');
         $scoped2 = $container->get('scoped');
-        $scoped3 = $container->get('scoped');
+        $scoped3 = $container->get('SCOPED');
         $scopedFoo2 = $container->get('scoped_foo');
 
         $container->leaveScope('foo');
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/CrossCheckTest.php b/core/vendor/symfony/dependency-injection/Tests/CrossCheckTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/CrossCheckTest.php
rename to core/vendor/symfony/dependency-injection/Tests/CrossCheckTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php b/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
similarity index 83%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php
rename to core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
index cea67408f0ddb11f15f5b4871b7a5efbd47f93b9..f9006540a561e273b10913893734f534ee4816ac 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
@@ -44,11 +44,36 @@ public function getPropertyTests()
         return array(
             array('class', 'class'),
             array('factory', 'factory'),
+            array('configurator', 'configurator'),
+            array('file', 'file'),
+        );
+    }
+
+    /**
+     * @dataProvider provideLegacyPropertyTests
+     * @group legacy
+     */
+    public function testLegacySetProperty($property, $changeKey)
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $def = new DefinitionDecorator('foo');
+
+        $getter = 'get'.ucfirst($property);
+        $setter = 'set'.ucfirst($property);
+
+        $this->assertNull($def->$getter());
+        $this->assertSame($def, $def->$setter('foo'));
+        $this->assertEquals('foo', $def->$getter());
+        $this->assertEquals(array($changeKey => true), $def->getChanges());
+    }
+
+    public function provideLegacyPropertyTests()
+    {
+        return array(
             array('factoryClass', 'factory_class'),
             array('factoryMethod', 'factory_method'),
             array('factoryService', 'factory_service'),
-            array('configurator', 'configurator'),
-            array('file', 'file'),
         );
     }
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php b/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
similarity index 99%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
rename to core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
index 583d49f1e95f5feee22f6515469de8ebc0c4fbd9..b6539f3b74003f4b41cadcbbc448b823b4772d40 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
@@ -166,9 +166,12 @@ public function testSetIsSynthetic()
     /**
      * @covers Symfony\Component\DependencyInjection\Definition::setSynchronized
      * @covers Symfony\Component\DependencyInjection\Definition::isSynchronized
+     * @group legacy
      */
-    public function testSetIsSynchronized()
+    public function testLegacySetIsSynchronized()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $def = new Definition('stdClass');
         $this->assertFalse($def->isSynchronized(), '->isSynchronized() returns false by default');
         $this->assertSame($def, $def->setSynchronized(true), '->setSynchronized() implements a fluent interface');
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/GraphvizDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
similarity index 89%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/GraphvizDumperTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
index 79689d78dc4f1cbc7405045389f6ec6f2e525050..ba5e12cd5076bc3c5061120142892c7e0d793fe0 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/GraphvizDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
@@ -23,6 +23,18 @@ public static function setUpBeforeClass()
         self::$fixturesPath = __DIR__.'/../Fixtures/';
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyDump()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = include self::$fixturesPath.'/containers/legacy-container9.php';
+        $dumper = new GraphvizDumper($container);
+        $this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/legacy-services9.dot')), $dumper->dump(), '->dump() dumps services');
+    }
+
     public function testDump()
     {
         $dumper = new GraphvizDumper($container = new ContainerBuilder());
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
similarity index 94%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
index f6b5dadaf9d3864efe2fe2b5389155df7866a4ea..7fa0c17a13b7683f1fc9d21e064cf1f9068a8d18 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
@@ -124,6 +124,18 @@ public function testAddService()
         }
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacySynchronizedServices()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = include self::$fixturesPath.'/containers/container20.php';
+        $dumper = new PhpDumper($container);
+        $this->assertEquals(str_replace('%path%', str_replace('\\', '\\\\', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR), file_get_contents(self::$fixturesPath.'/php/services20.php')), $dumper->dump(), '->dump() dumps services');
+    }
+
     public function testServicesWithAnonymousFactories()
     {
         $container = include self::$fixturesPath.'/containers/container19.php';
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
similarity index 73%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
index 76cbb60da39384a717c437dfa50353e341898145..9ee103630a12784de21399379bd64e8b17b2aae3 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
@@ -44,10 +44,34 @@ public function testAddParameters()
         $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services8.xml', $dumper->dump(), '->dump() dumps parameters');
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyAddService()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = include self::$fixturesPath.'/containers/legacy-container9.php';
+        $dumper = new XmlDumper($container);
+
+        $this->assertEquals(str_replace('%path%', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR, file_get_contents(self::$fixturesPath.'/xml/legacy-services9.xml')), $dumper->dump(), '->dump() dumps services');
+
+        $dumper = new XmlDumper($container = new ContainerBuilder());
+        $container->register('foo', 'FooClass')->addArgument(new \stdClass());
+        try {
+            $dumper->dump();
+            $this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+        } catch (\Exception $e) {
+            $this->assertInstanceOf('\RuntimeException', $e, '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+            $this->assertEquals('Unable to dump a service container if a parameter is an object or a resource.', $e->getMessage(), '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+        }
+    }
+
     public function testAddService()
     {
         $container = include self::$fixturesPath.'/containers/container9.php';
         $dumper = new XmlDumper($container);
+
         $this->assertEquals(str_replace('%path%', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR, file_get_contents(self::$fixturesPath.'/xml/services9.xml')), $dumper->dump(), '->dump() dumps services');
 
         $dumper = new XmlDumper($container = new ContainerBuilder());
@@ -65,21 +89,21 @@ public function testDumpAnonymousServices()
     {
         $container = include self::$fixturesPath.'/containers/container11.php';
         $dumper = new XmlDumper($container);
-        $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?>
-<container xmlns=\"http://symfony.com/schema/dic/services\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd\">
+        $this->assertEquals('<?xml version="1.0" encoding="utf-8"?>
+<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
   <services>
-    <service id=\"foo\" class=\"FooClass\">
-      <argument type=\"service\">
-        <service class=\"BarClass\">
-          <argument type=\"service\">
-            <service class=\"BazClass\"/>
+    <service id="foo" class="FooClass">
+      <argument type="service">
+        <service class="BarClass">
+          <argument type="service">
+            <service class="BazClass"/>
           </argument>
         </service>
       </argument>
     </service>
   </services>
 </container>
-", $dumper->dump());
+', $dumper->dump());
     }
 
     public function testDumpEntities()
@@ -151,4 +175,12 @@ public function provideCompiledContainerData()
             array('container14'),
         );
     }
+
+    public function testDumpInlinedServices()
+    {
+        $container = include self::$fixturesPath.'/containers/container21.php';
+        $dumper = new XmlDumper($container);
+
+        $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services21.xml'), $dumper->dump());
+    }
 }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
similarity index 65%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
index f9747a7c2fae963dd3a8a780046fbda018359081..c22c7eb40e24fbe818aa7c220aa80cafa4ebaf11 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
@@ -40,6 +40,29 @@ public function testAddParameters()
         $this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services8.yml', $dumper->dump(), '->dump() dumps parameters');
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyAddService()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = include self::$fixturesPath.'/containers/legacy-container9.php';
+        $dumper = new YamlDumper($container);
+
+        $this->assertEquals(str_replace('%path%', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR, file_get_contents(self::$fixturesPath.'/yaml/legacy-services9.yml')), $dumper->dump(), '->dump() dumps services');
+
+        $dumper = new YamlDumper($container = new ContainerBuilder());
+        $container->register('foo', 'FooClass')->addArgument(new \stdClass());
+        try {
+            $dumper->dump();
+            $this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+        } catch (\Exception $e) {
+            $this->assertInstanceOf('\RuntimeException', $e, '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+            $this->assertEquals('Unable to dump a service container if a parameter is an object or a resource.', $e->getMessage(), '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
+        }
+    }
+
     public function testAddService()
     {
         $container = include self::$fixturesPath.'/containers/container9.php';
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Extension/ExtensionTest.php b/core/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Extension/ExtensionTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container10.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container10.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container10.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container10.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container11.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container11.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container11.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container11.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container12.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container12.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container12.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container12.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container13.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container13.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container13.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container13.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container14.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container14.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container14.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container14.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container15.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container15.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container15.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container15.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container16.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container16.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container16.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container16.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container17.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container17.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container17.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container17.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container18.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container18.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container18.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container18.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container19.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container19.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container19.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container19.php
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container20.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container20.php
new file mode 100644
index 0000000000000000000000000000000000000000..a40a0e8a6c10f3947509ac80e5914c7d03ddb3ba
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container20.php
@@ -0,0 +1,19 @@
+<?php
+
+require_once __DIR__.'/../includes/classes.php';
+
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+
+$container = new ContainerBuilder();
+$container
+    ->register('request', 'Request')
+    ->setSynchronized(true)
+;
+$container
+    ->register('depends_on_request', 'stdClass')
+    ->addMethodCall('setRequest', array(new Reference('request', ContainerInterface::NULL_ON_INVALID_REFERENCE, false)))
+;
+
+return $container;
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container21.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container21.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0467386140a98c44ae9e7e6f078811c9e0f7515
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container21.php
@@ -0,0 +1,20 @@
+<?php
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Definition;
+
+$container = new ContainerBuilder();
+
+$bar = new Definition('Bar');
+$bar->setConfigurator(array(new Definition('Baz'), 'configureBar'));
+
+$fooFactory = new Definition('FooFactory');
+$fooFactory->setFactory(array(new Definition('Foobar'), 'createFooFactory'));
+
+$container
+    ->register('foo', 'Foo')
+    ->setFactory(array($fooFactory, 'createFoo'))
+    ->setConfigurator(array($bar, 'configureFoo'))
+;
+
+return $container;
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container9.php
similarity index 50%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container9.php
index 11f34dc203b233c026e6176a4844868d0d810ec7..e97a2dda69ccb99073d86cb30f8e8565fa153269 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container9.php
@@ -9,33 +9,31 @@
 use Symfony\Component\ExpressionLanguage\Expression;
 
 $container = new ContainerBuilder();
-$container->
-    register('foo', 'Bar\FooClass')->
-    addTag('foo', array('foo' => 'foo'))->
-    addTag('foo', array('bar' => 'bar', 'baz' => 'baz'))->
-    setFactoryClass('Bar\\FooClass')->
-    setFactoryMethod('getInstance')->
-    setArguments(array('foo', new Reference('foo.baz'), array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%'), true, new Reference('service_container')))->
-    setProperties(array('foo' => 'bar', 'moo' => new Reference('foo.baz'), 'qux' => array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%')))->
-    addMethodCall('setBar', array(new Reference('bar')))->
-    addMethodCall('initialize')->
-    setConfigurator('sc_configure')
-;
-$container->
-    register('bar', 'Bar\FooClass')->
-    setArguments(array('foo', new Reference('foo.baz'), new Parameter('foo_bar')))->
-    setScope('container')->
-    setConfigurator(array(new Reference('foo.baz'), 'configure'))
-;
-$container->
-    register('foo.baz', '%baz_class%')->
-    setFactoryClass('%baz_class%')->
-    setFactoryMethod('getInstance')->
-    setConfigurator(array('%baz_class%', 'configureStatic1'))
-;
-$container->
-    register('foo_bar', '%foo_class%')->
-    setScope('prototype')
+$container
+    ->register('foo', 'Bar\FooClass')
+    ->addTag('foo', array('foo' => 'foo'))
+    ->addTag('foo', array('bar' => 'bar', 'baz' => 'baz'))
+    ->setFactory(array('Bar\\FooClass', 'getInstance'))
+    ->setArguments(array('foo', new Reference('foo.baz'), array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%'), true, new Reference('service_container')))
+    ->setProperties(array('foo' => 'bar', 'moo' => new Reference('foo.baz'), 'qux' => array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%')))
+    ->addMethodCall('setBar', array(new Reference('bar')))
+    ->addMethodCall('initialize')
+    ->setConfigurator('sc_configure')
+;
+$container
+    ->register('foo.baz', '%baz_class%')
+    ->setFactory(array('%baz_class%', 'getInstance'))
+    ->setConfigurator(array('%baz_class%', 'configureStatic1'))
+;
+$container
+    ->register('bar', 'Bar\FooClass')
+    ->setArguments(array('foo', new Reference('foo.baz'), new Parameter('foo_bar')))
+    ->setScope('container')
+    ->setConfigurator(array(new Reference('foo.baz'), 'configure'))
+;
+$container
+    ->register('foo_bar', '%foo_class%')
+    ->setScope('prototype')
 ;
 $container->getParameterBag()->clear();
 $container->getParameterBag()->add(array(
@@ -45,21 +43,15 @@
 ));
 $container->setAlias('alias_for_foo', 'foo');
 $container->setAlias('alias_for_alias', 'alias_for_foo');
-$container->
-    register('method_call1', 'Bar\FooClass')->
-    setFile(realpath(__DIR__.'/../includes/foo.php'))->
-    addMethodCall('setBar', array(new Reference('foo')))->
-    addMethodCall('setBar', array(new Reference('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE)))->
-    addMethodCall('setBar', array(new Reference('foo3', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)))->
-    addMethodCall('setBar', array(new Reference('foobaz', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)))->
-    addMethodCall('setBar', array(new Expression('service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")')))
-;
-$container->
-    register('factory_service', 'Bar')->
-    setFactoryService('foo.baz')->
-    setFactoryMethod('getInstance')
+$container
+    ->register('method_call1', 'Bar\FooClass')
+    ->setFile(realpath(__DIR__.'/../includes/foo.php'))
+    ->addMethodCall('setBar', array(new Reference('foo')))
+    ->addMethodCall('setBar', array(new Reference('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE)))
+    ->addMethodCall('setBar', array(new Reference('foo3', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)))
+    ->addMethodCall('setBar', array(new Reference('foobaz', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)))
+    ->addMethodCall('setBar', array(new Expression('service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")')))
 ;
-
 $container
     ->register('foo_with_inline', 'Foo')
     ->addMethodCall('setBar', array(new Reference('inlined')))
@@ -77,11 +69,6 @@
 $container
     ->register('request', 'Request')
     ->setSynthetic(true)
-    ->setSynchronized(true)
-;
-$container
-    ->register('depends_on_request', 'stdClass')
-    ->addMethodCall('setRequest', array(new Reference('request', ContainerInterface::NULL_ON_INVALID_REFERENCE, false)))
 ;
 $container
     ->register('configurator_service', 'ConfClass')
@@ -109,6 +96,10 @@
     ->setScope('container')
     ->setPublic(false)
 ;
+$container
+    ->register('factory_service', 'Bar')
+    ->setFactory(array(new Reference('foo.baz'), 'getInstance'))
+;
 $container
     ->register('new_factory_service', 'FooBarBaz')
     ->setProperty('foo', 'bar')
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/legacy-container9.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/legacy-container9.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f4210c9d5b7fea144d0d77a0fc41d32c11d83a8
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/containers/legacy-container9.php
@@ -0,0 +1,39 @@
+<?php
+
+require_once __DIR__.'/../includes/classes.php';
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\ExpressionLanguage\Expression;
+
+$container = new ContainerBuilder();
+$container->
+    register('foo', 'Bar\FooClass')->
+    addTag('foo', array('foo' => 'foo'))->
+    addTag('foo', array('bar' => 'bar'))->
+    setFactoryClass('Bar\\FooClass')->
+    setFactoryMethod('getInstance')->
+    setArguments(array('foo', new Reference('foo.baz'), array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%'), true, new Reference('service_container')))->
+    setProperties(array('foo' => 'bar', 'moo' => new Reference('foo.baz'), 'qux' => array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%')))->
+    addMethodCall('setBar', array(new Reference('bar')))->
+    addMethodCall('initialize')->
+    setConfigurator('sc_configure')
+;
+$container->
+    register('foo.baz', '%baz_class%')->
+    setFactoryClass('%baz_class%')->
+    setFactoryMethod('getInstance')->
+    setConfigurator(array('%baz_class%', 'configureStatic1'))
+;
+$container->
+    register('factory_service', 'Bar')->
+    setFactoryService('foo.baz')->
+    setFactoryMethod('getInstance')
+;
+$container->getParameterBag()->clear();
+$container->getParameterBag()->add(array(
+    'baz_class' => 'BazClass',
+    'foo' => 'bar',
+));
+
+return $container;
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/legacy-services9.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/legacy-services9.dot
new file mode 100644
index 0000000000000000000000000000000000000000..4e8dfb977495e53f1ff9d732a735c1bdc5ce060e
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/legacy-services9.dot
@@ -0,0 +1,15 @@
+digraph sc {
+  ratio="compress"
+  node [fontsize="11" fontname="Arial" shape="record"];
+  edge [fontsize="9" fontname="Arial" color="grey" arrowhead="open" arrowsize="0.5"];
+
+  node_foo [label="foo\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
+  node_foo_baz [label="foo.baz\nBazClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
+  node_factory_service [label="factory_service\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];
+  node_service_container [label="service_container\nSymfony\\Component\\DependencyInjection\\ContainerBuilder\n", shape=record, fillcolor="#9999ff", style="filled"];
+  node_bar [label="bar\n\n", shape=record, fillcolor="#ff9999", style="filled"];
+  node_foo -> node_foo_baz [label="" style="filled"];
+  node_foo -> node_service_container [label="" style="filled"];
+  node_foo -> node_foo_baz [label="" style="dashed"];
+  node_foo -> node_bar [label="setBar()" style="dashed"];
+}
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services1.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services1.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services1.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services1.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services10-1.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services10-1.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services10-1.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services10-1.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services10.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services10.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services10.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services10.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services13.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services13.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services13.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services13.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services14.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services14.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services14.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services14.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services17.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services17.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services17.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services17.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services18.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services18.dot
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services18.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services18.dot
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services9.dot
similarity index 94%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services9.dot
index e233d62594d0b6dc90dfc044494a267d631ba8d6..b3b424e2e73c733356023c1a0a7ba6037217db06 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/graphviz/services9.dot
@@ -4,22 +4,21 @@ digraph sc {
   edge [fontsize="9" fontname="Arial" color="grey" arrowhead="open" arrowsize="0.5"];
 
   node_foo [label="foo (alias_for_foo)\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
-  node_bar [label="bar\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_foo_baz [label="foo.baz\nBazClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
+  node_bar [label="bar\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_foo_bar [label="foo_bar\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="dotted"];
   node_method_call1 [label="method_call1\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
-  node_factory_service [label="factory_service\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_foo_with_inline [label="foo_with_inline\nFoo\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_inlined [label="inlined\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_baz [label="baz\nBaz\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_request [label="request\nRequest\n", shape=record, fillcolor="#eeeeee", style="filled"];
-  node_depends_on_request [label="depends_on_request\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_configurator_service [label="configurator_service\nConfClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_configured_service [label="configured_service\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_decorated [label="decorated\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_decorator_service [label="decorator_service\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_decorator_service_with_name [label="decorator_service_with_name\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_new_factory [label="new_factory\nFactoryClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
+  node_factory_service [label="factory_service\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_new_factory_service [label="new_factory_service\nFooBarBaz\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_service_from_static_method [label="service_from_static_method\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
   node_service_container [label="service_container\nSymfony\\Component\\DependencyInjection\\ContainerBuilder\n", shape=record, fillcolor="#9999ff", style="filled"];
@@ -38,6 +37,5 @@ digraph sc {
   node_foo_with_inline -> node_inlined [label="setBar()" style="dashed"];
   node_inlined -> node_baz [label="setBaz()" style="dashed"];
   node_baz -> node_foo_with_inline [label="setFoo()" style="dashed"];
-  node_depends_on_request -> node_request [label="setRequest()" style="dashed"];
   node_configurator_service -> node_baz [label="setFoo()" style="dashed"];
 }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectExtension.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/ProjectExtension.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectExtension.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/ProjectExtension.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectWithXsdExtension.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/ProjectWithXsdExtension.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/ProjectWithXsdExtension.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/ProjectWithXsdExtension.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/classes.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/classes.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/createphar.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/createphar.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/foo.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/foo.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/foo.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/foo.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/schema/project-1.0.xsd b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/schema/project-1.0.xsd
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/schema/project-1.0.xsd
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/schema/project-1.0.xsd
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/nonvalid.ini b/core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/nonvalid.ini
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/nonvalid.ini
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/nonvalid.ini
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters.ini b/core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters.ini
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters.ini
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters.ini
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters1.ini b/core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters1.ini
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters1.ini
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters1.ini
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters2.ini b/core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters2.ini
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/parameters2.ini
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/ini/parameters2.ini
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php
new file mode 100644
index 0000000000000000000000000000000000000000..f15771172ef194a763d724392bd9ef0b87777832
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php
@@ -0,0 +1,30 @@
+<?php
+namespace Symfony\Component\DependencyInjection\Dump;
+
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\Container;
+use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
+use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+use Symfony\Component\DependencyInjection\Exception\LogicException;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
+use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
+
+/**
+ * Container.
+ *
+ * This class has been auto-generated
+ * by the Symfony Dependency Injection Component.
+ */
+class Container extends AbstractContainer
+{
+    private $parameters;
+    private $targetDirs = array();
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+}
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services1.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services1.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
similarity index 98%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
index a9a1fffff7b8344ecb8738a0ec6b9a63133c9c90..b9b8d5b38620ba1e067b7dfaeeb354a715a54de3 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
@@ -29,9 +29,6 @@ public function __construct()
         $this->services =
         $this->scopedServices =
         $this->scopeStacks = array();
-
-        $this->set('service_container', $this);
-
         $this->scopes = array();
         $this->scopeChildren = array();
         $this->methodMap = array(
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services12.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
similarity index 98%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services12.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
index 6e7823e0901f9071f441d8a7168edc8a305ae93f..a53f3a3e8176fbed2a0a0db191e1da3984ae2a65 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services12.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
@@ -33,9 +33,6 @@ public function __construct()
         $this->services =
         $this->scopedServices =
         $this->scopeStacks = array();
-
-        $this->set('service_container', $this);
-
         $this->scopes = array();
         $this->scopeChildren = array();
         $this->methodMap = array(
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services19.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services19.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services20.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services20.php
new file mode 100644
index 0000000000000000000000000000000000000000..83f6dc7ed3c2450965eac428cdc4e81036b9933f
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services20.php
@@ -0,0 +1,73 @@
+<?php
+
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\Container;
+use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
+use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+use Symfony\Component\DependencyInjection\Exception\LogicException;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
+use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
+
+/**
+ * ProjectServiceContainer.
+ *
+ * This class has been auto-generated
+ * by the Symfony Dependency Injection Component.
+ */
+class ProjectServiceContainer extends Container
+{
+    private $parameters;
+    private $targetDirs = array();
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        parent::__construct();
+        $this->methodMap = array(
+            'depends_on_request' => 'getDependsOnRequestService',
+            'request' => 'getRequestService',
+        );
+    }
+
+    /**
+     * Gets the 'depends_on_request' service.
+     *
+     * This service is shared.
+     * This method always returns the same instance of the service.
+     *
+     * @return \stdClass A stdClass instance.
+     */
+    protected function getDependsOnRequestService()
+    {
+        $this->services['depends_on_request'] = $instance = new \stdClass();
+
+        $instance->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
+
+        return $instance;
+    }
+
+    /**
+     * Gets the 'request' service.
+     *
+     * This service is shared.
+     * This method always returns the same instance of the service.
+     *
+     * @return \Request A Request instance.
+     */
+    protected function getRequestService()
+    {
+        return $this->services['request'] = new \Request();
+    }
+
+    /**
+     * Updates the 'request' service.
+     */
+    protected function synchronizeRequestService()
+    {
+        if ($this->initialized('depends_on_request')) {
+            $this->get('depends_on_request')->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
+        }
+    }
+}
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
similarity index 92%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
index 958ecfbdebcc3624750b89774bc19f1b35890a56..5977c1c6e7a710c6a2a30f451d5b309b288cc27b 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
@@ -33,7 +33,6 @@ public function __construct()
             'decorated' => 'getDecoratedService',
             'decorator_service' => 'getDecoratorServiceService',
             'decorator_service_with_name' => 'getDecoratorServiceWithNameService',
-            'depends_on_request' => 'getDependsOnRequestService',
             'factory_service' => 'getFactoryServiceService',
             'foo' => 'getFooService',
             'foo.baz' => 'getFoo_BazService',
@@ -144,23 +143,6 @@ protected function getDecoratorServiceWithNameService()
         return $this->services['decorator_service_with_name'] = new \stdClass();
     }
 
-    /**
-     * Gets the 'depends_on_request' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * @return \stdClass A stdClass instance.
-     */
-    protected function getDependsOnRequestService()
-    {
-        $this->services['depends_on_request'] = $instance = new \stdClass();
-
-        $instance->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
-
-        return $instance;
-    }
-
     /**
      * Gets the 'factory_service' service.
      *
@@ -314,16 +296,6 @@ protected function getServiceFromStaticMethodService()
         return $this->services['service_from_static_method'] = \Bar\FooClass::getInstance();
     }
 
-    /**
-     * Updates the 'request' service.
-     */
-    protected function synchronizeRequestService()
-    {
-        if ($this->initialized('depends_on_request')) {
-            $this->get('depends_on_request')->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
-        }
-    }
-
     /**
      * Gets the 'configurator_service' service.
      *
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
similarity index 79%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
index 5cab356704cb1283ff5dfceee7d3937597030963..8c1e71f437a83165f94e2205a60890528e6bdb71 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
@@ -29,26 +29,20 @@ public function __construct()
         $this->services =
         $this->scopedServices =
         $this->scopeStacks = array();
-
-        $this->set('service_container', $this);
-
         $this->scopes = array();
         $this->scopeChildren = array();
         $this->methodMap = array(
             'bar' => 'getBarService',
             'baz' => 'getBazService',
-            'configurator_service' => 'getConfiguratorServiceService',
             'configured_service' => 'getConfiguredServiceService',
             'decorator_service' => 'getDecoratorServiceService',
             'decorator_service_with_name' => 'getDecoratorServiceWithNameService',
-            'depends_on_request' => 'getDependsOnRequestService',
             'factory_service' => 'getFactoryServiceService',
             'foo' => 'getFooService',
             'foo.baz' => 'getFoo_BazService',
             'foo_bar' => 'getFooBarService',
             'foo_with_inline' => 'getFooWithInlineService',
             'method_call1' => 'getMethodCall1Service',
-            'new_factory' => 'getNewFactoryService',
             'new_factory_service' => 'getNewFactoryServiceService',
             'request' => 'getRequestService',
             'service_from_static_method' => 'getServiceFromStaticMethodService',
@@ -114,9 +108,12 @@ protected function getBazService()
      */
     protected function getConfiguredServiceService()
     {
+        $a = new \ConfClass();
+        $a->setFoo($this->get('baz'));
+
         $this->services['configured_service'] = $instance = new \stdClass();
 
-        $this->get('configurator_service')->configureStdClass($instance);
+        $a->configureStdClass($instance);
 
         return $instance;
     }
@@ -147,23 +144,6 @@ protected function getDecoratorServiceWithNameService()
         return $this->services['decorator_service_with_name'] = new \stdClass();
     }
 
-    /**
-     * Gets the 'depends_on_request' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * @return \stdClass A stdClass instance.
-     */
-    protected function getDependsOnRequestService()
-    {
-        $this->services['depends_on_request'] = $instance = new \stdClass();
-
-        $instance->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
-
-        return $instance;
-    }
-
     /**
      * Gets the 'factory_service' service.
      *
@@ -281,7 +261,10 @@ protected function getMethodCall1Service()
      */
     protected function getNewFactoryServiceService()
     {
-        $this->services['new_factory_service'] = $instance = $this->get('new_factory')->getInstance();
+        $a = new \FactoryClass();
+        $a->foo = 'bar';
+
+        $this->services['new_factory_service'] = $instance = $a->getInstance();
 
         $instance->foo = 'bar';
 
@@ -314,58 +297,6 @@ protected function getServiceFromStaticMethodService()
         return $this->services['service_from_static_method'] = \Bar\FooClass::getInstance();
     }
 
-    /**
-     * Updates the 'request' service.
-     */
-    protected function synchronizeRequestService()
-    {
-        if ($this->initialized('depends_on_request')) {
-            $this->get('depends_on_request')->setRequest($this->get('request', ContainerInterface::NULL_ON_INVALID_REFERENCE));
-        }
-    }
-
-    /**
-     * Gets the 'configurator_service' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * This service is private.
-     * If you want to be able to request this service from the container directly,
-     * make it public, otherwise you might end up with broken code.
-     *
-     * @return \ConfClass A ConfClass instance.
-     */
-    protected function getConfiguratorServiceService()
-    {
-        $this->services['configurator_service'] = $instance = new \ConfClass();
-
-        $instance->setFoo($this->get('baz'));
-
-        return $instance;
-    }
-
-    /**
-     * Gets the 'new_factory' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * This service is private.
-     * If you want to be able to request this service from the container directly,
-     * make it public, otherwise you might end up with broken code.
-     *
-     * @return \FactoryClass A FactoryClass instance.
-     */
-    protected function getNewFactoryService()
-    {
-        $this->services['new_factory'] = $instance = new \FactoryClass();
-
-        $instance->foo = 'bar';
-
-        return $instance;
-    }
-
     /**
      * {@inheritdoc}
      */
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/simple.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/php/simple.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/simple.php
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/php/simple.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extension1/services.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extension1/services.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extension1/services.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extension1/services.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extension2/services.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extension2/services.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extension2/services.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extension2/services.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services1.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services1.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services1.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services1.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services2.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services2.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services2.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services2.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services3.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services3.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services3.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services3.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services4.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services4.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services4.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services4.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services5.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services5.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services5.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services5.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services6.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services6.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services6.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services6.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services7.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services7.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/extensions/services7.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/extensions/services7.xml
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml
new file mode 100644
index 0000000000000000000000000000000000000000..17fe00f8fe93cc03e2ec357a52d1269f896af99e
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?>
+
+<container xmlns="http://symfony.com/schema/dic/services"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+  <services>
+    <service id="constructor" class="FooClass" factory-method="getInstance" />
+    <service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
+  </services>
+</container>
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services9.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services9.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5692ba13ea2024afe4bbde7dc70475164bd5e840
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services9.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+  <parameters>
+    <parameter key="baz_class">BazClass</parameter>
+    <parameter key="foo">bar</parameter>
+  </parameters>
+  <services>
+    <service id="foo" class="Bar\FooClass" factory-method="getInstance" factory-class="Bar\FooClass">
+      <tag name="foo" foo="foo"/>
+      <tag name="foo" bar="bar"/>
+      <argument>foo</argument>
+      <argument type="service" id="foo.baz"/>
+      <argument type="collection">
+        <argument key="%foo%">foo is %foo%</argument>
+        <argument key="foobar">%foo%</argument>
+      </argument>
+      <argument>true</argument>
+      <argument type="service" id="service_container"/>
+      <property name="foo">bar</property>
+      <property name="moo" type="service" id="foo.baz"/>
+      <property name="qux" type="collection">
+        <property key="%foo%">foo is %foo%</property>
+        <property key="foobar">%foo%</property>
+      </property>
+      <call method="setBar">
+        <argument type="service" id="bar"/>
+      </call>
+      <call method="initialize"/>
+      <configurator function="sc_configure"/>
+    </service>
+    <service id="foo.baz" class="%baz_class%" factory-method="getInstance" factory-class="%baz_class%">
+      <configurator class="%baz_class%" method="configureStatic1"/>
+    </service>
+    <service id="factory_service" class="Bar" factory-method="getInstance" factory-service="foo.baz"/>
+  </services>
+</container>
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/namespaces.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/namespaces.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/namespaces.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/namespaces.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/nonvalid.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/nonvalid.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/nonvalid.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/nonvalid.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services1.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services1.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services1.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services1.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services10.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services10.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services10.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services10.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services13.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services13.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services13.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services13.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services14.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services14.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services2.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services2.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services2.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services2.xml
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services20.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services20.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d799fc944c804faee1063ede54b7bc221e7a449
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services20.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+  <services>
+    <service id="request" class="Request" synthetic="true" synchronized="true"/>
+    <service id="depends_on_request" class="stdClass">
+      <call method="setRequest">
+        <argument type="service" id="request" on-invalid="null" strict="false"/>
+      </call>
+    </service>
+  </services>
+</container>
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services21.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services21.xml
new file mode 100644
index 0000000000000000000000000000000000000000..329bc3d72a25abd2b45b777069136e19c3731db2
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services21.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+  <services>
+    <service id="foo" class="Foo">
+      <factory method="createFoo">
+        <service class="FooFactory">
+          <factory method="createFooFactory">
+            <service class="Foobar"/>
+          </factory>
+        </service>
+      </factory>
+      <configurator method="configureFoo">
+        <service class="Bar">
+          <configurator method="configureBar">
+            <service class="Baz"/>
+          </configurator>
+        </service>
+      </configurator>
+    </service>
+  </services>
+</container>
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services3.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services3.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services3.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services3.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services4.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services4.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services4.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services4.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services4_bad_import.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services4_bad_import.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services4_bad_import.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services4_bad_import.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services5.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services5.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services5.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services5.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services6.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
similarity index 93%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services6.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
index 121b5bfec66d4cff111ff511e709ed921590d014..3a68c6e39a33cfd5186ff3bb1cad669473835923 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services6.xml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
@@ -9,7 +9,6 @@
     <service id="scope.container" class="FooClass" scope="container" />
     <service id="scope.custom" class="FooClass" scope="custom" />
     <service id="scope.prototype" class="FooClass" scope="prototype" />
-    <service id="constructor" class="FooClass" factory-method="getInstance" />
     <service id="file" class="FooClass">
       <file>%path%/foo.php</file>
     </service>
@@ -48,7 +47,6 @@
     </service>
     <service id="alias_for_foo" alias="foo" />
     <service id="another_alias_for_foo" alias="foo" public="false" />
-    <service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
     <service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
     <service id="decorator_service" decorates="decorated" />
     <service id="decorator_service_with_name" decorates="decorated" decoration-inner-name="decorated.pif-pouf"/>
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services7.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services7.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services7.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services7.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services9.xml
similarity index 87%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services9.xml
index 1416745a37abab127c50acbd36a78690efbd1c2e..c4ddc416b463650365abfa56488c5e99d6cf0386 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services9.xml
@@ -6,7 +6,7 @@
     <parameter key="foo">bar</parameter>
   </parameters>
   <services>
-    <service id="foo" class="Bar\FooClass" factory-method="getInstance" factory-class="Bar\FooClass">
+    <service id="foo" class="Bar\FooClass">
       <tag name="foo" foo="foo"/>
       <tag name="foo" bar="bar" baz="baz"/>
       <argument>foo</argument>
@@ -27,17 +27,19 @@
         <argument type="service" id="bar"/>
       </call>
       <call method="initialize"/>
+      <factory class="Bar\FooClass" method="getInstance"/>
       <configurator function="sc_configure"/>
     </service>
+    <service id="foo.baz" class="%baz_class%">
+      <factory class="%baz_class%" method="getInstance"/>
+      <configurator class="%baz_class%" method="configureStatic1"/>
+    </service>
     <service id="bar" class="Bar\FooClass">
       <argument>foo</argument>
       <argument type="service" id="foo.baz"/>
       <argument>%foo_bar%</argument>
       <configurator service="foo.baz" method="configure"/>
     </service>
-    <service id="foo.baz" class="%baz_class%" factory-method="getInstance" factory-class="%baz_class%">
-      <configurator class="%baz_class%" method="configureStatic1"/>
-    </service>
     <service id="foo_bar" class="%foo_class%" scope="prototype"/>
     <service id="method_call1" class="Bar\FooClass">
       <file>%path%foo.php</file>
@@ -57,7 +59,6 @@
         <argument type="expression">service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")</argument>
       </call>
     </service>
-    <service id="factory_service" class="Bar" factory-method="getInstance" factory-service="foo.baz"/>
     <service id="foo_with_inline" class="Foo">
       <call method="setBar">
         <argument type="service" id="inlined"/>
@@ -74,12 +75,7 @@
         <argument type="service" id="foo_with_inline"/>
       </call>
     </service>
-    <service id="request" class="Request" synthetic="true" synchronized="true"/>
-    <service id="depends_on_request" class="stdClass">
-      <call method="setRequest">
-        <argument type="service" id="request" on-invalid="null" strict="false"/>
-      </call>
-    </service>
+    <service id="request" class="Request" synthetic="true"/>
     <service id="configurator_service" class="ConfClass" public="false">
       <call method="setFoo">
         <argument type="service" id="baz"/>
@@ -94,6 +90,9 @@
     <service id="new_factory" class="FactoryClass" public="false">
       <property name="foo">bar</property>
     </service>
+    <service id="factory_service" class="Bar">
+      <factory service="foo.baz" method="getInstance"/>
+    </service>
     <service id="new_factory_service" class="FooBarBaz">
       <property name="foo">bar</property>
       <factory service="new_factory" method="getInstance"/>
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/withdoctype.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/withdoctype.xml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/withdoctype.xml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/withdoctype.xml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_calls.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_calls.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_calls.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_calls.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_import.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_import.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_import.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_import.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_imports.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_imports.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_imports.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_imports.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_parameters.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_parameters.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_parameters.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_parameters.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_service.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_service.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_service.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_service.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_services.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_services.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/bad_services.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/bad_services.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag1.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag1.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag1.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag1.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag2.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag2.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag2.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag2.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag3.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag3.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag3.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag3.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag4.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag4.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/badtag4.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/badtag4.yml
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d6ca937a5ede2720ed6d97d7aa2bcf5280f58656
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml
@@ -0,0 +1,3 @@
+services:
+    constructor: { class: FooClass, factory_method: getInstance }
+    factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services9.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services9.yml
new file mode 100644
index 0000000000000000000000000000000000000000..64d17262aa307ce5ec62cc31afc424ca92b99f33
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services9.yml
@@ -0,0 +1,28 @@
+parameters:
+    baz_class: BazClass
+    foo: bar
+
+services:
+    foo:
+        class: Bar\FooClass
+        tags:
+            - { name: foo, foo: foo }
+            - { name: foo, bar: bar }
+        factory_class: Bar\FooClass
+        factory_method: getInstance
+        arguments: [foo, '@foo.baz', { '%foo%': 'foo is %foo%', foobar: '%foo%' }, true, '@service_container']
+        properties: { foo: bar, moo: '@foo.baz', qux: { '%foo%': 'foo is %foo%', foobar: '%foo%' } }
+        calls:
+            - [setBar, ['@bar']]
+            - [initialize, {  }]
+
+        configurator: sc_configure
+    foo.baz:
+        class: %baz_class%
+        factory_class: %baz_class%
+        factory_method: getInstance
+        configurator: ['%baz_class%', configureStatic1]
+    factory_service:
+        class: Bar
+        factory_method: getInstance
+        factory_service: foo.baz
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/nonvalid1.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/nonvalid1.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/nonvalid1.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/nonvalid1.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/nonvalid2.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/nonvalid2.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/nonvalid2.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/nonvalid2.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services1.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services1.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services1.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services1.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services10.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services10.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services10.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services10.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services11.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services11.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services11.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services11.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services13.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services13.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services13.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services13.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services14.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services14.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services14.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services14.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services2.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services2.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services2.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services2.yml
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services20.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services20.yml
new file mode 100644
index 0000000000000000000000000000000000000000..847f656886d5d7633e6504123d9ae6a43dc7eb47
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services20.yml
@@ -0,0 +1,9 @@
+services:
+    request:
+        class: Request
+        synthetic: true
+        synchronized: true
+    depends_on_request:
+        class: stdClass
+        calls:
+            - [setRequest, ['@?request']]
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services21.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services21.yml
new file mode 100644
index 0000000000000000000000000000000000000000..da717a8bb2967495f8f9595d785c33dce66c3eae
--- /dev/null
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services21.yml
@@ -0,0 +1,15 @@
+services:
+    manager:
+        class: UserManager
+        arguments:
+          - true
+        calls:
+          - method: setLogger
+            arguments:
+              - @logger
+          - method: setClass
+            arguments:
+              - User
+        tags:
+          - name: manager
+            alias: user
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services3.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services3.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services3.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services3.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services4.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services4.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services4.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services4.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services4_bad_import.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services4_bad_import.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services4_bad_import.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services4_bad_import.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services6.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
similarity index 89%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services6.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
index 398604a553148ffefb6c7b739efbf73daceb8851..8820b274ee20df91db55c794c472d0940f1ced4a 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services6.yml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
@@ -4,7 +4,6 @@ services:
     scope.container: { class: FooClass, scope: container }
     scope.custom: { class: FooClass, scope: custom }
     scope.prototype: { class: FooClass, scope: prototype }
-    constructor: { class: FooClass, factory_method: getInstance }
     file: { class: FooClass, file: %path%/foo.php }
     arguments: { class: FooClass, arguments: [foo, @foo, [true, false]] }
     configurator1: { class: FooClass, configurator: sc_configure }
@@ -24,7 +23,6 @@ services:
     another_alias_for_foo:
         alias: foo
         public: false
-    factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
     request:
         class: Request
         synthetic: true
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services7.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services7.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services7.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services7.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services9.yml
similarity index 87%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml
rename to core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services9.yml
index 1d3b8042979fff9a037a4e490a1c74f8a207d262..fdab85fc7e058c0ffb89cdd3692b8738f604ee59 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services9.yml
@@ -9,24 +9,22 @@ services:
         tags:
             - { name: foo, foo: foo }
             - { name: foo, bar: bar, baz: baz }
-        factory_class: Bar\FooClass
-        factory_method: getInstance
         arguments: [foo, '@foo.baz', { '%foo%': 'foo is %foo%', foobar: '%foo%' }, true, '@service_container']
         properties: { foo: bar, moo: '@foo.baz', qux: { '%foo%': 'foo is %foo%', foobar: '%foo%' } }
         calls:
             - [setBar, ['@bar']]
             - [initialize, {  }]
 
+        factory: [Bar\FooClass, getInstance]
         configurator: sc_configure
+    foo.baz:
+        class: %baz_class%
+        factory: ['%baz_class%', getInstance]
+        configurator: ['%baz_class%', configureStatic1]
     bar:
         class: Bar\FooClass
         arguments: [foo, '@foo.baz', '%foo_bar%']
         configurator: ['@foo.baz', configure]
-    foo.baz:
-        class: %baz_class%
-        factory_class: %baz_class%
-        factory_method: getInstance
-        configurator: ['%baz_class%', configureStatic1]
     foo_bar:
         class: %foo_class%
         scope: prototype
@@ -40,10 +38,6 @@ services:
             - [setBar, ['@?foobaz']]
             - [setBar, ['@=service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")']]
 
-    factory_service:
-        class: Bar
-        factory_method: getInstance
-        factory_service: foo.baz
     foo_with_inline:
         class: Foo
         calls:
@@ -64,12 +58,6 @@ services:
     request:
         class: Request
         synthetic: true
-        synchronized: true
-    depends_on_request:
-        class: stdClass
-        calls:
-            - [setRequest, ['@?request']]
-
     configurator_service:
         class: ConfClass
         public: false
@@ -92,6 +80,9 @@ services:
         class: FactoryClass
         public: false
         properties: { foo: bar }
+    factory_service:
+        class: Bar
+        factory: ['@foo.baz', getInstance]
     new_factory_service:
         class: FooBarBaz
         properties: { foo: bar }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php b/core/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
rename to core/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LazyProxy/PhpDumper/NullDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
rename to core/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LegacyContainerBuilderTest.php b/core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LegacyContainerBuilderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LegacyDefinitionTest.php b/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
similarity index 93%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LegacyDefinitionTest.php
rename to core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
index b85d81f48153d53d35a7ecc584c0ff01c2102d58..437b77b31b05c02187fde7b77a2756f3194b6313 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/LegacyDefinitionTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
@@ -18,6 +18,11 @@
  */
 class LegacyDefinitionTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     public function testSetGetFactoryClass()
     {
         $def = new Definition('stdClass');
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/ClosureLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/ClosureLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/ClosureLoaderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Loader/ClosureLoaderTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
similarity index 96%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
index 505f710cbeb1ac31cdfe9f3400d5e10c1f8dd962..5ae097ca7d1e9135a03623c30d379819ab17e230 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
@@ -12,7 +12,6 @@
 namespace Symfony\Component\DependencyInjection\Tests\Loader;
 
 use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\Config\Loader\Loader;
 use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
 use Symfony\Component\Config\FileLocator;
 
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
similarity index 92%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
index ab1cb3221a2d0c382932315966bc365633fb9184..501d680fcc41ea974c6bc1ceb8050850089d821b 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
@@ -14,7 +14,6 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Reference;
-use Symfony\Component\Config\Loader\Loader;
 use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
 use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
 use Symfony\Component\DependencyInjection\Loader\IniFileLoader;
@@ -191,6 +190,24 @@ public function testLoadAnonymousServices()
         $this->assertEquals('BazClass', $inner->getClass(), '->load() uses the same configuration as for the anonymous ones');
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyLoadServices()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = new ContainerBuilder();
+        $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
+        $loader->load('legacy-services6.xml');
+        $services = $container->getDefinitions();
+        $this->assertEquals('FooClass', $services['constructor']->getClass());
+        $this->assertEquals('getInstance', $services['constructor']->getFactoryMethod());
+        $this->assertNull($services['factory_service']->getClass());
+        $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
+        $this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
+    }
+
     public function testLoadServices()
     {
         $container = new ContainerBuilder();
@@ -203,7 +220,6 @@ public function testLoadServices()
         $this->assertEquals('container', $services['scope.container']->getScope());
         $this->assertEquals('custom', $services['scope.custom']->getScope());
         $this->assertEquals('prototype', $services['scope.prototype']->getScope());
-        $this->assertEquals('getInstance', $services['constructor']->getFactoryMethod(), '->load() parses the factory-method attribute');
         $this->assertEquals('%path%/foo.php', $services['file']->getFile(), '->load() parses the file tag');
         $this->assertEquals(array('foo', new Reference('foo'), array(true, false)), $services['arguments']->getArguments(), '->load() parses the argument tags');
         $this->assertEquals('sc_configure', $services['configurator1']->getConfigurator(), '->load() parses the configurator tag');
@@ -211,15 +227,12 @@ public function testLoadServices()
         $this->assertEquals(array('BazClass', 'configureStatic'), $services['configurator3']->getConfigurator(), '->load() parses the configurator tag');
         $this->assertEquals(array(array('setBar', array()), array('setBar', array(new Expression('service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")')))), $services['method_call1']->getMethodCalls(), '->load() parses the method_call tag');
         $this->assertEquals(array(array('setBar', array('foo', new Reference('foo'), array(true, false)))), $services['method_call2']->getMethodCalls(), '->load() parses the method_call tag');
-        $this->assertNull($services['factory_service']->getClass());
-        $this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
-        $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
         $this->assertEquals('factory', $services['new_factory1']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array(new Reference('baz', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
 
         $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
-        $this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
+        $this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
         $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
 
         $aliases = $container->getAliases();
@@ -453,4 +466,33 @@ public function testLoadIndexedArguments()
 
         $this->assertEquals(array('index_0' => 'app'), $container->findDefinition('logger')->getArguments());
     }
+
+    public function testLoadInlinedServices()
+    {
+        $container = new ContainerBuilder();
+        $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
+        $loader->load('services21.xml');
+
+        $foo = $container->getDefinition('foo');
+
+        $fooFactory = $foo->getFactory();
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $fooFactory[0]);
+        $this->assertSame('FooFactory', $fooFactory[0]->getClass());
+        $this->assertSame('createFoo', $fooFactory[1]);
+
+        $fooFactoryFactory = $fooFactory[0]->getFactory();
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $fooFactoryFactory[0]);
+        $this->assertSame('Foobar', $fooFactoryFactory[0]->getClass());
+        $this->assertSame('createFooFactory', $fooFactoryFactory[1]);
+
+        $fooConfigurator = $foo->getConfigurator();
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $fooConfigurator[0]);
+        $this->assertSame('Bar', $fooConfigurator[0]->getClass());
+        $this->assertSame('configureFoo', $fooConfigurator[1]);
+
+        $barConfigurator = $fooConfigurator[0]->getConfigurator();
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $barConfigurator[0]);
+        $this->assertSame('Baz', $barConfigurator[0]->getClass());
+        $this->assertSame('configureBar', $barConfigurator[1]);
+    }
 }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
similarity index 90%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
rename to core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
index 3de0843dfbdfb050ed286c0d31de99f79ba38698..716aba558686662190ef1a23f7bdf308155cfcfa 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
@@ -13,7 +13,6 @@
 
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Reference;
-use Symfony\Component\Config\Loader\Loader;
 use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
 use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
 use Symfony\Component\DependencyInjection\Loader\IniFileLoader;
@@ -120,6 +119,24 @@ public function testLoadImports()
         $loader->load('services4_bad_import.yml');
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyLoadServices()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $container = new ContainerBuilder();
+        $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
+        $loader->load('legacy-services6.yml');
+        $services = $container->getDefinitions();
+        $this->assertEquals('FooClass', $services['constructor']->getClass());
+        $this->assertEquals('getInstance', $services['constructor']->getFactoryMethod());
+        $this->assertEquals('BazClass', $services['factory_service']->getClass());
+        $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
+        $this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
+    }
+
     public function testLoadServices()
     {
         $container = new ContainerBuilder();
@@ -132,7 +149,6 @@ public function testLoadServices()
         $this->assertEquals('container', $services['scope.container']->getScope());
         $this->assertEquals('custom', $services['scope.custom']->getScope());
         $this->assertEquals('prototype', $services['scope.prototype']->getScope());
-        $this->assertEquals('getInstance', $services['constructor']->getFactoryMethod(), '->load() parses the factory_method attribute');
         $this->assertEquals('%path%/foo.php', $services['file']->getFile(), '->load() parses the file tag');
         $this->assertEquals(array('foo', new Reference('foo'), array(true, false)), $services['arguments']->getArguments(), '->load() parses the argument tags');
         $this->assertEquals('sc_configure', $services['configurator1']->getConfigurator(), '->load() parses the configurator tag');
@@ -140,13 +156,12 @@ public function testLoadServices()
         $this->assertEquals(array('BazClass', 'configureStatic'), $services['configurator3']->getConfigurator(), '->load() parses the configurator tag');
         $this->assertEquals(array(array('setBar', array()), array('setBar', array()), array('setBar', array(new Expression('service("foo").foo() ~ (container.hasparameter("foo") ? parameter("foo") : "default")')))), $services['method_call1']->getMethodCalls(), '->load() parses the method_call tag');
         $this->assertEquals(array(array('setBar', array('foo', new Reference('foo'), array(true, false)))), $services['method_call2']->getMethodCalls(), '->load() parses the method_call tag');
-        $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
         $this->assertEquals('factory', $services['new_factory1']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array(new Reference('baz'), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
 
         $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
-        $this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
+        $this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
         $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
 
         $aliases = $container->getAliases();
@@ -206,6 +221,7 @@ public function testSupports()
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator());
 
         $this->assertTrue($loader->supports('foo.yml'), '->supports() returns true if the resource is loadable');
+        $this->assertTrue($loader->supports('foo.yaml'), '->supports() returns true if the resource is loadable');
         $this->assertFalse($loader->supports('foo.foo'), '->supports() returns true if the resource is loadable');
     }
 
@@ -254,4 +270,16 @@ public function testTagWithAttributeArrayThrowsException()
             $this->assertStringStartsWith('A "tags" attribute must be of a scalar-type for service "foo_service", tag "foo", attribute "bar"', $e->getMessage(), '->load() throws an InvalidArgumentException if a tag-attribute is not a scalar');
         }
     }
+
+    public function testLoadYamlOnlyWithKeys()
+    {
+        $container = new ContainerBuilder();
+        $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
+        $loader->load('services21.yml');
+
+        $definition = $container->getDefinition('manager');
+        $this->assertEquals(array(array('setLogger', array(new Reference('logger'))), array('setClass', array('User'))), $definition->getMethodCalls());
+        $this->assertEquals(array(true), $definition->getArguments());
+        $this->assertEquals(array('manager' => array(array('alias' => 'user'))), $definition->getTags());
+    }
 }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterBag/FrozenParameterBagTest.php b/core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterBag/FrozenParameterBagTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterBag/ParameterBagTest.php b/core/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterBag/ParameterBagTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterTest.php b/core/vendor/symfony/dependency-injection/Tests/ParameterTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ParameterTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ParameterTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ReferenceTest.php b/core/vendor/symfony/dependency-injection/Tests/ReferenceTest.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ReferenceTest.php
rename to core/vendor/symfony/dependency-injection/Tests/ReferenceTest.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Variable.php b/core/vendor/symfony/dependency-injection/Variable.php
similarity index 100%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Variable.php
rename to core/vendor/symfony/dependency-injection/Variable.php
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/composer.json b/core/vendor/symfony/dependency-injection/composer.json
similarity index 76%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/composer.json
rename to core/vendor/symfony/dependency-injection/composer.json
index b550d877fbdcc587db69c249c5ae404d6b39eb31..bbfed43d4589977b96eecba1035d2eb30aea3463 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/composer.json
+++ b/core/vendor/symfony/dependency-injection/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony DependencyInjection Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,11 +12,11 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
@@ -33,13 +33,12 @@
         "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\DependencyInjection\\": "" }
+        "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" }
     },
-    "target-dir": "Symfony/Component/DependencyInjection",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/phpunit.xml.dist b/core/vendor/symfony/dependency-injection/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/phpunit.xml.dist
rename to core/vendor/symfony/dependency-injection/phpunit.xml.dist
index 17a217226da3d177f8acae20b4571e32f02d2888..86252d0456ba9aace41180276b4bf675a48329bb 100644
--- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/phpunit.xml.dist
+++ b/core/vendor/symfony/dependency-injection/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony DependencyInjection Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/FormFieldRegistry.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/FormFieldRegistry.php
index 6a38e866918592f5d0c826e1da311fd51a2213dd..edb2788910de20bf2aa2bb7098e230b09d5ea014 100644
--- a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/FormFieldRegistry.php
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/FormFieldRegistry.php
@@ -124,13 +124,15 @@ public function has($name)
     public function set($name, $value)
     {
         $target = &$this->get($name);
-        if (!is_array($value) || $target instanceof Field\ChoiceFormField) {
+        if ((!is_array($value) && $target instanceof Field\FormField) || $target instanceof Field\ChoiceFormField) {
             $target->setValue($value);
-        } else {
+        } elseif (is_array($value)) {
             $fields = self::create($name, $value);
             foreach ($fields->all() as $k => $v) {
                 $this->set($k, $v);
             }
+        } else {
+            throw new \InvalidArgumentException(sprintf('Cannot set value on a compound field "%s".', $name));
         }
     }
 
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php
index 8db686a9f763f2f80dfbc8a2e88971cc9c9e40b7..a81db36da8c0ac473d959785448e87e18f8db7bb 100644
--- a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php
@@ -163,7 +163,7 @@ protected function canonicalizePath($path)
             if ('..' === $segment) {
                 array_pop($output);
             } elseif ('.' !== $segment) {
-                array_push($output, $segment);
+                $output[] = $segment;
             }
         }
 
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php
index 03080bce0fed2a22d634d55c2e8140f4070b875a..e2c19047389069c568e37b4a0432b5cb5ab6540e 100644
--- a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php
@@ -807,6 +807,31 @@ public function testFormRegistrySetValues()
         ));
     }
 
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Cannot set value on a compound field "foo[bar]".
+     */
+    public function testFormRegistrySetValueOnCompoundField()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('foo[bar][baz]'));
+
+        $registry->set('foo[bar]', 'fbb');
+    }
+
+    /**
+     * @expectedException InvalidArgumentException
+     * @expectedExceptionMessage Unreachable field "0"
+     */
+    public function testFormRegistrySetArrayOnNotCompoundField()
+    {
+
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('bar'));
+
+        $registry->set('bar', array('baz'));
+    }
+
     public function testDifferentFieldTypesWithSameName()
     {
         $dom = new \DOMDocument();
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json
index 4d4aaae7f29091c0e5b5243154be076f6a256f94..c84959add7716e28c88a74e78da84b7ed58e6d1c 100644
--- a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony DomCrawler Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,7 +12,7 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/CHANGELOG.md b/core/vendor/symfony/event-dispatcher/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/CHANGELOG.md
rename to core/vendor/symfony/event-dispatcher/CHANGELOG.md
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php b/core/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
similarity index 98%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php
rename to core/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
index af0b6cef527c76064b6fb9745c9c45e1aa8deee6..76f0e387762a38da24688e2831ea6f450b837d97 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php
+++ b/core/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
@@ -121,7 +121,7 @@ public function hasListeners($eventName = null)
     public function getListeners($eventName = null)
     {
         if (null === $eventName) {
-            foreach (array_keys($this->listenerIds) as $serviceEventName) {
+            foreach ($this->listenerIds as $serviceEventName => $args) {
                 $this->lazyLoad($serviceEventName);
             }
         } else {
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php b/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
similarity index 90%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
rename to core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
index 2119b81b3a91dce62cb3939c2645548a76fff9e5..7653ccfb7175ff8264b4ad2c9e8298d857a5b711 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php
+++ b/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
@@ -31,6 +31,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
 
     private $called;
     private $dispatcher;
+    private $wrappedListeners;
 
     /**
      * Constructor.
@@ -45,6 +46,7 @@ public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $sto
         $this->stopwatch = $stopwatch;
         $this->logger = $logger;
         $this->called = array();
+        $this->wrappedListeners = array();
     }
 
     /**
@@ -68,6 +70,16 @@ public function addSubscriber(EventSubscriberInterface $subscriber)
      */
     public function removeListener($eventName, $listener)
     {
+        if (isset($this->wrappedListeners[$eventName])) {
+            foreach ($this->wrappedListeners[$eventName] as $index => $wrappedListener) {
+                if ($wrappedListener->getWrappedListener() === $listener) {
+                    $listener = $wrappedListener;
+                    unset($this->wrappedListeners[$eventName][$index]);
+                    break;
+                }
+            }
+        }
+
         return $this->dispatcher->removeListener($eventName, $listener);
     }
 
@@ -146,7 +158,7 @@ public function getNotCalledListeners()
             $allListeners = $this->getListeners();
         } catch (\Exception $e) {
             if (null !== $this->logger) {
-                $this->logger->info(sprintf('An exception was thrown while getting the uncalled listeners (%s)', $e->getMessage()), array('exception' => $e));
+                $this->logger->info('An exception was thrown while getting the uncalled listeners.', array('exception' => $e));
             }
 
             // unable to retrieve the uncalled listeners
@@ -216,12 +228,15 @@ private function preProcess($eventName)
             $this->dispatcher->removeListener($eventName, $listener);
             $info = $this->getListenerInfo($listener, $eventName);
             $name = isset($info['class']) ? $info['class'] : $info['type'];
-            $this->dispatcher->addListener($eventName, new WrappedListener($listener, $name, $this->stopwatch, $this));
+            $wrappedListener = new WrappedListener($listener, $name, $this->stopwatch, $this);
+            $this->wrappedListeners[$eventName][] = $wrappedListener;
+            $this->dispatcher->addListener($eventName, $wrappedListener);
         }
     }
 
     private function postProcess($eventName)
     {
+        unset($this->wrappedListeners[$eventName]);
         $skipped = false;
         foreach ($this->dispatcher->getListeners($eventName) as $listener) {
             if (!$listener instanceof WrappedListener) { // #12845: a new listener was added during dispatch.
@@ -259,7 +274,7 @@ private function postProcess($eventName)
     }
 
     /**
-     * Returns information about the listener
+     * Returns information about the listener.
      *
      * @param object $listener  The listener
      * @param string $eventName The event name
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcherInterface.php b/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcherInterface.php
rename to core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/WrappedListener.php b/core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/WrappedListener.php
rename to core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/DependencyInjection/RegisterListenersPass.php b/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/DependencyInjection/RegisterListenersPass.php
rename to core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Event.php b/core/vendor/symfony/event-dispatcher/Event.php
similarity index 81%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Event.php
rename to core/vendor/symfony/event-dispatcher/Event.php
index dc39b05d524e709daf31bc1487db4cf638871b68..e411ca81360ad140d0e1c7f08623f3e2cba04fa0 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Event.php
+++ b/core/vendor/symfony/event-dispatcher/Event.php
@@ -77,7 +77,7 @@ public function stopPropagation()
      *
      * @param EventDispatcherInterface $dispatcher
      *
-     * @deprecated Deprecated in 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
+     * @deprecated since version 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
      *
      * @api
      */
@@ -91,12 +91,14 @@ public function setDispatcher(EventDispatcherInterface $dispatcher)
      *
      * @return EventDispatcherInterface
      *
-     * @deprecated Deprecated in 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
+     * @deprecated since version 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
      *
      * @api
      */
     public function getDispatcher()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event dispatcher instance can be received in the listener call instead.', E_USER_DEPRECATED);
+
         return $this->dispatcher;
     }
 
@@ -105,12 +107,14 @@ public function getDispatcher()
      *
      * @return string
      *
-     * @deprecated Deprecated in 2.4, to be removed in 3.0. The event name is passed to the listener call.
+     * @deprecated since version 2.4, to be removed in 3.0. The event name is passed to the listener call.
      *
      * @api
      */
     public function getName()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event name can be received in the listener call instead.', E_USER_DEPRECATED);
+
         return $this->name;
     }
 
@@ -119,7 +123,7 @@ public function getName()
      *
      * @param string $name The event name.
      *
-     * @deprecated Deprecated in 2.4, to be removed in 3.0. The event name is passed to the listener call.
+     * @deprecated since version 2.4, to be removed in 3.0. The event name is passed to the listener call.
      *
      * @api
      */
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php b/core/vendor/symfony/event-dispatcher/EventDispatcher.php
similarity index 98%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
rename to core/vendor/symfony/event-dispatcher/EventDispatcher.php
index 3b032fb081e34063a02b1a0adfc0cdeb299838ce..46c11100b34167cec63da4ff5a21b4f135ae94aa 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
+++ b/core/vendor/symfony/event-dispatcher/EventDispatcher.php
@@ -68,7 +68,7 @@ public function getListeners($eventName = null)
             return $this->sorted[$eventName];
         }
 
-        foreach (array_keys($this->listeners) as $eventName) {
+        foreach ($this->listeners as $eventName => $eventListeners) {
             if (!isset($this->sorted[$eventName])) {
                 $this->sortListeners($eventName);
             }
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcherInterface.php b/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
similarity index 96%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcherInterface.php
rename to core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
index efb7c5beca36be18c6056e4eb62b24d1d41c7d3b..9d9fc4d44c47973d2c201b8c5b16ffc0c9b6cb3a 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcherInterface.php
+++ b/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
@@ -77,7 +77,7 @@ public function removeListener($eventName, $listener);
     public function removeSubscriber(EventSubscriberInterface $subscriber);
 
     /**
-     * Gets the listeners of a specific event or all listeners.
+     * Gets the listeners of a specific event or all listeners sorted by descending priority.
      *
      * @param string $eventName The name of the event
      *
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventSubscriberInterface.php b/core/vendor/symfony/event-dispatcher/EventSubscriberInterface.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventSubscriberInterface.php
rename to core/vendor/symfony/event-dispatcher/EventSubscriberInterface.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/GenericEvent.php b/core/vendor/symfony/event-dispatcher/GenericEvent.php
similarity index 97%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/GenericEvent.php
rename to core/vendor/symfony/event-dispatcher/GenericEvent.php
index a8955ca42fe7f3f3f0d10630acb89461c9d0028b..6458180a5aac3ac7f5e8243e1e71f00db3ae6f7a 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/GenericEvent.php
+++ b/core/vendor/symfony/event-dispatcher/GenericEvent.php
@@ -71,7 +71,7 @@ public function getArgument($key)
             return $this->arguments[$key];
         }
 
-        throw new \InvalidArgumentException(sprintf('%s not found in %s', $key, $this->getName()));
+        throw new \InvalidArgumentException(sprintf('Argument "%s" not found.', $key));
     }
 
     /**
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ImmutableEventDispatcher.php b/core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ImmutableEventDispatcher.php
rename to core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/LICENSE b/core/vendor/symfony/event-dispatcher/LICENSE
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/LICENSE
rename to core/vendor/symfony/event-dispatcher/LICENSE
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/README.md b/core/vendor/symfony/event-dispatcher/README.md
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/README.md
rename to core/vendor/symfony/event-dispatcher/README.md
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore b/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/AbstractEventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
similarity index 96%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/AbstractEventDispatcherTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
index b9e4194960b6aaa7547569b80b78f4b79131c11e..5ff5be84d153592ee574aa4be02bd805c8e0d3f9 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/AbstractEventDispatcherTest.php
+++ b/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
@@ -118,10 +118,21 @@ public function testDispatch()
         $this->assertInstanceOf('Symfony\Component\EventDispatcher\Event', $this->dispatcher->dispatch(self::preFoo));
         $event = new Event();
         $return = $this->dispatcher->dispatch(self::preFoo, $event);
-        $this->assertEquals('pre.foo', $event->getName());
         $this->assertSame($event, $return);
     }
 
+    /**
+     * @group legacy
+     */
+    public function testLegacyDispatch()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $event = new Event();
+        $return = $this->dispatcher->dispatch(self::preFoo, $event);
+        $this->assertEquals('pre.foo', $event->getName());
+    }
+
     public function testDispatchForClosure()
     {
         $invoked = 0;
@@ -239,8 +250,13 @@ public function testRemoveSubscriberWithMultipleListeners()
         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
     }
 
-    public function testEventReceivesTheDispatcherInstance()
+    /**
+     * @group legacy
+     */
+    public function testLegacyEventReceivesTheDispatcherInstance()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $dispatcher = null;
         $this->dispatcher->addListener('test', function ($event) use (&$dispatcher) {
             $dispatcher = $event->getDispatcher();
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ContainerAwareEventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ContainerAwareEventDispatcherTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
similarity index 91%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
index 68b95236547aeb7f629d001a41a43f4367da172d..24e60024ff041dd4b73c669cc429672d41e36586 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php
+++ b/core/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\EventDispatcher\Tests\Debug;
 
 use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 use Symfony\Component\EventDispatcher\Event;
@@ -174,6 +175,19 @@ public function testDispatchReusedEventNested()
         $dispatcher->dispatch('foo');
         $this->assertTrue($nestedCall);
     }
+
+    public function testListenerCanRemoveItselfWhenExecuted()
+    {
+        $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
+        $listener1 = function ($event, $eventName, EventDispatcherInterface $dispatcher) use (&$listener1) {
+            $dispatcher->removeListener('foo', $listener1);
+        };
+        $eventDispatcher->addListener('foo', $listener1);
+        $eventDispatcher->addListener('foo', function () {});
+        $eventDispatcher->dispatch('foo');
+
+        $this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
+    }
 }
 
 class EventSubscriber implements EventSubscriberInterface
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php b/core/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/EventDispatcherTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/EventDispatcherTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/EventTest.php b/core/vendor/symfony/event-dispatcher/Tests/EventTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/EventTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/EventTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php b/core/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
similarity index 100%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php
rename to core/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/composer.json b/core/vendor/symfony/event-dispatcher/composer.json
similarity index 75%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/composer.json
rename to core/vendor/symfony/event-dispatcher/composer.json
index a516d467030786eef69317fe49712b4569308b57..d7058629162500d30257da3427daa423b276251d 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/composer.json
+++ b/core/vendor/symfony/event-dispatcher/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony EventDispatcher Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,11 +12,11 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
@@ -31,13 +31,12 @@
         "symfony/http-kernel": ""
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\EventDispatcher\\": "" }
+        "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }
     },
-    "target-dir": "Symfony/Component/EventDispatcher",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/phpunit.xml.dist b/core/vendor/symfony/event-dispatcher/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/phpunit.xml.dist
rename to core/vendor/symfony/event-dispatcher/phpunit.xml.dist
index b14fde575007da470d9fd7cecb4e90d03c7c80f8..ae0586e0b33def5c6c732216b6c56b00344e81c8 100644
--- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/phpunit.xml.dist
+++ b/core/vendor/symfony/event-dispatcher/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony EventDispatcher Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeader.php b/core/vendor/symfony/http-foundation/AcceptHeader.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeader.php
rename to core/vendor/symfony/http-foundation/AcceptHeader.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeaderItem.php b/core/vendor/symfony/http-foundation/AcceptHeaderItem.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeaderItem.php
rename to core/vendor/symfony/http-foundation/AcceptHeaderItem.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ApacheRequest.php b/core/vendor/symfony/http-foundation/ApacheRequest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ApacheRequest.php
rename to core/vendor/symfony/http-foundation/ApacheRequest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/BinaryFileResponse.php b/core/vendor/symfony/http-foundation/BinaryFileResponse.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/BinaryFileResponse.php
rename to core/vendor/symfony/http-foundation/BinaryFileResponse.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/CHANGELOG.md b/core/vendor/symfony/http-foundation/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/CHANGELOG.md
rename to core/vendor/symfony/http-foundation/CHANGELOG.md
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Cookie.php b/core/vendor/symfony/http-foundation/Cookie.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Cookie.php
rename to core/vendor/symfony/http-foundation/Cookie.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ExpressionRequestMatcher.php b/core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ExpressionRequestMatcher.php
rename to core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/AccessDeniedException.php b/core/vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/AccessDeniedException.php
rename to core/vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileException.php b/core/vendor/symfony/http-foundation/File/Exception/FileException.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileException.php
rename to core/vendor/symfony/http-foundation/File/Exception/FileException.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileNotFoundException.php b/core/vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileNotFoundException.php
rename to core/vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/UnexpectedTypeException.php b/core/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/UnexpectedTypeException.php
rename to core/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/UploadException.php b/core/vendor/symfony/http-foundation/File/Exception/UploadException.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/UploadException.php
rename to core/vendor/symfony/http-foundation/File/Exception/UploadException.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/File.php b/core/vendor/symfony/http-foundation/File/File.php
similarity index 92%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/File.php
rename to core/vendor/symfony/http-foundation/File/File.php
index dc0e2f7656a922b1821ac7dae38d86903181ec90..b575c8592e3a3cb8e10174614716538b0ab8c797 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/File.php
+++ b/core/vendor/symfony/http-foundation/File/File.php
@@ -87,20 +87,6 @@ public function getMimeType()
         return $guesser->guess($this->getPathname());
     }
 
-    /**
-     * Returns the extension of the file.
-     *
-     * \SplFileInfo::getExtension() is not available before PHP 5.3.6
-     *
-     * @return string The extension
-     *
-     * @api
-     */
-    public function getExtension()
-    {
-        return pathinfo($this->getBasename(), PATHINFO_EXTENSION);
-    }
-
     /**
      * Moves the file to a new location.
      *
@@ -139,7 +125,7 @@ protected function getTargetFile($directory, $name = null)
 
         $target = rtrim($directory, '/\\').DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name));
 
-        return new File($target, false);
+        return new self($target, false);
     }
 
     /**
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesser.php b/core/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesser.php
rename to core/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesserInterface.php b/core/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesserInterface.php
rename to core/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileBinaryMimeTypeGuesser.php b/core/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileBinaryMimeTypeGuesser.php
rename to core/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileinfoMimeTypeGuesser.php b/core/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileinfoMimeTypeGuesser.php
rename to core/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeExtensionGuesser.php b/core/vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeExtensionGuesser.php
rename to core/vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesser.php b/core/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesser.php
rename to core/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesserInterface.php b/core/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesserInterface.php
rename to core/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php b/core/vendor/symfony/http-foundation/File/UploadedFile.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php
rename to core/vendor/symfony/http-foundation/File/UploadedFile.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php b/core/vendor/symfony/http-foundation/FileBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php
rename to core/vendor/symfony/http-foundation/FileBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php b/core/vendor/symfony/http-foundation/HeaderBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php
rename to core/vendor/symfony/http-foundation/HeaderBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/IpUtils.php b/core/vendor/symfony/http-foundation/IpUtils.php
similarity index 95%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/IpUtils.php
rename to core/vendor/symfony/http-foundation/IpUtils.php
index ea68e2ea8ba90de10e13bc92119cdd7f95514ae3..fb906b6812d23d06942ce36e9cd4a1410e67ab52 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/IpUtils.php
+++ b/core/vendor/symfony/http-foundation/IpUtils.php
@@ -62,6 +62,10 @@ public static function checkIp($requestIp, $ips)
     public static function checkIp4($requestIp, $ip)
     {
         if (false !== strpos($ip, '/')) {
+            if ('0.0.0.0/0' === $ip) {
+                return true;
+            }
+
             list($address, $netmask) = explode('/', $ip, 2);
 
             if ($netmask < 1 || $netmask > 32) {
@@ -110,7 +114,7 @@ public static function checkIp6($requestIp, $ip)
         $bytesAddr = unpack('n*', inet_pton($address));
         $bytesTest = unpack('n*', inet_pton($requestIp));
 
-        for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; $i++) {
+        for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; ++$i) {
             $left = $netmask - 16 * ($i - 1);
             $left = ($left <= 16) ? $left : 16;
             $mask = ~(0xffff >> $left) & 0xffff;
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/JsonResponse.php b/core/vendor/symfony/http-foundation/JsonResponse.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/JsonResponse.php
rename to core/vendor/symfony/http-foundation/JsonResponse.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/LICENSE b/core/vendor/symfony/http-foundation/LICENSE
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/LICENSE
rename to core/vendor/symfony/http-foundation/LICENSE
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php b/core/vendor/symfony/http-foundation/ParameterBag.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php
rename to core/vendor/symfony/http-foundation/ParameterBag.php
index 348aab96853f1403b3f5fedd425c15dede775c08..6081f3f4a65f979bd40181d6c77ba12ab804c1b0 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php
+++ b/core/vendor/symfony/http-foundation/ParameterBag.php
@@ -113,7 +113,7 @@ public function get($path, $default = null, $deep = false)
 
         $value = $this->parameters[$root];
         $currentKey = null;
-        for ($i = $pos, $c = strlen($path); $i < $c; $i++) {
+        for ($i = $pos, $c = strlen($path); $i < $c; ++$i) {
             $char = $path[$i];
 
             if ('[' === $char) {
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/README.md b/core/vendor/symfony/http-foundation/README.md
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/README.md
rename to core/vendor/symfony/http-foundation/README.md
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RedirectResponse.php b/core/vendor/symfony/http-foundation/RedirectResponse.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RedirectResponse.php
rename to core/vendor/symfony/http-foundation/RedirectResponse.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php b/core/vendor/symfony/http-foundation/Request.php
similarity index 94%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
rename to core/vendor/symfony/http-foundation/Request.php
index 93ec88e435b5f2a45438c70fa5ce9c63beb967dd..d78bc1fb5976416defec6de248e7dd57fc852b7c 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
+++ b/core/vendor/symfony/http-foundation/Request.php
@@ -30,6 +30,7 @@
  */
 class Request
 {
+    const HEADER_FORWARDED = 'forwarded';
     const HEADER_CLIENT_IP = 'client_ip';
     const HEADER_CLIENT_HOST = 'client_host';
     const HEADER_CLIENT_PROTO = 'client_proto';
@@ -46,6 +47,9 @@ class Request
     const METHOD_TRACE = 'TRACE';
     const METHOD_CONNECT = 'CONNECT';
 
+    /**
+     * @var string[]
+     */
     protected static $trustedProxies = array();
 
     /**
@@ -62,10 +66,13 @@ class Request
      * Names for headers that can be trusted when
      * using trusted proxies.
      *
-     * The default names are non-standard, but widely used
+     * The FORWARDED header is the standard as of rfc7239.
+     *
+     * The other headers are non-standard, but widely used
      * by popular reverse proxies (like Apache mod_proxy or Amazon EC2).
      */
     protected static $trustedHeaders = array(
+        self::HEADER_FORWARDED => 'FORWARDED',
         self::HEADER_CLIENT_IP => 'X_FORWARDED_FOR',
         self::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST',
         self::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
@@ -587,7 +594,7 @@ public static function getTrustedProxies()
     public static function setTrustedHosts(array $hostPatterns)
     {
         self::$trustedHostPatterns = array_map(function ($hostPattern) {
-            return sprintf('{%s}i', str_replace('}', '\\}', $hostPattern));
+            return sprintf('#%s#i', $hostPattern);
         }, $hostPatterns);
         // we need to reset trusted hosts on trusted host patterns change
         self::$trustedHosts = array();
@@ -823,24 +830,26 @@ public function setSession(SessionInterface $session)
      */
     public function getClientIps()
     {
+        $clientIps = array();
         $ip = $this->server->get('REMOTE_ADDR');
 
         if (!$this->isFromTrustedProxy()) {
             return array($ip);
         }
 
-        if (!self::$trustedHeaders[self::HEADER_CLIENT_IP] || !$this->headers->has(self::$trustedHeaders[self::HEADER_CLIENT_IP])) {
-            return array($ip);
+        if (self::$trustedHeaders[self::HEADER_FORWARDED] && $this->headers->has(self::$trustedHeaders[self::HEADER_FORWARDED])) {
+            $forwardedHeader = $this->headers->get(self::$trustedHeaders[self::HEADER_FORWARDED]);
+            preg_match_all('{(for)=("?\[?)([a-z0-9\.:_\-/]*)}', $forwardedHeader, $matches);
+            $clientIps = $matches[3];
+        } elseif (self::$trustedHeaders[self::HEADER_CLIENT_IP] && $this->headers->has(self::$trustedHeaders[self::HEADER_CLIENT_IP])) {
+            $clientIps = array_map('trim', explode(',', $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_IP])));
         }
 
-        $clientIps = array_map('trim', explode(',', $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_IP])));
         $clientIps[] = $ip; // Complete the IP chain with the IP the request actually came from
-
         $ip = $clientIps[0]; // Fallback to this when the client IP falls into the range of trusted proxies
 
-        // Eliminate all IPs from the forwarded IP chain which are trusted proxies
         foreach ($clientIps as $key => $clientIp) {
-            // Remove port on IPv4 address (unfortunately, it does happen)
+            // Remove port (unfortunately, it does happen)
             if (preg_match('{((?:\d+\.){3}\d+)\:\d+}', $clientIp, $match)) {
                 $clientIps[$key] = $clientIp = $match[1];
             }
@@ -1137,6 +1146,61 @@ public function getUriForPath($path)
         return $this->getSchemeAndHttpHost().$this->getBaseUrl().$path;
     }
 
+    /**
+     * Returns the path as relative reference from the current Request path.
+     *
+     * Only the URIs path component (no schema, host etc.) is relevant and must be given.
+     * Both paths must be absolute and not contain relative parts.
+     * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives.
+     * Furthermore, they can be used to reduce the link size in documents.
+     *
+     * Example target paths, given a base path of "/a/b/c/d":
+     * - "/a/b/c/d"     -> ""
+     * - "/a/b/c/"      -> "./"
+     * - "/a/b/"        -> "../"
+     * - "/a/b/c/other" -> "other"
+     * - "/a/x/y"       -> "../../x/y"
+     *
+     * @param string $path The target path
+     *
+     * @return string The relative target path
+     */
+    public function getRelativeUriForPath($path)
+    {
+        // be sure that we are dealing with an absolute path
+        if (!isset($path[0]) || '/' !== $path[0]) {
+            return $path;
+        }
+
+        if ($path === $basePath = $this->getPathInfo()) {
+            return '';
+        }
+
+        $sourceDirs = explode('/', isset($basePath[0]) && '/' === $basePath[0] ? substr($basePath, 1) : $basePath);
+        $targetDirs = explode('/', isset($path[0]) && '/' === $path[0] ? substr($path, 1) : $path);
+        array_pop($sourceDirs);
+        $targetFile = array_pop($targetDirs);
+
+        foreach ($sourceDirs as $i => $dir) {
+            if (isset($targetDirs[$i]) && $dir === $targetDirs[$i]) {
+                unset($sourceDirs[$i], $targetDirs[$i]);
+            } else {
+                break;
+            }
+        }
+
+        $targetDirs[] = $targetFile;
+        $path = str_repeat('../', count($sourceDirs)).implode('/', $targetDirs);
+
+        // A reference to the same base directory or an empty subdirectory must be prefixed with "./".
+        // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used
+        // as the first segment of a relative-path reference, as it would be mistaken for a scheme name
+        // (see http://tools.ietf.org/html/rfc3986#section-4.2).
+        return !isset($path[0]) || '/' === $path[0]
+            || false !== ($colonPos = strpos($path, ':')) && ($colonPos < ($slashPos = strpos($path, '/')) || false === $slashPos)
+            ? "./$path" : $path;
+    }
+
     /**
      * Generates the normalized query string for the Request.
      *
@@ -1580,8 +1644,8 @@ public function getLanguages()
 
         $languages = AcceptHeader::fromString($this->headers->get('Accept-Language'))->all();
         $this->languages = array();
-        foreach (array_keys($languages) as $lang) {
-            if (strstr($lang, '-')) {
+        foreach ($languages as $lang => $acceptHeaderItem) {
+            if (false !== strpos($lang, '-')) {
                 $codes = explode('-', $lang);
                 if ('i' === $codes[0]) {
                     // Language not listed in ISO 639 that are not variants
@@ -1591,7 +1655,7 @@ public function getLanguages()
                         $lang = $codes[1];
                     }
                 } else {
-                    for ($i = 0, $max = count($codes); $i < $max; $i++) {
+                    for ($i = 0, $max = count($codes); $i < $max; ++$i) {
                         if ($i === 0) {
                             $lang = strtolower($codes[0]);
                         } else {
@@ -1760,7 +1824,7 @@ protected function prepareBaseUrl()
             return $prefix;
         }
 
-        if ($baseUrl && false !== $prefix = $this->getUrlencodedPrefix($requestUri, dirname($baseUrl).'/')) {
+        if ($baseUrl && false !== $prefix = $this->getUrlencodedPrefix($requestUri, rtrim(dirname($baseUrl), '/').'/')) {
             // directory portion of $baseUrl matches
             return rtrim($prefix, '/');
         }
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php
rename to core/vendor/symfony/http-foundation/RequestMatcher.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcherInterface.php b/core/vendor/symfony/http-foundation/RequestMatcherInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcherInterface.php
rename to core/vendor/symfony/http-foundation/RequestMatcherInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestStack.php b/core/vendor/symfony/http-foundation/RequestStack.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestStack.php
rename to core/vendor/symfony/http-foundation/RequestStack.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php b/core/vendor/symfony/http-foundation/Resources/stubs/SessionHandlerInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php
rename to core/vendor/symfony/http-foundation/Resources/stubs/SessionHandlerInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php b/core/vendor/symfony/http-foundation/Response.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php
rename to core/vendor/symfony/http-foundation/Response.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php b/core/vendor/symfony/http-foundation/ResponseHeaderBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php
rename to core/vendor/symfony/http-foundation/ResponseHeaderBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php b/core/vendor/symfony/http-foundation/ServerBag.php
similarity index 89%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php
rename to core/vendor/symfony/http-foundation/ServerBag.php
index 6a4f2c2b167e0e608aec171b92ee821647d3c6f9..fa1cb2fc9f1349139ab618e569103e017b216522 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php
+++ b/core/vendor/symfony/http-foundation/ServerBag.php
@@ -75,6 +75,13 @@ public function getHeaders()
                     // In some circumstances PHP_AUTH_DIGEST needs to be set
                     $headers['PHP_AUTH_DIGEST'] = $authorizationHeader;
                     $this->parameters['PHP_AUTH_DIGEST'] = $authorizationHeader;
+                } elseif (0 === stripos($authorizationHeader, 'bearer ')) {
+                    /*
+                     * XXX: Since there is no PHP_AUTH_BEARER in PHP predefined variables,
+                     *      I'll just set $headers['AUTHORIZATION'] here.
+                     *      http://php.net/manual/en/reserved.variables.server.php
+                     */
+                    $headers['AUTHORIZATION'] = $authorizationHeader;
                 }
             }
         }
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBag.php b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBag.php
rename to core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBagInterface.php b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBagInterface.php
rename to core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php b/core/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
similarity index 95%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php
rename to core/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
index 562f4c31f98b2da5e998ba2406d4cd6c14fedb07..68cecf63d5ced561f28f2a3f87b8dcac3744a08f 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php
+++ b/core/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
@@ -43,6 +43,7 @@ public function __construct($storageKey = '_sf2_attributes', $namespaceCharacter
      */
     public function has($name)
     {
+        // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is
         $attributes = $this->resolveAttributePath($name);
         $name = $this->resolveKey($name);
 
@@ -58,6 +59,7 @@ public function has($name)
      */
     public function get($name, $default = null)
     {
+        // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is
         $attributes = $this->resolveAttributePath($name);
         $name = $this->resolveKey($name);
 
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/AutoExpireFlashBag.php b/core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/AutoExpireFlashBag.php
rename to core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/FlashBag.php b/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php
similarity index 94%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/FlashBag.php
rename to core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php
index ac412d7dc83cb9f91d8188a4de8f0214289c151c..bbe7561be7c7c26a3a8c64e12c0ec5a594938315 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/FlashBag.php
+++ b/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php
@@ -169,12 +169,14 @@ public function clear()
     /**
      * Returns an iterator for flashes.
      *
-     * @deprecated Will be removed in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      *
      * @return \ArrayIterator An \ArrayIterator instance
      */
     public function getIterator()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         return new \ArrayIterator($this->all());
     }
 }
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/FlashBagInterface.php b/core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Flash/FlashBagInterface.php
rename to core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Session.php b/core/vendor/symfony/http-foundation/Session/Session.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Session.php
rename to core/vendor/symfony/http-foundation/Session/Session.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionBagInterface.php b/core/vendor/symfony/http-foundation/Session/SessionBagInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionBagInterface.php
rename to core/vendor/symfony/http-foundation/Session/SessionBagInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionInterface.php b/core/vendor/symfony/http-foundation/Session/SessionInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionInterface.php
rename to core/vendor/symfony/http-foundation/Session/SessionInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/LegacyPdoSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/LegacyPdoSessionHandler.php
similarity index 96%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/LegacyPdoSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/LegacyPdoSessionHandler.php
index fff83315aacbe92e6c3519626c44dc0a4a82ce16..fd0c58275df8e1ab729727ab584412aa5e8b17f3 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/LegacyPdoSessionHandler.php
+++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/LegacyPdoSessionHandler.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
 
+trigger_error('The '.__NAMESPACE__.'\LegacyPdoSessionHandler class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler class instead.', E_USER_DEPRECATED);
+
 /**
  * Session handler using a PDO connection to read and write data.
  *
@@ -24,7 +26,7 @@
  * @author Michael Williams <michael.williams@funsational.com>
  * @author Tobias Schultze <http://tobion.de>
  *
- * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use
+ * @deprecated since version 2.6, to be removed in 3.0. Use
  *             {@link PdoSessionHandler} instead.
  */
 class LegacyPdoSessionHandler implements \SessionHandlerInterface
@@ -76,6 +78,7 @@ public function __construct(\PDO $pdo, array $dbOptions = array())
         if (\PDO::ERRMODE_EXCEPTION !== $pdo->getAttribute(\PDO::ATTR_ERRMODE)) {
             throw new \InvalidArgumentException(sprintf('"%s" requires PDO error mode attribute be set to throw Exceptions (i.e. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION))', __CLASS__));
         }
+
         $this->pdo = $pdo;
         $dbOptions = array_merge(array(
             'db_id_col' => 'sess_id',
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcacheSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcacheSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcacheSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcacheSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MongoDbSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
similarity index 98%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MongoDbSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
index c820cbce7800a112f9c13a0ecddee4c0d12d66fe..fa4ecfb0a40c89b51af99d928116c23189803a0d 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MongoDbSessionHandler.php
+++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
@@ -155,7 +155,7 @@ public function write($sessionId, $data)
     public function read($sessionId)
     {
         $dbData = $this->getCollection()->findOne(array(
-            $this->options['id_field']   => $sessionId,
+            $this->options['id_field'] => $sessionId,
             $this->options['expiry_field'] => array('$gte' => new \MongoDate()),
         ));
 
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NativeFileSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NativeFileSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NativeSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NativeSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/WriteCheckSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/WriteCheckSessionHandler.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/WriteCheckSessionHandler.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Handler/WriteCheckSessionHandler.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MetadataBag.php b/core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MetadataBag.php
rename to core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockArraySessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockArraySessionStorage.php
rename to core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php
rename to core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php
rename to core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/PhpBridgeSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/PhpBridgeSessionStorage.php
rename to core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/NativeProxy.php b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/NativeProxy.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/NativeProxy.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Proxy/NativeProxy.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php
rename to core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/SessionStorageInterface.php b/core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/SessionStorageInterface.php
rename to core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/StreamedResponse.php b/core/vendor/symfony/http-foundation/StreamedResponse.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/StreamedResponse.php
rename to core/vendor/symfony/http-foundation/StreamedResponse.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/AcceptHeaderItemTest.php b/core/vendor/symfony/http-foundation/Tests/AcceptHeaderItemTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/AcceptHeaderItemTest.php
rename to core/vendor/symfony/http-foundation/Tests/AcceptHeaderItemTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php b/core/vendor/symfony/http-foundation/Tests/AcceptHeaderTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php
rename to core/vendor/symfony/http-foundation/Tests/AcceptHeaderTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ApacheRequestTest.php b/core/vendor/symfony/http-foundation/Tests/ApacheRequestTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ApacheRequestTest.php
rename to core/vendor/symfony/http-foundation/Tests/ApacheRequestTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php b/core/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php
rename to core/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/CookieTest.php b/core/vendor/symfony/http-foundation/Tests/CookieTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/CookieTest.php
rename to core/vendor/symfony/http-foundation/Tests/CookieTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ExpressionRequestMatcherTest.php b/core/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ExpressionRequestMatcherTest.php
rename to core/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/FakeFile.php b/core/vendor/symfony/http-foundation/Tests/File/FakeFile.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/FakeFile.php
rename to core/vendor/symfony/http-foundation/Tests/File/FakeFile.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/FileTest.php b/core/vendor/symfony/http-foundation/Tests/File/FileTest.php
similarity index 96%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/FileTest.php
rename to core/vendor/symfony/http-foundation/Tests/File/FileTest.php
index 1f89c391d5ed0c671ddf5c9faf95af38d574d493..9e07d9e14bb2b8acc3ae7d243bd535acb658450a 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/FileTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/File/FileTest.php
@@ -148,12 +148,6 @@ public function testMoveToAnUnexistentDirectory()
         @rmdir($targetDir);
     }
 
-    public function testGetExtension()
-    {
-        $file = new File(__DIR__.'/Fixtures/test.gif');
-        $this->assertEquals('gif', $file->getExtension());
-    }
-
     protected function createMockGuesser($path, $mimeType)
     {
         $guesser = $this->getMock('Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface');
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/.unknownextension b/core/vendor/symfony/http-foundation/Tests/File/Fixtures/.unknownextension
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/.unknownextension
rename to core/vendor/symfony/http-foundation/Tests/File/Fixtures/.unknownextension
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/directory/.empty b/core/vendor/symfony/http-foundation/Tests/File/Fixtures/directory/.empty
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/directory/.empty
rename to core/vendor/symfony/http-foundation/Tests/File/Fixtures/directory/.empty
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/test b/core/vendor/symfony/http-foundation/Tests/File/Fixtures/test
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/test
rename to core/vendor/symfony/http-foundation/Tests/File/Fixtures/test
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/test.gif b/core/vendor/symfony/http-foundation/Tests/File/Fixtures/test.gif
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/Fixtures/test.gif
rename to core/vendor/symfony/http-foundation/Tests/File/Fixtures/test.gif
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/MimeType/MimeTypeTest.php b/core/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/MimeType/MimeTypeTest.php
rename to core/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/UploadedFileTest.php b/core/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/File/UploadedFileTest.php
rename to core/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/FileBagTest.php b/core/vendor/symfony/http-foundation/Tests/FileBagTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/FileBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/FileBagTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/HeaderBagTest.php b/core/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/HeaderBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
index 9b925d70f0380bfed1f611b05664517ea6898856..ada9ac0d1eaaeb6d8941f42310b5d2e5db27bdee 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/HeaderBagTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
@@ -196,7 +196,7 @@ public function testGetIterator()
 
         $i = 0;
         foreach ($headerBag as $key => $val) {
-            $i++;
+            ++$i;
             $this->assertEquals(array($headers[$key]), $val);
         }
 
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/IpUtilsTest.php b/core/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
similarity index 94%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/IpUtilsTest.php
rename to core/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
index 726ba6a34795e4dd6543da3f070058eb0c81ebf0..0002478246ab941b28e11d068c406d6377b04683 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/IpUtilsTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
@@ -34,6 +34,9 @@ public function testIpv4Provider()
             array(true, '192.168.1.1', array('1.2.3.4/1', '192.168.1.0/24')),
             array(true, '192.168.1.1', array('192.168.1.0/24', '1.2.3.4/1')),
             array(false, '192.168.1.1', array('1.2.3.4/1', '4.3.2.1/1')),
+            array(true, '1.2.3.4', '0.0.0.0/0'),
+            array(false, '1.2.3.4', '256.256.256/0'),
+            array(false, '1.2.3.4', '192.168.1.0/0'),
         );
     }
 
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php b/core/vendor/symfony/http-foundation/Tests/JsonResponseTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php
rename to core/vendor/symfony/http-foundation/Tests/JsonResponseTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php b/core/vendor/symfony/http-foundation/Tests/ParameterBagTest.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/ParameterBagTest.php
index f19a8da2399f751beb1cf54371ae519851652453..16fedbf83afbcd141139f5a09f8bfd7e9c63c3a2 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ParameterBagTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/ParameterBagTest.php
@@ -233,7 +233,7 @@ public function testGetIterator()
 
         $i = 0;
         foreach ($bag as $key => $val) {
-            $i++;
+            ++$i;
             $this->assertEquals($parameters[$key], $val);
         }
 
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php b/core/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php
rename to core/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestMatcherTest.php b/core/vendor/symfony/http-foundation/Tests/RequestMatcherTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestMatcherTest.php
rename to core/vendor/symfony/http-foundation/Tests/RequestMatcherTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestStackTest.php b/core/vendor/symfony/http-foundation/Tests/RequestStackTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestStackTest.php
rename to core/vendor/symfony/http-foundation/Tests/RequestStackTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/core/vendor/symfony/http-foundation/Tests/RequestTest.php
similarity index 95%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php
rename to core/vendor/symfony/http-foundation/Tests/RequestTest.php
index 04a9616b0d528b9f201c76cb94568c294c65694b..50cb448063b6c50efb9e4f55a274d563824bf74a 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/RequestTest.php
@@ -590,6 +590,26 @@ public function testGetUriForPath()
         $this->assertEquals('http://servername/some/path', $request->getUriForPath('/some/path'));
     }
 
+    /**
+     * @dataProvider getRelativeUriForPathData()
+     */
+    public function testGetRelativeUriForPath($expected, $pathinfo, $path)
+    {
+        $this->assertEquals($expected, Request::create($pathinfo)->getRelativeUriForPath($path));
+    }
+
+    public function getRelativeUriForPathData()
+    {
+        return array(
+            array('me.png', '/foo', '/me.png'),
+            array('../me.png', '/foo/bar', '/me.png'),
+            array('me.png', '/foo/bar', '/foo/me.png'),
+            array('../baz/me.png', '/foo/bar/b', '/foo/baz/me.png'),
+            array('../../fooz/baz/me.png', '/foo/bar/b', '/fooz/baz/me.png'),
+            array('baz/me.png', '/foo/bar/b', 'baz/me.png'),
+        );
+    }
+
     /**
      * @covers Symfony\Component\HttpFoundation\Request::getUserInfo
      */
@@ -857,6 +877,31 @@ public function testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $tru
         Request::setTrustedProxies(array());
     }
 
+    /**
+     * @dataProvider testGetClientIpsForwardedProvider
+     */
+    public function testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded, $trustedProxies)
+    {
+        $request = $this->getRequestInstanceForClientIpsForwardedTests($remoteAddr, $httpForwarded, $trustedProxies);
+
+        $this->assertEquals($expected, $request->getClientIps());
+
+        Request::setTrustedProxies(array());
+    }
+
+    public function testGetClientIpsForwardedProvider()
+    {
+        //              $expected                                  $remoteAddr  $httpForwarded                                       $trustedProxies
+        return array(
+            array(array('127.0.0.1'),                              '127.0.0.1', 'for="_gazonk"',                                      null),
+            array(array('_gazonk'),                                '127.0.0.1', 'for="_gazonk"',                                      array('127.0.0.1')),
+            array(array('88.88.88.88'),                            '127.0.0.1', 'for="88.88.88.88:80"',                               array('127.0.0.1')),
+            array(array('192.0.2.60'),                             '::1',       'for=192.0.2.60;proto=http;by=203.0.113.43',          array('::1')),
+            array(array('2620:0:1cfe:face:b00c::3', '192.0.2.43'), '::1',       'for=192.0.2.43, for=2620:0:1cfe:face:b00c::3',       array('::1')),
+            array(array('2001:db8:cafe::17'),                      '::1',       'for="[2001:db8:cafe::17]:4711',                      array('::1')),
+        );
+    }
+
     public function testGetClientIpsProvider()
     {
         //        $expected                   $remoteAddr                $httpForwardedFor            $trustedProxies
@@ -1345,6 +1390,26 @@ public function testGetBaseUrl($uri, $server, $expectedBaseUrl, $expectedPathInf
     public function getBaseUrlData()
     {
         return array(
+            array(
+                '/fruit/strawberry/1234index.php/blah',
+                array(
+                    'SCRIPT_FILENAME' => 'E:/Sites/cc-new/public_html/fruit/index.php',
+                    'SCRIPT_NAME' => '/fruit/index.php',
+                    'PHP_SELF' => '/fruit/index.php',
+                ),
+                '/fruit',
+                '/strawberry/1234index.php/blah',
+            ),
+            array(
+                '/fruit/strawberry/1234index.php/blah',
+                array(
+                    'SCRIPT_FILENAME' => 'E:/Sites/cc-new/public_html/index.php',
+                    'SCRIPT_NAME' => '/index.php',
+                    'PHP_SELF' => '/index.php',
+                ),
+                '',
+                '/fruit/strawberry/1234index.php/blah',
+            ),
             array(
                 '/foo%20bar/',
                 array(
@@ -1451,6 +1516,25 @@ private function getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedF
         return $request;
     }
 
+    private function getRequestInstanceForClientIpsForwardedTests($remoteAddr, $httpForwarded, $trustedProxies)
+    {
+        $request = new Request();
+
+        $server = array('REMOTE_ADDR' => $remoteAddr);
+
+        if (null !== $httpForwarded) {
+            $server['HTTP_FORWARDED'] = $httpForwarded;
+        }
+
+        if ($trustedProxies) {
+            Request::setTrustedProxies($trustedProxies);
+        }
+
+        $request->initialize(array(), array(), array(), array(), array(), $server);
+
+        return $request;
+    }
+
     public function testTrustedProxies()
     {
         $request = Request::create('http://example.com/');
@@ -1644,7 +1728,7 @@ public function testTrustedHosts()
         $this->assertEquals('evil.com', $request->getHost());
 
         // add a trusted domain and all its subdomains
-        Request::setTrustedHosts(array('.*\.?trusted.com$'));
+        Request::setTrustedHosts(array('^([a-z]{9}\.)?trusted\.com$'));
 
         // untrusted host
         $request->headers->set('host', 'evil.com');
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseHeaderBagTest.php b/core/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseHeaderBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseTest.php b/core/vendor/symfony/http-foundation/Tests/ResponseTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseTest.php
rename to core/vendor/symfony/http-foundation/Tests/ResponseTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseTestCase.php b/core/vendor/symfony/http-foundation/Tests/ResponseTestCase.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ResponseTestCase.php
rename to core/vendor/symfony/http-foundation/Tests/ResponseTestCase.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php b/core/vendor/symfony/http-foundation/Tests/ServerBagTest.php
similarity index 93%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/ServerBagTest.php
index 7bc8f02c30af465f776c2134ba28220325a0c0f2..20773c4d7a3b60a634bc25129ea0948005ec589f 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/ServerBagTest.php
@@ -141,4 +141,14 @@ public function testOAuthBearerAuth()
             'AUTHORIZATION' => $headerContent,
         ), $bag->getHeaders());
     }
+
+    public function testOAuthBearerAuthWithRedirect()
+    {
+        $headerContent = 'Bearer L-yLEOr9zhmUYRkzN1jwwxwQ-PBNiKDc8dgfB4hTfvo';
+        $bag = new ServerBag(array('REDIRECT_HTTP_AUTHORIZATION' => $headerContent));
+
+        $this->assertEquals(array(
+            'AUTHORIZATION' => $headerContent,
+        ), $bag->getHeaders());
+    }
 }
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/AttributeBagTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Attribute/AttributeBagTest.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/AttributeBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Attribute/AttributeBagTest.php
index d291590fd9e4a054725418c73c85de5be4859ed6..5515003b40739841ec71b190b4ec44b694b642ac 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/AttributeBagTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/Session/Attribute/AttributeBagTest.php
@@ -177,7 +177,7 @@ public function testGetIterator()
         $i = 0;
         foreach ($this->bag as $key => $val) {
             $this->assertEquals($this->array[$key], $val);
-            $i++;
+            ++$i;
         }
 
         $this->assertEquals(count($this->array), $i);
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Flash/AutoExpireFlashBagTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Flash/AutoExpireFlashBagTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Flash/AutoExpireFlashBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Flash/AutoExpireFlashBagTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Flash/FlashBagTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Flash/FlashBagTest.php
similarity index 96%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Flash/FlashBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Flash/FlashBagTest.php
index 6b529ab41f5dec49efead790f939cb902701bf5a..25e963a7eb0f5e5a1089ceefe50aec3f1abe0faf 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Flash/FlashBagTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/Session/Flash/FlashBagTest.php
@@ -134,9 +134,12 @@ public function testPeekAll()
 
     /**
      * @covers Symfony\Component\HttpFoundation\Session\Flash\FlashBag::getIterator
+     * @group legacy
      */
-    public function testGetIterator()
+    public function testLegacyGetIterator()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $flashes = array('hello' => 'world', 'beep' => 'boop', 'notice' => 'nope');
         foreach ($flashes as $key => $val) {
             $this->bag->set($key, $val);
@@ -145,7 +148,7 @@ public function testGetIterator()
         $i = 0;
         foreach ($this->bag as $key => $val) {
             $this->assertEquals(array($flashes[$key]), $val);
-            $i++;
+            ++$i;
         }
 
         $this->assertEquals(count($flashes), $i);
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php b/core/vendor/symfony/http-foundation/Tests/Session/SessionTest.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/SessionTest.php
index 4e1667cf9e5be7cba78e7e44984d071915c45345..385df1e46a9583d84c1e3a9ab7398c8601f4fa74 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/Session/SessionTest.php
@@ -203,7 +203,7 @@ public function testGetIterator()
         $i = 0;
         foreach ($this->session as $key => $val) {
             $this->assertEquals($attributes[$key], $val);
-            $i++;
+            ++$i;
         }
 
         $this->assertEquals(count($attributes), $i);
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/LegacyPdoSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcacheSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcacheSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcacheSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcacheSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
index 56e7eb23250f62aecfdbc14fbda7870d6cae1709..0bc012ac378dcbcf9d8af9897c69d4ed9dff6582 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
@@ -87,7 +87,7 @@ public function testRead()
 
         // defining the timeout before the actual method call
         // allows to test for "greater than" values in the $criteria
-        $testTimeout = time();
+        $testTimeout = time() + 1;
 
         $collection->expects($this->once())
             ->method('findOne')
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NativeSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NativeSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/WriteCheckSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/WriteCheckSessionHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/WriteCheckSessionHandlerTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/WriteCheckSessionHandlerTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MetadataBagTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/MetadataBagTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MetadataBagTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/MetadataBagTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MockArraySessionStorageTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MockArraySessionStorageTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MockFileSessionStorageTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MockFileSessionStorageTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/NativeProxyTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/NativeProxyTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/NativeProxyTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/NativeProxyTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php b/core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
rename to core/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php b/core/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php
similarity index 100%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php
rename to core/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/composer.json b/core/vendor/symfony/http-foundation/composer.json
similarity index 63%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/composer.json
rename to core/vendor/symfony/http-foundation/composer.json
index 388eda7355e1ffa180488d7b678dd45c9d73e6dd..80f4436aca5a27e4f77d592813fb1cb679bd455e 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/composer.json
+++ b/core/vendor/symfony/http-foundation/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony HttpFoundation Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,25 +12,24 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
         "symfony/expression-language": "~2.4"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\HttpFoundation\\": "" },
-        "classmap": [ "Symfony/Component/HttpFoundation/Resources/stubs" ]
+        "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" },
+        "classmap": [ "Resources/stubs" ]
     },
-    "target-dir": "Symfony/Component/HttpFoundation",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/phpunit.xml.dist b/core/vendor/symfony/http-foundation/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/phpunit.xml.dist
rename to core/vendor/symfony/http-foundation/phpunit.xml.dist
index b5b660a39433eadb5441c2231bc6df53f57b6a7f..9ffdb43a2d7445eb0562db274c81c6f566fb0d23 100644
--- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/phpunit.xml.dist
+++ b/core/vendor/symfony/http-foundation/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony HttpFoundation Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php b/core/vendor/symfony/http-kernel/Bundle/Bundle.php
similarity index 95%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php
rename to core/vendor/symfony/http-kernel/Bundle/Bundle.php
index 93048c408b0d13197427a768068d3b37364916f3..c58f0f03b74b15e6de8c40b401635bd2de5a7139 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php
+++ b/core/vendor/symfony/http-kernel/Bundle/Bundle.php
@@ -76,6 +76,10 @@ public function getContainerExtension()
             if (class_exists($class)) {
                 $extension = new $class();
 
+                if (!$extension instanceof ExtensionInterface) {
+                    throw new \LogicException(sprintf('Extension %s must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface.', $class));
+                }
+
                 // check naming convention
                 $basename = preg_replace('/Bundle$/', '', $this->getName());
                 $expectedAlias = Container::underscore($basename);
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/BundleInterface.php b/core/vendor/symfony/http-kernel/Bundle/BundleInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/BundleInterface.php
rename to core/vendor/symfony/http-kernel/Bundle/BundleInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CHANGELOG.md b/core/vendor/symfony/http-kernel/CHANGELOG.md
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CHANGELOG.md
rename to core/vendor/symfony/http-kernel/CHANGELOG.md
index 39d35f3c6464258e94a700968976ff62088a9faf..ad27886ac8738a437bd0209747f730ea9c8f5f7f 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CHANGELOG.md
+++ b/core/vendor/symfony/http-kernel/CHANGELOG.md
@@ -1,6 +1,11 @@
 CHANGELOG
 =========
 
+2.7.0
+-----
+
+ * added the HTTP status code to profiles
+
 2.6.0
 -----
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheClearer/CacheClearerInterface.php b/core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheClearer/CacheClearerInterface.php
rename to core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheClearer/ChainCacheClearer.php b/core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheClearer/ChainCacheClearer.php
rename to core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmer.php b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmer.php
rename to core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php
rename to core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerInterface.php b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerInterface.php
rename to core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/WarmableInterface.php b/core/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/CacheWarmer/WarmableInterface.php
rename to core/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php b/core/vendor/symfony/http-kernel/Client.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php
rename to core/vendor/symfony/http-kernel/Client.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Config/EnvParametersResource.php b/core/vendor/symfony/http-kernel/Config/EnvParametersResource.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Config/EnvParametersResource.php
rename to core/vendor/symfony/http-kernel/Config/EnvParametersResource.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Config/FileLocator.php b/core/vendor/symfony/http-kernel/Config/FileLocator.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Config/FileLocator.php
rename to core/vendor/symfony/http-kernel/Config/FileLocator.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerReference.php b/core/vendor/symfony/http-kernel/Controller/ControllerReference.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerReference.php
rename to core/vendor/symfony/http-kernel/Controller/ControllerReference.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerResolver.php b/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerResolver.php
rename to core/vendor/symfony/http-kernel/Controller/ControllerResolver.php
index b9bac023bd0d0cd755bde714acaf0993363cf956..94df05eee415f814ce51c819f8ca7e18acbc19f6 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerResolver.php
+++ b/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php
@@ -51,7 +51,7 @@ public function getController(Request $request)
     {
         if (!$controller = $request->attributes->get('_controller')) {
             if (null !== $this->logger) {
-                $this->logger->warning('Unable to look for the controller as the "_controller" parameter is missing');
+                $this->logger->warning('Unable to look for the controller as the "_controller" parameter is missing.');
             }
 
             return false;
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerResolverInterface.php b/core/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/ControllerResolverInterface.php
rename to core/vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/TraceableControllerResolver.php b/core/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Controller/TraceableControllerResolver.php
rename to core/vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
similarity index 82%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
index f58027e218b3fb1cd96c1ddbcfe45fa2507843a5..853adcb300a2c65b4f9dade7c0e6584ae27f52da 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php
+++ b/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
@@ -23,9 +23,13 @@
  */
 class ConfigDataCollector extends DataCollector
 {
+    /**
+     * @var KernelInterface
+     */
     private $kernel;
     private $name;
     private $version;
+    private $cacheVersionInfo = true;
 
     /**
      * Constructor.
@@ -59,6 +63,7 @@ public function collect(Request $request, Response $response, \Exception $except
             'app_version' => $this->version,
             'token' => $response->headers->get('X-Debug-Token'),
             'symfony_version' => Kernel::VERSION,
+            'symfony_state' => 'unknown',
             'name' => isset($this->kernel) ? $this->kernel->getName() : 'n/a',
             'env' => isset($this->kernel) ? $this->kernel->getEnvironment() : 'n/a',
             'debug' => isset($this->kernel) ? $this->kernel->isDebug() : 'n/a',
@@ -77,6 +82,8 @@ public function collect(Request $request, Response $response, \Exception $except
             foreach ($this->kernel->getBundles() as $name => $bundle) {
                 $this->data['bundles'][$name] = $bundle->getPath();
             }
+
+            $this->data['symfony_state'] = $this->determineSymfonyState();
         }
     }
 
@@ -110,6 +117,21 @@ public function getSymfonyVersion()
         return $this->data['symfony_version'];
     }
 
+    /**
+     * Returns the state of the current Symfony release.
+     *
+     * @return string One of: unknown, dev, stable, eom, eol
+     */
+    public function getSymfonyState()
+    {
+        return $this->data['symfony_state'];
+    }
+
+    public function setCacheVersionInfo($cacheVersionInfo)
+    {
+        $this->cacheVersionInfo = $cacheVersionInfo;
+    }
+
     /**
      * Gets the PHP version.
      *
@@ -242,4 +264,28 @@ public function getName()
     {
         return 'config';
     }
+
+    /**
+     * Tries to retrieve information about the current Symfony version.
+     *
+     * @return string One of: dev, stable, eom, eol
+     */
+    private function determineSymfonyState()
+    {
+        $now = new \DateTime();
+        $eom = \DateTime::createFromFormat('m/Y', Kernel::END_OF_MAINTENANCE)->modify('last day of this month');
+        $eol = \DateTime::createFromFormat('m/Y', Kernel::END_OF_LIFE)->modify('last day of this month');
+
+        if ($now > $eol) {
+            $versionState = 'eol';
+        } elseif ($now > $eom) {
+            $versionState = 'eom';
+        } elseif ('' !== Kernel::EXTRA_VERSION) {
+            $versionState = 'dev';
+        } else {
+            $versionState = 'stable';
+        }
+
+        return $versionState;
+    }
 }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/DataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/DataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DataCollectorInterface.php b/core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DataCollectorInterface.php
rename to core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
similarity index 60%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
index 91851c901b8dfd47a1bd03958feefb7621973608..09abfb125bb921e6ef038600b9a842e14b1f2289 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php
+++ b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\HttpKernel\DataCollector;
 
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Stopwatch\Stopwatch;
 use Symfony\Component\VarDumper\Cloner\Data;
@@ -33,12 +34,17 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
     private $clonesIndex = 0;
     private $rootRefs;
     private $charset;
+    private $dumper;
+    private $dumperIsInjected;
 
-    public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, $charset = null)
+    public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, $charset = null, RequestStack $requestStack = null, DataDumperInterface $dumper = null)
     {
         $this->stopwatch = $stopwatch;
         $this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
         $this->charset = $charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8';
+        $this->requestStack = $requestStack;
+        $this->dumper = $dumper;
+        $this->dumperIsInjected = null !== $dumper;
 
         // All clones share these properties by reference:
         $this->rootRefs = array(
@@ -63,7 +69,7 @@ public function dump(Data $data)
             $this->isCollected = false;
         }
 
-        $trace = PHP_VERSION_ID >= 50306 ? DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS : true;
+        $trace = DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS;
         if (PHP_VERSION_ID >= 50400) {
             $trace = debug_backtrace($trace, 7);
         } else {
@@ -84,7 +90,7 @@ public function dump(Data $data)
                 $line = $trace[$i]['line'];
 
                 while (++$i < 7) {
-                    if (isset($trace[$i]['function']) && empty($trace[$i]['class']) && 'call_user_func' !== $trace[$i]['function']) {
+                    if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) {
                         $file = $trace[$i]['file'];
                         $line = $trace[$i]['line'];
 
@@ -94,9 +100,9 @@ public function dump(Data $data)
                         $name = $info->getTemplateName();
                         $src = $info->getEnvironment()->getLoader()->getSource($name);
                         $info = $info->getDebugInfo();
-                        if (isset($info[$trace[$i-1]['line']])) {
+                        if (isset($info[$trace[$i - 1]['line']])) {
                             $file = false;
-                            $line = $info[$trace[$i-1]['line']];
+                            $line = $info[$trace[$i - 1]['line']];
                             $src = explode("\n", $src);
                             $fileExcerpt = array();
 
@@ -118,6 +124,10 @@ public function dump(Data $data)
             $name = substr($name, strrpos($name, '/') + 1);
         }
 
+        if ($this->dumper) {
+            $this->doDump($data, $name, $file, $line);
+        }
+
         $this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt');
         ++$this->dataCount;
 
@@ -128,6 +138,29 @@ public function dump(Data $data)
 
     public function collect(Request $request, Response $response, \Exception $exception = null)
     {
+        // Sub-requests and programmatic calls stay in the collected profile.
+        if ($this->dumper || ($this->requestStack && $this->requestStack->getMasterRequest() !== $request) || $request->isXmlHttpRequest() || $request->headers->has('Origin')) {
+            return;
+        }
+
+        // In all other conditions that remove the web debug toolbar, dumps are written on the output.
+        if (!$this->requestStack
+            || !$response->headers->has('X-Debug-Token')
+            || $response->isRedirection()
+            || ($response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html'))
+            || 'html' !== $request->getRequestFormat()
+            || false === strripos($response->getContent(), '</body>')
+        ) {
+            if ($response->headers->has('Content-Type') && false !== strpos($response->headers->get('Content-Type'), 'html')) {
+                $this->dumper = new HtmlDumper('php://output', $this->charset);
+            } else {
+                $this->dumper = new CliDumper('php://output', $this->charset);
+            }
+
+            foreach ($this->data as $dump) {
+                $this->doDump($dump['data'], $dump['name'], $dump['file'], $dump['line']);
+            }
+        }
     }
 
     public function serialize()
@@ -140,6 +173,9 @@ public function serialize()
         $this->data = array();
         $this->dataCount = 0;
         $this->isCollected = true;
+        if (!$this->dumperIsInjected) {
+            $this->dumper = null;
+        }
 
         return $ser;
     }
@@ -168,7 +204,12 @@ public function getDumps($format, $maxDepthLimit = -1, $maxItemsPerDepth = -1)
         $dumps = array();
 
         foreach ($this->data as $dump) {
-            $dumper->dump($dump['data']->getLimitedClone($maxDepthLimit, $maxItemsPerDepth));
+            if (method_exists($dump['data'], 'withMaxDepth')) {
+                $dumper->dump($dump['data']->withMaxDepth($maxDepthLimit)->withMaxItemsPerDepth($maxItemsPerDepth));
+            } else {
+                // getLimitedClone is @deprecated, to be removed in 3.0
+                $dumper->dump($dump['data']->getLimitedClone($maxDepthLimit, $maxItemsPerDepth));
+            }
             rewind($data);
             $dump['data'] = stream_get_contents($data);
             ftruncate($data, 0);
@@ -198,36 +239,52 @@ public function __destruct()
             }
 
             if ('cli' !== PHP_SAPI && stripos($h[$i], 'html')) {
-                $dumper = new HtmlDumper('php://output', $this->charset);
+                $this->dumper = new HtmlDumper('php://output', $this->charset);
             } else {
-                $dumper = new CliDumper('php://output', $this->charset);
-                $dumper->setColors(false);
+                $this->dumper = new CliDumper('php://output', $this->charset);
             }
 
             foreach ($this->data as $i => $dump) {
                 $this->data[$i] = null;
+                $this->doDump($dump['data'], $dump['name'], $dump['file'], $dump['line']);
+            }
+
+            $this->data = array();
+            $this->dataCount = 0;
+        }
+    }
 
-                if ($dumper instanceof HtmlDumper) {
-                    $dump['name'] = $this->htmlEncode($dump['name']);
-                    $dump['file'] = $this->htmlEncode($dump['file']);
-                    if ('' !== $dump['file']) {
-                        if ($this->fileLinkFormat) {
-                            $link = strtr($this->fileLinkFormat, array('%f' => $dump['file'], '%l' => $dump['line']));
-                            $dump['name'] = sprintf('<a href="%s" title="%s">%s</a>', $link, $dump['file'], $dump['name']);
+    private function doDump($data, $name, $file, $line)
+    {
+        if (PHP_VERSION_ID >= 50400 && $this->dumper instanceof CliDumper) {
+            $contextDumper = function ($name, $file, $line, $fileLinkFormat) {
+                if ($this instanceof HtmlDumper) {
+                    if ('' !== $file) {
+                        $s = $this->style('meta', '%s');
+                        $name = strip_tags($this->style('', $name));
+                        $file = strip_tags($this->style('', $file));
+                        if ($fileLinkFormat) {
+                            $link = strtr(strip_tags($this->style('', $fileLinkFormat)), array('%f' => $file, '%l' => (int) $line));
+                            $name = sprintf('<a href="%s" title="%s">'.$s.'</a>', $link, $file, $name);
                         } else {
-                            $dump['name'] = sprintf('<abbr title="%s">%s</abbr>', $dump['file'], $dump['name']);
+                            $name = sprintf('<abbr title="%s">'.$s.'</abbr>', $file, $name);
                         }
+                    } else {
+                        $name = $this->style('meta', $name);
                     }
-                    echo "\n<span class=\"sf-dump-meta\">{$dump['name']} on line {$dump['line']}:</span>";
+                    $this->line = $name.' on line '.$this->style('meta', $line).':';
                 } else {
-                    echo "{$dump['name']} on line {$dump['line']}:\n";
+                    $this->line = $this->style('meta', $name).' on line '.$this->style('meta', $line).':';
                 }
-                $dumper->dump($dump['data']);
-            }
-
-            $this->data = array();
-            $this->dataCount = 0;
+                $this->dumpLine(0);
+            };
+            $contextDumper = $contextDumper->bindTo($this->dumper, $this->dumper);
+            $contextDumper($name, $file, $line, $this->fileLinkFormat);
+        } else {
+            $cloner = new VarCloner();
+            $this->dumper->dump($cloner->cloneVar($name.' on line '.$line.':'));
         }
+        $this->dumper->dump($data);
     }
 
     private function htmlEncode($s)
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/EventDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/EventDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/LateDataCollectorInterface.php b/core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/LateDataCollectorInterface.php
rename to core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
index b839cc0a18ddd6e2ff2a984e0434e64aa83c4fe2..4d83e9a849b9d9c94892b87dd283718c84a2fbcb 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php
+++ b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
@@ -117,6 +117,10 @@ public function collect(Request $request, Response $response, \Exception $except
             $this->data['request_server']['PHP_AUTH_PW'] = '******';
         }
 
+        if (isset($this->data['request_request']['_password'])) {
+            $this->data['request_request']['_password'] = '******';
+        }
+
         if (isset($this->controllers[$request])) {
             $controller = $this->controllers[$request];
             if (is_array($controller)) {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RouterDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RouterDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php
rename to core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/Util/ValueExporter.php b/core/vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/Util/ValueExporter.php
rename to core/vendor/symfony/http-kernel/DataCollector/Util/ValueExporter.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ErrorHandler.php b/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
similarity index 66%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ErrorHandler.php
rename to core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
index 2718f891df2d9e30e54b19c2c7e273b134483ce3..577265bfa04d3e171e3c5586527f540ca926b05b 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ErrorHandler.php
+++ b/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\HttpKernel\Debug;
 
+trigger_error('The '.__NAMESPACE__.'\ErrorHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ErrorHandler class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Debug\ErrorHandler as DebugErrorHandler;
 
 /**
@@ -18,7 +20,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ * @deprecated since version 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
  */
 class ErrorHandler extends DebugErrorHandler
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ExceptionHandler.php b/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
similarity index 68%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ExceptionHandler.php
rename to core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
index 581e29cd8498b7ae512119c6dd7d3b6e6c757f1a..6ffba89f891ffd97a7a0164e7759d0fbf0bf043e 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ExceptionHandler.php
+++ b/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\HttpKernel\Debug;
 
+trigger_error('The '.__NAMESPACE__.'\ExceptionHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ExceptionHandler class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Debug\ExceptionHandler as DebugExceptionHandler;
 
 /**
@@ -18,7 +20,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ * @deprecated since version 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
  */
 class ExceptionHandler extends DebugExceptionHandler
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
similarity index 94%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
rename to core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
index 02df5242bfc4777332bdef67c349dabc4f31a7ae..0a82d76525491a70a1c6f332e997b646c18d3db8 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
+++ b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
@@ -34,10 +34,11 @@ class TraceableEventDispatcher extends BaseTraceableEventDispatcher
      *
      * @param Profiler|null $profiler A Profiler instance
      *
-     * @deprecated Deprecated since version 2.4, to be removed in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public function setProfiler(Profiler $profiler = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
     }
 
     /**
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/AddClassesToCachePass.php b/core/vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/AddClassesToCachePass.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/AddClassesToCachePass.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php b/core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php b/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
similarity index 82%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
index 69e7937d18c1167922379984230d7d8525acc209..c64c4c3939981d81a471303e4f7c6194fb441724 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
@@ -25,6 +25,8 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0.
  */
 class ContainerAwareHttpKernel extends HttpKernel
 {
@@ -37,11 +39,16 @@ class ContainerAwareHttpKernel extends HttpKernel
      * @param ContainerInterface          $container          A ContainerInterface instance
      * @param ControllerResolverInterface $controllerResolver A ControllerResolverInterface instance
      * @param RequestStack                $requestStack       A stack for master/sub requests
+     * @param bool                        $triggerDeprecation Whether or not to trigger the deprecation warning for the ContainerAwareHttpKernel
      */
-    public function __construct(EventDispatcherInterface $dispatcher, ContainerInterface $container, ControllerResolverInterface $controllerResolver, RequestStack $requestStack = null)
+    public function __construct(EventDispatcherInterface $dispatcher, ContainerInterface $container, ControllerResolverInterface $controllerResolver, RequestStack $requestStack = null, $triggerDeprecation = true)
     {
         parent::__construct($dispatcher, $controllerResolver, $requestStack);
 
+        if ($triggerDeprecation) {
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpKernel class instead.', E_USER_DEPRECATED);
+        }
+
         $this->container = $container;
 
         // the request scope might have been created before (see FrameworkBundle)
@@ -55,8 +62,6 @@ public function __construct(EventDispatcherInterface $dispatcher, ContainerInter
      */
     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
     {
-        $request->headers->set('X-Php-Ob-Level', ob_get_level());
-
         $this->container->enterScope('request');
         $this->container->set('request', $request, 'request');
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/Extension.php b/core/vendor/symfony/http-kernel/DependencyInjection/Extension.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/Extension.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/Extension.php
diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0cd8d4d5da861e840bf5a74d66933289b1cb028
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+
+/**
+ * Adds services tagged kernel.fragment_renderer as HTTP content rendering strategies.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class FragmentRendererPass implements CompilerPassInterface
+{
+    private $handlerService;
+    private $rendererTag;
+
+    /**
+     * @param string $handlerService Service name of the fragment handler in the container
+     * @param string $rendererTag    Tag name used for fragments
+     */
+    public function __construct($handlerService = 'fragment.handler', $rendererTag = 'kernel.fragment_renderer')
+    {
+        $this->handlerService = $handlerService;
+        $this->rendererTag = $rendererTag;
+    }
+
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasDefinition($this->handlerService)) {
+            return;
+        }
+
+        $definition = $container->getDefinition($this->handlerService);
+        foreach ($container->findTaggedServiceIds($this->rendererTag) as $id => $tags) {
+            $def = $container->getDefinition($id);
+            if (!$def->isPublic()) {
+                throw new \InvalidArgumentException(sprintf('The service "%s" must be public as fragment renderer are lazy-loaded.', $id));
+            }
+
+            if ($def->isAbstract()) {
+                throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as fragment renderer are lazy-loaded.', $id));
+            }
+
+            $refClass = new \ReflectionClass($container->getParameterBag()->resolveValue($def->getClass()));
+            $interface = 'Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface';
+            if (!$refClass->implementsInterface($interface)) {
+                throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
+            }
+
+            foreach ($tags as $tag) {
+                if (!isset($tag['alias'])) {
+                    trigger_error(sprintf('Service "%s" will have to define the "alias" attribute on the "%s" tag as of Symfony 3.0.', $id, $this->rendererTag), E_USER_DEPRECATED);
+
+                    // register the handler as a non-lazy-loaded one
+                    $definition->addMethodCall('addRenderer', array(new Reference($id)));
+                } else {
+                    $definition->addMethodCall('addRendererService', array($tag['alias'], $id));
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php b/core/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..4efe7cb62073657b235606aefbb81b2caa077450
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
+
+/**
+ * Lazily loads fragment renderers from the dependency injection container.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class LazyLoadingFragmentHandler extends FragmentHandler
+{
+    private $container;
+    private $rendererIds = array();
+
+    public function __construct(ContainerInterface $container, $debug = false, RequestStack $requestStack = null)
+    {
+        $this->container = $container;
+
+        parent::__construct(array(), $debug, $requestStack);
+    }
+
+    /**
+     * Adds a service as a fragment renderer.
+     *
+     * @param string $renderer The render service id
+     */
+    public function addRendererService($name, $renderer)
+    {
+        $this->rendererIds[$name] = $renderer;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function render($uri, $renderer = 'inline', array $options = array())
+    {
+        if (isset($this->rendererIds[$renderer])) {
+            $this->addRenderer($this->container->get($this->rendererIds[$renderer]));
+
+            unset($this->rendererIds[$renderer]);
+        }
+
+        return parent::render($uri, $renderer, $options);
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/MergeExtensionConfigurationPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/MergeExtensionConfigurationPass.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/RegisterListenersPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
similarity index 58%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/RegisterListenersPass.php
rename to core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
index 0e14e91652b9a444010b01c179b70501c4ec8e94..386476b3c9ed26445a65518cbe7aa8424cd3d932 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/RegisterListenersPass.php
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
@@ -11,12 +11,14 @@
 
 namespace Symfony\Component\HttpKernel\DependencyInjection;
 
+trigger_error('The '.__NAMESPACE__.'\RegisterListenersPass is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass as BaseRegisterListenersPass;
 
 /**
  * Compiler pass to register tagged services for an event dispatcher.
  *
- * @deprecated Deprecated in 2.5, to be removed in 3.0. Use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass instead.
+ * @deprecated since version 2.5, to be removed in 3.0. Use the Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass class instead.
  */
 class RegisterListenersPass extends BaseRegisterListenersPass
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FilterControllerEvent.php b/core/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FilterControllerEvent.php
rename to core/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FilterResponseEvent.php b/core/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FilterResponseEvent.php
rename to core/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FinishRequestEvent.php b/core/vendor/symfony/http-kernel/Event/FinishRequestEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/FinishRequestEvent.php
rename to core/vendor/symfony/http-kernel/Event/FinishRequestEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseEvent.php b/core/vendor/symfony/http-kernel/Event/GetResponseEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseEvent.php
rename to core/vendor/symfony/http-kernel/Event/GetResponseEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseForControllerResultEvent.php b/core/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseForControllerResultEvent.php
rename to core/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseForExceptionEvent.php b/core/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/GetResponseForExceptionEvent.php
rename to core/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/KernelEvent.php b/core/vendor/symfony/http-kernel/Event/KernelEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/KernelEvent.php
rename to core/vendor/symfony/http-kernel/Event/KernelEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/PostResponseEvent.php b/core/vendor/symfony/http-kernel/Event/PostResponseEvent.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Event/PostResponseEvent.php
rename to core/vendor/symfony/http-kernel/Event/PostResponseEvent.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php b/core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/AddRequestFormatsListener.php
rename to core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php b/core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php
rename to core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/DumpListener.php b/core/vendor/symfony/http-kernel/EventListener/DumpListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/DumpListener.php
rename to core/vendor/symfony/http-kernel/EventListener/DumpListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php b/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
similarity index 79%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php
rename to core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
index d5400b7d6ee019e52f53f906f2a58e86f3f29243..230a9494362700e8fd81966b641524959c86b28f 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\HttpKernel\EventListener;
 
+trigger_error('The '.__NAMESPACE__.'\ErrorsLoggerListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\DebugHandlersListener class instead.', E_USER_DEPRECATED);
+
 use Psr\Log\LoggerInterface;
 use Symfony\Component\Debug\ErrorHandler;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -22,12 +24,11 @@
  * @author Colin Frei <colin@colinfrei.com>
  * @author Konstantin Myakshin <koc-dp@yandex.ru>
  *
- * @deprecated since 2.6, to be removed in 3.0. Use DebugHandlersListener instead.
+ * @deprecated since version 2.6, to be removed in 3.0. Use the DebugHandlersListener class instead.
  */
 class ErrorsLoggerListener implements EventSubscriberInterface
 {
     private $channel;
-
     private $logger;
 
     public function __construct($channel, LoggerInterface $logger = null)
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php b/core/vendor/symfony/http-kernel/EventListener/EsiListener.php
similarity index 61%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php
rename to core/vendor/symfony/http-kernel/EventListener/EsiListener.php
index 63801690174daba8390e8d7004509bb2c502512c..9bede00564ba62315ff255cb0f004e9c9ca4a7e7 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/EsiListener.php
@@ -11,12 +11,14 @@
 
 namespace Symfony\Component\HttpKernel\EventListener;
 
+trigger_error('The '.__NAMESPACE__.'\EsiListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\SurrogateListener class instead.', E_USER_DEPRECATED);
+
 /**
  * EsiListener adds a Surrogate-Control HTTP header when the Response needs to be parsed for ESI.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use SurrogateListener instead
+ * @deprecated since version 2.6, to be removed in 3.0. Use SurrogateListener instead
  */
 class EsiListener extends SurrogateListener
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/core/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
similarity index 77%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php
rename to core/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
index 76fe41a53d6ff21667daf39f69def382df8901de..fc2efed86bd6a69206cc3be7887b76b932f0c042 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/ExceptionListener.php
@@ -39,14 +39,6 @@ public function __construct($controller, LoggerInterface $logger = null)
 
     public function onKernelException(GetResponseForExceptionEvent $event)
     {
-        static $handling;
-
-        if (true === $handling) {
-            return false;
-        }
-
-        $handling = true;
-
         $exception = $event->getException();
         $request = $event->getRequest();
 
@@ -55,20 +47,26 @@ public function onKernelException(GetResponseForExceptionEvent $event)
         $request = $this->duplicateRequest($exception, $request);
 
         try {
-            $response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, true);
+            $response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, false);
         } catch (\Exception $e) {
             $this->logException($e, sprintf('Exception thrown when handling an exception (%s: %s at %s line %s)', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()), false);
 
-            // set handling to false otherwise it wont be able to handle further more
-            $handling = false;
+            $wrapper = $e;
+
+            while ($prev = $wrapper->getPrevious()) {
+                if ($exception === $wrapper = $prev) {
+                    throw $e;
+                }
+            }
+
+            $prev = new \ReflectionProperty('Exception', 'previous');
+            $prev->setAccessible(true);
+            $prev->setValue($wrapper, $exception);
 
-            // throwing $e, not $exception, is on purpose: fixing error handling code paths is the most important
             throw $e;
         }
 
         $event->setResponse($response);
-
-        $handling = false;
     }
 
     public static function getSubscribedEvents()
@@ -83,20 +81,15 @@ public static function getSubscribedEvents()
      *
      * @param \Exception $exception The \Exception instance
      * @param string     $message   The error message to log
-     * @param bool       $original  False when the handling of the exception thrown another exception
      */
-    protected function logException(\Exception $exception, $message, $original = true)
+    protected function logException(\Exception $exception, $message)
     {
-        $isCritical = !$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500;
-        $context = array('exception' => $exception);
         if (null !== $this->logger) {
-            if ($isCritical) {
-                $this->logger->critical($message, $context);
+            if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
+                $this->logger->critical($message, array('exception' => $exception));
             } else {
-                $this->logger->error($message, $context);
+                $this->logger->error($message, array('exception' => $exception));
             }
-        } elseif (!$original || $isCritical) {
-            error_log($message);
         }
     }
 
@@ -116,7 +109,7 @@ protected function duplicateRequest(\Exception $exception, Request $request)
             'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null,
             // keep for BC -- as $format can be an argument of the controller callable
             // see src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php
-            // @deprecated in 2.4, to be removed in 3.0
+            // @deprecated since version 2.4, to be removed in 3.0
             'format' => $request->getRequestFormat(),
         );
         $request = $request->duplicate(null, null, $attributes);
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/FragmentListener.php b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
similarity index 90%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/FragmentListener.php
rename to core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
index d0a2298d1f5edb93cd7e30a41759ae61ed1e9386..3ff01ee1a3bdcda7569a9b4f7c453aef430ff050 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/FragmentListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
@@ -57,7 +57,7 @@ public function onKernelRequest(GetResponseEvent $event)
     {
         $request = $event->getRequest();
 
-        if ($this->fragmentPath !== rawurldecode($request->getPathInfo())) {
+        if ($request->attributes->has('_controller') || $this->fragmentPath !== rawurldecode($request->getPathInfo())) {
             return;
         }
 
@@ -88,12 +88,14 @@ protected function validateRequest(Request $request)
     }
 
     /**
-     * @deprecated Deprecated since 2.3.19, to be removed in 3.0.
+     * @deprecated since version 2.3.19, to be removed in 3.0.
      *
      * @return string[]
      */
     protected function getLocalIpAddresses()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3.19 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         return array('127.0.0.1', 'fe80::1', '::1');
     }
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/LocaleListener.php b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
similarity index 94%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/LocaleListener.php
rename to core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
index bdcf4c7644a7604d046c1fc5be3d6d1d95609990..ef3911694a9703e0d735ac5e455651887e7a5c84 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/LocaleListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
@@ -54,10 +54,12 @@ public function __construct($defaultLocale = 'en', RequestContextAwareInterface
      *
      * @param Request|null $request A Request instance
      *
-     * @deprecated Deprecated since version 2.4, to be removed in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public function setRequest(Request $request = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if (null === $request) {
             return;
         }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
similarity index 90%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php
rename to core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
index 43d8d03a7f2181714fb86d0f964247d1255eab07..781475a9925d2fb88053ceadf328af6b50adf64b 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
@@ -22,7 +22,7 @@
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
- * ProfilerListener collects data for the current request by listening to the onKernelResponse event.
+ * ProfilerListener collects data for the current request by listening to the kernel events.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
@@ -49,6 +49,13 @@ class ProfilerListener implements EventSubscriberInterface
      */
     public function __construct(Profiler $profiler, RequestMatcherInterface $matcher = null, $onlyException = false, $onlyMasterRequests = false, RequestStack $requestStack = null)
     {
+        if (null === $requestStack) {
+            // Prevent the deprecation notice to be triggered all the time.
+            // The onKernelRequest() method fires some logic only when the
+            // RequestStack instance is not provided as a dependency.
+            trigger_error('Since version 2.4, the '.__METHOD__.' method must accept a RequestStack instance to get the request instead of using the '.__CLASS__.'::onKernelRequest method that will be removed in 3.0.', E_USER_DEPRECATED);
+        }
+
         $this->profiler = $profiler;
         $this->matcher = $matcher;
         $this->onlyException = (bool) $onlyException;
@@ -73,7 +80,7 @@ public function onKernelException(GetResponseForExceptionEvent $event)
     }
 
     /**
-     * @deprecated Deprecated since version 2.4, to be removed in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public function onKernelRequest(GetResponseEvent $event)
     {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ResponseListener.php b/core/vendor/symfony/http-kernel/EventListener/ResponseListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ResponseListener.php
rename to core/vendor/symfony/http-kernel/EventListener/ResponseListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/RouterListener.php b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php
similarity index 85%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/RouterListener.php
rename to core/vendor/symfony/http-kernel/EventListener/RouterListener.php
index db05fcac16dd74e138802182ec94257d27e28d50..9a49e2f3c857c684f27cc4e55d218f16d8b72897 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/RouterListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php
@@ -67,6 +67,10 @@ public function __construct($matcher, RequestContext $context = null, LoggerInte
             throw new \InvalidArgumentException('You must either pass a RequestContext or the matcher must implement RequestContextAwareInterface.');
         }
 
+        if (!$requestStack instanceof RequestStack) {
+            trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
+        }
+
         $this->matcher = $matcher;
         $this->context = $context ?: $matcher->getContext();
         $this->requestStack = $requestStack;
@@ -82,13 +86,21 @@ public function __construct($matcher, RequestContext $context = null, LoggerInte
      *
      * @param Request|null $request A Request instance
      *
-     * @deprecated Deprecated since version 2.4, to be moved to a private function in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public function setRequest(Request $request = null)
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be made private in 3.0.', E_USER_DEPRECATED);
+
+        $this->setCurrentRequest($request);
+    }
+
+    private function setCurrentRequest(Request $request = null)
     {
         if (null !== $request && $this->request !== $request) {
             $this->context->fromRequest($request);
         }
+
         $this->request = $request;
     }
 
@@ -98,7 +110,7 @@ public function onKernelFinishRequest(FinishRequestEvent $event)
             return; // removed when requestStack is required
         }
 
-        $this->setRequest($this->requestStack->getParentRequest());
+        $this->setCurrentRequest($this->requestStack->getParentRequest());
     }
 
     public function onKernelRequest(GetResponseEvent $event)
@@ -106,11 +118,11 @@ public function onKernelRequest(GetResponseEvent $event)
         $request = $event->getRequest();
 
         // initialize the context that is also used by the generator (assuming matcher and generator share the same context instance)
-        // we call setRequest even if most of the time, it has already been done to keep compatibility
+        // we call setCurrentRequest even if most of the time, it has already been done to keep compatibility
         // with frameworks which do not use the Symfony service container
         // when we have a RequestStack, no need to do it
         if (null !== $this->requestStack) {
-            $this->setRequest($request);
+            $this->setCurrentRequest($request);
         }
 
         if ($request->attributes->has('_controller')) {
@@ -128,7 +140,10 @@ public function onKernelRequest(GetResponseEvent $event)
             }
 
             if (null !== $this->logger) {
-                $this->logger->info(sprintf('Matched route "%s" (parameters: %s)', $parameters['_route'], $this->parametersToString($parameters)));
+                $this->logger->info(sprintf('Matched route "%s".', $parameters['_route']), array(
+                    'route_parameters' => $parameters,
+                    'request_uri' => $request->getUri(),
+                ));
             }
 
             $request->attributes->add($parameters);
@@ -149,16 +164,6 @@ public function onKernelRequest(GetResponseEvent $event)
         }
     }
 
-    private function parametersToString(array $parameters)
-    {
-        $pieces = array();
-        foreach ($parameters as $key => $val) {
-            $pieces[] = sprintf('"%s": "%s"', $key, (is_string($val) ? $val : json_encode($val)));
-        }
-
-        return implode(', ', $pieces);
-    }
-
     public static function getSubscribedEvents()
     {
         return array(
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SaveSessionListener.php b/core/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SaveSessionListener.php
rename to core/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SessionListener.php b/core/vendor/symfony/http-kernel/EventListener/SessionListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SessionListener.php
rename to core/vendor/symfony/http-kernel/EventListener/SessionListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php b/core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php
rename to core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SurrogateListener.php b/core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/SurrogateListener.php
rename to core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/TestSessionListener.php b/core/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/TestSessionListener.php
rename to core/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/TranslatorListener.php b/core/vendor/symfony/http-kernel/EventListener/TranslatorListener.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/TranslatorListener.php
rename to core/vendor/symfony/http-kernel/EventListener/TranslatorListener.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/AccessDeniedHttpException.php b/core/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/AccessDeniedHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/BadRequestHttpException.php b/core/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/BadRequestHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/BadRequestHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/ConflictHttpException.php b/core/vendor/symfony/http-kernel/Exception/ConflictHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/ConflictHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/ConflictHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FatalErrorException.php b/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
similarity index 63%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FatalErrorException.php
rename to core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
index 7a1cd23381aff1e6eed67c4d0423ca0e1885c6ce..681d9d6199ccc62ecf4625d49ff678865c8feb0d 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FatalErrorException.php
+++ b/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
@@ -11,11 +11,13 @@
 
 namespace Symfony\Component\HttpKernel\Exception;
 
+trigger_error('The '.__NAMESPACE__.'\FatalErrorException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FatalErrorException class instead.', E_USER_DEPRECATED);
+
 /*
  * Fatal Error Exception.
  *
  * @author Konstanton Myakshin <koc-dp@yandex.ru>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ * @deprecated since version 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
  */
 class_exists('Symfony\Component\Debug\Exception\FatalErrorException');
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FlattenException.php b/core/vendor/symfony/http-kernel/Exception/FlattenException.php
similarity index 68%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FlattenException.php
rename to core/vendor/symfony/http-kernel/Exception/FlattenException.php
index ebe45b458074396b8619f568cc5fa14ba7fba8bf..eb205a18efcdc7e24a06cebbf4022610d80c7716 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/FlattenException.php
+++ b/core/vendor/symfony/http-kernel/Exception/FlattenException.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\HttpKernel\Exception;
 
+trigger_error('The '.__NAMESPACE__.'\FlattenException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FlattenException class instead.', E_USER_DEPRECATED);
+
 /*
  * FlattenException wraps a PHP Exception to be able to serialize it.
  *
@@ -18,6 +20,6 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ * @deprecated since version 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
  */
 class_exists('Symfony\Component\Debug\Exception\FlattenException');
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/GoneHttpException.php b/core/vendor/symfony/http-kernel/Exception/GoneHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/GoneHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/GoneHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/HttpException.php b/core/vendor/symfony/http-kernel/Exception/HttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/HttpException.php
rename to core/vendor/symfony/http-kernel/Exception/HttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/HttpExceptionInterface.php b/core/vendor/symfony/http-kernel/Exception/HttpExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/HttpExceptionInterface.php
rename to core/vendor/symfony/http-kernel/Exception/HttpExceptionInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/LengthRequiredHttpException.php b/core/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/LengthRequiredHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/MethodNotAllowedHttpException.php b/core/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/MethodNotAllowedHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/NotAcceptableHttpException.php b/core/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/NotAcceptableHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/NotFoundHttpException.php b/core/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/NotFoundHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/NotFoundHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/PreconditionFailedHttpException.php b/core/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/PreconditionFailedHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/PreconditionRequiredHttpException.php b/core/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/PreconditionRequiredHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/ServiceUnavailableHttpException.php b/core/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/ServiceUnavailableHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/TooManyRequestsHttpException.php b/core/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/TooManyRequestsHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnauthorizedHttpException.php b/core/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnauthorizedHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnprocessableEntityHttpException.php b/core/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnprocessableEntityHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnsupportedMediaTypeHttpException.php b/core/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Exception/UnsupportedMediaTypeHttpException.php
rename to core/vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/AbstractSurrogateFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/AbstractSurrogateFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/EsiFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/EsiFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/EsiFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/EsiFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
similarity index 96%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php
rename to core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
index 27fa7eabec3cadd0a562bac8023bdc227afa9cdb..eae715e8acb5e569cb049f63865c80269d763b7d 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php
+++ b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
@@ -76,10 +76,12 @@ public function addRenderer(FragmentRendererInterface $renderer)
      *
      * @param Request|null $request A Request instance
      *
-     * @deprecated Deprecated since version 2.4, to be removed in 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public function setRequest(Request $request = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $this->request = $request;
     }
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/FragmentRendererInterface.php b/core/vendor/symfony/http-kernel/Fragment/FragmentRendererInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/FragmentRendererInterface.php
rename to core/vendor/symfony/http-kernel/Fragment/FragmentRendererInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/SsiFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/SsiFragmentRenderer.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/SsiFragmentRenderer.php
rename to core/vendor/symfony/http-kernel/Fragment/SsiFragmentRenderer.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Esi.php b/core/vendor/symfony/http-kernel/HttpCache/Esi.php
similarity index 90%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Esi.php
rename to core/vendor/symfony/http-kernel/HttpCache/Esi.php
index b233741f1fdafc3b0362468ab6008861e526f662..f7031b81fa32d0717155bf0ca0370dc25edddc78 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Esi.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/Esi.php
@@ -57,7 +57,7 @@ public function getName()
      */
     public function createCacheStrategy()
     {
-        return new EsiResponseCacheStrategy();
+        return new ResponseCacheStrategy();
     }
 
     /**
@@ -69,7 +69,11 @@ public function createCacheStrategy()
      */
     public function hasSurrogateCapability(Request $request)
     {
-        return $this->hasSurrogateEsiCapability($request);
+        if (null === $value = $request->headers->get('Surrogate-Capability')) {
+            return false;
+        }
+
+        return false !== strpos($value, 'ESI/1.0');
     }
 
     /**
@@ -79,15 +83,13 @@ public function hasSurrogateCapability(Request $request)
      *
      * @return bool true if one surrogate has ESI/1.0 capability, false otherwise
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use hasSurrogateCapability() instead
+     * @deprecated since version 2.6, to be removed in 3.0. Use hasSurrogateCapability() instead
      */
     public function hasSurrogateEsiCapability(Request $request)
     {
-        if (null === $value = $request->headers->get('Surrogate-Capability')) {
-            return false;
-        }
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasSurrogateCapability() method instead.', E_USER_DEPRECATED);
 
-        return false !== strpos($value, 'ESI/1.0');
+        return $this->hasSurrogateCapability($request);
     }
 
     /**
@@ -97,7 +99,10 @@ public function hasSurrogateEsiCapability(Request $request)
      */
     public function addSurrogateCapability(Request $request)
     {
-        $this->addSurrogateEsiCapability($request);
+        $current = $request->headers->get('Surrogate-Capability');
+        $new = 'symfony2="ESI/1.0"';
+
+        $request->headers->set('Surrogate-Capability', $current ? $current.', '.$new : $new);
     }
 
     /**
@@ -105,14 +110,13 @@ public function addSurrogateCapability(Request $request)
      *
      * @param Request $request A Request instance
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use addSurrogateCapability() instead
+     * @deprecated since version 2.6, to be removed in 3.0. Use addSurrogateCapability() instead
      */
     public function addSurrogateEsiCapability(Request $request)
     {
-        $current = $request->headers->get('Surrogate-Capability');
-        $new = 'symfony2="ESI/1.0"';
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addSurrogateCapability() method instead.', E_USER_DEPRECATED);
 
-        $request->headers->set('Surrogate-Capability', $current ? $current.', '.$new : $new);
+        $this->addSurrogateCapability($request);
     }
 
     /**
@@ -138,7 +142,11 @@ public function addSurrogateControl(Response $response)
      */
     public function needsParsing(Response $response)
     {
-        return $this->needsEsiParsing($response);
+        if (!$control = $response->headers->get('Surrogate-Control')) {
+            return false;
+        }
+
+        return (bool) preg_match('#content="[^"]*ESI/1.0[^"]*"#', $control);
     }
 
     /**
@@ -148,15 +156,13 @@ public function needsParsing(Response $response)
      *
      * @return bool true if the Response needs to be parsed, false otherwise
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use needsParsing() instead
+     * @deprecated since version 2.6, to be removed in 3.0. Use needsParsing() instead
      */
     public function needsEsiParsing(Response $response)
     {
-        if (!$control = $response->headers->get('Surrogate-Control')) {
-            return false;
-        }
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the needsParsing() method instead.', E_USER_DEPRECATED);
 
-        return (bool) preg_match('#content="[^"]*ESI/1.0[^"]*"#', $control);
+        return $this->needsParsing($response);
     }
 
     /**
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategy.php b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
similarity index 74%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategy.php
rename to core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
index 1bef1475958979f7e83363a68c0689d2480dfb54..0d855464a37e43b189b351b82e5d4d8a0c9defd1 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategy.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
@@ -15,6 +15,8 @@
 
 namespace Symfony\Component\HttpKernel\HttpCache;
 
+trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategy class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategy class instead.', E_USER_DEPRECATED);
+
 /**
  * EsiResponseCacheStrategy knows how to compute the Response cache HTTP header
  * based on the different ESI response cache headers.
@@ -24,7 +26,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use ResponseCacheStrategy instead
+ * @deprecated since version 2.6, to be removed in 3.0. Use ResponseCacheStrategy instead
  */
 class EsiResponseCacheStrategy extends ResponseCacheStrategy implements EsiResponseCacheStrategyInterface
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategyInterface.php b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
similarity index 68%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategyInterface.php
rename to core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
index 03df0575a58378ed726d885806118eab05faa044..22abb88639c04c87084f4d873972c15929134300 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategyInterface.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
@@ -15,13 +15,15 @@
 
 namespace Symfony\Component\HttpKernel\HttpCache;
 
+trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategyInterface class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategyInterface class instead.', E_USER_DEPRECATED);
+
 /**
  * ResponseCacheStrategyInterface implementations know how to compute the
  * Response cache HTTP header based on the different response cache headers.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use ResponseCacheStrategyInterface instead
+ * @deprecated since version 2.6, to be removed in 3.0. Use ResponseCacheStrategyInterface instead.
  */
 interface EsiResponseCacheStrategyInterface extends ResponseCacheStrategyInterface
 {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
rename to core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
index 83a7e4e3e9ae53976826b89daa47c282bb6b7dfb..b6ccafc18815c894bd53605aed330b3420ffea9a 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
@@ -170,10 +170,12 @@ public function getSurrogate()
      *
      * @return Esi An Esi instance
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use getSurrogate() instead
+     * @deprecated since version 2.6, to be removed in 3.0. Use getSurrogate() instead
      */
     public function getEsi()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getSurrogate() method instead.', E_USER_DEPRECATED);
+
         if (!$this->surrogate instanceof Esi) {
             throw new \LogicException('This instance of HttpCache was not set up to use ESI as surrogate handler. You must overwrite and use createSurrogate');
         }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/ResponseCacheStrategy.php b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/ResponseCacheStrategy.php
rename to core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/ResponseCacheStrategyInterface.php b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/ResponseCacheStrategyInterface.php
rename to core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Ssi.php b/core/vendor/symfony/http-kernel/HttpCache/Ssi.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Ssi.php
rename to core/vendor/symfony/http-kernel/HttpCache/Ssi.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Store.php b/core/vendor/symfony/http-kernel/HttpCache/Store.php
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Store.php
rename to core/vendor/symfony/http-kernel/HttpCache/Store.php
index 75ba3cf6fd244051d254c3b9ed1338af4cde8b73..044d14e0c57756b57bd0fea3e644c3f4c4d45d6d 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/Store.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/Store.php
@@ -127,7 +127,7 @@ public function lookup(Request $request)
         // find a cached entry that matches the request.
         $match = null;
         foreach ($entries as $entry) {
-            if ($this->requestsMatch(isset($entry[1]['vary'][0]) ? $entry[1]['vary'][0] : '', $request->headers->all(), $entry[0])) {
+            if ($this->requestsMatch(isset($entry[1]['vary'][0]) ? implode(', ', $entry[1]['vary']) : '', $request->headers->all(), $entry[0])) {
                 $match = $entry;
 
                 break;
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/StoreInterface.php b/core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/StoreInterface.php
rename to core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/SurrogateInterface.php b/core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/SurrogateInterface.php
rename to core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php b/core/vendor/symfony/http-kernel/HttpKernel.php
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php
rename to core/vendor/symfony/http-kernel/HttpKernel.php
index c69b75a797a6a39c7a4ac1423f998d04e3852e18..473f780ca3cb6f9fda27ab2499214c0736e6518b 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php
+++ b/core/vendor/symfony/http-kernel/HttpKernel.php
@@ -62,6 +62,8 @@ public function __construct(EventDispatcherInterface $dispatcher, ControllerReso
      */
     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
     {
+        $request->headers->set('X-Php-Ob-Level', ob_get_level());
+
         try {
             return $this->handleRaw($request, $type);
         } catch (\Exception $e) {
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php b/core/vendor/symfony/http-kernel/HttpKernelInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php
rename to core/vendor/symfony/http-kernel/HttpKernelInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php b/core/vendor/symfony/http-kernel/Kernel.php
similarity index 93%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php
rename to core/vendor/symfony/http-kernel/Kernel.php
index d1442149b07f7426ab5b213c78b0b17da8ed18c6..41defa20575c757a8440a143123e8141e3bf41f9 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php
+++ b/core/vendor/symfony/http-kernel/Kernel.php
@@ -60,13 +60,16 @@ abstract class Kernel implements KernelInterface, TerminableInterface
     protected $startTime;
     protected $loadClassCache;
 
-    const VERSION = '2.6.6';
-    const VERSION_ID = '20606';
+    const VERSION = '2.7.0';
+    const VERSION_ID = '20700';
     const MAJOR_VERSION = '2';
-    const MINOR_VERSION = '6';
-    const RELEASE_VERSION = '6';
+    const MINOR_VERSION = '7';
+    const RELEASE_VERSION = '0';
     const EXTRA_VERSION = '';
 
+    const END_OF_MAINTENANCE = '05/2018';
+    const END_OF_LIFE = '05/2019';
+
     /**
      * Constructor.
      *
@@ -86,14 +89,21 @@ public function __construct($environment, $debug)
             $this->startTime = microtime(true);
         }
 
-        $this->init();
+        $defClass = new \ReflectionMethod($this, 'init');
+        $defClass = $defClass->getDeclaringClass()->name;
+
+        if (__CLASS__ !== $defClass) {
+            trigger_error(sprintf('Calling the %s::init() method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', $defClass), E_USER_DEPRECATED);
+            $this->init();
+        }
     }
 
     /**
-     * @deprecated Deprecated since version 2.3, to be removed in 3.0. Move your logic in the constructor instead.
+     * @deprecated since version 2.3, to be removed in 3.0. Move your logic in the constructor instead.
      */
     public function init()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', E_USER_DEPRECATED);
     }
 
     public function __clone()
@@ -211,10 +221,12 @@ public function getBundles()
      *
      * @api
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     public function isClassInActiveBundle($class)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in version 3.0.', E_USER_DEPRECATED);
+
         foreach ($this->getBundles() as $bundle) {
             if (0 === strpos($class, $bundle->getNamespace())) {
                 return true;
@@ -243,7 +255,7 @@ public function getBundle($name, $first = true)
     }
 
     /**
-     * {@inheritDoc}
+     * {@inheritdoc}
      *
      * @throws \RuntimeException if a custom resource is hidden by a resource in a derived bundle
      */
@@ -537,7 +549,7 @@ protected function initializeContainer()
             $fresh = false;
         }
 
-        require_once $cache;
+        require_once $cache->getPath();
 
         $this->container = new $class();
         $this->container->set('kernel', $this);
@@ -662,7 +674,7 @@ protected function getContainerBuilder()
     {
         $container = new ContainerBuilder(new ParameterBag($this->getKernelParameters()));
 
-        if (class_exists('ProxyManager\Configuration')) {
+        if (class_exists('ProxyManager\Configuration') && class_exists('Symfony\Bridge\ProxyManager\LazyProxy\Instantiator\RuntimeInstantiator')) {
             $container->setProxyInstantiator(new RuntimeInstantiator());
         }
 
@@ -682,11 +694,11 @@ protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container
         // cache the container
         $dumper = new PhpDumper($container);
 
-        if (class_exists('ProxyManager\Configuration')) {
-            $dumper->setProxyDumper(new ProxyDumper());
+        if (class_exists('ProxyManager\Configuration') && class_exists('Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper')) {
+            $dumper->setProxyDumper(new ProxyDumper(md5($cache->getPath())));
         }
 
-        $content = $dumper->dump(array('class' => $class, 'base_class' => $baseClass, 'file' => (string) $cache));
+        $content = $dumper->dump(array('class' => $class, 'base_class' => $baseClass, 'file' => $cache->getPath()));
         if (!$this->debug) {
             $content = static::stripComments($content);
         }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/KernelEvents.php b/core/vendor/symfony/http-kernel/KernelEvents.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/KernelEvents.php
rename to core/vendor/symfony/http-kernel/KernelEvents.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/KernelInterface.php b/core/vendor/symfony/http-kernel/KernelInterface.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/KernelInterface.php
rename to core/vendor/symfony/http-kernel/KernelInterface.php
index 1ab35a50336554f27cc9c51196ea5263d9f0f6c2..06c3c0c44eb5c698e43e63a4b3457f98d48d8033 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/KernelInterface.php
+++ b/core/vendor/symfony/http-kernel/KernelInterface.php
@@ -78,7 +78,7 @@ public function getBundles();
      *
      * @api
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     public function isClassInActiveBundle($class);
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/LICENSE b/core/vendor/symfony/http-kernel/LICENSE
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/LICENSE
rename to core/vendor/symfony/http-kernel/LICENSE
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/DebugLoggerInterface.php b/core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/DebugLoggerInterface.php
rename to core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/LoggerInterface.php b/core/vendor/symfony/http-kernel/Log/LoggerInterface.php
similarity index 62%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/LoggerInterface.php
rename to core/vendor/symfony/http-kernel/Log/LoggerInterface.php
index 856c26a18bb091fc2382d921b1ba2fb3112f8dbb..737ba4e0f65d0c6415ce2630fb66f81f63a87564 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/LoggerInterface.php
+++ b/core/vendor/symfony/http-kernel/Log/LoggerInterface.php
@@ -18,7 +18,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @deprecated since 2.2, to be removed in 3.0. Type-hint \Psr\Log\LoggerInterface instead.
+ * @deprecated since version 2.2, to be removed in 3.0. Type-hint \Psr\Log\LoggerInterface instead.
  *
  * @api
  */
@@ -27,28 +27,28 @@ interface LoggerInterface extends PsrLogger
     /**
      * @api
      *
-     * @deprecated since 2.2, to be removed in 3.0. Use emergency() which is PSR-3 compatible.
+     * @deprecated since version 2.2, to be removed in 3.0. Use emergency() which is PSR-3 compatible.
      */
     public function emerg($message, array $context = array());
 
     /**
      * @api
      *
-     * @deprecated since 2.2, to be removed in 3.0. Use critical() which is PSR-3 compatible.
+     * @deprecated since version 2.2, to be removed in 3.0. Use critical() which is PSR-3 compatible.
      */
     public function crit($message, array $context = array());
 
     /**
      * @api
      *
-     * @deprecated since 2.2, to be removed in 3.0. Use error() which is PSR-3 compatible.
+     * @deprecated since version 2.2, to be removed in 3.0. Use error() which is PSR-3 compatible.
      */
     public function err($message, array $context = array());
 
     /**
      * @api
      *
-     * @deprecated since 2.2, to be removed in 3.0. Use warning() which is PSR-3 compatible.
+     * @deprecated since version 2.2, to be removed in 3.0. Use warning() which is PSR-3 compatible.
      */
     public function warn($message, array $context = array());
 }
diff --git a/core/vendor/symfony/http-kernel/Log/NullLogger.php b/core/vendor/symfony/http-kernel/Log/NullLogger.php
new file mode 100644
index 0000000000000000000000000000000000000000..915773b0088f30d216b22cde7304b227c139b33f
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Log/NullLogger.php
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Log;
+
+trigger_error('The '.__NAMESPACE__.'\NullLogger class is deprecated since version 2.2 and will be removed in 3.0. Use the Psr\Log\NullLogger class instead from the psr/log Composer package.', E_USER_DEPRECATED);
+
+use Psr\Log\NullLogger as PsrNullLogger;
+
+/**
+ * NullLogger.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class NullLogger extends PsrNullLogger implements LoggerInterface
+{
+    /**
+     * @api
+     */
+    public function emerg($message, array $context = array())
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new emergency() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+    }
+
+    /**
+     * @api
+     */
+    public function crit($message, array $context = array())
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new critical() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+    }
+
+    /**
+     * @api
+     */
+    public function err($message, array $context = array())
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new error() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+    }
+
+    /**
+     * @api
+     */
+    public function warn($message, array $context = array())
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new warning() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/BaseMemcacheProfilerStorage.php
similarity index 96%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/BaseMemcacheProfilerStorage.php
index f50b83e5d3cd9a800134b558e1842c346df77c07..c6395bd67a2d0f7963ab73b442b10129aec7a29f 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/BaseMemcacheProfilerStorage.php
@@ -61,7 +61,9 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
                 continue;
             }
 
-            list($itemToken, $itemIp, $itemMethod, $itemUrl, $itemTime, $itemParent) = explode("\t", $item, 6);
+            $values = explode("\t", $item, 7);
+            list($itemToken, $itemIp, $itemMethod, $itemUrl, $itemTime, $itemParent) = $values;
+            $statusCode = isset($values[6]) ? $values[6] : null;
 
             $itemTime = (int) $itemTime;
 
@@ -84,6 +86,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
                 'url' => $itemUrl,
                 'time' => $itemTime,
                 'parent' => $itemParent,
+                'status_code' => $statusCode,
             );
             --$limit;
         }
@@ -176,6 +179,7 @@ public function write(Profile $profile)
                     $profile->getUrl(),
                     $profile->getTime(),
                     $profile->getParentToken(),
+                    $profile->getStatusCode(),
                 ))."\n";
 
                 return $this->appendValue($indexName, $indexRow, $this->lifetime);
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/FileProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
similarity index 97%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/FileProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
index bda87e80e1e96065bf2cd73bc85ae50c2174710e..581ab6434b789b2a4e090b49c9b4325d1b2c10ac 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/FileProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
@@ -62,7 +62,9 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
 
         $result = array();
         while (count($result) < $limit && $line = $this->readLineFromFile($file)) {
-            list($csvToken, $csvIp, $csvMethod, $csvUrl, $csvTime, $csvParent) = str_getcsv($line);
+            $values = str_getcsv($line);
+            list($csvToken, $csvIp, $csvMethod, $csvUrl, $csvTime, $csvParent) = $values;
+            $csvStatusCode = isset($values[6]) ? $values[6] : null;
 
             $csvTime = (int) $csvTime;
 
@@ -85,6 +87,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
                 'url' => $csvUrl,
                 'time' => $csvTime,
                 'parent' => $csvParent,
+                'status_code' => $csvStatusCode,
             );
         }
 
@@ -168,6 +171,7 @@ public function write(Profile $profile)
                 $profile->getUrl(),
                 $profile->getTime(),
                 $profile->getParentToken(),
+                $profile->getStatusCode(),
             ));
             fclose($file);
         }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MemcacheProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MemcacheProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MemcachedProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/MemcachedProfilerStorage.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MemcachedProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/MemcachedProfilerStorage.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MongoDbProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/MongoDbProfilerStorage.php
similarity index 96%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MongoDbProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/MongoDbProfilerStorage.php
index 23224b4a6e7ca7bb3e555cbfbc8dd4beb51efeb6..f35a7f74199b3178b2cffe427894c9272dd1bcbe 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MongoDbProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/MongoDbProfilerStorage.php
@@ -36,7 +36,7 @@ public function __construct($dsn, $username = '', $password = '', $lifetime = 86
      */
     public function find($ip, $url, $limit, $method, $start = null, $end = null)
     {
-        $cursor = $this->getMongo()->find($this->buildQuery($ip, $url, $method, $start, $end), array('_id', 'parent', 'ip', 'method', 'url', 'time'))->sort(array('time' => -1))->limit($limit);
+        $cursor = $this->getMongo()->find($this->buildQuery($ip, $url, $method, $start, $end), array('_id', 'parent', 'ip', 'method', 'url', 'time', 'status_code'))->sort(array('time' => -1))->limit($limit);
 
         $tokens = array();
         foreach ($cursor as $profile) {
@@ -83,6 +83,7 @@ public function write(Profile $profile)
             'method' => $profile->getMethod(),
             'url' => $profile->getUrl(),
             'time' => $profile->getTime(),
+            'status_code' => $profile->getStatusCode(),
         );
 
         $result = $this->getMongo()->update(array('_id' => $profile->getToken()), array_filter($record, function ($v) { return !empty($v); }), array('upsert' => true));
@@ -212,6 +213,7 @@ private function getData(array $data)
             'url' => isset($data['url']) ? $data['url'] : null,
             'time' => isset($data['time']) ? $data['time'] : null,
             'data' => isset($data['data']) ? $data['data'] : null,
+            'status_code' => isset($data['status_code']) ? $data['status_code'] : null,
         );
     }
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MysqlProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/MysqlProfilerStorage.php
similarity index 93%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MysqlProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/MysqlProfilerStorage.php
index 69a865f9b56096a9503d1e8db7031bb298619584..92e8a1b062de8aa0c68af2edbf970248ec826bc4 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/MysqlProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/MysqlProfilerStorage.php
@@ -33,7 +33,7 @@ protected function initDb()
             }
 
             $db = new \PDO($this->dsn, $this->username, $this->password);
-            $db->exec('CREATE TABLE IF NOT EXISTS sf_profiler_data (token VARCHAR(255) PRIMARY KEY, data LONGTEXT, ip VARCHAR(64), method VARCHAR(6), url VARCHAR(255), time INTEGER UNSIGNED, parent VARCHAR(255), created_at INTEGER UNSIGNED, KEY (created_at), KEY (ip), KEY (method), KEY (url), KEY (parent))');
+            $db->exec('CREATE TABLE IF NOT EXISTS sf_profiler_data (token VARCHAR(255) PRIMARY KEY, data LONGTEXT, ip VARCHAR(64), method VARCHAR(6), url VARCHAR(255), time INTEGER UNSIGNED, parent VARCHAR(255), created_at INTEGER UNSIGNED, status_code SMALLINT UNSIGNED, KEY (created_at), KEY (ip), KEY (method), KEY (url), KEY (parent))');
 
             $this->db = $db;
         }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/PdoProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/PdoProfilerStorage.php
similarity index 94%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/PdoProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/PdoProfilerStorage.php
index a545e6b44b574963284b22965fc160a3306930ce..48f813f2e7cd4fe0d1c68890a2ea62e96cef5edd 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/PdoProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/PdoProfilerStorage.php
@@ -59,7 +59,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
         $criteria = $criteria ? 'WHERE '.implode(' AND ', $criteria) : '';
 
         $db = $this->initDb();
-        $tokens = $this->fetch($db, 'SELECT token, ip, method, url, time, parent FROM sf_profiler_data '.$criteria.' ORDER BY time DESC LIMIT '.((int) $limit), $args);
+        $tokens = $this->fetch($db, 'SELECT token, ip, method, url, time, parent, status_code FROM sf_profiler_data '.$criteria.' ORDER BY time DESC LIMIT '.((int) $limit), $args);
         $this->close($db);
 
         return $tokens;
@@ -94,13 +94,14 @@ public function write(Profile $profile)
             ':url' => $profile->getUrl(),
             ':time' => $profile->getTime(),
             ':created_at' => time(),
+            ':status_code' => $profile->getStatusCode(),
         );
 
         try {
             if ($this->has($profile->getToken())) {
-                $this->exec($db, 'UPDATE sf_profiler_data SET parent = :parent, data = :data, ip = :ip, method = :method, url = :url, time = :time, created_at = :created_at WHERE token = :token', $args);
+                $this->exec($db, 'UPDATE sf_profiler_data SET parent = :parent, data = :data, ip = :ip, method = :method, url = :url, time = :time, created_at = :created_at, status_code = :status_code WHERE token = :token', $args);
             } else {
-                $this->exec($db, 'INSERT INTO sf_profiler_data (token, parent, data, ip, method, url, time, created_at) VALUES (:token, :parent, :data, :ip, :method, :url, :time, :created_at)', $args);
+                $this->exec($db, 'INSERT INTO sf_profiler_data (token, parent, data, ip, method, url, time, created_at, status_code) VALUES (:token, :parent, :data, :ip, :method, :url, :time, :created_at, :status_code)', $args);
             }
             $this->cleanup();
             $status = true;
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profile.php b/core/vendor/symfony/http-kernel/Profiler/Profile.php
similarity index 94%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profile.php
rename to core/vendor/symfony/http-kernel/Profiler/Profile.php
index 85284bf2969aac35a6aa56c58dceae2ac87109ef..a4e4ba6ad66b882de21d4d770cd0487306d9780e 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profile.php
+++ b/core/vendor/symfony/http-kernel/Profiler/Profile.php
@@ -31,6 +31,7 @@ class Profile
     private $method;
     private $url;
     private $time;
+    private $statusCode;
 
     /**
      * @var Profile
@@ -171,6 +172,22 @@ public function setTime($time)
         $this->time = $time;
     }
 
+    /**
+     * @param int $statusCode
+     */
+    public function setStatusCode($statusCode)
+    {
+        $this->statusCode = $statusCode;
+    }
+
+    /**
+     * @return int
+     */
+    public function getStatusCode()
+    {
+        return $this->statusCode;
+    }
+
     /**
      * Finds children profilers.
      *
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profiler.php b/core/vendor/symfony/http-kernel/Profiler/Profiler.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profiler.php
rename to core/vendor/symfony/http-kernel/Profiler/Profiler.php
index 62f5cd78ba0f0b3677c333049d4bcecb73698131..864f624729d54770f235b51b55ecad8fe06d32fe 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/Profiler.php
+++ b/core/vendor/symfony/http-kernel/Profiler/Profiler.php
@@ -117,7 +117,7 @@ public function saveProfile(Profile $profile)
         }
 
         if (!($ret = $this->storage->write($profile)) && null !== $this->logger) {
-            $this->logger->warning('Unable to store the profiler information.');
+            $this->logger->warning('Unable to store the profiler information.', array('configured_storage' => get_class($this->storage)));
         }
 
         return $ret;
@@ -202,6 +202,7 @@ public function collect(Request $request, Response $response, \Exception $except
         $profile->setUrl($request->getUri());
         $profile->setIp($request->getClientIp());
         $profile->setMethod($request->getMethod());
+        $profile->setStatusCode($response->getStatusCode());
 
         $response->headers->set('X-Debug-Token', $profile->getToken());
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php b/core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php
rename to core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/RedisProfilerStorage.php
similarity index 97%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/RedisProfilerStorage.php
index b05adcc72a0e00e7f590edf95a09364893d6814f..b0e14ea456291d56a579cd87e004a5ee6e83f9e9 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/RedisProfilerStorage.php
@@ -71,7 +71,9 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
                 continue;
             }
 
-            list($itemToken, $itemIp, $itemMethod, $itemUrl, $itemTime, $itemParent) = explode("\t", $item, 6);
+            $values = explode("\t", $item, 7);
+            list($itemToken, $itemIp, $itemMethod, $itemUrl, $itemTime, $itemParent) = $values;
+            $statusCode = isset($values[6]) ? $values[6] : null;
 
             $itemTime = (int) $itemTime;
 
@@ -94,6 +96,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null)
                 'url' => $itemUrl,
                 'time' => $itemTime,
                 'parent' => $itemParent,
+                'status_code' => $statusCode,
             );
             --$limit;
         }
@@ -182,6 +185,7 @@ public function write(Profile $profile)
                     $profile->getUrl(),
                     $profile->getTime(),
                     $profile->getParentToken(),
+                    $profile->getStatusCode(),
                 ))."\n";
 
                 return $this->appendValue($indexName, $indexRow, $this->lifetime);
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/SqliteProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/SqliteProfilerStorage.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/SqliteProfilerStorage.php
rename to core/vendor/symfony/http-kernel/Profiler/SqliteProfilerStorage.php
index 0c25bc950c3aef565ba9750ec2225464583468ab..4a996fd12d639c1f87876a24d4445924b9efef1f 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/SqliteProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/SqliteProfilerStorage.php
@@ -40,7 +40,7 @@ protected function initDb()
             }
 
             $db->exec('PRAGMA temp_store=MEMORY; PRAGMA journal_mode=MEMORY;');
-            $db->exec('CREATE TABLE IF NOT EXISTS sf_profiler_data (token STRING, data STRING, ip STRING, method STRING, url STRING, time INTEGER, parent STRING, created_at INTEGER)');
+            $db->exec('CREATE TABLE IF NOT EXISTS sf_profiler_data (token STRING, data STRING, ip STRING, method STRING, url STRING, time INTEGER, parent STRING, created_at INTEGER, status_code INTEGER)');
             $db->exec('CREATE INDEX IF NOT EXISTS data_created_at ON sf_profiler_data (created_at)');
             $db->exec('CREATE INDEX IF NOT EXISTS data_ip ON sf_profiler_data (ip)');
             $db->exec('CREATE INDEX IF NOT EXISTS data_method ON sf_profiler_data (method)');
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/README.md b/core/vendor/symfony/http-kernel/README.md
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/README.md
rename to core/vendor/symfony/http-kernel/README.md
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore
deleted file mode 100644
index 94a6a2528878364d8732c83d2234d177e4cd1862..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
-Tests/Fixtures/cache/
-Tests/Fixtures/logs/
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/NullLogger.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/NullLogger.php
deleted file mode 100644
index 0948e0d88b29e62fdde1c8bce4cf1ac0f6fc4e20..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Log/NullLogger.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\HttpKernel\Log;
-
-use Psr\Log\NullLogger as PsrNullLogger;
-
-/**
- * NullLogger.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class NullLogger extends PsrNullLogger implements LoggerInterface
-{
-    /**
-     * @api
-     *
-     * @deprecated since 2.2, to be removed in 3.0. Use emergency() which is PSR-3 compatible.
-     */
-    public function emerg($message, array $context = array())
-    {
-    }
-
-    /**
-     * @api
-     *
-     * @deprecated since 2.2, to be removed in 3.0. Use critical() which is PSR-3 compatible.
-     */
-    public function crit($message, array $context = array())
-    {
-    }
-
-    /**
-     * @api
-     *
-     * @deprecated since 2.2, to be removed in 3.0. Use error() which is PSR-3 compatible.
-     */
-    public function err($message, array $context = array())
-    {
-    }
-
-    /**
-     * @api
-     *
-     * @deprecated since 2.2, to be removed in 3.0. Use warning() which is PSR-3 compatible.
-     */
-    public function warn($message, array $context = array())
-    {
-    }
-}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php
deleted file mode 100644
index dd9a134bd8dc4b39065749a54d96c495da7f4c21..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\HttpKernel\Tests\DataCollector;
-
-use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
-use Symfony\Component\VarDumper\Cloner\Data;
-
-/**
- * DumpDataCollectorTest
- *
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class DumpDataCollectorTest extends \PHPUnit_Framework_TestCase
-{
-    public function testDump()
-    {
-        $data = new Data(array(array(123)));
-
-        $collector = new DumpDataCollector();
-
-        $this->assertSame('dump', $collector->getName());
-
-        $collector->dump($data);
-        $line = __LINE__ - 1;
-        $this->assertSame(1, $collector->getDumpsCount());
-
-        $dump = $collector->getDumps('html');
-        $this->assertTrue(isset($dump[0]['data']));
-        $dump[0]['data'] = preg_replace('/^.*?<pre/', '<pre', $dump[0]['data']);
-        $dump[0]['data'] = preg_replace('/sf-dump-\d+/', 'sf-dump', $dump[0]['data']);
-
-        $xDump = array(
-            array(
-                'data' => "<pre class=sf-dump id=sf-dump data-indent-pad=\"  \"><span class=sf-dump-num>123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
-                'name' => 'DumpDataCollectorTest.php',
-                'file' => __FILE__,
-                'line' => $line,
-                'fileExcerpt' => false,
-            ),
-        );
-        $this->assertSame($xDump, $dump);
-
-        $this->assertStringMatchesFormat(
-            'a:1:{i:0;a:5:{s:4:"data";O:39:"Symfony\Component\VarDumper\Cloner\Data":4:{s:45:"Symfony\Component\VarDumper\Cloner\Datadata";a:1:{i:0;a:1:{i:0;i:123;}}s:49:"Symfony\Component\VarDumper\Cloner\DatamaxDepth";i:%i;s:57:"Symfony\Component\VarDumper\Cloner\DatamaxItemsPerDepth";i:%i;s:54:"Symfony\Component\VarDumper\Cloner\DatauseRefHandles";i:%i;}s:4:"name";s:25:"DumpDataCollectorTest.php";s:4:"file";s:%a',
-            str_replace("\0", '', $collector->serialize())
-        );
-
-        $this->assertSame(0, $collector->getDumpsCount());
-        $this->assertSame('a:0:{}', $collector->serialize());
-    }
-
-    public function testFlush()
-    {
-        $data = new Data(array(array(456)));
-        $collector = new DumpDataCollector();
-        $collector->dump($data);
-        $line = __LINE__ - 1;
-
-        ob_start();
-        $collector = null;
-        $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n456\n", ob_get_clean());
-    }
-}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php b/core/vendor/symfony/http-kernel/TerminableInterface.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php
rename to core/vendor/symfony/http-kernel/TerminableInterface.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php b/core/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
similarity index 71%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php
rename to core/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
index 1a1b30097c4dbc0fb5d4c67c495796d1326ea67b..c9059a74a1eed7c497088b17702e0585db757320 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Tests\Bundle;
 
+use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionNotValidBundle\ExtensionNotValidBundle;
 use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\ExtensionPresentBundle;
 use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionAbsentBundle\ExtensionAbsentBundle;
 use Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command\FooCommand;
@@ -30,4 +31,14 @@ public function testRegisterCommands()
 
         $this->assertNull($bundle2->registerCommands($app));
     }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface
+     */
+    public function testGetContainerExtensionWithInvalidClass()
+    {
+        $bundle = new ExtensionNotValidBundle();
+        $bundle->getContainerExtension();
+    }
 }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php b/core/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php
rename to core/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php b/core/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
rename to core/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerAggregateTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheWarmer/CacheWarmerTest.php b/core/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/CacheWarmer/CacheWarmerTest.php
rename to core/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/ClientTest.php b/core/vendor/symfony/http-kernel/Tests/ClientTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/ClientTest.php
rename to core/vendor/symfony/http-kernel/Tests/ClientTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/EnvParametersResourceTest.php b/core/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/EnvParametersResourceTest.php
rename to core/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/FileLocatorTest.php b/core/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/FileLocatorTest.php
rename to core/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php b/core/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php
rename to core/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
index fe70ae5d5e8442af74948cc1a4af845793c1a83c..32db4e47adc5aaf3a9fd1fd70486bd395d444e15 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
@@ -20,7 +20,7 @@ class ControllerResolverTest extends \PHPUnit_Framework_TestCase
     public function testGetControllerWithoutControllerParameter()
     {
         $logger = $this->getMock('Psr\Log\LoggerInterface');
-        $logger->expects($this->once())->method('warning')->with('Unable to look for the controller as the "_controller" parameter is missing');
+        $logger->expects($this->once())->method('warning')->with('Unable to look for the controller as the "_controller" parameter is missing.');
         $resolver = $this->createControllerResolver($logger);
 
         $request = Request::create('/');
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/ConfigDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
similarity index 98%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/ConfigDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
index 0d672a1f0cd506f39eec944868d929a93439ebff..4aa01f0e7c371a387915d3cb4924a41b14e7df6b 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/ConfigDataCollectorTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
@@ -23,6 +23,7 @@ public function testCollect()
     {
         $kernel = new KernelForTest('test', true);
         $c = new ConfigDataCollector();
+        $c->setCacheVersionInfo(false);
         $c->setKernel($kernel);
         $c->collect(new Request(), new Response());
 
diff --git a/core/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9b8433c46ef5f426d45aa20ecd6cf0c410aa7d8
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\DataCollector;
+
+use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\VarDumper\Cloner\Data;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class DumpDataCollectorTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $data = new Data(array(array(123)));
+
+        $collector = new DumpDataCollector();
+
+        $this->assertSame('dump', $collector->getName());
+
+        $collector->dump($data);
+        $line = __LINE__ - 1;
+        $this->assertSame(1, $collector->getDumpsCount());
+
+        $dump = $collector->getDumps('html');
+        $this->assertTrue(isset($dump[0]['data']));
+        $dump[0]['data'] = preg_replace('/^.*?<pre/', '<pre', $dump[0]['data']);
+        $dump[0]['data'] = preg_replace('/sf-dump-\d+/', 'sf-dump', $dump[0]['data']);
+
+        $xDump = array(
+            array(
+                'data' => "<pre class=sf-dump id=sf-dump data-indent-pad=\"  \"><span class=sf-dump-num>123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
+                'name' => 'DumpDataCollectorTest.php',
+                'file' => __FILE__,
+                'line' => $line,
+                'fileExcerpt' => false,
+            ),
+        );
+        $this->assertSame($xDump, $dump);
+
+        $this->assertStringMatchesFormat(
+            'a:1:{i:0;a:5:{s:4:"data";O:39:"Symfony\Component\VarDumper\Cloner\Data":4:{s:45:"Symfony\Component\VarDumper\Cloner\Datadata";a:1:{i:0;a:1:{i:0;i:123;}}s:49:"Symfony\Component\VarDumper\Cloner\DatamaxDepth";i:%i;s:57:"Symfony\Component\VarDumper\Cloner\DatamaxItemsPerDepth";i:%i;s:54:"Symfony\Component\VarDumper\Cloner\DatauseRefHandles";i:%i;}s:4:"name";s:25:"DumpDataCollectorTest.php";s:4:"file";s:%a',
+            str_replace("\0", '', $collector->serialize())
+        );
+
+        $this->assertSame(0, $collector->getDumpsCount());
+        $this->assertSame('a:0:{}', $collector->serialize());
+    }
+
+    public function testCollectDefault()
+    {
+        $data = new Data(array(array(123)));
+
+        $collector = new DumpDataCollector();
+
+        $collector->dump($data);
+        $line = __LINE__ - 1;
+
+        ob_start();
+        $collector->collect(new Request(), new Response());
+        $output = ob_get_clean();
+
+        if (PHP_VERSION_ID >= 50400) {
+            $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n123\n", $output);
+        } else {
+            $this->assertSame("\"DumpDataCollectorTest.php on line {$line}:\"\n123\n", $output);
+        }
+        $this->assertSame(1, $collector->getDumpsCount());
+        $collector->serialize();
+    }
+
+    public function testCollectHtml()
+    {
+        $data = new Data(array(array(123)));
+
+        $collector = new DumpDataCollector(null, 'test://%f:%l');
+
+        $collector->dump($data);
+        $line = __LINE__ - 1;
+        $file = __FILE__;
+        if (PHP_VERSION_ID >= 50400) {
+            $xOutput = <<<EOTXT
+ <pre class=sf-dump id=sf-dump data-indent-pad="  "><a href="test://{$file}:{$line}" title="{$file}"><span class=sf-dump-meta>DumpDataCollectorTest.php</span></a> on line <span class=sf-dump-meta>{$line}</span>:
+<span class=sf-dump-num>123</span>
+</pre>
+
+EOTXT;
+        } else {
+            $len = strlen("DumpDataCollectorTest.php on line {$line}:");
+            $xOutput = <<<EOTXT
+ <pre class=sf-dump id=sf-dump data-indent-pad="  ">"<span class=sf-dump-str title="{$len} characters">DumpDataCollectorTest.php on line {$line}:</span>"
+</pre>
+<pre class=sf-dump id=sf-dump data-indent-pad="  "><span class=sf-dump-num>123</span>
+</pre>
+
+EOTXT;
+        }
+
+        ob_start();
+        $response = new Response();
+        $response->headers->set('Content-Type', 'text/html');
+        $collector->collect(new Request(), $response);
+        $output = ob_get_clean();
+        $output = preg_replace('#<(script|style).*?</\1>#s', '', $output);
+        $output = preg_replace('/sf-dump-\d+/', 'sf-dump', $output);
+
+        $this->assertSame($xOutput, $output);
+        $this->assertSame(1, $collector->getDumpsCount());
+        $collector->serialize();
+    }
+
+    public function testFlush()
+    {
+        $data = new Data(array(array(456)));
+        $collector = new DumpDataCollector();
+        $collector->dump($data);
+        $line = __LINE__ - 1;
+
+        ob_start();
+        $collector = null;
+        if (PHP_VERSION_ID >= 50400) {
+            $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n456\n", ob_get_clean());
+        } else {
+            $this->assertSame("\"DumpDataCollectorTest.php on line {$line}:\"\n456\n", ob_get_clean());
+        }
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/ExceptionDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/ExceptionDataCollectorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/ExceptionDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/ExceptionDataCollectorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/MemoryDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/MemoryDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/Util/ValueExporterTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DataCollector/Util/ValueExporterTest.php
rename to core/vendor/symfony/http-kernel/Tests/DataCollector/Util/ValueExporterTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php b/core/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
similarity index 86%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php
rename to core/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
index c2cafc37b8cfa18cc030f369caa8adc6bc07c0d3..f64d7247c0b4874ca2113894dbc919d1715f6438 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
@@ -93,6 +93,19 @@ public function testAddListenerNested()
         $this->assertTrue($called2);
     }
 
+    public function testListenerCanRemoveItselfWhenExecuted()
+    {
+        $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
+        $listener1 = function () use ($eventDispatcher, &$listener1) {
+            $eventDispatcher->removeListener('foo', $listener1);
+        };
+        $eventDispatcher->addListener('foo', $listener1);
+        $eventDispatcher->addListener('foo', function () {});
+        $eventDispatcher->dispatch('foo');
+
+        $this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
+    }
+
     protected function getHttpKernel($dispatcher, $controller)
     {
         $resolver = $this->getMock('Symfony\Component\HttpKernel\Controller\ControllerResolverInterface');
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
rename to core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
index 83182e63eae5bf55a4e75bb84028067a866024a1..d64cf68a4190d864314b32543b4928ebec8395c8 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
@@ -18,6 +18,9 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 
+/**
+ * @group legacy
+ */
 class ContainerAwareHttpKernelTest extends \PHPUnit_Framework_TestCase
 {
     /**
diff --git a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a46a07cf1d989b504f46fa5d2445c954fe0dbba7
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
@@ -0,0 +1,162 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass;
+use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface;
+
+class FragmentRendererPassTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @group legacy
+     */
+    public function testLegacyFragmentRedererWithoutAlias()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        // no alias
+        $services = array(
+            'my_content_renderer' => array(array()),
+        );
+
+        $renderer = $this->getMock('Symfony\Component\DependencyInjection\Definition');
+        $renderer
+            ->expects($this->once())
+            ->method('addMethodCall')
+            ->with('addRenderer', array(new Reference('my_content_renderer')))
+        ;
+
+        $definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
+        $definition->expects($this->atLeastOnce())
+            ->method('getClass')
+            ->will($this->returnValue('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService'));
+        $definition
+            ->expects($this->once())
+            ->method('isPublic')
+            ->will($this->returnValue(true))
+        ;
+
+        $builder = $this->getMock(
+            'Symfony\Component\DependencyInjection\ContainerBuilder',
+            array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
+        );
+        $builder->expects($this->any())
+            ->method('hasDefinition')
+            ->will($this->returnValue(true));
+
+        // We don't test kernel.fragment_renderer here
+        $builder->expects($this->atLeastOnce())
+            ->method('findTaggedServiceIds')
+            ->will($this->returnValue($services));
+
+        $builder->expects($this->atLeastOnce())
+            ->method('getDefinition')
+            ->will($this->onConsecutiveCalls($renderer, $definition));
+
+        $pass = new FragmentRendererPass();
+        $pass->process($builder);
+    }
+
+    /**
+     * Tests that content rendering not implementing FragmentRendererInterface
+     * trigger an exception.
+     *
+     * @expectedException \InvalidArgumentException
+     */
+    public function testContentRendererWithoutInterface()
+    {
+        // one service, not implementing any interface
+        $services = array(
+            'my_content_renderer' => array(array('alias' => 'foo')),
+        );
+
+        $definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
+
+        $builder = $this->getMock(
+            'Symfony\Component\DependencyInjection\ContainerBuilder',
+            array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
+        );
+        $builder->expects($this->any())
+            ->method('hasDefinition')
+            ->will($this->returnValue(true));
+
+        // We don't test kernel.fragment_renderer here
+        $builder->expects($this->atLeastOnce())
+            ->method('findTaggedServiceIds')
+            ->will($this->returnValue($services));
+
+        $builder->expects($this->atLeastOnce())
+            ->method('getDefinition')
+            ->will($this->returnValue($definition));
+
+        $pass = new FragmentRendererPass();
+        $pass->process($builder);
+    }
+
+    public function testValidContentRenderer()
+    {
+        $services = array(
+            'my_content_renderer' => array(array('alias' => 'foo')),
+        );
+
+        $renderer = $this->getMock('Symfony\Component\DependencyInjection\Definition');
+        $renderer
+            ->expects($this->once())
+            ->method('addMethodCall')
+            ->with('addRendererService', array('foo', 'my_content_renderer'))
+        ;
+
+        $definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
+        $definition->expects($this->atLeastOnce())
+            ->method('getClass')
+            ->will($this->returnValue('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService'));
+        $definition
+            ->expects($this->once())
+            ->method('isPublic')
+            ->will($this->returnValue(true))
+        ;
+
+        $builder = $this->getMock(
+            'Symfony\Component\DependencyInjection\ContainerBuilder',
+            array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
+        );
+        $builder->expects($this->any())
+            ->method('hasDefinition')
+            ->will($this->returnValue(true));
+
+        // We don't test kernel.fragment_renderer here
+        $builder->expects($this->atLeastOnce())
+            ->method('findTaggedServiceIds')
+            ->will($this->returnValue($services));
+
+        $builder->expects($this->atLeastOnce())
+            ->method('getDefinition')
+            ->will($this->onConsecutiveCalls($renderer, $definition));
+
+        $pass = new FragmentRendererPass();
+        $pass->process($builder);
+    }
+}
+
+class RendererService implements FragmentRendererInterface
+{
+    public function render($uri, Request $request = null, array $options = array())
+    {
+    }
+
+    public function getName()
+    {
+        return 'test';
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..581db45658902ddd962fc429923305c07e0ccebb
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
+
+use Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+
+class LazyLoadingFragmentHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function test()
+    {
+        $renderer = $this->getMock('Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface');
+        $renderer->expects($this->once())->method('getName')->will($this->returnValue('foo'));
+        $renderer->expects($this->any())->method('render')->will($this->returnValue(new Response()));
+
+        $requestStack = $this->getMock('Symfony\Component\HttpFoundation\RequestStack');
+        $requestStack->expects($this->any())->method('getCurrentRequest')->will($this->returnValue(Request::create('/')));
+
+        $container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
+        $container->expects($this->once())->method('get')->will($this->returnValue($renderer));
+
+        $handler = new LazyLoadingFragmentHandler($container, false, $requestStack);
+        $handler->addRendererService('foo', 'foo');
+
+        $handler->render('/foo', 'foo');
+
+        // second call should not lazy-load anymore (see once() above on the get() method)
+        $handler->render('/foo', 'foo');
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DependencyInjection/MergeExtensionConfigurationPassTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/MergeExtensionConfigurationPassTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/DependencyInjection/MergeExtensionConfigurationPassTest.php
rename to core/vendor/symfony/http-kernel/Tests/DependencyInjection/MergeExtensionConfigurationPassTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/AddRequestFormatsListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/AddRequestFormatsListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/DebugHandlersListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/DebugHandlersListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/DumpListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/DumpListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/DumpListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
similarity index 96%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
index 86244df0fc67dcb19702b988756e8a400b21d64d..8fb00f51c1e6e46137fe1a265d267899f6d10887 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
@@ -57,6 +57,7 @@ public function testHandleWithoutLogger($event, $event2)
             $this->fail('RuntimeException expected');
         } catch (\RuntimeException $e) {
             $this->assertSame('bar', $e->getMessage());
+            $this->assertSame('foo', $e->getPrevious()->getMessage());
         }
     }
 
@@ -77,6 +78,7 @@ public function testHandleWithLogger($event, $event2)
             $this->fail('RuntimeException expected');
         } catch (\RuntimeException $e) {
             $this->assertSame('bar', $e->getMessage());
+            $this->assertSame('foo', $e->getPrevious()->getMessage());
         }
 
         $this->assertEquals(3, $logger->countErrors());
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/FragmentListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
similarity index 78%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/FragmentListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
index 7ddb2fbbf2d6a35bf336a78276346e0d14b22b41..18edee6123c79edcc2fd1c078c40edfcf769e6d7 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/FragmentListenerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
@@ -34,6 +34,22 @@ public function testOnlyTriggeredOnFragmentRoute()
         $this->assertTrue($request->query->has('_path'));
     }
 
+
+    public function testOnlyTriggeredIfControllerWasNotDefinedYet()
+    {
+        $request = Request::create('http://example.com/_fragment?_path=foo%3Dbar%26_controller%3Dfoo');
+        $request->attributes->set('_controller', 'bar');
+
+        $listener = new FragmentListener(new UriSigner('foo'));
+        $event = $this->createGetResponseEvent($request, HttpKernelInterface::SUB_REQUEST);
+
+        $expected = $request->attributes->all();
+
+        $listener->onKernelRequest($event);
+
+        $this->assertEquals($expected, $request->attributes->all());
+    }
+
     /**
      * @expectedException \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
      */
@@ -74,8 +90,8 @@ public function testWithSignature()
         $this->assertFalse($request->query->has('_path'));
     }
 
-    private function createGetResponseEvent(Request $request)
+    private function createGetResponseEvent(Request $request, $requestType = HttpKernelInterface::MASTER_REQUEST)
     {
-        return new GetResponseEvent($this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, HttpKernelInterface::MASTER_REQUEST);
+        return new GetResponseEvent($this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, $requestType);
     }
 }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/LocaleListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/LocaleListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/LocaleListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/LocaleListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ProfilerListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ProfilerListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ResponseListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/ResponseListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ResponseListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/ResponseListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/RouterListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/RouterListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/SurrogateListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/SurrogateListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/SurrogateListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/SurrogateListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/TranslatorListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/TranslatorListenerTest.php
rename to core/vendor/symfony/http-kernel/Tests/EventListener/TranslatorListenerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/BaseBundle/Resources/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/BaseBundle/Resources/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/BaseBundle/Resources/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/BaseBundle/Resources/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/BaseBundle/Resources/hide.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/BaseBundle/Resources/hide.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/BaseBundle/Resources/hide.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/BaseBundle/Resources/hide.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/Resources/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/Resources/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/Resources/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/Resources/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/bar.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/bar.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/bar.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/bar.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle1Bundle/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle2Bundle/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle2Bundle/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Bundle2Bundle/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Bundle2Bundle/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ChildBundle/Resources/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ChildBundle/Resources/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ChildBundle/Resources/hide.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/hide.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ChildBundle/Resources/hide.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/hide.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionAbsentBundle/ExtensionAbsentBundle.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionAbsentBundle/ExtensionAbsentBundle.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionAbsentBundle/ExtensionAbsentBundle.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionAbsentBundle/ExtensionAbsentBundle.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php
diff --git a/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/DependencyInjection/ExtensionNotValidExtension.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/DependencyInjection/ExtensionNotValidExtension.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fd64316fbfcfc72b489e65176f0e379ec230b53
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/DependencyInjection/ExtensionNotValidExtension.php
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionNotValidBundle\DependencyInjection;
+
+class ExtensionNotValidExtension
+{
+    public function getAlias()
+    {
+        return 'extension_not_valid';
+    }
+}
diff --git a/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/ExtensionNotValidBundle.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/ExtensionNotValidBundle.php
new file mode 100644
index 0000000000000000000000000000000000000000..34e2920392be07f26a23e77408278d91f1b4ad74
--- /dev/null
+++ b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionNotValidBundle/ExtensionNotValidBundle.php
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionNotValidBundle;
+
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+class ExtensionNotValidBundle extends Bundle
+{
+}
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/FooCommand.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/FooCommand.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/FooCommand.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/FooCommand.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/DependencyInjection/ExtensionPresentExtension.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/DependencyInjection/ExtensionPresentExtension.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/DependencyInjection/ExtensionPresentExtension.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/DependencyInjection/ExtensionPresentExtension.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/ExtensionPresentBundle.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/ExtensionPresentBundle.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/ExtensionPresentBundle.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/ExtensionPresentBundle.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/FooBarBundle.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/FooBarBundle.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/FooBarBundle.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/FooBarBundle.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForOverrideName.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/KernelForOverrideName.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForOverrideName.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/KernelForOverrideName.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTest.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/BaseBundle/hide.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/BaseBundle/hide.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/BaseBundle/hide.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/BaseBundle/hide.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/Bundle1Bundle/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/Bundle1Bundle/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/Bundle1Bundle/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/Bundle1Bundle/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/ChildBundle/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/ChildBundle/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/ChildBundle/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/ChildBundle/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/FooBundle/foo.txt b/core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/FooBundle/foo.txt
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/Resources/FooBundle/foo.txt
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/Resources/FooBundle/foo.txt
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/TestClient.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/TestClient.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/TestClient.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/TestClient.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/TestEventDispatcher.php b/core/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/TestEventDispatcher.php
rename to core/vendor/symfony/http-kernel/Tests/Fixtures/TestEventDispatcher.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php b/core/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php
rename to core/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTestCase.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTestCase.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTestCase.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/StoreTest.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
similarity index 95%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/StoreTest.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
index cf4e4b5985049b3a7796dcbd7edbe210559abe9f..4198ce40313401183abad75a332fef6c8cdb73c5 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/StoreTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
@@ -168,6 +168,16 @@ public function testDoesNotReturnEntriesThatVaryWithLookup()
         $this->assertNull($this->store->lookup($req2));
     }
 
+    public function testDoesNotReturnEntriesThatSlightlyVaryWithLookup()
+    {
+        $req1 = Request::create('/test', 'get', array(), array(), array(), array('HTTP_FOO' => 'Foo', 'HTTP_BAR' => 'Bar'));
+        $req2 = Request::create('/test', 'get', array(), array(), array(), array('HTTP_FOO' => 'Foo', 'HTTP_BAR' => 'Bam'));
+        $res = new Response('test', 200, array('Vary' => array('Foo', 'Bar')));
+        $this->store->write($req1, $res);
+
+        $this->assertNull($this->store->lookup($req2));
+    }
+
     public function testStoresMultipleResponsesForEachVaryCombination()
     {
         $req1 = Request::create('/test', 'get', array(), array(), array(), array('HTTP_FOO' => 'Foo', 'HTTP_BAR' => 'Bar'));
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/TestHttpKernel.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/TestHttpKernel.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/TestHttpKernel.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/TestHttpKernel.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/TestMultipleHttpKernel.php b/core/vendor/symfony/http-kernel/Tests/HttpCache/TestMultipleHttpKernel.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpCache/TestMultipleHttpKernel.php
rename to core/vendor/symfony/http-kernel/Tests/HttpCache/TestMultipleHttpKernel.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/core/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
similarity index 92%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php
rename to core/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
index 700b111228beea542d8a7e92542c6b77caa97fcd..97e68f66f979ad3aea53b8b2ffd28fca5f4aad2c 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
@@ -26,7 +26,7 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
     /**
      * @expectedException \RuntimeException
      */
-    public function testHandleWhenControllerThrowsAnExceptionAndRawIsTrue()
+    public function testHandleWhenControllerThrowsAnExceptionAndCatchIsTrue()
     {
         $kernel = new HttpKernel(new EventDispatcher(), $this->getResolver(function () { throw new \RuntimeException(); }));
 
@@ -36,14 +36,14 @@ public function testHandleWhenControllerThrowsAnExceptionAndRawIsTrue()
     /**
      * @expectedException \RuntimeException
      */
-    public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalseAndNoListenerIsRegistered()
+    public function testHandleWhenControllerThrowsAnExceptionAndCatchIsFalseAndNoListenerIsRegistered()
     {
         $kernel = new HttpKernel(new EventDispatcher(), $this->getResolver(function () { throw new \RuntimeException(); }));
 
         $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, false);
     }
 
-    public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalse()
+    public function testHandleWhenControllerThrowsAnExceptionAndCatchIsTrueWithAHandlingListener()
     {
         $dispatcher = new EventDispatcher();
         $dispatcher->addListener(KernelEvents::EXCEPTION, function ($event) {
@@ -51,12 +51,31 @@ public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalse()
         });
 
         $kernel = new HttpKernel($dispatcher, $this->getResolver(function () { throw new \RuntimeException('foo'); }));
-        $response = $kernel->handle(new Request());
+        $response = $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, true);
 
         $this->assertEquals('500', $response->getStatusCode());
         $this->assertEquals('foo', $response->getContent());
     }
 
+    public function testHandleWhenControllerThrowsAnExceptionAndCatchIsTrueWithANonHandlingListener()
+    {
+        $exception = new \RuntimeException();
+
+        $dispatcher = new EventDispatcher();
+        $dispatcher->addListener(KernelEvents::EXCEPTION, function ($event) {
+            // should set a response, but does not
+        });
+
+        $kernel = new HttpKernel($dispatcher, $this->getResolver(function () use ($exception) { throw $exception; }));
+
+        try {
+            $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, true);
+            $this->fail('LogicException expected');
+        } catch (\RuntimeException $e) {
+            $this->assertSame($exception, $e);
+        }
+    }
+
     public function testHandleExceptionWithARedirectionResponse()
     {
         $dispatcher = new EventDispatcher();
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/KernelTest.php b/core/vendor/symfony/http-kernel/Tests/KernelTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/KernelTest.php
rename to core/vendor/symfony/http-kernel/Tests/KernelTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Logger.php b/core/vendor/symfony/http-kernel/Tests/Logger.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Logger.php
rename to core/vendor/symfony/http-kernel/Tests/Logger.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/AbstractProfilerStorageTest.php
similarity index 93%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/AbstractProfilerStorageTest.php
index 07dff696d60f9c9cf902a02b79196530275f9c4a..dc361ed0f08ad890c29471ba0d8eff4fae809112 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Profiler/AbstractProfilerStorageTest.php
@@ -17,7 +17,7 @@ abstract class AbstractProfilerStorageTest extends \PHPUnit_Framework_TestCase
 {
     public function testStore()
     {
-        for ($i = 0; $i < 10; $i++) {
+        for ($i = 0; $i < 10; ++$i) {
             $profile = new Profile('token_'.$i);
             $profile->setIp('127.0.0.1');
             $profile->setUrl('http://foo.bar');
@@ -159,7 +159,7 @@ public function testStoreTime()
         $dt = new \DateTime('now');
         $start = $dt->getTimestamp();
 
-        for ($i = 0; $i < 3; $i++) {
+        for ($i = 0; $i < 3; ++$i) {
             $dt->modify('+1 minute');
             $profile = new Profile('time_'.$i);
             $profile->setIp('127.0.0.1');
@@ -181,7 +181,7 @@ public function testStoreTime()
 
     public function testRetrieveByEmptyUrlAndIp()
     {
-        for ($i = 0; $i < 5; $i++) {
+        for ($i = 0; $i < 5; ++$i) {
             $profile = new Profile('token_'.$i);
             $profile->setMethod('GET');
             $this->getStorage()->write($profile);
@@ -193,7 +193,7 @@ public function testRetrieveByEmptyUrlAndIp()
     public function testRetrieveByMethodAndLimit()
     {
         foreach (array('POST', 'GET') as $method) {
-            for ($i = 0; $i < 5; $i++) {
+            for ($i = 0; $i < 5; ++$i) {
                 $profile = new Profile('token_'.$i.$method);
                 $profile->setMethod($method);
                 $this->getStorage()->write($profile);
@@ -233,7 +233,7 @@ public function testPurge()
 
     public function testDuplicates()
     {
-        for ($i = 1; $i <= 5; $i++) {
+        for ($i = 1; $i <= 5; ++$i) {
             $profile = new Profile('foo'.$i);
             $profile->setIp('127.0.0.1');
             $profile->setUrl('http://example.net/');
@@ -247,6 +247,22 @@ public function testDuplicates()
         $this->assertCount(3, $this->getStorage()->find('127.0.0.1', 'http://example.net/', 3, 'GET'), '->find() method returns incorrect number of entries');
     }
 
+    public function testStatusCode()
+    {
+        $profile = new Profile('token1');
+        $profile->setStatusCode(200);
+        $this->getStorage()->write($profile);
+
+        $profile = new Profile('token2');
+        $profile->setStatusCode(404);
+        $this->getStorage()->write($profile);
+
+        $tokens = $this->getStorage()->find('', '', 10, '');
+        $this->assertCount(2, $tokens);
+        $this->assertContains($tokens[0]['status_code'], array(200, 404));
+        $this->assertContains($tokens[1]['status_code'], array(200, 404));
+    }
+
     /**
      * @return \Symfony\Component\HttpKernel\Profiler\ProfilerStorageInterface
      */
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/FileProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
similarity index 96%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/FileProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
index 6c7462141978669ac80d494cefdbfb1c76344c55..d5edc7003286e61671724b6b2f4b56d67ac69180 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/FileProfilerStorageTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
@@ -62,7 +62,7 @@ protected function getStorage()
     public function testMultiRowIndexFile()
     {
         $iteration = 3;
-        for ($i = 0; $i < $iteration; $i++) {
+        for ($i = 0; $i < $iteration; ++$i) {
             $profile = new Profile('token'.$i);
             $profile->setIp('127.0.0.'.$i);
             $profile->setUrl('http://foo.bar/'.$i);
@@ -74,7 +74,7 @@ public function testMultiRowIndexFile()
         }
 
         $handle = fopen(self::$tmpDir.'/index.csv', 'r');
-        for ($i = 0; $i < $iteration; $i++) {
+        for ($i = 0; $i < $iteration; ++$i) {
             $row = fgetcsv($handle);
             $this->assertEquals('token'.$i, $row[0]);
             $this->assertEquals('127.0.0.'.$i, $row[1]);
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MemcacheProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/MemcacheProfilerStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MemcacheProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/MemcacheProfilerStorageTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MemcachedProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/MemcachedProfilerStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MemcachedProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/MemcachedProfilerStorageTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/MemcacheMock.php b/core/vendor/symfony/http-kernel/Tests/Profiler/Mock/MemcacheMock.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/MemcacheMock.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/Mock/MemcacheMock.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/MemcachedMock.php b/core/vendor/symfony/http-kernel/Tests/Profiler/Mock/MemcachedMock.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/MemcachedMock.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/Mock/MemcachedMock.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/RedisMock.php b/core/vendor/symfony/http-kernel/Tests/Profiler/Mock/RedisMock.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/Mock/RedisMock.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/Mock/RedisMock.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MongoDbProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/MongoDbProfilerStorageTest.php
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MongoDbProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/MongoDbProfilerStorageTest.php
index c72732563c6727fa4e783b5173e5b012d4b28746..29525fe6bdf7dc8fc5e4960dec9c3ac0d9b5fd09 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/MongoDbProfilerStorageTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Profiler/MongoDbProfilerStorageTest.php
@@ -100,7 +100,7 @@ public function getDsns()
     public function testCleanup()
     {
         $dt = new \DateTime('-2 day');
-        for ($i = 0; $i < 3; $i++) {
+        for ($i = 0; $i < 3; ++$i) {
             $dt->modify('-1 day');
             $profile = new Profile('time_'.$i);
             $profile->setTime($dt->getTimestamp());
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/ProfilerTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
similarity index 93%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/ProfilerTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
index 43a89600212c87b8a91358fdf9a6378032823d26..023ed18bd92e771b7fa2702c128f67c2794c60a7 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/ProfilerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
@@ -26,14 +26,15 @@ public function testCollect()
     {
         $request = new Request();
         $request->query->set('foo', 'bar');
-        $response = new Response();
+        $response = new Response('', 204);
         $collector = new RequestDataCollector();
 
         $profiler = new Profiler($this->storage);
         $profiler->add($collector);
         $profile = $profiler->collect($request, $response);
 
-        $profile = $profiler->loadProfile($profile->getToken());
+        $this->assertSame(204, $profile->getStatusCode());
+        $this->assertSame('GET', $profile->getMethod());
         $this->assertEquals(array('foo' => 'bar'), $profiler->get('request')->getRequestQuery()->all());
     }
 
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/RedisProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/RedisProfilerStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/RedisProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/RedisProfilerStorageTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/SqliteProfilerStorageTest.php b/core/vendor/symfony/http-kernel/Tests/Profiler/SqliteProfilerStorageTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Profiler/SqliteProfilerStorageTest.php
rename to core/vendor/symfony/http-kernel/Tests/Profiler/SqliteProfilerStorageTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/TestHttpKernel.php b/core/vendor/symfony/http-kernel/Tests/TestHttpKernel.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/TestHttpKernel.php
rename to core/vendor/symfony/http-kernel/Tests/TestHttpKernel.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/UriSignerTest.php b/core/vendor/symfony/http-kernel/Tests/UriSignerTest.php
similarity index 100%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/UriSignerTest.php
rename to core/vendor/symfony/http-kernel/Tests/UriSignerTest.php
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/UriSigner.php b/core/vendor/symfony/http-kernel/UriSigner.php
similarity index 82%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/UriSigner.php
rename to core/vendor/symfony/http-kernel/UriSigner.php
index fa0d4571ad0214831c2e7ff9c8dd5d25adc2467b..6ddce8736b5aa0211555d386b691bcb5925c1e6a 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/UriSigner.php
+++ b/core/vendor/symfony/http-kernel/UriSigner.php
@@ -94,14 +94,14 @@ private function buildUrl(array $url, array $params = array())
         ksort($params);
         $url['query'] = http_build_query($params, '', '&');
 
-        $scheme   = isset($url['scheme']) ? $url['scheme'].'://' : '';
-        $host     = isset($url['host']) ? $url['host'] : '';
-        $port     = isset($url['port']) ? ':'.$url['port'] : '';
-        $user     = isset($url['user']) ? $url['user'] : '';
-        $pass     = isset($url['pass']) ? ':'.$url['pass']  : '';
-        $pass     = ($user || $pass) ? "$pass@" : '';
-        $path     = isset($url['path']) ? $url['path'] : '';
-        $query    = isset($url['query']) && $url['query'] ? '?'.$url['query'] : '';
+        $scheme = isset($url['scheme']) ? $url['scheme'].'://' : '';
+        $host = isset($url['host']) ? $url['host'] : '';
+        $port = isset($url['port']) ? ':'.$url['port'] : '';
+        $user = isset($url['user']) ? $url['user'] : '';
+        $pass = isset($url['pass']) ? ':'.$url['pass']  : '';
+        $pass = ($user || $pass) ? "$pass@" : '';
+        $path = isset($url['path']) ? $url['path'] : '';
+        $query = isset($url['query']) && $url['query'] ? '?'.$url['query'] : '';
         $fragment = isset($url['fragment']) ? '#'.$url['fragment'] : '';
 
         return $scheme.$user.$pass.$host.$port.$path.$query.$fragment;
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json b/core/vendor/symfony/http-kernel/composer.json
similarity index 83%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json
rename to core/vendor/symfony/http-kernel/composer.json
index f828dc48dda011e7effe0cc9c03bac771ff665f9..9c1cc0b61cf0e51cf4404f74f3016e7fc679e428 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json
+++ b/core/vendor/symfony/http-kernel/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony HttpKernel Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,11 +12,11 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3",
+        "php": ">=5.3.9",
         "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
         "symfony/http-foundation": "~2.5,>=2.5.4",
         "symfony/debug": "~2.6,>=2.6.2",
@@ -26,7 +26,7 @@
         "symfony/phpunit-bridge": "~2.7",
         "symfony/browser-kit": "~2.3",
         "symfony/class-loader": "~2.1",
-        "symfony/config": "~2.0,>=2.0.5",
+        "symfony/config": "~2.7",
         "symfony/console": "~2.3",
         "symfony/css-selector": "~2.0,>=2.0.5",
         "symfony/dependency-injection": "~2.2",
@@ -40,6 +40,9 @@
         "symfony/translation": "~2.0,>=2.0.5",
         "symfony/var-dumper": "~2.6"
     },
+    "conflict": {
+        "symfony/config": "<2.7"
+    },
     "suggest": {
         "symfony/browser-kit": "",
         "symfony/class-loader": "",
@@ -50,13 +53,12 @@
         "symfony/var-dumper": ""
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\HttpKernel\\": "" }
+        "psr-4": { "Symfony\\Component\\HttpKernel\\": "" }
     },
-    "target-dir": "Symfony/Component/HttpKernel",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/phpunit.xml.dist b/core/vendor/symfony/http-kernel/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/phpunit.xml.dist
rename to core/vendor/symfony/http-kernel/phpunit.xml.dist
index 7901a0b8b54336ab755f54fb474918127ff833f9..13149663e488ab5d69105dca983d731c1f3ceb68 100644
--- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/phpunit.xml.dist
+++ b/core/vendor/symfony/http-kernel/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony HttpKernel Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/CHANGELOG.md b/core/vendor/symfony/process/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/CHANGELOG.md
rename to core/vendor/symfony/process/CHANGELOG.md
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/ExceptionInterface.php b/core/vendor/symfony/process/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/ExceptionInterface.php
rename to core/vendor/symfony/process/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/InvalidArgumentException.php b/core/vendor/symfony/process/Exception/InvalidArgumentException.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/InvalidArgumentException.php
rename to core/vendor/symfony/process/Exception/InvalidArgumentException.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/LogicException.php b/core/vendor/symfony/process/Exception/LogicException.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/LogicException.php
rename to core/vendor/symfony/process/Exception/LogicException.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/ProcessFailedException.php b/core/vendor/symfony/process/Exception/ProcessFailedException.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/ProcessFailedException.php
rename to core/vendor/symfony/process/Exception/ProcessFailedException.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/ProcessTimedOutException.php b/core/vendor/symfony/process/Exception/ProcessTimedOutException.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/ProcessTimedOutException.php
rename to core/vendor/symfony/process/Exception/ProcessTimedOutException.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Exception/RuntimeException.php b/core/vendor/symfony/process/Exception/RuntimeException.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Exception/RuntimeException.php
rename to core/vendor/symfony/process/Exception/RuntimeException.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php b/core/vendor/symfony/process/ExecutableFinder.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php
rename to core/vendor/symfony/process/ExecutableFinder.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/LICENSE b/core/vendor/symfony/process/LICENSE
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/LICENSE
rename to core/vendor/symfony/process/LICENSE
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php b/core/vendor/symfony/process/PhpExecutableFinder.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php
rename to core/vendor/symfony/process/PhpExecutableFinder.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php b/core/vendor/symfony/process/PhpProcess.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
rename to core/vendor/symfony/process/PhpProcess.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php b/core/vendor/symfony/process/Pipes/AbstractPipes.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php
rename to core/vendor/symfony/process/Pipes/AbstractPipes.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php b/core/vendor/symfony/process/Pipes/PipesInterface.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php
rename to core/vendor/symfony/process/Pipes/PipesInterface.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php b/core/vendor/symfony/process/Pipes/UnixPipes.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php
rename to core/vendor/symfony/process/Pipes/UnixPipes.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php b/core/vendor/symfony/process/Pipes/WindowsPipes.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php
rename to core/vendor/symfony/process/Pipes/WindowsPipes.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Process.php b/core/vendor/symfony/process/Process.php
similarity index 98%
rename from core/vendor/symfony/process/Symfony/Component/Process/Process.php
rename to core/vendor/symfony/process/Process.php
index ba619ce1cc9688e1dd7112f6e057c8bdb11ff5a5..fdb395de825ffdcee6e1d33377ee99bed6da7c86 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/Process.php
+++ b/core/vendor/symfony/process/Process.php
@@ -1063,11 +1063,14 @@ public function setEnv(array $env)
      *
      * @return string|null The current contents
      *
-     * @deprecated Deprecated since version 2.5, to be removed in 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             Use setInput() instead.
      *             This method is deprecated in favor of getInput.
      */
     public function getStdin()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getInput() method instead.', E_USER_DEPRECATED);
+
         return $this->getInput();
     }
 
@@ -1088,14 +1091,16 @@ public function getInput()
      *
      * @return self The current Process instance
      *
-     * @deprecated Deprecated since version 2.5, to be removed in 3.0.
-     *             This method is deprecated in favor of setInput.
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             Use setInput() instead.
      *
      * @throws LogicException           In case the process is running
      * @throws InvalidArgumentException In case the argument is invalid
      */
     public function setStdin($stdin)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the setInput() method instead.', E_USER_DEPRECATED);
+
         return $this->setInput($stdin);
     }
 
@@ -1104,11 +1109,13 @@ public function setStdin($stdin)
      *
      * This content will be passed to the underlying process standard input.
      *
-     * @param string|null $input The content
+     * @param mixed $input The content
      *
      * @return self The current Process instance
      *
      * @throws LogicException In case the process is running
+     *
+     * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
      */
     public function setInput($input)
     {
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php b/core/vendor/symfony/process/ProcessBuilder.php
similarity index 97%
rename from core/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
rename to core/vendor/symfony/process/ProcessBuilder.php
index 5262ce25dd5145a6fea409611051ccdb288f9858..a782fd69e94dd715464dd82839f1351488461bee 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
+++ b/core/vendor/symfony/process/ProcessBuilder.php
@@ -167,11 +167,13 @@ public function addEnvironmentVariables(array $variables)
     /**
      * Sets the input of the process.
      *
-     * @param string|null $input The input as a string
+     * @param mixed $input The input as a string
      *
      * @return ProcessBuilder
      *
      * @throws InvalidArgumentException In case the argument is invalid
+     *
+     * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
      */
     public function setInput($input)
     {
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php b/core/vendor/symfony/process/ProcessUtils.php
similarity index 92%
rename from core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
rename to core/vendor/symfony/process/ProcessUtils.php
index 0f4cb89e6b483aa92c1d7bf3e05e86c1994ecb7f..488010bacf9388223a536eb7ac89afe43f3724aa 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
+++ b/core/vendor/symfony/process/ProcessUtils.php
@@ -48,7 +48,7 @@ public static function escapeArgument($argument)
             }
 
             $escapedArgument = '';
-            $quote =  false;
+            $quote = false;
             foreach (preg_split('/(")/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
                 if ('"' === $part) {
                     $escapedArgument .= '\\"';
@@ -83,6 +83,8 @@ public static function escapeArgument($argument)
      * @return string The validated input
      *
      * @throws InvalidArgumentException In case the input is not valid
+     *
+     * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
      */
     public static function validateInput($caller, $input)
     {
@@ -95,6 +97,8 @@ public static function validateInput($caller, $input)
             }
             // deprecated as of Symfony 2.5, to be removed in 3.0
             if (is_object($input) && method_exists($input, '__toString')) {
+                trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
                 return (string) $input;
             }
 
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/README.md b/core/vendor/symfony/process/README.md
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/README.md
rename to core/vendor/symfony/process/README.md
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/.gitignore b/core/vendor/symfony/process/Symfony/Component/Process/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/process/Symfony/Component/Process/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php b/core/vendor/symfony/process/Tests/AbstractProcessTest.php
similarity index 97%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
rename to core/vendor/symfony/process/Tests/AbstractProcessTest.php
index 2b9c36d08a73ddaf4bdcfd1ff12871c21693e562..2a4d583cb2b369bf36ca7210bd689ba903ecb3e2 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
+++ b/core/vendor/symfony/process/Tests/AbstractProcessTest.php
@@ -229,7 +229,25 @@ public function provideInputValues()
             array(null, null),
             array('24.5', 24.5),
             array('input data', 'input data'),
-            // to maintain BC, supposed to be removed in 3.0
+        );
+    }
+
+    /**
+     * @dataProvider provideLegacyInputValues
+     * @group legacy
+     */
+    public function testLegacyValidInput($expected, $value)
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $process = $this->getProcess('php -v');
+        $process->setInput($value);
+        $this->assertSame($expected, $process->getInput());
+    }
+
+    public function provideLegacyInputValues()
+    {
+        return array(
             array('stringifiable', new Stringifiable()),
         );
     }
@@ -800,9 +818,6 @@ public function testCheckTimeoutOnStartedProcess()
         $this->assertFalse($process->isSuccessful());
     }
 
-    /**
-     * @group idle-timeout
-     */
     public function testIdleTimeout()
     {
         $process = $this->getProcess('php -r "sleep(3);"');
@@ -820,21 +835,18 @@ public function testIdleTimeout()
         }
     }
 
-    /**
-     * @group idle-timeout
-     */
     public function testIdleTimeoutNotExceededWhenOutputIsSent()
     {
-        $process = $this->getProcess('php -r "echo \'foo\'; sleep(1); echo \'foo\'; sleep(1); echo \'foo\'; sleep(1); "');
+        $process = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }')));
         $process->setTimeout(2);
-        $process->setIdleTimeout(1.5);
+        $process->setIdleTimeout(1);
 
         try {
             $process->run();
             $this->fail('A timeout exception was expected.');
         } catch (ProcessTimedOutException $ex) {
-            $this->assertTrue($ex->isGeneralTimeout());
-            $this->assertFalse($ex->isIdleTimeout());
+            $this->assertTrue($ex->isGeneralTimeout(), 'A general timeout is expected.');
+            $this->assertFalse($ex->isIdleTimeout(), 'No idle timeout is expected.');
             $this->assertEquals(2, $ex->getExceededTimeout());
         }
     }
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/core/vendor/symfony/process/Tests/ExecutableFinderTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
rename to core/vendor/symfony/process/Tests/ExecutableFinderTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php b/core/vendor/symfony/process/Tests/NonStopableProcess.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php
rename to core/vendor/symfony/process/Tests/NonStopableProcess.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php b/core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php
rename to core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php b/core/vendor/symfony/process/Tests/PhpProcessTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php
rename to core/vendor/symfony/process/Tests/PhpProcessTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php b/core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
rename to core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/core/vendor/symfony/process/Tests/ProcessBuilderTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
rename to core/vendor/symfony/process/Tests/ProcessBuilderTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php b/core/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
rename to core/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessInSigchildEnvironment.php b/core/vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessInSigchildEnvironment.php
rename to core/vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php b/core/vendor/symfony/process/Tests/ProcessUtilsTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php
rename to core/vendor/symfony/process/Tests/ProcessUtilsTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php b/core/vendor/symfony/process/Tests/SigchildDisabledProcessTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php
rename to core/vendor/symfony/process/Tests/SigchildDisabledProcessTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php b/core/vendor/symfony/process/Tests/SigchildEnabledProcessTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php
rename to core/vendor/symfony/process/Tests/SigchildEnabledProcessTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php b/core/vendor/symfony/process/Tests/SignalListener.php
similarity index 96%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
rename to core/vendor/symfony/process/Tests/SignalListener.php
index 335ac6027e8e0b16a4a1aa6c8dbd4ab6b245d227..bd4d138b047612bbf58229cc4e0e232aaf2b4a0a 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
+++ b/core/vendor/symfony/process/Tests/SignalListener.php
@@ -10,7 +10,7 @@
 // ticks require activity to work - sleep(4); does not work
 while ($n < 400) {
     usleep(10000);
-    $n++;
+    ++$n;
 }
 
 return;
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php b/core/vendor/symfony/process/Tests/SimpleProcessTest.php
similarity index 100%
rename from core/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
rename to core/vendor/symfony/process/Tests/SimpleProcessTest.php
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/composer.json b/core/vendor/symfony/process/composer.json
similarity index 67%
rename from core/vendor/symfony/process/Symfony/Component/Process/composer.json
rename to core/vendor/symfony/process/composer.json
index 0c05fc788e5614da46d6cf79119f5c5f4f141948..d0cae4d8e0494ca45ea40c2c5a32903456c3a4fb 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/composer.json
+++ b/core/vendor/symfony/process/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Process Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,23 +12,22 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\Process\\": "" }
+        "psr-4": { "Symfony\\Component\\Process\\": "" }
     },
-    "target-dir": "Symfony/Component/Process",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist b/core/vendor/symfony/process/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
rename to core/vendor/symfony/process/phpunit.xml.dist
index 07b617be4b5d233944996d1fe4631700b7a2cd94..b5d605c2efbbe78d98abc9802518245914f422c3 100644
--- a/core/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
+++ b/core/vendor/symfony/process/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony Process Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Annotation/Route.php b/core/vendor/symfony/routing/Annotation/Route.php
similarity index 83%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Annotation/Route.php
rename to core/vendor/symfony/routing/Annotation/Route.php
index 90521c0be8e0d4968ec815dcdd67591c539601a9..af2158250c770669279e347de166904bdb46562d 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Annotation/Route.php
+++ b/core/vendor/symfony/routing/Annotation/Route.php
@@ -55,18 +55,22 @@ public function __construct(array $data)
     }
 
     /**
-     * @deprecated Deprecated in 2.2, to be removed in 3.0. Use setPath instead.
+     * @deprecated since version 2.2, to be removed in 3.0. Use setPath instead.
      */
     public function setPattern($pattern)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
+
         $this->path = $pattern;
     }
 
     /**
-     * @deprecated Deprecated in 2.2, to be removed in 3.0. Use getPath instead.
+     * @deprecated since version 2.2, to be removed in 3.0. Use getPath instead.
      */
     public function getPattern()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
+
         return $this->path;
     }
 
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/CHANGELOG.md b/core/vendor/symfony/routing/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/CHANGELOG.md
rename to core/vendor/symfony/routing/CHANGELOG.md
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/CompiledRoute.php b/core/vendor/symfony/routing/CompiledRoute.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/CompiledRoute.php
rename to core/vendor/symfony/routing/CompiledRoute.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/ExceptionInterface.php b/core/vendor/symfony/routing/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/ExceptionInterface.php
rename to core/vendor/symfony/routing/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/InvalidParameterException.php b/core/vendor/symfony/routing/Exception/InvalidParameterException.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/InvalidParameterException.php
rename to core/vendor/symfony/routing/Exception/InvalidParameterException.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/MethodNotAllowedException.php b/core/vendor/symfony/routing/Exception/MethodNotAllowedException.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/MethodNotAllowedException.php
rename to core/vendor/symfony/routing/Exception/MethodNotAllowedException.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/MissingMandatoryParametersException.php b/core/vendor/symfony/routing/Exception/MissingMandatoryParametersException.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/MissingMandatoryParametersException.php
rename to core/vendor/symfony/routing/Exception/MissingMandatoryParametersException.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/ResourceNotFoundException.php b/core/vendor/symfony/routing/Exception/ResourceNotFoundException.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/ResourceNotFoundException.php
rename to core/vendor/symfony/routing/Exception/ResourceNotFoundException.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php b/core/vendor/symfony/routing/Exception/RouteNotFoundException.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php
rename to core/vendor/symfony/routing/Exception/RouteNotFoundException.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/ConfigurableRequirementsInterface.php b/core/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/ConfigurableRequirementsInterface.php
rename to core/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/GeneratorDumper.php b/core/vendor/symfony/routing/Generator/Dumper/GeneratorDumper.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/GeneratorDumper.php
rename to core/vendor/symfony/routing/Generator/Dumper/GeneratorDumper.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/GeneratorDumperInterface.php b/core/vendor/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/GeneratorDumperInterface.php
rename to core/vendor/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php b/core/vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php
rename to core/vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php b/core/vendor/symfony/routing/Generator/UrlGenerator.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php
rename to core/vendor/symfony/routing/Generator/UrlGenerator.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGeneratorInterface.php b/core/vendor/symfony/routing/Generator/UrlGeneratorInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGeneratorInterface.php
rename to core/vendor/symfony/routing/Generator/UrlGeneratorInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/LICENSE b/core/vendor/symfony/routing/LICENSE
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/LICENSE
rename to core/vendor/symfony/routing/LICENSE
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationClassLoader.php b/core/vendor/symfony/routing/Loader/AnnotationClassLoader.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationClassLoader.php
rename to core/vendor/symfony/routing/Loader/AnnotationClassLoader.php
index 92abf3648ace1961deff6af4e4d7542ede0673d3..da881ef2956b8ce234fbc8a0f1728c2bb2a1ef61 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationClassLoader.php
+++ b/core/vendor/symfony/routing/Loader/AnnotationClassLoader.php
@@ -145,8 +145,8 @@ protected function addRoute(RouteCollection $collection, $annot, $globals, \Refl
         }
         $requirements = array_replace($globals['requirements'], $annot->getRequirements());
         $options = array_replace($globals['options'], $annot->getOptions());
-        $schemes = array_replace($globals['schemes'], $annot->getSchemes());
-        $methods = array_replace($globals['methods'], $annot->getMethods());
+        $schemes = array_merge($globals['schemes'], $annot->getSchemes());
+        $methods = array_merge($globals['methods'], $annot->getMethods());
 
         $host = $annot->getHost();
         if (null === $host) {
@@ -201,7 +201,7 @@ protected function getDefaultRouteName(\ReflectionClass $class, \ReflectionMetho
         if ($this->defaultRouteIndex > 0) {
             $name .= '_'.$this->defaultRouteIndex;
         }
-        $this->defaultRouteIndex++;
+        ++$this->defaultRouteIndex;
 
         return $name;
     }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationDirectoryLoader.php b/core/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationDirectoryLoader.php
rename to core/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationFileLoader.php b/core/vendor/symfony/routing/Loader/AnnotationFileLoader.php
similarity index 98%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationFileLoader.php
rename to core/vendor/symfony/routing/Loader/AnnotationFileLoader.php
index e54a0181c7861ff09d1f3d29e72392c643fcbdab..8ce57ac18ca54c8d612e258fa0dde05de9b746ec 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/AnnotationFileLoader.php
+++ b/core/vendor/symfony/routing/Loader/AnnotationFileLoader.php
@@ -88,7 +88,7 @@ protected function findClass($file)
         $class = false;
         $namespace = false;
         $tokens = token_get_all(file_get_contents($file));
-        for ($i = 0, $count = count($tokens); $i < $count; $i++) {
+        for ($i = 0, $count = count($tokens); $i < $count; ++$i) {
             $token = $tokens[$i];
 
             if (!is_array($token)) {
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/ClosureLoader.php b/core/vendor/symfony/routing/Loader/ClosureLoader.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/ClosureLoader.php
rename to core/vendor/symfony/routing/Loader/ClosureLoader.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/PhpFileLoader.php b/core/vendor/symfony/routing/Loader/PhpFileLoader.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/PhpFileLoader.php
rename to core/vendor/symfony/routing/Loader/PhpFileLoader.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/XmlFileLoader.php b/core/vendor/symfony/routing/Loader/XmlFileLoader.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/XmlFileLoader.php
rename to core/vendor/symfony/routing/Loader/XmlFileLoader.php
index 8a95f512861d21a75efefc04a29afa9fbde741e2..81bd5de6f12c3330970c164ddc08fdd7f42b9e9a 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/XmlFileLoader.php
+++ b/core/vendor/symfony/routing/Loader/XmlFileLoader.php
@@ -122,6 +122,8 @@ protected function parseRoute(RouteCollection $collection, \DOMElement $node, $p
                 throw new \InvalidArgumentException(sprintf('The <route> element in file "%s" cannot define both a "path" and a "pattern" attribute. Use only "path".', $path));
             }
 
+            trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
+
             $node->setAttribute('path', $node->getAttribute('pattern'));
             $node->removeAttribute('pattern');
         }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/YamlFileLoader.php b/core/vendor/symfony/routing/Loader/YamlFileLoader.php
similarity index 95%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/YamlFileLoader.php
rename to core/vendor/symfony/routing/Loader/YamlFileLoader.php
index 8de520cd224eb0334dfa971fc277116ab3948c1b..f004fd14ad65c50655cd451cea7012e6f8e6b51d 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/YamlFileLoader.php
+++ b/core/vendor/symfony/routing/Loader/YamlFileLoader.php
@@ -81,6 +81,8 @@ public function load($file, $type = null)
                     throw new \InvalidArgumentException(sprintf('The file "%s" cannot define both a "path" and a "pattern" attribute. Use only "path".', $path));
                 }
 
+                trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
+
                 $config['path'] = $config['pattern'];
                 unset($config['pattern']);
             }
@@ -104,7 +106,7 @@ public function load($file, $type = null)
      */
     public function supports($resource, $type = null)
     {
-        return is_string($resource) && 'yml' === pathinfo($resource, PATHINFO_EXTENSION) && (!$type || 'yaml' === $type);
+        return is_string($resource) && in_array(pathinfo($resource, PATHINFO_EXTENSION), array('yml', 'yaml'), true) && (!$type || 'yaml' === $type);
     }
 
     /**
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/schema/routing/routing-1.0.xsd b/core/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Loader/schema/routing/routing-1.0.xsd
rename to core/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php b/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
similarity index 92%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php
rename to core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
index 12cd3f026a9530d1740cd320fc846a5827b811b0..058ced4dedd5db68c5b05d7f5f55536f271ba5ee 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php
+++ b/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
@@ -11,12 +11,14 @@
 
 namespace Symfony\Component\Routing\Matcher;
 
+trigger_error('The '.__NAMESPACE__.'\ApacheUrlMatcher class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
+
 use Symfony\Component\Routing\Exception\MethodNotAllowedException;
 
 /**
  * ApacheUrlMatcher matches URL based on Apache mod_rewrite matching (see ApacheMatcherDumper).
  *
- * @deprecated Deprecated since version 2.5, to be removed in 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             The performance gains are minimal and it's very hard to replicate
  *             the behavior of PHP implementation.
  *
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
similarity index 93%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php
rename to core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
index 1bd4fac07ccf659a7ab8468b8228bd32854bb445..d1c14a6f815b447c7445be8fe480cd774897efdb 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
@@ -11,12 +11,14 @@
 
 namespace Symfony\Component\Routing\Matcher\Dumper;
 
+trigger_error('The '.__NAMESPACE__.'\ApacheMatcherDumper class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
+
 use Symfony\Component\Routing\Route;
 
 /**
  * Dumps a set of Apache mod_rewrite rules.
  *
- * @deprecated Deprecated since version 2.5, to be removed in 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             The performance gains are minimal and it's very hard to replicate
  *             the behavior of PHP implementation.
  *
@@ -63,7 +65,7 @@ public function dump(array $options = array())
 
             if (null !== $hostRegex && $prevHostRegex !== $hostRegex) {
                 $prevHostRegex = $hostRegex;
-                $hostRegexUnique++;
+                ++$hostRegexUnique;
 
                 $rule = array();
 
@@ -88,10 +90,7 @@ public function dump(array $options = array())
 
             $rules[] = $this->dumpRoute($name, $route, $options, $hostRegexUnique);
 
-            if ($req = $route->getRequirement('_method')) {
-                $methods = explode('|', strtoupper($req));
-                $methodVars = array_merge($methodVars, $methods);
-            }
+            $methodVars = array_merge($methodVars, $route->getMethods());
         }
         if (0 < count($methodVars)) {
             $rule = array('# 405 Method Not Allowed');
@@ -198,13 +197,11 @@ private function dumpRoute($name, $route, array $options, $hostRegexUnique)
      */
     private function getRouteMethods(Route $route)
     {
-        $methods = array();
-        if ($req = $route->getRequirement('_method')) {
-            $methods = explode('|', strtoupper($req));
-            // GET and HEAD are equivalent
-            if (in_array('GET', $methods) && !in_array('HEAD', $methods)) {
-                $methods[] = 'HEAD';
-            }
+        $methods = $route->getMethods();
+
+        // GET and HEAD are equivalent
+        if (in_array('GET', $methods) && !in_array('HEAD', $methods)) {
+            $methods[] = 'HEAD';
         }
 
         return $methods;
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperCollection.php b/core/vendor/symfony/routing/Matcher/Dumper/DumperCollection.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperCollection.php
rename to core/vendor/symfony/routing/Matcher/Dumper/DumperCollection.php
index ce3a6aa86e9e1951a510569458e0d3f707a019a4..f91df98476d95e20681bb88234003d72a044b51a 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperCollection.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/DumperCollection.php
@@ -50,7 +50,7 @@ public function all()
      */
     public function add($child)
     {
-        if ($child instanceof DumperCollection) {
+        if ($child instanceof self) {
             $child->setParent($this);
         }
         $this->children[] = $child;
@@ -64,7 +64,7 @@ public function add($child)
     public function setAll(array $children)
     {
         foreach ($children as $child) {
-            if ($child instanceof DumperCollection) {
+            if ($child instanceof self) {
                 $child->setParent($this);
             }
         }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperPrefixCollection.php b/core/vendor/symfony/routing/Matcher/Dumper/DumperPrefixCollection.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperPrefixCollection.php
rename to core/vendor/symfony/routing/Matcher/Dumper/DumperPrefixCollection.php
index c94377359fa2792001be48601f231c9ef85e9820..6a615f21adf425157070edafefcea0aab4e3f936 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperPrefixCollection.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/DumperPrefixCollection.php
@@ -66,7 +66,7 @@ public function addPrefixRoute(DumperRoute $route)
 
             // Prefix starts with route's prefix
             if ('' === $collection->prefix || 0 === strpos($prefix, $collection->prefix)) {
-                $child = new DumperPrefixCollection();
+                $child = new self();
                 $child->setPrefix(substr($prefix, 0, strlen($collection->prefix) + 1));
                 $collection->add($child);
 
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperRoute.php b/core/vendor/symfony/routing/Matcher/Dumper/DumperRoute.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/DumperRoute.php
rename to core/vendor/symfony/routing/Matcher/Dumper/DumperRoute.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/MatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/MatcherDumper.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/MatcherDumper.php
rename to core/vendor/symfony/routing/Matcher/Dumper/MatcherDumper.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/MatcherDumperInterface.php b/core/vendor/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/MatcherDumperInterface.php
rename to core/vendor/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php
rename to core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
index cefc3c9b034aa18609693f7a42db17442aa77322..de414480f22bf7e62da6fe48e7af12d39f324b9d 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
@@ -215,14 +215,11 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
         $hasTrailingSlash = false;
         $matches = false;
         $hostMatches = false;
-        $methods = array();
+        $methods = $route->getMethods();
 
-        if ($req = $route->getRequirement('_method')) {
-            $methods = explode('|', strtoupper($req));
-            // GET and HEAD are equivalent
-            if (in_array('GET', $methods) && !in_array('HEAD', $methods)) {
-                $methods[] = 'HEAD';
-            }
+        // GET and HEAD are equivalent
+        if (in_array('GET', $methods) && !in_array('HEAD', $methods)) {
+            $methods[] = 'HEAD';
         }
 
         $supportsTrailingSlash = $supportsRedirections && (!$methods || in_array('HEAD', $methods));
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php b/core/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php
rename to core/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcherInterface.php b/core/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcherInterface.php
rename to core/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RequestMatcherInterface.php b/core/vendor/symfony/routing/Matcher/RequestMatcherInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RequestMatcherInterface.php
rename to core/vendor/symfony/routing/Matcher/RequestMatcherInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php b/core/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
similarity index 90%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php
rename to core/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
index 35296c6c6e3ada078f3e4f5ee1a76b740292815e..ef4f24c6c65f227355f80a551516b83c1636b8ef 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php
+++ b/core/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
@@ -78,16 +78,16 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
             }
 
             // check HTTP method requirement
-            if ($req = $route->getRequirement('_method')) {
+            if ($requiredMethods = $route->getMethods()) {
                 // HEAD and GET are equivalent as per RFC
                 if ('HEAD' === $method = $this->context->getMethod()) {
                     $method = 'GET';
                 }
 
-                if (!in_array($method, $req = explode('|', strtoupper($req)))) {
-                    $this->allow = array_merge($this->allow, $req);
+                if (!in_array($method, $requiredMethods)) {
+                    $this->allow = array_merge($this->allow, $requiredMethods);
 
-                    $this->addTrace(sprintf('Method "%s" does not match the requirement ("%s")', $this->context->getMethod(), implode(', ', $req)), self::ROUTE_ALMOST_MATCHES, $name, $route);
+                    $this->addTrace(sprintf('Method "%s" does not match any of the required methods (%s)', $this->context->getMethod(), implode(', ', $requiredMethods)), self::ROUTE_ALMOST_MATCHES, $name, $route);
 
                     continue;
                 }
@@ -107,7 +107,7 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
                 $scheme = $this->context->getScheme();
 
                 if (!$route->hasScheme($scheme)) {
-                    $this->addTrace(sprintf('Scheme "%s" does not match any of the required schemes ("%s"); the user will be redirected to first required scheme', $scheme, implode(', ', $requiredSchemes)), self::ROUTE_ALMOST_MATCHES, $name, $route);
+                    $this->addTrace(sprintf('Scheme "%s" does not match any of the required schemes (%s); the user will be redirected to first required scheme', $scheme, implode(', ', $requiredSchemes)), self::ROUTE_ALMOST_MATCHES, $name, $route);
 
                     return true;
                 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcher.php b/core/vendor/symfony/routing/Matcher/UrlMatcher.php
similarity index 96%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcher.php
rename to core/vendor/symfony/routing/Matcher/UrlMatcher.php
index 3ed5ac7fb33a7b495be3836b9a24fb1220fe8448..c75414480ec2b98cced2e8541683af8aa300569b 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcher.php
+++ b/core/vendor/symfony/routing/Matcher/UrlMatcher.php
@@ -98,7 +98,7 @@ public function match($pathinfo)
         }
 
         throw 0 < count($this->allow)
-            ? new MethodNotAllowedException(array_unique(array_map('strtoupper', $this->allow)))
+            ? new MethodNotAllowedException(array_unique($this->allow))
             : new ResourceNotFoundException(sprintf('No routes found for "%s".', $pathinfo));
     }
 
@@ -152,14 +152,14 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
             }
 
             // check HTTP method requirement
-            if ($req = $route->getRequirement('_method')) {
+            if ($requiredMethods = $route->getMethods()) {
                 // HEAD and GET are equivalent as per RFC
                 if ('HEAD' === $method = $this->context->getMethod()) {
                     $method = 'GET';
                 }
 
-                if (!in_array($method, $req = explode('|', strtoupper($req)))) {
-                    $this->allow = array_merge($this->allow, $req);
+                if (!in_array($method, $requiredMethods)) {
+                    $this->allow = array_merge($this->allow, $requiredMethods);
 
                     continue;
                 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcherInterface.php b/core/vendor/symfony/routing/Matcher/UrlMatcherInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcherInterface.php
rename to core/vendor/symfony/routing/Matcher/UrlMatcherInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/README.md b/core/vendor/symfony/routing/README.md
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/README.md
rename to core/vendor/symfony/routing/README.md
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RequestContext.php b/core/vendor/symfony/routing/RequestContext.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RequestContext.php
rename to core/vendor/symfony/routing/RequestContext.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RequestContextAwareInterface.php b/core/vendor/symfony/routing/RequestContextAwareInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RequestContextAwareInterface.php
rename to core/vendor/symfony/routing/RequestContextAwareInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php b/core/vendor/symfony/routing/Route.php
similarity index 92%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Route.php
rename to core/vendor/symfony/routing/Route.php
index d2ddbd3932246f23f60a7766268b8cbdacfaeca1..a7b6ad1fd4733eefdd1b0cc0600271db7dbc597e 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php
+++ b/core/vendor/symfony/routing/Route.php
@@ -147,10 +147,12 @@ public function unserialize($serialized)
      *
      * @return string The pattern
      *
-     * @deprecated Deprecated in 2.2, to be removed in 3.0. Use getPath instead.
+     * @deprecated since version 2.2, to be removed in 3.0. Use getPath instead.
      */
     public function getPattern()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead.', E_USER_DEPRECATED);
+
         return $this->path;
     }
 
@@ -163,10 +165,12 @@ public function getPattern()
      *
      * @return Route The current Route instance
      *
-     * @deprecated Deprecated in 2.2, to be removed in 3.0. Use setPath instead.
+     * @deprecated since version 2.2, to be removed in 3.0. Use setPath instead.
      */
     public function setPattern($pattern)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead.', E_USER_DEPRECATED);
+
         return $this->setPath($pattern);
     }
 
@@ -544,6 +548,12 @@ public function addRequirements(array $requirements)
      */
     public function getRequirement($key)
     {
+        if ('_scheme' === $key) {
+            trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getSchemes() instead.', E_USER_DEPRECATED);
+        } elseif ('_method' === $key) {
+            trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getMethods() instead.', E_USER_DEPRECATED);
+        }
+
         return isset($this->requirements[$key]) ? $this->requirements[$key] : null;
     }
 
@@ -645,8 +655,12 @@ private function sanitizeRequirement($key, $regex)
 
         // this is to keep BC and will be removed in a future version
         if ('_scheme' === $key) {
+            trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setSchemes() method instead or the "schemes" option in the route definition.', E_USER_DEPRECATED);
+
             $this->setSchemes(explode('|', $regex));
         } elseif ('_method' === $key) {
+            trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setMethods() method instead or the "methods" option in the route definition.', E_USER_DEPRECATED);
+
             $this->setMethods(explode('|', $regex));
         }
 
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RouteCollection.php b/core/vendor/symfony/routing/RouteCollection.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RouteCollection.php
rename to core/vendor/symfony/routing/RouteCollection.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompiler.php b/core/vendor/symfony/routing/RouteCompiler.php
similarity index 98%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompiler.php
rename to core/vendor/symfony/routing/RouteCompiler.php
index e998b93e938aec1bb5706af562ef0de0f5eeea33..f6637da666b828de030fdee35ca747f41701ac11 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompiler.php
+++ b/core/vendor/symfony/routing/RouteCompiler.php
@@ -145,7 +145,7 @@ private static function compilePattern(Route $route, $pattern, $isHost)
         // find the first optional token
         $firstOptional = PHP_INT_MAX;
         if (!$isHost) {
-            for ($i = count($tokens) - 1; $i >= 0; $i--) {
+            for ($i = count($tokens) - 1; $i >= 0; --$i) {
                 $token = $tokens[$i];
                 if ('variable' === $token[0] && $route->hasDefault($token[3])) {
                     $firstOptional = $i;
@@ -157,7 +157,7 @@ private static function compilePattern(Route $route, $pattern, $isHost)
 
         // compute the matching regexp
         $regexp = '';
-        for ($i = 0, $nbToken = count($tokens); $i < $nbToken; $i++) {
+        for ($i = 0, $nbToken = count($tokens); $i < $nbToken; ++$i) {
             $regexp .= self::computeRegexp($tokens, $i, $firstOptional);
         }
 
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompilerInterface.php b/core/vendor/symfony/routing/RouteCompilerInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompilerInterface.php
rename to core/vendor/symfony/routing/RouteCompilerInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Router.php b/core/vendor/symfony/routing/Router.php
similarity index 74%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Router.php
rename to core/vendor/symfony/routing/Router.php
index c7c926d43c410ebd611c65a9bd8277ed884d8467..e2651ef8b93ae32985f4dcd88758aba32ce87511 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Router.php
+++ b/core/vendor/symfony/routing/Router.php
@@ -12,7 +12,9 @@
 namespace Symfony\Component\Routing;
 
 use Symfony\Component\Config\Loader\LoaderInterface;
-use Symfony\Component\Config\ConfigCache;
+use Symfony\Component\Config\ConfigCacheInterface;
+use Symfony\Component\Config\ConfigCacheFactoryInterface;
+use Symfony\Component\Config\ConfigCacheFactory;
 use Psr\Log\LoggerInterface;
 use Symfony\Component\Routing\Generator\ConfigurableRequirementsInterface;
 use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
@@ -71,6 +73,11 @@ class Router implements RouterInterface, RequestMatcherInterface
      */
     protected $logger;
 
+    /**
+     * @var ConfigCacheFactoryInterface|null
+     */
+    private $configCacheFactory;
+
     /**
      * @var ExpressionFunctionProviderInterface[]
      */
@@ -209,6 +216,16 @@ public function getContext()
         return $this->context;
     }
 
+    /**
+     * Sets the ConfigCache factory to use.
+     *
+     * @param ConfigCacheFactoryInterface $configCacheFactory The factory to use.
+     */
+    public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory)
+    {
+        $this->configCacheFactory = $configCacheFactory;
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -262,24 +279,29 @@ public function getMatcher()
         }
 
         $class = $this->options['matcher_cache_class'];
-        $cache = new ConfigCache($this->options['cache_dir'].'/'.$class.'.php', $this->options['debug']);
-        if (!$cache->isFresh()) {
-            $dumper = $this->getMatcherDumperInstance();
-            if (method_exists($dumper, 'addExpressionLanguageProvider')) {
-                foreach ($this->expressionLanguageProviders as $provider) {
-                    $dumper->addExpressionLanguageProvider($provider);
+        $baseClass = $this->options['matcher_base_class'];
+        $expressionLanguageProviders = $this->expressionLanguageProviders;
+        $that = $this; // required for PHP 5.3 where "$this" cannot be use()d in anonymous functions. Change in Symfony 3.0.
+
+        $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/'.$class.'.php',
+            function (ConfigCacheInterface $cache) use ($that, $class, $baseClass, $expressionLanguageProviders) {
+                $dumper = $that->getMatcherDumperInstance();
+                if (method_exists($dumper, 'addExpressionLanguageProvider')) {
+                    foreach ($expressionLanguageProviders as $provider) {
+                        $dumper->addExpressionLanguageProvider($provider);
+                    }
                 }
-            }
 
-            $options = array(
-                'class' => $class,
-                'base_class' => $this->options['matcher_base_class'],
-            );
+                $options = array(
+                    'class' => $class,
+                    'base_class' => $baseClass,
+                );
 
-            $cache->write($dumper->dump($options), $this->getRouteCollection()->getResources());
-        }
+                $cache->write($dumper->dump($options), $that->getRouteCollection()->getResources());
+            }
+        );
 
-        require_once $cache;
+        require_once $cache->getPath();
 
         return $this->matcher = new $class($this->context);
     }
@@ -299,19 +321,22 @@ public function getGenerator()
             $this->generator = new $this->options['generator_class']($this->getRouteCollection(), $this->context, $this->logger);
         } else {
             $class = $this->options['generator_cache_class'];
-            $cache = new ConfigCache($this->options['cache_dir'].'/'.$class.'.php', $this->options['debug']);
-            if (!$cache->isFresh()) {
-                $dumper = $this->getGeneratorDumperInstance();
-
-                $options = array(
-                    'class' => $class,
-                    'base_class' => $this->options['generator_base_class'],
-                );
-
-                $cache->write($dumper->dump($options), $this->getRouteCollection()->getResources());
-            }
+            $baseClass = $this->options['generator_base_class'];
+            $that = $this; // required for PHP 5.3 where "$this" cannot be use()d in anonymous functions. Change in Symfony 3.0.
+            $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/'.$class.'.php',
+                function (ConfigCacheInterface $cache) use ($that, $class, $baseClass) {
+                    $dumper = $that->getGeneratorDumperInstance();
+
+                    $options = array(
+                        'class' => $class,
+                        'base_class' => $baseClass,
+                    );
+
+                    $cache->write($dumper->dump($options), $that->getRouteCollection()->getResources());
+                }
+            );
 
-            require_once $cache;
+            require_once $cache->getPath();
 
             $this->generator = new $class($this->context, $this->logger);
         }
@@ -329,18 +354,37 @@ public function addExpressionLanguageProvider(ExpressionFunctionProviderInterfac
     }
 
     /**
+     * This method is public because it needs to be callable from a closure in PHP 5.3. It should be converted back to protected in 3.0.
+     * @internal
      * @return GeneratorDumperInterface
      */
-    protected function getGeneratorDumperInstance()
+    public function getGeneratorDumperInstance()
     {
         return new $this->options['generator_dumper_class']($this->getRouteCollection());
     }
 
     /**
+     * This method is public because it needs to be callable from a closure in PHP 5.3. It should be converted back to protected in 3.0.
+     * @internal
      * @return MatcherDumperInterface
      */
-    protected function getMatcherDumperInstance()
+    public function getMatcherDumperInstance()
     {
         return new $this->options['matcher_dumper_class']($this->getRouteCollection());
     }
+
+    /**
+     * Provides the ConfigCache factory implementation, falling back to a
+     * default implementation if necessary.
+     *
+     * @return ConfigCacheFactoryInterface $configCacheFactory
+     */
+    private function getConfigCacheFactory()
+    {
+        if (null === $this->configCacheFactory) {
+            $this->configCacheFactory = new ConfigCacheFactory($this->options['debug']);
+        }
+
+        return $this->configCacheFactory;
+    }
 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/RouterInterface.php b/core/vendor/symfony/routing/RouterInterface.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/RouterInterface.php
rename to core/vendor/symfony/routing/RouterInterface.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore b/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Annotation/RouteTest.php b/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
similarity index 87%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Annotation/RouteTest.php
rename to core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
index eb4d220451c2654f593d6c6be55b8ddbce1e23f4..5eda4064f0595176827fdd2cdb57f01961f5007f 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Annotation/RouteTest.php
+++ b/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
@@ -36,14 +36,14 @@ public function getValidParameters()
     {
         return array(
             array('value', '/Blog', 'getPath'),
-            array('requirements', array('_method' => 'GET'), 'getRequirements'),
+            array('requirements', array('locale' => 'en'), 'getRequirements'),
             array('options', array('compiler_class' => 'RouteCompiler'), 'getOptions'),
             array('name', 'blog_index', 'getName'),
             array('defaults', array('_controller' => 'MyBlogBundle:Blog:index'), 'getDefaults'),
             array('schemes', array('https'), 'getSchemes'),
             array('methods', array('GET', 'POST'), 'getMethods'),
-            array('host', array('{locale}.example.com'), 'getHost'),
-            array('condition', array('context.getMethod() == "GET"'), 'getCondition'),
+            array('host', '{locale}.example.com', 'getHost'),
+            array('condition', 'context.getMethod() == "GET"', 'getCondition'),
         );
     }
 
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/CompiledRouteTest.php b/core/vendor/symfony/routing/Tests/CompiledRouteTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/CompiledRouteTest.php
rename to core/vendor/symfony/routing/Tests/CompiledRouteTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/AbstractClass.php b/core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/AbstractClass.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/AbstractClass.php
rename to core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/AbstractClass.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/BarClass.php b/core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/BarClass.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/BarClass.php
rename to core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/BarClass.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/FooClass.php b/core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooClass.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/AnnotatedClasses/FooClass.php
rename to core/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooClass.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/CustomXmlFileLoader.php b/core/vendor/symfony/routing/Tests/Fixtures/CustomXmlFileLoader.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/CustomXmlFileLoader.php
rename to core/vendor/symfony/routing/Tests/Fixtures/CustomXmlFileLoader.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/RedirectableUrlMatcher.php b/core/vendor/symfony/routing/Tests/Fixtures/RedirectableUrlMatcher.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/RedirectableUrlMatcher.php
rename to core/vendor/symfony/routing/Tests/Fixtures/RedirectableUrlMatcher.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/annotated.php b/core/vendor/symfony/routing/Tests/Fixtures/annotated.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/annotated.php
rename to core/vendor/symfony/routing/Tests/Fixtures/annotated.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.apache b/core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher1.apache
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.apache
rename to core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher1.apache
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php b/core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher1.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php
rename to core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher1.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.apache b/core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher2.apache
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.apache
rename to core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher2.apache
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php b/core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher2.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php
rename to core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher2.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php b/core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher3.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php
rename to core/vendor/symfony/routing/Tests/Fixtures/dumper/url_matcher3.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/empty.yml b/core/vendor/symfony/routing/Tests/Fixtures/empty.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/empty.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/empty.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/foo.xml b/core/vendor/symfony/routing/Tests/Fixtures/foo.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/foo.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/foo.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/foo1.xml b/core/vendor/symfony/routing/Tests/Fixtures/foo1.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/foo1.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/foo1.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/incomplete.yml b/core/vendor/symfony/routing/Tests/Fixtures/incomplete.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/incomplete.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/incomplete.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.xml b/core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.xml
similarity index 64%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.xml
index a8221314cb5593fe7003a63a7bf3083a439c4884..a01ebca23ae0915d0754cdf9562733a048d73042 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.xml
+++ b/core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.xml
@@ -4,13 +4,6 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
 
-    <route id="blog_show" path="/blog/{slug}" host="{locale}.example.com" methods="GET|POST  put,OpTiOnS" schemes="hTTps">
-        <default key="_controller">MyBundle:Blog:show</default>
-        <requirement key="locale">\w+</requirement>
-        <option key="compiler_class">RouteCompiler</option>
-        <condition>context.getMethod() == "GET"</condition>
-    </route>
-
     <route id="blog_show_legacy" pattern="/blog/{slug}" host="{locale}.example.com">
         <default key="_controller">MyBundle:Blog:show</default>
         <default key="slug" xsi:nil="true" />
@@ -20,6 +13,4 @@
         <option key="compiler_class">RouteCompiler</option>
         <condition>context.getMethod() == "GET"</condition>
     </route>
-
-    <route id="blog_show_inherited" path="/blog/{slug}" />
 </routes>
diff --git a/core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.yml b/core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ada65f0568da12414bb51a6659421f38dbf64aff
--- /dev/null
+++ b/core/vendor/symfony/routing/Tests/Fixtures/legacy_validpattern.yml
@@ -0,0 +1,8 @@
+blog_show_legacy:
+    pattern:      /blog/{slug}
+    defaults:     { _controller: "MyBundle:Blog:show" }
+    host:         "{locale}.example.com"
+    requirements: { '_method': 'GET|POST|put|OpTiOnS', _scheme: https, 'locale': '\w+' }
+    condition:    'context.getMethod() == "GET"'
+    options:
+        compiler_class: RouteCompiler
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/missing_id.xml b/core/vendor/symfony/routing/Tests/Fixtures/missing_id.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/missing_id.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/missing_id.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/missing_path.xml b/core/vendor/symfony/routing/Tests/Fixtures/missing_path.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/missing_path.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/missing_path.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/namespaceprefix.xml b/core/vendor/symfony/routing/Tests/Fixtures/namespaceprefix.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/namespaceprefix.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/namespaceprefix.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonesense_resource_plus_path.yml b/core/vendor/symfony/routing/Tests/Fixtures/nonesense_resource_plus_path.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonesense_resource_plus_path.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonesense_resource_plus_path.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonesense_type_without_resource.yml b/core/vendor/symfony/routing/Tests/Fixtures/nonesense_type_without_resource.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonesense_type_without_resource.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonesense_type_without_resource.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid.xml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalid.xml
similarity index 88%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalid.xml
index 755e44304ce78fbf83e47cec142e0b2682c51568..dc147d2e67a25ca21f2b391370e5d4030a4667ff 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid.xml
+++ b/core/vendor/symfony/routing/Tests/Fixtures/nonvalid.xml
@@ -6,6 +6,5 @@
 
     <route id="blog_show" path="/blog/{slug}">
         <default key="_controller">MyBundle:Blog:show</default>
-        <requirement key="_method">GET</requirement>
     <!-- </route> -->
 </routes>
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid.yml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalid.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalid.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid2.yml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalid2.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalid2.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalid2.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidkeys.yml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalidkeys.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidkeys.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalidkeys.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidnode.xml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalidnode.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidnode.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalidnode.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidroute.xml b/core/vendor/symfony/routing/Tests/Fixtures/nonvalidroute.xml
similarity index 90%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidroute.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/nonvalidroute.xml
index a46961eee5f26caf926c8eb043281a8512329a46..908958c032d38024ec73093a3a79ebf9658afacf 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/nonvalidroute.xml
+++ b/core/vendor/symfony/routing/Tests/Fixtures/nonvalidroute.xml
@@ -6,7 +6,6 @@
 
     <route id="blog_show" path="/blog/{slug}">
         <default key="_controller">MyBundle:Blog:show</default>
-        <requirement key="_method">GET</requirement>
         <option key="compiler_class">RouteCompiler</option>
         <foo key="bar">baz</foo>
     </route>
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/null_values.xml b/core/vendor/symfony/routing/Tests/Fixtures/null_values.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/null_values.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/null_values.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/special_route_name.yml b/core/vendor/symfony/routing/Tests/Fixtures/special_route_name.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/special_route_name.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/special_route_name.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.php b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.php
similarity index 57%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.php
rename to core/vendor/symfony/routing/Tests/Fixtures/validpattern.php
index 08badb4418ada711335c5f065cea5ea26ecbffe2..edc16d8c2cb284eec5a570327009b4f6221f1016 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.php
+++ b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.php
@@ -14,15 +14,5 @@
     array('GET', 'POST', 'put', 'OpTiOnS'),
     'context.getMethod() == "GET"'
 ));
-$collection->add('blog_show_legacy', new Route(
-    '/blog/{slug}',
-    array('_controller' => 'MyBlogBundle:Blog:show'),
-    array('_method' => 'GET|POST|put|OpTiOnS', '_scheme' => 'https', 'locale' => '\w+'),
-    array('compiler_class' => 'RouteCompiler'),
-    '{locale}.example.com',
-    array(),
-    array(),
-    'context.getMethod() == "GET"'
-));
 
 return $collection;
diff --git a/core/vendor/symfony/routing/Tests/Fixtures/validpattern.xml b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dbc72e46ddd4df0510a001ebc686d3c7d4fc5534
--- /dev/null
+++ b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<routes xmlns="http://symfony.com/schema/routing"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
+
+    <route id="blog_show" path="/blog/{slug}" host="{locale}.example.com" methods="GET|POST  put,OpTiOnS" schemes="hTTps">
+        <default key="_controller">MyBundle:Blog:show</default>
+        <requirement key="locale">\w+</requirement>
+        <option key="compiler_class">RouteCompiler</option>
+        <condition>context.getMethod() == "GET"</condition>
+    </route>
+
+    <route id="blog_show_inherited" path="/blog/{slug}" />
+</routes>
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.yml b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.yml
similarity index 54%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/validpattern.yml
index 26136c3969d9cad483cd791cdb4ee849160822f5..565abaaa2c4678eaeb65b237cb83c8ba44690b23 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validpattern.yml
+++ b/core/vendor/symfony/routing/Tests/Fixtures/validpattern.yml
@@ -9,14 +9,5 @@ blog_show:
     options:
         compiler_class: RouteCompiler
 
-blog_show_legacy:
-    pattern:      /blog/{slug}
-    defaults:     { _controller: "MyBundle:Blog:show" }
-    host:         "{locale}.example.com"
-    requirements: { '_method': 'GET|POST|put|OpTiOnS', _scheme: https, 'locale': '\w+' }
-    condition:    'context.getMethod() == "GET"'
-    options:
-        compiler_class: RouteCompiler
-
 blog_show_inherited:
     path:      /blog/{slug}
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.php b/core/vendor/symfony/routing/Tests/Fixtures/validresource.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.php
rename to core/vendor/symfony/routing/Tests/Fixtures/validresource.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.xml b/core/vendor/symfony/routing/Tests/Fixtures/validresource.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/validresource.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.yml b/core/vendor/symfony/routing/Tests/Fixtures/validresource.yml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/validresource.yml
rename to core/vendor/symfony/routing/Tests/Fixtures/validresource.yml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/with_define_path_variable.php b/core/vendor/symfony/routing/Tests/Fixtures/with_define_path_variable.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/with_define_path_variable.php
rename to core/vendor/symfony/routing/Tests/Fixtures/with_define_path_variable.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/withdoctype.xml b/core/vendor/symfony/routing/Tests/Fixtures/withdoctype.xml
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Fixtures/withdoctype.xml
rename to core/vendor/symfony/routing/Tests/Fixtures/withdoctype.xml
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php b/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
similarity index 87%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
rename to core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
index 170c5b4dcf69c7f0681f84b64f77d66e1c3ded5b..6fbf7e220348b83908cd30bb55dea9bddab8a38c 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
+++ b/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
@@ -118,7 +118,6 @@ public function testDumpForRouteWithDefaults()
     public function testDumpWithSchemeRequirement()
     {
         $this->routeCollection->add('Test1', new Route('/testing', array(), array(), array(), '', array('ftp', 'https')));
-        $this->routeCollection->add('Test2', new Route('/testing_bc', array(), array('_scheme' => 'https'))); // BC
 
         file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump(array('class' => 'SchemeUrlGenerator')));
         include $this->testTmpFilepath;
@@ -126,25 +125,17 @@ public function testDumpWithSchemeRequirement()
         $projectUrlGenerator = new \SchemeUrlGenerator(new RequestContext('/app.php'));
 
         $absoluteUrl = $projectUrlGenerator->generate('Test1', array(), true);
-        $absoluteUrlBC = $projectUrlGenerator->generate('Test2', array(), true);
         $relativeUrl = $projectUrlGenerator->generate('Test1', array(), false);
-        $relativeUrlBC = $projectUrlGenerator->generate('Test2', array(), false);
 
         $this->assertEquals($absoluteUrl, 'ftp://localhost/app.php/testing');
-        $this->assertEquals($absoluteUrlBC, 'https://localhost/app.php/testing_bc');
         $this->assertEquals($relativeUrl, 'ftp://localhost/app.php/testing');
-        $this->assertEquals($relativeUrlBC, 'https://localhost/app.php/testing_bc');
 
         $projectUrlGenerator = new \SchemeUrlGenerator(new RequestContext('/app.php', 'GET', 'localhost', 'https'));
 
         $absoluteUrl = $projectUrlGenerator->generate('Test1', array(), true);
-        $absoluteUrlBC = $projectUrlGenerator->generate('Test2', array(), true);
         $relativeUrl = $projectUrlGenerator->generate('Test1', array(), false);
-        $relativeUrlBC = $projectUrlGenerator->generate('Test2', array(), false);
 
         $this->assertEquals($absoluteUrl, 'https://localhost/app.php/testing');
-        $this->assertEquals($absoluteUrlBC, 'https://localhost/app.php/testing_bc');
         $this->assertEquals($relativeUrl, '/app.php/testing');
-        $this->assertEquals($relativeUrlBC, '/app.php/testing_bc');
     }
 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php b/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
similarity index 95%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php
rename to core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
index 9419e133c8182af28f8104ae3df6f266718a0a21..0005e3a534679e74c66dac8a560cd7fd3947ce54 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php
+++ b/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
@@ -244,12 +244,6 @@ public function testRequiredParamAndEmptyPassed()
 
     public function testSchemeRequirementDoesNothingIfSameCurrentScheme()
     {
-        $routes = $this->getRoutes('test', new Route('/', array(), array('_scheme' => 'http'))); // BC
-        $this->assertEquals('/app.php/', $this->getGenerator($routes)->generate('test'));
-
-        $routes = $this->getRoutes('test', new Route('/', array(), array('_scheme' => 'https'))); // BC
-        $this->assertEquals('/app.php/', $this->getGenerator($routes, array('scheme' => 'https'))->generate('test'));
-
         $routes = $this->getRoutes('test', new Route('/', array(), array(), array(), '', array('http')));
         $this->assertEquals('/app.php/', $this->getGenerator($routes)->generate('test'));
 
@@ -259,12 +253,6 @@ public function testSchemeRequirementDoesNothingIfSameCurrentScheme()
 
     public function testSchemeRequirementForcesAbsoluteUrl()
     {
-        $routes = $this->getRoutes('test', new Route('/', array(), array('_scheme' => 'https'))); // BC
-        $this->assertEquals('https://localhost/app.php/', $this->getGenerator($routes)->generate('test'));
-
-        $routes = $this->getRoutes('test', new Route('/', array(), array('_scheme' => 'http'))); // BC
-        $this->assertEquals('http://localhost/app.php/', $this->getGenerator($routes, array('scheme' => 'https'))->generate('test'));
-
         $routes = $this->getRoutes('test', new Route('/', array(), array(), array(), '', array('https')));
         $this->assertEquals('https://localhost/app.php/', $this->getGenerator($routes)->generate('test'));
 
@@ -468,8 +456,13 @@ public function testHostIsCaseInsensitive()
         $this->assertSame('//EN.FooBar.com/app.php/', $generator->generate('test', array('locale' => 'EN'), UrlGeneratorInterface::NETWORK_PATH));
     }
 
-    public function testGenerateNetworkPathBC()
+    /**
+     * @group legacy
+     */
+    public function testLegacyGenerateNetworkPath()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $routes = $this->getRoutes('test', new Route('/{name}', array(), array('_scheme' => 'http'), array(), '{locale}.example.com'));
 
         $this->assertSame('//fr.example.com/app.php/Fabien', $this->getGenerator($routes)->generate('test',
@@ -510,7 +503,6 @@ public function testGenerateRelativePath()
         $routes->add('article', new Route('/{author}/{article}/'));
         $routes->add('comments', new Route('/{author}/{article}/comments'));
         $routes->add('host', new Route('/{article}', array(), array(), array(), '{author}.example.com'));
-        $routes->add('schemeBC', new Route('/{author}', array(), array('_scheme' => 'https'))); // BC
         $routes->add('scheme', new Route('/{author}/blog', array(), array(), array(), '', array('https')));
         $routes->add('unrelated', new Route('/about'));
 
@@ -531,9 +523,6 @@ public function testGenerateRelativePath()
         $this->assertSame('//bernhard.example.com/app.php/forms-are-great', $generator->generate('host',
             array('author' => 'bernhard', 'article' => 'forms-are-great'), UrlGeneratorInterface::RELATIVE_PATH)
         );
-        $this->assertSame('https://example.com/app.php/bernhard', $generator->generate('schemeBC',
-            array('author' => 'bernhard'), UrlGeneratorInterface::RELATIVE_PATH)
-        );
         $this->assertSame('https://example.com/app.php/bernhard/blog', $generator->generate('scheme',
                 array('author' => 'bernhard'), UrlGeneratorInterface::RELATIVE_PATH)
         );
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/AbstractAnnotationLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/AbstractAnnotationLoaderTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
similarity index 57%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
index 03ba15257e37afce32ded0c3ea32ca74df49fdc8..5f8f4945efe175976974332e3d438279a080fc99 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationClassLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
@@ -73,22 +73,27 @@ public function getLoadTests()
         return array(
             array(
                 'Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass',
-                array('name' => 'route1'),
+                array('name' => 'route1', 'path' => '/path'),
                 array('arg2' => 'defaultValue2', 'arg3' => 'defaultValue3'),
             ),
             array(
                 'Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass',
-                array('name' => 'route1', 'defaults' => array('arg2' => 'foo')),
+                array('defaults' => array('arg2' => 'foo'), 'requirements' => array('arg3' => '\w+')),
                 array('arg2' => 'defaultValue2', 'arg3' => 'defaultValue3'),
             ),
             array(
                 'Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass',
-                array('name' => 'route1', 'defaults' => array('arg2' => 'foobar')),
+                array('options' => array('foo' => 'bar')),
                 array('arg2' => 'defaultValue2', 'arg3' => 'defaultValue3'),
             ),
             array(
                 'Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass',
-                array('name' => 'route1', 'defaults' => array('arg2' => 'foo'), 'condition' => 'context.getMethod() == "GET"'),
+                array('schemes' => array('https'), 'methods' => array('GET')),
+                array('arg2' => 'defaultValue2', 'arg3' => 'defaultValue3'),
+            ),
+            array(
+                'Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass',
+                array('condition' => 'context.getMethod() == "GET"'),
                 array('arg2' => 'defaultValue2', 'arg3' => 'defaultValue3'),
             ),
         );
@@ -97,9 +102,9 @@ public function getLoadTests()
     /**
      * @dataProvider getLoadTests
      */
-    public function testLoad($className, $routeDatas = array(), $methodArgs = array())
+    public function testLoad($className, $routeData = array(), $methodArgs = array())
     {
-        $routeDatas = array_replace(array(
+        $routeData = array_replace(array(
             'name' => 'route',
             'path' => '/',
             'requirements' => array(),
@@ -107,52 +112,76 @@ public function testLoad($className, $routeDatas = array(), $methodArgs = array(
             'defaults' => array(),
             'schemes' => array(),
             'methods' => array(),
-            'condition' => null,
-        ), $routeDatas);
+            'condition' => '',
+        ), $routeData);
 
         $this->reader
             ->expects($this->once())
             ->method('getMethodAnnotations')
-            ->will($this->returnValue(array($this->getAnnotatedRoute($routeDatas))))
+            ->will($this->returnValue(array($this->getAnnotatedRoute($routeData))))
         ;
+
         $routeCollection = $this->loader->load($className);
-        $route = $routeCollection->get($routeDatas['name']);
+        $route = $routeCollection->get($routeData['name']);
 
-        $this->assertSame($routeDatas['path'], $route->getPath(), '->load preserves path annotation');
-        $this->assertSame($routeDatas['requirements'], $route->getRequirements(), '->load preserves requirements annotation');
-        $this->assertCount(0, array_intersect($route->getOptions(), $routeDatas['options']), '->load preserves options annotation');
-        $this->assertSame(array_replace($methodArgs, $routeDatas['defaults']), $route->getDefaults(), '->load preserves defaults annotation');
-        $this->assertEquals($routeDatas['condition'], $route->getCondition(), '->load preserves condition annotation');
+        $this->assertSame($routeData['path'], $route->getPath(), '->load preserves path annotation');
+        $this->assertCount(
+            count($routeData['requirements']),
+            array_intersect_assoc($routeData['requirements'], $route->getRequirements()),
+            '->load preserves requirements annotation'
+        );
+        $this->assertCount(
+            count($routeData['options']),
+            array_intersect_assoc($routeData['options'], $route->getOptions()),
+            '->load preserves options annotation'
+        );
+        $defaults = array_replace($methodArgs, $routeData['defaults']);
+        $this->assertCount(
+            count($defaults),
+            array_intersect_assoc($defaults, $route->getDefaults()),
+            '->load preserves defaults annotation and merges them with default arguments in method signature'
+        );
+        $this->assertEquals($routeData['schemes'], $route->getSchemes(), '->load preserves schemes annotation');
+        $this->assertEquals($routeData['methods'], $route->getMethods(), '->load preserves methods annotation');
+        $this->assertSame($routeData['condition'], $route->getCondition(), '->load preserves condition annotation');
     }
 
     public function testClassRouteLoad()
     {
-        $classRouteDatas = array('path' => '/classRoutePrefix');
+        $classRouteData = array(
+            'path' => '/prefix',
+            'schemes' => array('https'),
+            'methods' => array('GET')
+        );
 
-        $routeDatas = array(
+        $methodRouteData = array(
             'name' => 'route1',
-            'path' => '/',
+            'path' => '/path',
+            'schemes' => array('http'),
+            'methods' => array('POST', 'PUT')
         );
 
         $this->reader
             ->expects($this->once())
             ->method('getClassAnnotation')
-            ->will($this->returnValue($this->getAnnotatedRoute($classRouteDatas)))
+            ->will($this->returnValue($this->getAnnotatedRoute($classRouteData)))
         ;
-
         $this->reader
             ->expects($this->once())
             ->method('getMethodAnnotations')
-            ->will($this->returnValue(array($this->getAnnotatedRoute($routeDatas))))
+            ->will($this->returnValue(array($this->getAnnotatedRoute($methodRouteData))))
         ;
+
         $routeCollection = $this->loader->load('Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BarClass');
-        $route = $routeCollection->get($routeDatas['name']);
+        $route = $routeCollection->get($methodRouteData['name']);
 
-        $this->assertSame($classRouteDatas['path'].$routeDatas['path'], $route->getPath(), '->load preserves class route path annotation');
+        $this->assertSame($classRouteData['path'].$methodRouteData['path'], $route->getPath(), '->load concatenates class and method route path');
+        $this->assertEquals(array_merge($classRouteData['schemes'], $methodRouteData['schemes']), $route->getSchemes(), '->load merges class and method route schemes');
+        $this->assertEquals(array_merge($classRouteData['methods'], $methodRouteData['methods']), $route->getMethods(), '->load merges class and method route methods');
     }
 
-    private function getAnnotatedRoute($datas)
+    private function getAnnotatedRoute($data)
     {
-        return new Route($datas);
+        return new Route($data);
     }
 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationDirectoryLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/AnnotationDirectoryLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationDirectoryLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/AnnotationDirectoryLoaderTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/AnnotationFileLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/ClosureLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/ClosureLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/ClosureLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/ClosureLoaderTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/PhpFileLoaderTest.php
similarity index 96%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/PhpFileLoaderTest.php
index 8e2d98499d4780ff46dbdc0e726e1061875cdb7b..5d66446f0fe23cd6548eeeca325d02cdd9a24c86 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/PhpFileLoaderTest.php
@@ -33,7 +33,7 @@ public function testLoadWithRoute()
         $routeCollection = $loader->load('validpattern.php');
         $routes = $routeCollection->all();
 
-        $this->assertCount(2, $routes, 'Two routes are loaded');
+        $this->assertCount(1, $routes, 'One route is loaded');
         $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
 
         foreach ($routes as $route) {
@@ -52,7 +52,7 @@ public function testLoadWithImport()
         $routeCollection = $loader->load('validresource.php');
         $routes = $routeCollection->all();
 
-        $this->assertCount(2, $routes, 'Two routes are loaded');
+        $this->assertCount(1, $routes, 'One route is loaded');
         $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
 
         foreach ($routes as $route) {
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
similarity index 71%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
index c488c43bcc91b1e299c3fdbf37281f2476cb11c7..37bbc0cd69294a815c3d59412c3edc904eaf5749 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
@@ -32,23 +32,39 @@ public function testLoadWithRoute()
     {
         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
         $routeCollection = $loader->load('validpattern.xml');
-        $routes = $routeCollection->all();
+        $route = $routeCollection->get('blog_show');
 
-        $this->assertCount(3, $routes, 'Three routes are loaded');
-        $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
+        $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
+        $this->assertSame('/blog/{slug}', $route->getPath());
+        $this->assertSame('{locale}.example.com', $route->getHost());
+        $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
+        $this->assertSame('\w+', $route->getRequirement('locale'));
+        $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
+        $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
+        $this->assertEquals(array('https'), $route->getSchemes());
+        $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
+    }
 
-        $identicalRoutes = array_slice($routes, 0, 2);
-
-        foreach ($identicalRoutes as $route) {
-            $this->assertSame('/blog/{slug}', $route->getPath());
-            $this->assertSame('{locale}.example.com', $route->getHost());
-            $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
-            $this->assertSame('\w+', $route->getRequirement('locale'));
-            $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
-            $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
-            $this->assertEquals(array('https'), $route->getSchemes());
-            $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
-        }
+    /**
+     * @group legacy
+     */
+    public function testLegacyRouteDefinitionLoading()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
+        $routeCollection = $loader->load('legacy_validpattern.xml');
+        $route = $routeCollection->get('blog_show_legacy');
+
+        $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
+        $this->assertSame('/blog/{slug}', $route->getPath());
+        $this->assertSame('{locale}.example.com', $route->getHost());
+        $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
+        $this->assertSame('\w+', $route->getRequirement('locale'));
+        $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
+        $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
+        $this->assertEquals(array('https'), $route->getSchemes());
+        $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
     }
 
     public function testLoadWithNamespacePrefix()
@@ -74,7 +90,7 @@ public function testLoadWithImport()
         $routeCollection = $loader->load('validresource.xml');
         $routes = $routeCollection->all();
 
-        $this->assertCount(3, $routes, 'Three routes are loaded');
+        $this->assertCount(2, $routes, 'Two routes are loaded');
         $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
 
         foreach ($routes as $route) {
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
similarity index 62%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php
rename to core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
index 966768cf2ee4510af3983e18f5d98152b00bbfaf..f9b7547a1bef0572a17ce6ac98384c524e879d6d 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
@@ -22,9 +22,11 @@ public function testSupports()
         $loader = new YamlFileLoader($this->getMock('Symfony\Component\Config\FileLocator'));
 
         $this->assertTrue($loader->supports('foo.yml'), '->supports() returns true if the resource is loadable');
+        $this->assertTrue($loader->supports('foo.yaml'), '->supports() returns true if the resource is loadable');
         $this->assertFalse($loader->supports('foo.foo'), '->supports() returns true if the resource is loadable');
 
         $this->assertTrue($loader->supports('foo.yml', 'yaml'), '->supports() checks the resource type if specified');
+        $this->assertTrue($loader->supports('foo.yaml', 'yaml'), '->supports() checks the resource type if specified');
         $this->assertFalse($loader->supports('foo.yml', 'foo'), '->supports() checks the resource type if specified');
     }
 
@@ -66,23 +68,39 @@ public function testLoadWithRoute()
     {
         $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
         $routeCollection = $loader->load('validpattern.yml');
-        $routes = $routeCollection->all();
+        $route = $routeCollection->get('blog_show');
 
-        $this->assertCount(3, $routes, 'Three routes are loaded');
-        $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
+        $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
+        $this->assertSame('/blog/{slug}', $route->getPath());
+        $this->assertSame('{locale}.example.com', $route->getHost());
+        $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
+        $this->assertSame('\w+', $route->getRequirement('locale'));
+        $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
+        $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
+        $this->assertEquals(array('https'), $route->getSchemes());
+        $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
+    }
 
-        $identicalRoutes = array_slice($routes, 0, 2);
-
-        foreach ($identicalRoutes as $route) {
-            $this->assertSame('/blog/{slug}', $route->getPath());
-            $this->assertSame('{locale}.example.com', $route->getHost());
-            $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
-            $this->assertSame('\w+', $route->getRequirement('locale'));
-            $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
-            $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
-            $this->assertEquals(array('https'), $route->getSchemes());
-            $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
-        }
+    /**
+     * @group legacy
+     */
+    public function testLegacyRouteDefinitionLoading()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
+        $routeCollection = $loader->load('legacy_validpattern.yml');
+        $route = $routeCollection->get('blog_show_legacy');
+
+        $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
+        $this->assertSame('/blog/{slug}', $route->getPath());
+        $this->assertSame('{locale}.example.com', $route->getHost());
+        $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
+        $this->assertSame('\w+', $route->getRequirement('locale'));
+        $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
+        $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
+        $this->assertEquals(array('https'), $route->getSchemes());
+        $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
     }
 
     public function testLoadWithResource()
@@ -91,7 +109,7 @@ public function testLoadWithResource()
         $routeCollection = $loader->load('validresource.yml');
         $routes = $routeCollection->all();
 
-        $this->assertCount(3, $routes, 'Three routes are loaded');
+        $this->assertCount(2, $routes, 'Two routes are loaded');
         $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
 
         foreach ($routes as $route) {
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/DumperCollectionTest.php b/core/vendor/symfony/routing/Tests/Matcher/Dumper/DumperCollectionTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/DumperCollectionTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/Dumper/DumperCollectionTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/DumperPrefixCollectionTest.php b/core/vendor/symfony/routing/Tests/Matcher/Dumper/DumperPrefixCollectionTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/DumperPrefixCollectionTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/Dumper/DumperPrefixCollectionTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php b/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
similarity index 93%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
index 5ba250243076049f576b6b01f5a46f6e739611db..6d34c96d56607824dab8bf295dda5852b461e049 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
@@ -87,13 +87,21 @@ private function getRouteCollection()
         $collection->add('bar', new Route(
             '/bar/{foo}',
             array(),
-            array('_method' => 'GET|head')
+            array(),
+            array(),
+            '',
+            array(),
+            array('GET', 'head')
         ));
         // method requirement (again)
         $collection->add('baragain', new Route(
             '/baragain/{foo}',
             array(),
-            array('_method' => 'get|post')
+            array(),
+            array(),
+            '',
+            array(),
+            array('get', 'post')
         ));
         // simple
         $collection->add('baz', new Route(
@@ -115,13 +123,21 @@ private function getRouteCollection()
         $collection->add('baz5', new Route(
             '/test/{foo}/',
             array(),
-            array('_method' => 'get')
+            array(),
+            array(),
+            '',
+            array(),
+            array('GET')
         ));
         // trailing slash and unsafe method
         $collection->add('baz5unsafe', new Route(
             '/testunsafe/{foo}/',
             array(),
-            array('_method' => 'post')
+            array(),
+            array(),
+            '',
+            array(),
+            array('post')
         ));
         // complex
         $collection->add('baz6', new Route(
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php b/core/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
similarity index 93%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
index 7cf529c345c55c4ab6119df3e0e0874c7201bd11..257187733b2d3c808f9d6ff68d8012709bdccf0d 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
@@ -26,7 +26,10 @@ public function testDumpWhenSchemeIsUsedWithoutAProperDumper()
         $collection->add('secure', new Route(
             '/secure',
             array(),
-            array('_scheme' => 'https')
+            array(),
+            array(),
+            '',
+            array('https')
         ));
         $dumper = new PhpMatcherDumper($collection);
         $dumper->dump();
@@ -61,13 +64,21 @@ public function getRouteCollections()
         $collection->add('bar', new Route(
             '/bar/{foo}',
             array(),
-            array('_method' => 'GET|head')
+            array(),
+            array(),
+            '',
+            array(),
+            array('GET', 'head')
         ));
         // GET method requirement automatically adds HEAD as valid
         $collection->add('barhead', new Route(
             '/barhead/{foo}',
             array(),
-            array('_method' => 'GET')
+            array(),
+            array(),
+            '',
+            array(),
+            array('GET')
         ));
         // simple
         $collection->add('baz', new Route(
@@ -89,13 +100,21 @@ public function getRouteCollections()
         $collection->add('baz5', new Route(
             '/test/{foo}/',
             array(),
-            array('_method' => 'post')
+            array(),
+            array(),
+            '',
+            array(),
+            array('post')
         ));
         // complex name
         $collection->add('baz.baz6', new Route(
             '/test/{foo}/',
             array(),
-            array('_method' => 'put')
+            array(),
+            array(),
+            '',
+            array(),
+            array('put')
         ));
         // defaults without variable
         $collection->add('foofoo', new Route(
@@ -235,14 +254,20 @@ public function getRouteCollections()
         $redirectCollection->add('secure', new Route(
             '/secure',
             array(),
-            array('_scheme' => 'https')
+            array(),
+            array(),
+            '',
+            array('https')
         ));
 
         // force HTTP redirection
         $redirectCollection->add('nonsecure', new Route(
             '/nonsecure',
             array(),
-            array('_scheme' => 'http')
+            array(),
+            array(),
+            '',
+            array('http')
         ));
 
         /* test case 3 */
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php b/core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php b/core/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
similarity index 81%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
index 5cbb605479117f15365da6da61efba7f97a30e38..b6c5a3e62218f080c4a4d55e19af53e946f2afac 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
@@ -41,21 +41,6 @@ public function testRedirectWhenNoSlashForNonSafeMethod()
         $matcher->match('/foo');
     }
 
-    public function testSchemeRedirectBC()
-    {
-        $coll = new RouteCollection();
-        $coll->add('foo', new Route('/foo', array(), array('_scheme' => 'https')));
-
-        $matcher = $this->getMockForAbstractClass('Symfony\Component\Routing\Matcher\RedirectableUrlMatcher', array($coll, new RequestContext()));
-        $matcher
-            ->expects($this->once())
-            ->method('redirect')
-            ->with('/foo', 'foo', 'https')
-            ->will($this->returnValue(array('_route' => 'foo')))
-        ;
-        $matcher->match('/foo');
-    }
-
     public function testSchemeRedirectRedirectsToFirstScheme()
     {
         $coll = new RouteCollection();
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php b/core/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
similarity index 77%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
index 969ab0a2f0d0037c9c6e694728afd37e74b6b523..20b30d7b912646a8a53d172281b7fb99c600fed3 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
@@ -21,9 +21,9 @@ class TraceableUrlMatcherTest extends \PHPUnit_Framework_TestCase
     public function test()
     {
         $coll = new RouteCollection();
-        $coll->add('foo', new Route('/foo', array(), array('_method' => 'POST')));
+        $coll->add('foo', new Route('/foo', array(), array(), array(), '', array(), array('POST')));
         $coll->add('bar', new Route('/bar/{id}', array(), array('id' => '\d+')));
-        $coll->add('bar1', new Route('/bar/{name}', array(), array('id' => '\w+', '_method' => 'POST')));
+        $coll->add('bar1', new Route('/bar/{name}', array(), array('id' => '\w+'), array(), '', array(), array('POST')));
         $coll->add('bar2', new Route('/foo', array(), array(), array(), 'baz'));
         $coll->add('bar3', new Route('/foo1', array(), array(), array(), 'baz'));
         $coll->add('bar4', new Route('/foo2', array(), array(), array(), 'baz', array(), array(), 'context.getMethod() == "GET"'));
@@ -33,29 +33,29 @@ public function test()
 
         $matcher = new TraceableUrlMatcher($coll, $context);
         $traces = $matcher->getTraces('/babar');
-        $this->assertEquals(array(0, 0, 0, 0, 0, 0), $this->getLevels($traces));
+        $this->assertSame(array(0, 0, 0, 0, 0, 0), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/foo');
-        $this->assertEquals(array(1, 0, 0, 2), $this->getLevels($traces));
+        $this->assertSame(array(1, 0, 0, 2), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/bar/12');
-        $this->assertEquals(array(0, 2), $this->getLevels($traces));
+        $this->assertSame(array(0, 2), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/bar/dd');
-        $this->assertEquals(array(0, 1, 1, 0, 0, 0), $this->getLevels($traces));
+        $this->assertSame(array(0, 1, 1, 0, 0, 0), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/foo1');
-        $this->assertEquals(array(0, 0, 0, 0, 2), $this->getLevels($traces));
+        $this->assertSame(array(0, 0, 0, 0, 2), $this->getLevels($traces));
 
         $context->setMethod('POST');
         $traces = $matcher->getTraces('/foo');
-        $this->assertEquals(array(2), $this->getLevels($traces));
+        $this->assertSame(array(2), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/bar/dd');
-        $this->assertEquals(array(0, 1, 2), $this->getLevels($traces));
+        $this->assertSame(array(0, 1, 2), $this->getLevels($traces));
 
         $traces = $matcher->getTraces('/foo2');
-        $this->assertEquals(array(0, 0, 0, 0, 0, 1), $this->getLevels($traces));
+        $this->assertSame(array(0, 0, 0, 0, 0, 1), $this->getLevels($traces));
     }
 
     public function testMatchRouteOnMultipleHosts()
@@ -83,7 +83,7 @@ public function testMatchRouteOnMultipleHosts()
         $matcher = new TraceableUrlMatcher($routes, $context);
 
         $traces = $matcher->getTraces('/mypath/');
-        $this->assertEquals(
+        $this->assertSame(
             array(TraceableUrlMatcher::ROUTE_ALMOST_MATCHES, TraceableUrlMatcher::ROUTE_ALMOST_MATCHES),
             $this->getLevels($traces)
         );
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php b/core/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
similarity index 95%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php
rename to core/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
index 99f2bc3ec19f605a8884b7f515ea8cbe18f9f2bb..bf82fb7f86e63af19e72366b7e1b022088f2408c 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
@@ -26,13 +26,13 @@ public function testNoMethodSoAllowed()
         $coll->add('foo', new Route('/foo'));
 
         $matcher = new UrlMatcher($coll, new RequestContext());
-        $matcher->match('/foo');
+        $this->assertInternalType('array', $matcher->match('/foo'));
     }
 
     public function testMethodNotAllowed()
     {
         $coll = new RouteCollection();
-        $coll->add('foo', new Route('/foo', array(), array('_method' => 'post')));
+        $coll->add('foo', new Route('/foo', array(), array(), array(), '', array(), array('post')));
 
         $matcher = new UrlMatcher($coll, new RequestContext());
 
@@ -47,17 +47,17 @@ public function testMethodNotAllowed()
     public function testHeadAllowedWhenRequirementContainsGet()
     {
         $coll = new RouteCollection();
-        $coll->add('foo', new Route('/foo', array(), array('_method' => 'get')));
+        $coll->add('foo', new Route('/foo', array(), array(), array(), '', array(), array('get')));
 
         $matcher = new UrlMatcher($coll, new RequestContext('', 'head'));
-        $matcher->match('/foo');
+        $this->assertInternalType('array', $matcher->match('/foo'));
     }
 
     public function testMethodNotAllowedAggregatesAllowedMethods()
     {
         $coll = new RouteCollection();
-        $coll->add('foo1', new Route('/foo', array(), array('_method' => 'post')));
-        $coll->add('foo2', new Route('/foo', array(), array('_method' => 'put|delete')));
+        $coll->add('foo1', new Route('/foo', array(), array(), array(), '', array(), array('post')));
+        $coll->add('foo2', new Route('/foo', array(), array(), array(), '', array(), array('put', 'delete')));
 
         $matcher = new UrlMatcher($coll, new RequestContext());
 
@@ -90,7 +90,7 @@ public function testMatch()
 
         // test that route "method" is ignored if no method is given in the context
         $collection = new RouteCollection();
-        $collection->add('foo', new Route('/foo', array(), array('_method' => 'GET|head')));
+        $collection->add('foo', new Route('/foo', array(), array(), array(), '', array(), array('get', 'head')));
         $matcher = new UrlMatcher($collection, new RequestContext());
         $this->assertInternalType('array', $matcher->match('/foo'));
 
@@ -312,16 +312,6 @@ public function testDefaultRequirementOfVariableDisallowsNextSeparator()
         $matcher->match('/do.t.html');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
-    public function testSchemeRequirementBC()
-    {
-        $coll = new RouteCollection();
-        $coll->add('foo', new Route('/foo', array(), array('_scheme' => 'https')));
-        $matcher = new UrlMatcher($coll, new RequestContext());
-        $matcher->match('/foo');
-    }
     /**
      * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
      */
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RequestContextTest.php b/core/vendor/symfony/routing/Tests/RequestContextTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RequestContextTest.php
rename to core/vendor/symfony/routing/Tests/RequestContextTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteCollectionTest.php b/core/vendor/symfony/routing/Tests/RouteCollectionTest.php
similarity index 96%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteCollectionTest.php
rename to core/vendor/symfony/routing/Tests/RouteCollectionTest.php
index ad2d0e0f2f2a9ac948bc6d75051021e5f3a11607..376b8db76fe4a679b59429b8b7bd6984178db7e5 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteCollectionTest.php
+++ b/core/vendor/symfony/routing/Tests/RouteCollectionTest.php
@@ -164,12 +164,12 @@ public function testAddPrefix()
     public function testAddPrefixOverridesDefaultsAndRequirements()
     {
         $collection = new RouteCollection();
-        $collection->add('foo', $foo = new Route('/foo'));
-        $collection->add('bar', $bar = new Route('/bar', array(), array('_scheme' => 'http')));
-        $collection->addPrefix('/admin', array(), array('_scheme' => 'https'));
+        $collection->add('foo', $foo = new Route('/foo.{_format}'));
+        $collection->add('bar', $bar = new Route('/bar.{_format}', array(), array('_format' => 'json')));
+        $collection->addPrefix('/admin', array(), array('_format' => 'html'));
 
-        $this->assertEquals('https', $collection->get('foo')->getRequirement('_scheme'), '->addPrefix() overrides existing requirements');
-        $this->assertEquals('https', $collection->get('bar')->getRequirement('_scheme'), '->addPrefix() overrides existing requirements');
+        $this->assertEquals('html', $collection->get('foo')->getRequirement('_format'), '->addPrefix() overrides existing requirements');
+        $this->assertEquals('html', $collection->get('bar')->getRequirement('_format'), '->addPrefix() overrides existing requirements');
     }
 
     public function testResource()
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteCompilerTest.php b/core/vendor/symfony/routing/Tests/RouteCompilerTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteCompilerTest.php
rename to core/vendor/symfony/routing/Tests/RouteCompilerTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteTest.php b/core/vendor/symfony/routing/Tests/RouteTest.php
similarity index 97%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteTest.php
rename to core/vendor/symfony/routing/Tests/RouteTest.php
index 224a6dc7de116e9ce84edb09e63c4145a381cad4..11c0cd8dcf00683451f78c492a92b6b5fed5c59c 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteTest.php
+++ b/core/vendor/symfony/routing/Tests/RouteTest.php
@@ -164,8 +164,13 @@ public function testScheme()
         $this->assertTrue($route->hasScheme('httpS'));
     }
 
-    public function testSchemeIsBC()
+    /**
+     * @group legacy
+     */
+    public function testLegacySchemeRequirement()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route('/');
         $route->setRequirement('_scheme', 'http|https');
         $this->assertEquals('http|https', $route->getRequirement('_scheme'));
@@ -189,8 +194,13 @@ public function testMethod()
         $this->assertEquals(array('GET', 'POST'), $route->getMethods(), '->setMethods() accepts an array of methods and uppercases them');
     }
 
-    public function testMethodIsBC()
+    /**
+     * @group legacy
+     */
+    public function testLegacyMethodRequirement()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route('/');
         $route->setRequirement('_method', 'GET|POST');
         $this->assertEquals('GET|POST', $route->getRequirement('_method'));
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouterTest.php b/core/vendor/symfony/routing/Tests/RouterTest.php
similarity index 100%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouterTest.php
rename to core/vendor/symfony/routing/Tests/RouterTest.php
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/composer.json b/core/vendor/symfony/routing/composer.json
similarity index 78%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/composer.json
rename to core/vendor/symfony/routing/composer.json
index 7c274c545232559976aeda31419c963007ea96fc..31b63ae64aacc7d85ffc9b7a294d1f36a855a30f 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/composer.json
+++ b/core/vendor/symfony/routing/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Routing Component",
     "keywords": ["routing", "router", "URL", "URI"],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,15 +12,15 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
-        "symfony/config": "~2.2",
+        "symfony/config": "~2.7",
         "symfony/http-foundation": "~2.3",
         "symfony/yaml": "~2.0,>=2.0.5",
         "symfony/expression-language": "~2.4",
@@ -28,6 +28,9 @@
         "doctrine/common": "~2.2",
         "psr/log": "~1.0"
     },
+    "conflict": {
+        "symfony/config": "<2.7"
+    },
     "suggest": {
         "symfony/config": "For using the all-in-one router or any loader",
         "symfony/yaml": "For using the YAML loader",
@@ -35,13 +38,12 @@
         "doctrine/annotations": "For using the annotation loader"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\Routing\\": "" }
+        "psr-4": { "Symfony\\Component\\Routing\\": "" }
     },
-    "target-dir": "Symfony/Component/Routing",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/phpunit.xml.dist b/core/vendor/symfony/routing/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/routing/Symfony/Component/Routing/phpunit.xml.dist
rename to core/vendor/symfony/routing/phpunit.xml.dist
index fae243c8152b0193a3549d87d5195b089f19d28f..a9083088a96440d7e3a266853f02197b5acc26d0 100644
--- a/core/vendor/symfony/routing/Symfony/Component/Routing/phpunit.xml.dist
+++ b/core/vendor/symfony/routing/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony Routing Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/serializer/Annotation/Groups.php b/core/vendor/symfony/serializer/Annotation/Groups.php
new file mode 100644
index 0000000000000000000000000000000000000000..e88ffa71d7e21ee3cc84c20cb0b0f67619b5b0a5
--- /dev/null
+++ b/core/vendor/symfony/serializer/Annotation/Groups.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Annotation;
+
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+
+/**
+ * Annotation class for @Groups().
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD"})
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class Groups
+{
+    /**
+     * @var array
+     */
+    private $groups;
+
+    /**
+     * @param array $data
+     * @throws \InvalidArgumentException
+     */
+    public function __construct(array $data)
+    {
+        if (!isset($data['value']) || !$data['value']) {
+            throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' cannot be empty.", get_class($this)));
+        }
+
+        if (!is_array($data['value'])) {
+            throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' must be an array of strings.", get_class($this)));
+        }
+
+        foreach ($data['value'] as $group) {
+            if (!is_string($group)) {
+                throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' must be an array of strings.", get_class($this)));
+            }
+        }
+
+        $this->groups = $data['value'];
+    }
+
+    /**
+     * Gets groups
+     *
+     * @return array
+     */
+    public function getGroups()
+    {
+        return $this->groups;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md b/core/vendor/symfony/serializer/CHANGELOG.md
similarity index 71%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md
rename to core/vendor/symfony/serializer/CHANGELOG.md
index 45e620188f81af93709b0501ecc76d1e4f2c5aa6..ceeeeb1e7a92f08ea5b8ea16018d56bd1ff25432 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md
+++ b/core/vendor/symfony/serializer/CHANGELOG.md
@@ -1,6 +1,23 @@
 CHANGELOG
 =========
 
+2.7.0
+-----
+
+ * added support for serialization and deserialization groups including
+   annotations, XML and YAML mapping.
+ * added `AbstractNormalizer` to factorise code and ease normalizers development
+ * added circular references handling for `PropertyNormalizer`
+ * added support for a context key called `object_to_populate` in `AbstractNormalizer`
+   to reuse existing objects in the deserialization process
+ * added `NameConverterInterface` and `CamelCaseToSnakeCaseNameConverter`
+ * [DEPRECATION] `GetSetMethodNormalizer::setCamelizedAttributes()` and
+   `PropertyNormalizer::setCamelizedAttributes()` are replaced by
+   `CamelCaseToSnakeCaseNameConverter`
+ * [DEPRECATION] the `Exception` interface has been renamed to `ExceptionInterface`
+ * added `ObjectNormalizer` leveraging the `PropertyAccess` component to normalize
+   objects containing both properties and getters / setters / issers / hassers methods.
+
 2.6.0
 -----
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php b/core/vendor/symfony/serializer/Encoder/ChainDecoder.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php
rename to core/vendor/symfony/serializer/Encoder/ChainDecoder.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php b/core/vendor/symfony/serializer/Encoder/ChainEncoder.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php
rename to core/vendor/symfony/serializer/Encoder/ChainEncoder.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php b/core/vendor/symfony/serializer/Encoder/DecoderInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php
rename to core/vendor/symfony/serializer/Encoder/DecoderInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php b/core/vendor/symfony/serializer/Encoder/EncoderInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php
rename to core/vendor/symfony/serializer/Encoder/EncoderInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php b/core/vendor/symfony/serializer/Encoder/JsonDecode.php
similarity index 91%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php
rename to core/vendor/symfony/serializer/Encoder/JsonDecode.php
index 4bb5b43dd09454959391303629705ba2301761a5..14c1a752c946510feb3ee548b3f9a06d2759bdca 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonDecode.php
@@ -55,12 +55,15 @@ public function __construct($associative = false, $depth = 512)
      *
      * @return int
      *
-     * @deprecated since 2.5, decode() throws an exception if error found, will be removed in 3.0
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             The {@self decode()} method throws an exception if error found.
      *
      * @see http://php.net/manual/en/function.json-last-error.php json_last_error
      */
     public function getLastError()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
+
         return $this->lastError;
     }
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php b/core/vendor/symfony/serializer/Encoder/JsonEncode.php
similarity index 83%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php
rename to core/vendor/symfony/serializer/Encoder/JsonEncode.php
index ff377db9939b6b36b81d479aa88bfcf467571b4c..76345bed694b2efee2b5b35c87929d8e528be866 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonEncode.php
@@ -33,12 +33,15 @@ public function __construct($bitmask = 0)
      *
      * @return int
      *
-     * @deprecated since 2.5, encode() throws an exception if error found, will be removed in 3.0
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             The {@self encode()} throws an exception if error found.
      *
      * @see http://php.net/manual/en/function.json-last-error.php json_last_error
      */
     public function getLastError()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
+
         return $this->lastError;
     }
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php b/core/vendor/symfony/serializer/Encoder/JsonEncoder.php
similarity index 78%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php
rename to core/vendor/symfony/serializer/Encoder/JsonEncoder.php
index 2231dd624add917becf1487c92b6bb27bd44913b..1f7a1fb0e3301f8b0f313957a47f395e6bf58501 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonEncoder.php
@@ -41,10 +41,12 @@ public function __construct(JsonEncode $encodingImpl = null, JsonDecode $decodin
      *
      * @return int
      *
-     * @deprecated since 2.5, JsonEncode throws exception if an error is found, will be removed in 3.0
+     * @deprecated since version 2.5, to be removed in 3.0. JsonEncode throws exception if an error is found.
      */
     public function getLastEncodingError()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonEncode::encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
+
         return $this->encodingImpl->getLastError();
     }
 
@@ -53,10 +55,12 @@ public function getLastEncodingError()
      *
      * @return int
      *
-     * @deprecated since 2.5, JsonDecode throws exception if an error is found, will be removed in 3.0
+     * @deprecated since version 2.5, to be removed in 3.0. JsonDecode throws exception if an error is found.
      */
     public function getLastDecodingError()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonDecode::decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
+
         return $this->decodingImpl->getLastError();
     }
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/NormalizationAwareInterface.php b/core/vendor/symfony/serializer/Encoder/NormalizationAwareInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/NormalizationAwareInterface.php
rename to core/vendor/symfony/serializer/Encoder/NormalizationAwareInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/SerializerAwareEncoder.php b/core/vendor/symfony/serializer/Encoder/SerializerAwareEncoder.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/SerializerAwareEncoder.php
rename to core/vendor/symfony/serializer/Encoder/SerializerAwareEncoder.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/core/vendor/symfony/serializer/Encoder/XmlEncoder.php
similarity index 98%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
rename to core/vendor/symfony/serializer/Encoder/XmlEncoder.php
index 68ccc5966e3b188d00a5d5509de60862266a9b8c..ce0c4758f1620cfa01d0f1dc9f789536cb4a76f7 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
+++ b/core/vendor/symfony/serializer/Encoder/XmlEncoder.php
@@ -19,6 +19,7 @@
  * @author Jordi Boggiano <j.boggiano@seld.be>
  * @author John Wards <jwards@whiteoctober.co.uk>
  * @author Fabian Vogler <fabian@equivalence.ch>
+ * @author Kévin Dunglas <dunglas@gmail.com>
  */
 class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, DecoderInterface, NormalizationAwareInterface
 {
@@ -515,6 +516,8 @@ private function createDomDocument(array $context)
 
         // Set an attribute on the DOM document specifying, as part of the XML declaration,
         $xmlOptions = array(
+            // nicely formats output with indentation and extra space
+            'xml_format_output' => 'formatOutput',
             // the version number of the document
             'xml_version' => 'xmlVersion',
             // the encoding of the document
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/CircularReferenceException.php b/core/vendor/symfony/serializer/Exception/CircularReferenceException.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/CircularReferenceException.php
rename to core/vendor/symfony/serializer/Exception/CircularReferenceException.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/Exception.php b/core/vendor/symfony/serializer/Exception/Exception.php
similarity index 79%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/Exception.php
rename to core/vendor/symfony/serializer/Exception/Exception.php
index dc2b8fd1c3862feceedb2eb806989c0d4d50a675..fc0606e2ff190045126d71d600faf008cab2c12a 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/Exception.php
+++ b/core/vendor/symfony/serializer/Exception/Exception.php
@@ -14,7 +14,7 @@
 /**
  * Base exception.
  *
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @deprecated since version 2.7, to be removed in 3.0. Use ExceptionInterface instead.
  */
 interface Exception
 {
diff --git a/core/vendor/symfony/serializer/Exception/ExceptionInterface.php b/core/vendor/symfony/serializer/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff67edbb022ac4577d623daadb53e7fa7b4b0bc8
--- /dev/null
+++ b/core/vendor/symfony/serializer/Exception/ExceptionInterface.php
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Exception;
+
+/**
+ * Base exception interface.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface ExceptionInterface extends Exception
+{
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/InvalidArgumentException.php b/core/vendor/symfony/serializer/Exception/InvalidArgumentException.php
similarity index 93%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/InvalidArgumentException.php
rename to core/vendor/symfony/serializer/Exception/InvalidArgumentException.php
index 8cad373a1c26de29922cf61e9ddda9ab5c047d83..f4e645c4487ff34dc1e22d943a3e2d978f706bbd 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/InvalidArgumentException.php
+++ b/core/vendor/symfony/serializer/Exception/InvalidArgumentException.php
@@ -16,6 +16,6 @@
  *
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  */
-class InvalidArgumentException extends \InvalidArgumentException implements Exception
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
 {
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/LogicException.php b/core/vendor/symfony/serializer/Exception/LogicException.php
similarity index 97%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/LogicException.php
rename to core/vendor/symfony/serializer/Exception/LogicException.php
index a372bf9471cc553df6ef85b68d84273826b29699..08c53e0ff7a45749514567a743d9a84cf5575c31 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/LogicException.php
+++ b/core/vendor/symfony/serializer/Exception/LogicException.php
@@ -16,6 +16,6 @@
  *
  * @author Lukas Kahwe Smith <smith@pooteeweet.org>
  */
-class LogicException extends \LogicException implements Exception
+class LogicException extends \LogicException implements ExceptionInterface
 {
 }
diff --git a/core/vendor/symfony/serializer/Exception/MappingException.php b/core/vendor/symfony/serializer/Exception/MappingException.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b63dd0a6d3455babaf1dee920f5ace2967f8f3b
--- /dev/null
+++ b/core/vendor/symfony/serializer/Exception/MappingException.php
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Exception;
+
+/**
+ * MappingException
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class MappingException extends RuntimeException
+{
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/RuntimeException.php b/core/vendor/symfony/serializer/Exception/RuntimeException.php
similarity index 96%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/RuntimeException.php
rename to core/vendor/symfony/serializer/Exception/RuntimeException.php
index 027286548971d832cdb6afb9f066246e10fa85fb..a287d97ad4779e58498db697bcc2d5cef8ff539b 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/RuntimeException.php
+++ b/core/vendor/symfony/serializer/Exception/RuntimeException.php
@@ -16,6 +16,6 @@
  *
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  */
-class RuntimeException extends \RuntimeException implements Exception
+class RuntimeException extends \RuntimeException implements ExceptionInterface
 {
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/UnexpectedValueException.php b/core/vendor/symfony/serializer/Exception/UnexpectedValueException.php
similarity index 93%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/UnexpectedValueException.php
rename to core/vendor/symfony/serializer/Exception/UnexpectedValueException.php
index 86cf2040389084f669361adaf130c9fe530d36bc..2a63c5bd3f25f249ee52f9729654277d84497a87 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/UnexpectedValueException.php
+++ b/core/vendor/symfony/serializer/Exception/UnexpectedValueException.php
@@ -16,6 +16,6 @@
  *
  * @author Lukas Kahwe Smith <smith@pooteeweet.org>
  */
-class UnexpectedValueException extends \UnexpectedValueException implements Exception
+class UnexpectedValueException extends \UnexpectedValueException implements ExceptionInterface
 {
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/UnsupportedException.php b/core/vendor/symfony/serializer/Exception/UnsupportedException.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Exception/UnsupportedException.php
rename to core/vendor/symfony/serializer/Exception/UnsupportedException.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE b/core/vendor/symfony/serializer/LICENSE
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE
rename to core/vendor/symfony/serializer/LICENSE
diff --git a/core/vendor/symfony/serializer/Mapping/AttributeMetadata.php b/core/vendor/symfony/serializer/Mapping/AttributeMetadata.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a1d3db94a8096a3ca3822367e480ec958dfa2a2
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/AttributeMetadata.php
@@ -0,0 +1,94 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping;
+
+/**
+ * {@inheritdoc}
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class AttributeMetadata implements AttributeMetadataInterface
+{
+    /**
+     * @var string
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getName()} instead.
+     */
+    public $name;
+
+    /**
+     * @var array
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getGroups()} instead.
+     */
+    public $groups = array();
+
+    /**
+     * Constructs a metadata for the given attribute.
+     *
+     * @param string $name
+     */
+    public function __construct($name)
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function addGroup($group)
+    {
+        if (!in_array($group, $this->groups)) {
+            $this->groups[] = $group;
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getGroups()
+    {
+        return $this->groups;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function merge(AttributeMetadataInterface $attributeMetadata)
+    {
+        foreach ($attributeMetadata->getGroups() as $group) {
+            $this->addGroup($group);
+        }
+    }
+
+    /**
+     * Returns the names of the properties that should be serialized.
+     *
+     * @return string[]
+     */
+    public function __sleep()
+    {
+        return array('name', 'groups');
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/AttributeMetadataInterface.php b/core/vendor/symfony/serializer/Mapping/AttributeMetadataInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..0701a58b562573a5c8dbd74277e7d80dafebe806
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/AttributeMetadataInterface.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping;
+
+/**
+ * Stores metadata needed for serializing and deserializing attributes.
+ *
+ * Primarily, the metadata stores serialization groups.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface AttributeMetadataInterface
+{
+    /**
+     * Gets the attribute name.
+     *
+     * @return string
+     */
+    public function getName();
+
+    /**
+     * Adds this attribute to the given group.
+     *
+     * @param string $group
+     */
+    public function addGroup($group);
+
+    /**
+     * Gets groups of this attribute.
+     *
+     * @return string[]
+     */
+    public function getGroups();
+
+    /**
+     * Merges an {@see AttributeMetadataInterface} with in the current one.
+     *
+     * @param AttributeMetadataInterface $attributeMetadata
+     */
+    public function merge(AttributeMetadataInterface $attributeMetadata);
+}
diff --git a/core/vendor/symfony/serializer/Mapping/ClassMetadata.php b/core/vendor/symfony/serializer/Mapping/ClassMetadata.php
new file mode 100644
index 0000000000000000000000000000000000000000..3794a7451b55eaa0ecba2773891e61967fa957fe
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/ClassMetadata.php
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping;
+
+/**
+ * {@inheritdoc}
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ClassMetadata implements ClassMetadataInterface
+{
+    /**
+     * @var string
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getName()} instead.
+     */
+    public $name;
+
+    /**
+     * @var AttributeMetadataInterface[]
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getAttributesMetadata()} instead.
+     */
+    public $attributesMetadata = array();
+
+    /**
+     * @var \ReflectionClass
+     */
+    private $reflClass;
+
+    /**
+     * Constructs a metadata for the given class.
+     *
+     * @param string $class
+     */
+    public function __construct($class)
+    {
+        $this->name = $class;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function addAttributeMetadata(AttributeMetadataInterface $attributeMetadata)
+    {
+        $this->attributesMetadata[$attributeMetadata->getName()] = $attributeMetadata;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getAttributesMetadata()
+    {
+        return $this->attributesMetadata;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function merge(ClassMetadataInterface $classMetadata)
+    {
+        foreach ($classMetadata->getAttributesMetadata() as $attributeMetadata) {
+            if (isset($this->attributesMetadata[$attributeMetadata->getName()])) {
+                $this->attributesMetadata[$attributeMetadata->getName()]->merge($attributeMetadata);
+            } else {
+                $this->addAttributeMetadata($attributeMetadata);
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getReflectionClass()
+    {
+        if (!$this->reflClass) {
+            $this->reflClass = new \ReflectionClass($this->getName());
+        }
+
+        return $this->reflClass;
+    }
+
+    /**
+     * Returns the names of the properties that should be serialized.
+     *
+     * @return string[]
+     */
+    public function __sleep()
+    {
+        return array(
+            'name',
+            'attributes',
+        );
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/ClassMetadataInterface.php b/core/vendor/symfony/serializer/Mapping/ClassMetadataInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c967666bd7e6e80e855b918b3e29e291ea997831
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/ClassMetadataInterface.php
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping;
+
+/**
+ * Stores metadata needed for serializing and deserializing objects of specific class.
+ *
+ * Primarily, the metadata stores the list of attributes to serialize or deserialize.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface ClassMetadataInterface
+{
+    /**
+     * Returns the name of the backing PHP class.
+     *
+     * @return string The name of the backing class.
+     */
+    public function getName();
+
+    /**
+     * Adds an {@link AttributeMetadataInterface}.
+     *
+     * @param AttributeMetadataInterface $attributeMetadata
+     */
+    public function addAttributeMetadata(AttributeMetadataInterface $attributeMetadata);
+
+    /**
+     * Gets the list of {@link AttributeMetadataInterface}.
+     *
+     * @return AttributeMetadataInterface[]
+     */
+    public function getAttributesMetadata();
+
+    /**
+     * Merges a {@link ClassMetadataInterface} in the current one.
+     *
+     * @param ClassMetadataInterface $classMetadata
+     */
+    public function merge(ClassMetadataInterface $classMetadata);
+
+    /**
+     * Returns a {@link \ReflectionClass} instance for this class.
+     *
+     * @return \ReflectionClass
+     */
+    public function getReflectionClass();
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php b/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..344d633b26cda2d4ff0f5508a2ee7f0c79b66baf
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Factory;
+
+use Doctrine\Common\Cache\Cache;
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+use Symfony\Component\Serializer\Mapping\Loader\LoaderInterface;
+
+/**
+ * Returns a {@link ClassMetadata}.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ClassMetadataFactory implements ClassMetadataFactoryInterface
+{
+    /**
+     * @var LoaderInterface
+     */
+    private $loader;
+    /**
+     * @var Cache
+     */
+    private $cache;
+    /**
+     * @var array
+     */
+    private $loadedClasses;
+
+    /**
+     * @param LoaderInterface $loader
+     * @param Cache|null $cache
+     */
+    public function __construct(LoaderInterface $loader, Cache $cache = null)
+    {
+        $this->loader = $loader;
+        $this->cache = $cache;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getMetadataFor($value)
+    {
+        $class = $this->getClass($value);
+        if (!$class) {
+            throw new InvalidArgumentException(sprintf('Cannot create metadata for non-objects. Got: "%s"', gettype($value)));
+        }
+
+        if (isset($this->loadedClasses[$class])) {
+            return $this->loadedClasses[$class];
+        }
+
+        if ($this->cache && ($this->loadedClasses[$class] = $this->cache->fetch($class))) {
+            return $this->loadedClasses[$class];
+        }
+
+        if (!class_exists($class) && !interface_exists($class)) {
+            throw new InvalidArgumentException(sprintf('The class or interface "%s" does not exist.', $class));
+        }
+
+        $classMetadata = new ClassMetadata($class);
+        $this->loader->loadClassMetadata($classMetadata);
+
+        $reflectionClass = $classMetadata->getReflectionClass();
+
+        // Include metadata from the parent class
+        if ($parent = $reflectionClass->getParentClass()) {
+            $classMetadata->merge($this->getMetadataFor($parent->name));
+        }
+
+        // Include metadata from all implemented interfaces
+        foreach ($reflectionClass->getInterfaces() as $interface) {
+            $classMetadata->merge($this->getMetadataFor($interface->name));
+        }
+
+        if ($this->cache) {
+            $this->cache->save($class, $classMetadata);
+        }
+
+        return $this->loadedClasses[$class] = $classMetadata;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function hasMetadataFor($value)
+    {
+        $class = $this->getClass($value);
+
+        return class_exists($class) || interface_exists($class);
+    }
+
+    /**
+     * Gets a class name for a given class or instance.
+     *
+     * @param mixed $value
+     *
+     * @return string|bool
+     */
+    private function getClass($value)
+    {
+        if (!is_object($value) && !is_string($value)) {
+            return false;
+        }
+
+        return ltrim(is_object($value) ? get_class($value) : $value, '\\');
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactoryInterface.php b/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ef91a82318c6c84f3192eece22404f776d471ca
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactoryInterface.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Factory;
+
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+
+/**
+ * Returns a {@see ClassMetadataInterface}.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface ClassMetadataFactoryInterface
+{
+    /**
+     * If the method was called with the same class name (or an object of that
+     * class) before, the same metadata instance is returned.
+     *
+     * If the factory was configured with a cache, this method will first look
+     * for an existing metadata instance in the cache. If an existing instance
+     * is found, it will be returned without further ado.
+     *
+     * Otherwise, a new metadata instance is created. If the factory was
+     * configured with a loader, the metadata is passed to the
+     * {@link \Symfony\Component\Serializer\Mapping\Loader\LoaderInterface::loadClassMetadata()} method for further
+     * configuration. At last, the new object is returned.
+     *
+     * @param string|object $value
+     *
+     * @return ClassMetadataInterface
+     *
+     * @throws InvalidArgumentException
+     */
+    public function getMetadataFor($value);
+
+    /**
+     * Checks if class has metadata.
+     *
+     * @param mixed $value
+     *
+     * @return bool
+     */
+    public function hasMetadataFor($value);
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/AnnotationLoader.php b/core/vendor/symfony/serializer/Mapping/Loader/AnnotationLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..801c317767ac0c25e030232127937583eab795e2
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/AnnotationLoader.php
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Doctrine\Common\Annotations\Reader;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Serializer\Exception\MappingException;
+use Symfony\Component\Serializer\Mapping\AttributeMetadata;
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+
+/**
+ * Annotation loader.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class AnnotationLoader implements LoaderInterface
+{
+    /**
+     * @var Reader
+     */
+    private $reader;
+
+    /**
+     * @param Reader $reader
+     */
+    public function __construct(Reader $reader)
+    {
+        $this->reader = $reader;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function loadClassMetadata(ClassMetadataInterface $classMetadata)
+    {
+        $reflectionClass = $classMetadata->getReflectionClass();
+        $className = $reflectionClass->name;
+        $loaded = false;
+
+        $attributesMetadata = $classMetadata->getAttributesMetadata();
+
+        foreach ($reflectionClass->getProperties() as $property) {
+            if (!isset($attributeMetadata[$property->name])) {
+                $attributesMetadata[$property->name] = new AttributeMetadata($property->name);
+                $classMetadata->addAttributeMetadata($attributesMetadata[$property->name]);
+            }
+
+            if ($property->getDeclaringClass()->name === $className) {
+                foreach ($this->reader->getPropertyAnnotations($property) as $groups) {
+                    if ($groups instanceof Groups) {
+                        foreach ($groups->getGroups() as $group) {
+                            $attributesMetadata[$property->name]->addGroup($group);
+                        }
+                    }
+
+                    $loaded = true;
+                }
+            }
+        }
+
+        foreach ($reflectionClass->getMethods() as $method) {
+            if ($method->getDeclaringClass()->name === $className) {
+                foreach ($this->reader->getMethodAnnotations($method) as $groups) {
+                    if ($groups instanceof Groups) {
+                        if (preg_match('/^(get|is|has|set)(.+)$/i', $method->name, $matches)) {
+                            $attributeName = lcfirst($matches[2]);
+
+                            if (isset($attributesMetadata[$attributeName])) {
+                                $attributeMetadata = $attributesMetadata[$attributeName];
+                            } else {
+                                $attributesMetadata[$attributeName] = $attributeMetadata = new AttributeMetadata($attributeName);
+                                $classMetadata->addAttributeMetadata($attributeMetadata);
+                            }
+
+                            foreach ($groups->getGroups() as $group) {
+                                $attributeMetadata->addGroup($group);
+                            }
+                        } else {
+                            throw new MappingException(sprintf('Groups on "%s::%s" cannot be added. Groups can only be added on methods beginning with "get", "is", "has" or "set".', $className, $method->name));
+                        }
+                    }
+
+                    $loaded = true;
+                }
+            }
+        }
+
+        return $loaded;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/FileLoader.php b/core/vendor/symfony/serializer/Mapping/Loader/FileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..38bb59389a6dd9dea13247ec3d04aa595521df57
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/FileLoader.php
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Symfony\Component\Serializer\Exception\MappingException;
+
+/**
+ * Base class for all file based loaders.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+abstract class FileLoader implements LoaderInterface
+{
+    /**
+     * @var string
+     */
+    protected $file;
+
+    /**
+     * Constructor.
+     *
+     * @param string $file The mapping file to load
+     *
+     * @throws MappingException if the mapping file does not exist or is not readable
+     */
+    public function __construct($file)
+    {
+        if (!is_file($file)) {
+            throw new MappingException(sprintf('The mapping file %s does not exist', $file));
+        }
+
+        if (!is_readable($file)) {
+            throw new MappingException(sprintf('The mapping file %s is not readable', $file));
+        }
+
+        $this->file = $file;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/LoaderChain.php b/core/vendor/symfony/serializer/Mapping/Loader/LoaderChain.php
new file mode 100644
index 0000000000000000000000000000000000000000..8bf1c17da9d92ed98992657cc759caaa79e5fc87
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/LoaderChain.php
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Symfony\Component\Serializer\Exception\MappingException;
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+
+/**
+ * Calls multiple {@link LoaderInterface} instances in a chain.
+ *
+ * This class accepts multiple instances of LoaderInterface to be passed to the
+ * constructor. When {@link loadClassMetadata()} is called, the same method is called
+ * in <em>all</em> of these loaders, regardless of whether any of them was
+ * successful or not.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class LoaderChain implements LoaderInterface
+{
+    /**
+     * @var LoaderInterface[]
+     */
+    private $loaders;
+
+    /**
+     * Accepts a list of LoaderInterface instances.
+     *
+     * @param LoaderInterface[] $loaders An array of LoaderInterface instances
+     *
+     * @throws MappingException If any of the loaders does not implement LoaderInterface
+     */
+    public function __construct(array $loaders)
+    {
+        foreach ($loaders as $loader) {
+            if (!$loader instanceof LoaderInterface) {
+                throw new MappingException(sprintf('Class %s is expected to implement LoaderInterface', get_class($loader)));
+            }
+        }
+
+        $this->loaders = $loaders;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function loadClassMetadata(ClassMetadataInterface $metadata)
+    {
+        $success = false;
+
+        foreach ($this->loaders as $loader) {
+            $success = $loader->loadClassMetadata($metadata) || $success;
+        }
+
+        return $success;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/LoaderInterface.php b/core/vendor/symfony/serializer/Mapping/Loader/LoaderInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebf84b6a961303390211463a157944a69299522a
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/LoaderInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+
+/**
+ * Loads {@link ClassMetadataInterface}.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface LoaderInterface
+{
+    /**
+     * Load class metadata.
+     *
+     * @param ClassMetadataInterface $classMetadata A metadata
+     *
+     * @return bool
+     */
+    public function loadClassMetadata(ClassMetadataInterface $classMetadata);
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/XmlFileLoader.php b/core/vendor/symfony/serializer/Mapping/Loader/XmlFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..0da2f7d690ff668a8773208deae31162e4f87c23
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/XmlFileLoader.php
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Symfony\Component\Config\Util\XmlUtils;
+use Symfony\Component\Serializer\Exception\MappingException;
+use Symfony\Component\Serializer\Mapping\AttributeMetadata;
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+
+/**
+ * Loads XML mapping files.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class XmlFileLoader extends FileLoader
+{
+    /**
+     * An array of {@class \SimpleXMLElement} instances.
+     *
+     * @var \SimpleXMLElement[]|null
+     */
+    private $classes;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function loadClassMetadata(ClassMetadataInterface $classMetadata)
+    {
+        if (null === $this->classes) {
+            $this->classes = array();
+            $xml = $this->parseFile($this->file);
+
+            foreach ($xml->class as $class) {
+                $this->classes[(string) $class['name']] = $class;
+            }
+        }
+
+        $attributesMetadata = $classMetadata->getAttributesMetadata();
+
+        if (isset($this->classes[$classMetadata->getName()])) {
+            $xml = $this->classes[$classMetadata->getName()];
+
+            foreach ($xml->attribute as $attribute) {
+                $attributeName = (string) $attribute['name'];
+
+                if (isset($attributesMetadata[$attributeName])) {
+                    $attributeMetadata = $attributesMetadata[$attributeName];
+                } else {
+                    $attributeMetadata = new AttributeMetadata($attributeName);
+                    $classMetadata->addAttributeMetadata($attributeMetadata);
+                }
+
+                foreach ($attribute->group as $group) {
+                    $attributeMetadata->addGroup((string) $group);
+                }
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Parses a XML File.
+     *
+     * @param string $file Path of file
+     *
+     * @return \SimpleXMLElement
+     *
+     * @throws MappingException
+     */
+    private function parseFile($file)
+    {
+        try {
+            $dom = XmlUtils::loadFile($file, __DIR__.'/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd');
+        } catch (\Exception $e) {
+            throw new MappingException($e->getMessage(), $e->getCode(), $e);
+        }
+
+        return simplexml_import_dom($dom);
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/YamlFileLoader.php b/core/vendor/symfony/serializer/Mapping/Loader/YamlFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c5d5e82e63f0b0c3b5900ceaef78bb2c06cc798
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/YamlFileLoader.php
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping\Loader;
+
+use Symfony\Component\Serializer\Exception\MappingException;
+use Symfony\Component\Serializer\Mapping\AttributeMetadata;
+use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
+use Symfony\Component\Yaml\Parser;
+
+/**
+ * YAML File Loader.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class YamlFileLoader extends FileLoader
+{
+    private $yamlParser;
+
+    /**
+     * An array of YAML class descriptions
+     *
+     * @var array
+     */
+    private $classes = null;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function loadClassMetadata(ClassMetadataInterface $classMetadata)
+    {
+        if (null === $this->classes) {
+            if (!stream_is_local($this->file)) {
+                throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
+            }
+
+            if (null === $this->yamlParser) {
+                $this->yamlParser = new Parser();
+            }
+
+            $classes = $this->yamlParser->parse(file_get_contents($this->file));
+
+            if (empty($classes)) {
+                return false;
+            }
+
+            // not an array
+            if (!is_array($classes)) {
+                throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
+            }
+
+            $this->classes = $classes;
+        }
+
+        if (isset($this->classes[$classMetadata->getName()])) {
+            $yaml = $this->classes[$classMetadata->getName()];
+
+            if (isset($yaml['attributes']) && is_array($yaml['attributes'])) {
+                $attributesMetadata = $classMetadata->getAttributesMetadata();
+                foreach ($yaml['attributes'] as $attribute => $data) {
+                    if (isset($attributesMetadata[$attribute])) {
+                        $attributeMetadata = $attributesMetadata[$attribute];
+                    } else {
+                        $attributeMetadata = new AttributeMetadata($attribute);
+                        $classMetadata->addAttributeMetadata($attributeMetadata);
+                    }
+
+                    if (isset($data['groups'])) {
+                        foreach ($data['groups'] as $group) {
+                            $attributeMetadata->addGroup($group);
+                        }
+                    }
+                }
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Mapping/Loader/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd b/core/vendor/symfony/serializer/Mapping/Loader/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..cd5a9a9f0df820068edf37ab8ac789f6e5e0a5bc
--- /dev/null
+++ b/core/vendor/symfony/serializer/Mapping/Loader/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+
+<xsd:schema xmlns="http://symfony.com/schema/dic/serializer-mapping"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://symfony.com/schema/dic/serializer-mapping"
+            elementFormDefault="qualified">
+
+    <xsd:annotation>
+        <xsd:documentation><![CDATA[
+      Symfony Serializer Mapping Schema, version 1.0
+      Authors: Kévin Dunglas
+
+      A serializer mapping connects attributes with serialization groups.
+    ]]></xsd:documentation>
+    </xsd:annotation>
+
+    <xsd:element name="serializer" type="serializer" />
+
+    <xsd:complexType name="serializer">
+        <xsd:annotation>
+            <xsd:documentation><![CDATA[
+        The root element of the serializer mapping definition.
+      ]]></xsd:documentation>
+        </xsd:annotation>
+        <xsd:choice minOccurs="0" maxOccurs="unbounded">
+            <xsd:element name="class" type="class" />
+        </xsd:choice>
+    </xsd:complexType>
+
+    <xsd:complexType name="class">
+        <xsd:annotation>
+            <xsd:documentation><![CDATA[
+        Contains serialization groups for a single class.
+
+        Nested elements may be class property and/or getter definitions.
+      ]]></xsd:documentation>
+        </xsd:annotation>
+        <xsd:choice minOccurs="0" maxOccurs="unbounded">
+            <xsd:element name="attribute" type="attribute" minOccurs="0" maxOccurs="unbounded" />
+        </xsd:choice>
+        <xsd:attribute name="name" type="xsd:string" use="required" />
+    </xsd:complexType>
+
+    <xsd:complexType name="attribute">
+        <xsd:annotation>
+            <xsd:documentation><![CDATA[
+        Contains serialization groups for a attributes. The name of the attribute should be given in the "name" option.
+      ]]></xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="group" type="xsd:string" maxOccurs="unbounded" />
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required" />
+    </xsd:complexType>
+
+</xsd:schema>
diff --git a/core/vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php b/core/vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php
new file mode 100644
index 0000000000000000000000000000000000000000..27f4eee59a71a3eb5cb80dbcebcebf1c0288861e
--- /dev/null
+++ b/core/vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\NameConverter;
+
+/**
+ * CamelCase to Underscore name converter.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class CamelCaseToSnakeCaseNameConverter implements NameConverterInterface
+{
+    /**
+     * @var array|null
+     */
+    private $attributes;
+    /**
+     * @var bool
+     */
+    private $lowerCamelCase;
+
+    /**
+     * @param null|array $attributes     The list of attributes to rename or null for all attributes.
+     * @param bool       $lowerCamelCase Use lowerCamelCase style.
+     */
+    public function __construct(array $attributes = null, $lowerCamelCase = true)
+    {
+        $this->attributes = $attributes;
+        $this->lowerCamelCase = $lowerCamelCase;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function normalize($propertyName)
+    {
+        if (null === $this->attributes || in_array($propertyName, $this->attributes)) {
+            $snakeCasedName = '';
+
+            $len = strlen($propertyName);
+            for ($i = 0; $i < $len; $i++) {
+                if (ctype_upper($propertyName[$i])) {
+                    $snakeCasedName .= '_'.strtolower($propertyName[$i]);
+                } else {
+                    $snakeCasedName .= strtolower($propertyName[$i]);
+                }
+            }
+
+            return $snakeCasedName;
+        }
+
+        return $propertyName;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function denormalize($propertyName)
+    {
+        $camelCasedName = preg_replace_callback('/(^|_|\.)+(.)/', function ($match) {
+            return ('.' === $match[1] ? '_' : '').strtoupper($match[2]);
+        }, $propertyName);
+
+        if ($this->lowerCamelCase) {
+            $camelCasedName = lcfirst($camelCasedName);
+        }
+
+        if (null === $this->attributes || in_array($camelCasedName, $this->attributes)) {
+            return $this->lowerCamelCase ? lcfirst($camelCasedName) : $camelCasedName;
+        }
+
+        return $propertyName;
+    }
+}
diff --git a/core/vendor/symfony/serializer/NameConverter/NameConverterInterface.php b/core/vendor/symfony/serializer/NameConverter/NameConverterInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..306e6541218e032372a250795c4d4a24ce32d617
--- /dev/null
+++ b/core/vendor/symfony/serializer/NameConverter/NameConverterInterface.php
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\NameConverter;
+
+/**
+ * Defines the interface for property name converters.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface NameConverterInterface
+{
+    /**
+     * Converts a property name to its normalized value.
+     *
+     * @param string $propertyName
+     * @return string
+     */
+    public function normalize($propertyName);
+
+    /**
+     * Converts a property name to its denormalized value.
+     *
+     * @param string $propertyName
+     * @return string
+     */
+    public function denormalize($propertyName);
+}
diff --git a/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php b/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e89dd509614f812ea614ce893d80a3345f52cd1
--- /dev/null
+++ b/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
@@ -0,0 +1,349 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Normalizer;
+
+use Symfony\Component\Serializer\Exception\CircularReferenceException;
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Exception\LogicException;
+use Symfony\Component\Serializer\Exception\RuntimeException;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
+use Symfony\Component\Serializer\Mapping\AttributeMetadataInterface;
+use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
+use Symfony\Component\Serializer\NameConverter\NameConverterInterface;
+
+/**
+ * Normalizer implementation.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+abstract class AbstractNormalizer extends SerializerAwareNormalizer implements NormalizerInterface, DenormalizerInterface
+{
+    /**
+     * @var int
+     */
+    protected $circularReferenceLimit = 1;
+    /**
+     * @var callable
+     */
+    protected $circularReferenceHandler;
+    /**
+     * @var ClassMetadataFactoryInterface|null
+     */
+    protected $classMetadataFactory;
+    /**
+     * @var NameConverterInterface|null
+     */
+    protected $nameConverter;
+    /**
+     * @var array
+     */
+    protected $callbacks = array();
+    /**
+     * @var array
+     */
+    protected $ignoredAttributes = array();
+    /**
+     * @var array
+     */
+    protected $camelizedAttributes = array();
+
+    /**
+     * Sets the {@link ClassMetadataFactoryInterface} to use.
+     *
+     * @param ClassMetadataFactoryInterface|null $classMetadataFactory
+     * @param NameConverterInterface|null        $nameConverter
+     */
+    public function __construct(ClassMetadataFactoryInterface $classMetadataFactory = null, NameConverterInterface $nameConverter = null)
+    {
+        $this->classMetadataFactory = $classMetadataFactory;
+        $this->nameConverter = $nameConverter;
+    }
+
+    /**
+     * Set circular reference limit.
+     *
+     * @param int $circularReferenceLimit limit of iterations for the same object
+     *
+     * @return self
+     */
+    public function setCircularReferenceLimit($circularReferenceLimit)
+    {
+        $this->circularReferenceLimit = $circularReferenceLimit;
+
+        return $this;
+    }
+
+    /**
+     * Set circular reference handler.
+     *
+     * @param callable $circularReferenceHandler
+     *
+     * @return self
+     *
+     * @throws InvalidArgumentException
+     */
+    public function setCircularReferenceHandler($circularReferenceHandler)
+    {
+        if (!is_callable($circularReferenceHandler)) {
+            throw new InvalidArgumentException('The given circular reference handler is not callable.');
+        }
+
+        $this->circularReferenceHandler = $circularReferenceHandler;
+
+        return $this;
+    }
+
+    /**
+     * Set normalization callbacks.
+     *
+     * @param array $callbacks help normalize the result
+     *
+     * @return self
+     *
+     * @throws InvalidArgumentException if a non-callable callback is set
+     */
+    public function setCallbacks(array $callbacks)
+    {
+        foreach ($callbacks as $attribute => $callback) {
+            if (!is_callable($callback)) {
+                throw new InvalidArgumentException(sprintf(
+                    'The given callback for attribute "%s" is not callable.',
+                    $attribute
+                ));
+            }
+        }
+        $this->callbacks = $callbacks;
+
+        return $this;
+    }
+
+    /**
+     * Set ignored attributes for normalization and denormalization.
+     *
+     * @param array $ignoredAttributes
+     *
+     * @return self
+     */
+    public function setIgnoredAttributes(array $ignoredAttributes)
+    {
+        $this->ignoredAttributes = $ignoredAttributes;
+
+        return $this;
+    }
+
+    /**
+     * Set attributes to be camelized on denormalize.
+     *
+     * @deprecated Deprecated since version 2.7, to be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.
+     *
+     * @param array $camelizedAttributes
+     *
+     * @return self
+     *
+     * @throws LogicException
+     */
+    public function setCamelizedAttributes(array $camelizedAttributes)
+    {
+        trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
+
+        if ($this->nameConverter && !$this->nameConverter instanceof CamelCaseToSnakeCaseNameConverter) {
+            throw new LogicException(sprintf('%s cannot be called if a custom Name Converter is defined.', __METHOD__));
+        }
+
+        $attributes = array();
+        foreach ($camelizedAttributes as $camelizedAttribute) {
+            $attributes[] = lcfirst(preg_replace_callback('/(^|_|\.)+(.)/', function ($match) {
+                return ('.' === $match[1] ? '_' : '').strtoupper($match[2]);
+            }, $camelizedAttribute));
+        }
+
+        $this->nameConverter = new CamelCaseToSnakeCaseNameConverter($attributes);
+
+        return $this;
+    }
+
+    /**
+     * Detects if the configured circular reference limit is reached.
+     *
+     * @param object $object
+     * @param array  $context
+     *
+     * @return bool
+     *
+     * @throws CircularReferenceException
+     */
+    protected function isCircularReference($object, &$context)
+    {
+        $objectHash = spl_object_hash($object);
+
+        if (isset($context['circular_reference_limit'][$objectHash])) {
+            if ($context['circular_reference_limit'][$objectHash] >= $this->circularReferenceLimit) {
+                unset($context['circular_reference_limit'][$objectHash]);
+
+                return true;
+            }
+
+            $context['circular_reference_limit'][$objectHash]++;
+        } else {
+            $context['circular_reference_limit'][$objectHash] = 1;
+        }
+
+        return false;
+    }
+
+    /**
+     * Handles a circular reference.
+     *
+     * If a circular reference handler is set, it will be called. Otherwise, a
+     * {@class CircularReferenceException} will be thrown.
+     *
+     * @param object $object
+     *
+     * @return mixed
+     *
+     * @throws CircularReferenceException
+     */
+    protected function handleCircularReference($object)
+    {
+        if ($this->circularReferenceHandler) {
+            return call_user_func($this->circularReferenceHandler, $object);
+        }
+
+        throw new CircularReferenceException(sprintf('A circular reference has been detected (configured limit: %d).', $this->circularReferenceLimit));
+    }
+
+    /**
+     * Format an attribute name, for example to convert a snake_case name to camelCase.
+     *
+     * @deprecated Deprecated since version 2.7, to be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.
+     *
+     * @param string $attributeName
+     *
+     * @return string
+     */
+    protected function formatAttribute($attributeName)
+    {
+        trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
+
+        return $this->nameConverter ? $this->nameConverter->normalize($attributeName) : $attributeName;
+    }
+
+    /**
+     * Gets attributes to normalize using groups.
+     *
+     * @param string|object $classOrObject
+     * @param array         $context
+     * @param bool          $attributesAsString If false, return an array of {@link AttributeMetadataInterface}
+     *
+     * @return string[]|AttributeMetadataInterface[]|bool
+     */
+    protected function getAllowedAttributes($classOrObject, array $context, $attributesAsString = false)
+    {
+        if (!$this->classMetadataFactory || !isset($context['groups']) || !is_array($context['groups'])) {
+            return false;
+        }
+
+        $allowedAttributes = array();
+        foreach ($this->classMetadataFactory->getMetadataFor($classOrObject)->getAttributesMetadata() as $attributeMetadata) {
+            if (count(array_intersect($attributeMetadata->getGroups(), $context['groups']))) {
+                $allowedAttributes[] = $attributesAsString ? $attributeMetadata->getName() : $attributeMetadata;
+            }
+        }
+
+        return array_unique($allowedAttributes);
+    }
+
+    /**
+     * Normalizes the given data to an array. It's particularly useful during
+     * the denormalization process.
+     *
+     * @param object|array $data
+     *
+     * @return array
+     */
+    protected function prepareForDenormalization($data)
+    {
+        if (is_array($data) || is_object($data) && $data instanceof \ArrayAccess) {
+            $normalizedData = $data;
+        } elseif (is_object($data)) {
+            $normalizedData = array();
+
+            foreach ($data as $attribute => $value) {
+                $normalizedData[$attribute] = $value;
+            }
+        } else {
+            $normalizedData = array();
+        }
+
+        return $normalizedData;
+    }
+
+    /**
+     * Instantiates an object using contructor parameters when needed.
+     *
+     * This method also allows to denormalize data into an existing object if
+     * it is present in the context with the object_to_populate key.
+     *
+     * @param array            $data
+     * @param string           $class
+     * @param array            $context
+     * @param \ReflectionClass $reflectionClass
+     * @param array|bool       $allowedAttributes
+     *
+     * @return object
+     *
+     * @throws RuntimeException
+     */
+    protected function instantiateObject(array $data, $class, array &$context, \ReflectionClass $reflectionClass, $allowedAttributes)
+    {
+        if (
+            isset($context['object_to_populate']) &&
+            is_object($context['object_to_populate']) &&
+            $class === get_class($context['object_to_populate'])
+        ) {
+            return $context['object_to_populate'];
+        }
+
+        $constructor = $reflectionClass->getConstructor();
+        if ($constructor) {
+            $constructorParameters = $constructor->getParameters();
+
+            $params = array();
+            foreach ($constructorParameters as $constructorParameter) {
+                $paramName = $constructorParameter->name;
+                $key = $this->nameConverter ? $this->nameConverter->normalize($paramName) : $paramName;
+
+                $allowed = $allowedAttributes === false || in_array($paramName, $allowedAttributes);
+                $ignored = in_array($paramName, $this->ignoredAttributes);
+                if ($allowed && !$ignored && array_key_exists($key, $data)) {
+                    $params[] = $data[$key];
+                    // don't run set for a parameter passed to the constructor
+                    unset($data[$key]);
+                } elseif ($constructorParameter->isDefaultValueAvailable()) {
+                    $params[] = $constructorParameter->getDefaultValue();
+                } else {
+                    throw new RuntimeException(
+                        sprintf(
+                            'Cannot create an instance of %s from serialized data because its constructor requires parameter "%s" to be present.',
+                            $class,
+                            $constructorParameter->name
+                        )
+                    );
+                }
+            }
+
+            return $reflectionClass->newInstanceArgs($params);
+        }
+
+        return new $class();
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php b/core/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php
rename to core/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php b/core/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php
rename to core/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php b/core/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php
rename to core/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
diff --git a/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php b/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
new file mode 100644
index 0000000000000000000000000000000000000000..de4c3ece1dc98599ca9b0a2f2b1180536cc00eb5
--- /dev/null
+++ b/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
@@ -0,0 +1,178 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Normalizer;
+
+use Symfony\Component\Serializer\Exception\CircularReferenceException;
+use Symfony\Component\Serializer\Exception\LogicException;
+use Symfony\Component\Serializer\Exception\RuntimeException;
+
+/**
+ * Converts between objects with getter and setter methods and arrays.
+ *
+ * The normalization process looks at all public methods and calls the ones
+ * which have a name starting with get and take no parameters. The result is a
+ * map from property names (method name stripped of the get prefix and converted
+ * to lower case) to property values. Property values are normalized through the
+ * serializer.
+ *
+ * The denormalization first looks at the constructor of the given class to see
+ * if any of the parameters have the same name as one of the properties. The
+ * constructor is then called with all parameters or an exception is thrown if
+ * any required parameters were not present as properties. Then the denormalizer
+ * walks through the given map of property names to property values to see if a
+ * setter method exists for any of the properties. If a setter exists it is
+ * called with the property value. No automatic denormalization of the value
+ * takes place.
+ *
+ * @author Nils Adermann <naderman@naderman.de>
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class GetSetMethodNormalizer extends AbstractNormalizer
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @throws LogicException
+     * @throws CircularReferenceException
+     */
+    public function normalize($object, $format = null, array $context = array())
+    {
+        if ($this->isCircularReference($object, $context)) {
+            return $this->handleCircularReference($object);
+        }
+
+        $reflectionObject = new \ReflectionObject($object);
+        $reflectionMethods = $reflectionObject->getMethods(\ReflectionMethod::IS_PUBLIC);
+        $allowedAttributes = $this->getAllowedAttributes($object, $context, true);
+
+        $attributes = array();
+        foreach ($reflectionMethods as $method) {
+            if ($this->isGetMethod($method)) {
+                $attributeName = lcfirst(substr($method->name, 0 === strpos($method->name, 'is') ? 2 : 3));
+                if (in_array($attributeName, $this->ignoredAttributes)) {
+                    continue;
+                }
+
+                if (false !== $allowedAttributes && !in_array($attributeName, $allowedAttributes)) {
+                    continue;
+                }
+
+                $attributeValue = $method->invoke($object);
+                if (isset($this->callbacks[$attributeName])) {
+                    $attributeValue = call_user_func($this->callbacks[$attributeName], $attributeValue);
+                }
+                if (null !== $attributeValue && !is_scalar($attributeValue)) {
+                    if (!$this->serializer instanceof NormalizerInterface) {
+                        throw new LogicException(sprintf('Cannot normalize attribute "%s" because injected serializer is not a normalizer', $attributeName));
+                    }
+
+                    $attributeValue = $this->serializer->normalize($attributeValue, $format, $context);
+                }
+
+                if ($this->nameConverter) {
+                    $attributeName = $this->nameConverter->normalize($attributeName);
+                }
+
+                $attributes[$attributeName] = $attributeValue;
+            }
+        }
+
+        return $attributes;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @throws RuntimeException
+     */
+    public function denormalize($data, $class, $format = null, array $context = array())
+    {
+        $allowedAttributes = $this->getAllowedAttributes($class, $context, true);
+        $normalizedData = $this->prepareForDenormalization($data);
+
+        $reflectionClass = new \ReflectionClass($class);
+        $object = $this->instantiateObject($normalizedData, $class, $context, $reflectionClass, $allowedAttributes);
+
+        foreach ($normalizedData as $attribute => $value) {
+            if ($this->nameConverter) {
+                $attribute = $this->nameConverter->denormalize($attribute);
+            }
+
+            $allowed = $allowedAttributes === false || in_array($attribute, $allowedAttributes);
+            $ignored = in_array($attribute, $this->ignoredAttributes);
+
+            if ($allowed && !$ignored) {
+                $setter = 'set'.ucfirst($attribute);
+
+                if (method_exists($object, $setter)) {
+                    $object->$setter($value);
+                }
+            }
+        }
+
+        return $object;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsNormalization($data, $format = null)
+    {
+        return is_object($data) && !$data instanceof \Traversable && $this->supports(get_class($data));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsDenormalization($data, $type, $format = null)
+    {
+        return $this->supports($type);
+    }
+
+    /**
+     * Checks if the given class has any get{Property} method.
+     *
+     * @param string $class
+     *
+     * @return bool
+     */
+    private function supports($class)
+    {
+        $class = new \ReflectionClass($class);
+        $methods = $class->getMethods(\ReflectionMethod::IS_PUBLIC);
+        foreach ($methods as $method) {
+            if ($this->isGetMethod($method)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks if a method's name is get.* or is.*, and can be called without parameters.
+     *
+     * @param \ReflectionMethod $method the method to check
+     *
+     * @return bool whether the method is a getter or boolean getter.
+     */
+    private function isGetMethod(\ReflectionMethod $method)
+    {
+        $methodLength = strlen($method->name);
+
+        return (
+            ((0 === strpos($method->name, 'get') && 3 < $methodLength) ||
+            (0 === strpos($method->name, 'is') && 2 < $methodLength)) &&
+            0 === $method->getNumberOfRequiredParameters()
+        );
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php b/core/vendor/symfony/serializer/Normalizer/NormalizableInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php
rename to core/vendor/symfony/serializer/Normalizer/NormalizableInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php b/core/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php
rename to core/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
diff --git a/core/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php b/core/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba84ac717f075fd1b243e23a5665a4b6e32e3aad
--- /dev/null
+++ b/core/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php
@@ -0,0 +1,162 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Normalizer;
+
+use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+use Symfony\Component\Serializer\Exception\CircularReferenceException;
+use Symfony\Component\Serializer\Exception\LogicException;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
+use Symfony\Component\Serializer\NameConverter\NameConverterInterface;
+
+/**
+ * Converts between objects and arrays using the PropertyAccess component.
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ObjectNormalizer extends AbstractNormalizer
+{
+    /**
+     * @var PropertyAccessorInterface
+     */
+    protected $propertyAccessor;
+
+    public function __construct(ClassMetadataFactoryInterface $classMetadataFactory = null, NameConverterInterface $nameConverter = null, PropertyAccessorInterface $propertyAccessor = null)
+    {
+        parent::__construct($classMetadataFactory, $nameConverter);
+
+        $this->propertyAccessor = $propertyAccessor ?: PropertyAccess::createPropertyAccessor();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsNormalization($data, $format = null)
+    {
+        return is_object($data) && !$data instanceof \Traversable;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @throws CircularReferenceException
+     */
+    public function normalize($object, $format = null, array $context = array())
+    {
+        if ($this->isCircularReference($object, $context)) {
+            return $this->handleCircularReference($object);
+        }
+
+        $data = array();
+        $attributes = $this->getAllowedAttributes($object, $context, true);
+
+        // If not using groups, detect manually
+        if (false === $attributes) {
+            $attributes = array();
+
+            // methods
+            $reflClass = new \ReflectionClass($object);
+            foreach ($reflClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflMethod) {
+                if (
+                    !$reflMethod->isConstructor() &&
+                    !$reflMethod->isDestructor() &&
+                    0 === $reflMethod->getNumberOfRequiredParameters()
+                ) {
+                    $name = $reflMethod->getName();
+
+                    if (strpos($name, 'get') === 0 || strpos($name, 'has') === 0) {
+                        // getters and hassers
+                        $attributes[lcfirst(substr($name, 3))] = true;
+                    } elseif (strpos($name, 'is') === 0) {
+                        // issers
+                        $attributes[lcfirst(substr($name, 2))] = true;
+                    }
+                }
+            }
+
+            // properties
+            foreach ($reflClass->getProperties(\ReflectionProperty::IS_PUBLIC) as $reflProperty) {
+                $attributes[$reflProperty->getName()] = true;
+            }
+
+            $attributes = array_keys($attributes);
+        }
+
+        foreach ($attributes as $attribute) {
+            if (in_array($attribute, $this->ignoredAttributes)) {
+                continue;
+            }
+
+            $attributeValue = $this->propertyAccessor->getValue($object, $attribute);
+
+            if (isset($this->callbacks[$attribute])) {
+                $attributeValue = call_user_func($this->callbacks[$attribute], $attributeValue);
+            }
+
+            if (null !== $attributeValue && !is_scalar($attributeValue)) {
+                if (!$this->serializer instanceof NormalizerInterface) {
+                    throw new LogicException(sprintf('Cannot normalize attribute "%s" because injected serializer is not a normalizer', $attribute));
+                }
+
+                $attributeValue = $this->serializer->normalize($attributeValue, $format, $context);
+            }
+
+            if ($this->nameConverter) {
+                $attribute = $this->nameConverter->normalize($attribute);
+            }
+
+            $data[$attribute] = $attributeValue;
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsDenormalization($data, $type, $format = null)
+    {
+        return class_exists($type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function denormalize($data, $class, $format = null, array $context = array())
+    {
+        $allowedAttributes = $this->getAllowedAttributes($class, $context, true);
+        $normalizedData = $this->prepareForDenormalization($data);
+
+        $reflectionClass = new \ReflectionClass($class);
+        $object = $this->instantiateObject($normalizedData, $class, $context, $reflectionClass, $allowedAttributes);
+
+        foreach ($normalizedData as $attribute => $value) {
+            if ($this->nameConverter) {
+                $attribute = $this->nameConverter->denormalize($attribute);
+            }
+
+            $allowed = $allowedAttributes === false || in_array($attribute, $allowedAttributes);
+            $ignored = in_array($attribute, $this->ignoredAttributes);
+
+            if ($allowed && !$ignored) {
+                try {
+                    $this->propertyAccessor->setValue($object, $attribute, $value);
+                } catch (NoSuchPropertyException $exception) {
+                    // Properties not found are ignored
+                }
+            }
+        }
+
+        return $object;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php b/core/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
similarity index 50%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php
rename to core/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
index b48b54ad80c4fe1a9559140ce9e19e1a8b4c097e..c8e83d1f790f5dd181f0ad1d05c6e6dcee5f15e1 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php
+++ b/core/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Serializer\Normalizer;
 
-use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Exception\CircularReferenceException;
 use Symfony\Component\Serializer\Exception\LogicException;
 use Symfony\Component\Serializer\Exception\RuntimeException;
 
@@ -30,74 +30,42 @@
  * property with the corresponding name exists. If found, the property gets the value.
  *
  * @author Matthieu Napoli <matthieu@mnapoli.fr>
+ * @author Kévin Dunglas <dunglas@gmail.com>
  */
-class PropertyNormalizer extends SerializerAwareNormalizer implements NormalizerInterface, DenormalizerInterface
+class PropertyNormalizer extends AbstractNormalizer
 {
-    private $callbacks = array();
-    private $ignoredAttributes = array();
-    private $camelizedAttributes = array();
-
     /**
-     * Set normalization callbacks
-     *
-     * @param array $callbacks help normalize the result
+     * {@inheritdoc}
      *
-     * @throws InvalidArgumentException if a non-callable callback is set
+     * @throws CircularReferenceException
      */
-    public function setCallbacks(array $callbacks)
+    public function normalize($object, $format = null, array $context = array())
     {
-        foreach ($callbacks as $attribute => $callback) {
-            if (!is_callable($callback)) {
-                throw new InvalidArgumentException(sprintf(
-                    'The given callback for attribute "%s" is not callable.',
-                    $attribute
-                ));
-            }
+        if ($this->isCircularReference($object, $context)) {
+            return $this->handleCircularReference($object);
         }
-        $this->callbacks = $callbacks;
-    }
-
-    /**
-     * Set ignored attributes for normalization.
-     *
-     * @param array $ignoredAttributes
-     */
-    public function setIgnoredAttributes(array $ignoredAttributes)
-    {
-        $this->ignoredAttributes = $ignoredAttributes;
-    }
 
-    /**
-     * Set attributes to be camelized on denormalize
-     *
-     * @param array $camelizedAttributes
-     */
-    public function setCamelizedAttributes(array $camelizedAttributes)
-    {
-        $this->camelizedAttributes = $camelizedAttributes;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function normalize($object, $format = null, array $context = array())
-    {
         $reflectionObject = new \ReflectionObject($object);
         $attributes = array();
+        $allowedAttributes = $this->getAllowedAttributes($object, $context, true);
 
         foreach ($reflectionObject->getProperties() as $property) {
             if (in_array($property->name, $this->ignoredAttributes)) {
                 continue;
             }
 
+            if (false !== $allowedAttributes && !in_array($property->name, $allowedAttributes)) {
+                continue;
+            }
+
             // Override visibility
-            if (! $property->isPublic()) {
+            if (!$property->isPublic()) {
                 $property->setAccessible(true);
             }
 
             $attributeValue = $property->getValue($object);
 
-            if (array_key_exists($property->name, $this->callbacks)) {
+            if (isset($this->callbacks[$property->name])) {
                 $attributeValue = call_user_func($this->callbacks[$property->name], $attributeValue);
             }
             if (null !== $attributeValue && !is_scalar($attributeValue)) {
@@ -105,10 +73,15 @@ public function normalize($object, $format = null, array $context = array())
                     throw new LogicException(sprintf('Cannot normalize attribute "%s" because injected serializer is not a normalizer', $property->name));
                 }
 
-                $attributeValue = $this->serializer->normalize($attributeValue, $format);
+                $attributeValue = $this->serializer->normalize($attributeValue, $format, $context);
+            }
+
+            $propertyName = $property->name;
+            if ($this->nameConverter) {
+                $propertyName = $this->nameConverter->normalize($propertyName);
             }
 
-            $attributes[$property->name] = $attributeValue;
+            $attributes[$propertyName] = $attributeValue;
         }
 
         return $attributes;
@@ -116,46 +89,29 @@ public function normalize($object, $format = null, array $context = array())
 
     /**
      * {@inheritdoc}
+     *
+     * @throws RuntimeException
      */
     public function denormalize($data, $class, $format = null, array $context = array())
     {
-        $reflectionClass = new \ReflectionClass($class);
-        $constructor = $reflectionClass->getConstructor();
-
-        if ($constructor) {
-            $constructorParameters = $constructor->getParameters();
-
-            $params = array();
-            foreach ($constructorParameters as $constructorParameter) {
-                $paramName = lcfirst($this->formatAttribute($constructorParameter->name));
-
-                if (isset($data[$paramName])) {
-                    $params[] = $data[$paramName];
-                    // don't run set for a parameter passed to the constructor
-                    unset($data[$paramName]);
-                } elseif (!$constructorParameter->isOptional()) {
-                    throw new RuntimeException(sprintf(
-                        'Cannot create an instance of %s from serialized data because '.
-                        'its constructor requires parameter "%s" to be present.',
-                        $class,
-                        $constructorParameter->name
-                    ));
-                }
-            }
+        $allowedAttributes = $this->getAllowedAttributes($class, $context, true);
+        $data = $this->prepareForDenormalization($data);
 
-            $object = $reflectionClass->newInstanceArgs($params);
-        } else {
-            $object = new $class();
-        }
+        $reflectionClass = new \ReflectionClass($class);
+        $object = $this->instantiateObject($data, $class, $context, $reflectionClass, $allowedAttributes);
 
         foreach ($data as $propertyName => $value) {
-            $propertyName = lcfirst($this->formatAttribute($propertyName));
+            if ($this->nameConverter) {
+                $propertyName = $this->nameConverter->denormalize($propertyName);
+            }
 
-            if ($reflectionClass->hasProperty($propertyName)) {
+            $allowed = $allowedAttributes === false || in_array($propertyName, $allowedAttributes);
+            $ignored = in_array($propertyName, $this->ignoredAttributes);
+            if ($allowed && !$ignored && $reflectionClass->hasProperty($propertyName)) {
                 $property = $reflectionClass->getProperty($propertyName);
 
                 // Override visibility
-                if (! $property->isPublic()) {
+                if (!$property->isPublic()) {
                     $property->setAccessible(true);
                 }
 
@@ -171,7 +127,7 @@ public function denormalize($data, $class, $format = null, array $context = arra
      */
     public function supportsNormalization($data, $format = null)
     {
-        return is_object($data) && $this->supports(get_class($data));
+        return is_object($data) && !$data instanceof \Traversable && $this->supports(get_class($data));
     }
 
     /**
@@ -182,24 +138,6 @@ public function supportsDenormalization($data, $type, $format = null)
         return $this->supports($type);
     }
 
-    /**
-     * Format an attribute name, for example to convert a snake_case name to camelCase.
-     *
-     * @param string $attributeName
-     *
-     * @return string
-     */
-    protected function formatAttribute($attributeName)
-    {
-        if (in_array($attributeName, $this->camelizedAttributes)) {
-            return preg_replace_callback('/(^|_|\.)+(.)/', function ($match) {
-                return ('.' === $match[1] ? '_' : '').strtoupper($match[2]);
-            }, $attributeName);
-        }
-
-        return $attributeName;
-    }
-
     /**
      * Checks if the given class has any non-static property.
      *
@@ -213,7 +151,7 @@ private function supports($class)
 
         // We look for at least one non-static property
         foreach ($class->getProperties() as $property) {
-            if (! $property->isStatic()) {
+            if (!$property->isStatic()) {
                 return true;
             }
         }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php b/core/vendor/symfony/serializer/Normalizer/SerializerAwareNormalizer.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php
rename to core/vendor/symfony/serializer/Normalizer/SerializerAwareNormalizer.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/README.md b/core/vendor/symfony/serializer/README.md
similarity index 81%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/README.md
rename to core/vendor/symfony/serializer/README.md
index 4d8ab012e9b86e1f4dbd319c10a6670800b01aa7..156a2884264381be65240213ccbcdccdabca06e3 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/README.md
+++ b/core/vendor/symfony/serializer/README.md
@@ -1,7 +1,7 @@
 Serializer Component
 ====================
 
-With the Serializer component its possible to handle serializing data structures,
+With the Serializer component it's possible to handle serializing data structures,
 including object graphs, into array structures or other formats like XML and JSON.
 It can also handle deserializing XML and JSON back to object graphs.
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php b/core/vendor/symfony/serializer/Serializer.php
similarity index 93%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php
rename to core/vendor/symfony/serializer/Serializer.php
index 09ec77129a9c7495a6ea82a8d49a8fc2b9d5d9c1..4aeddabe7514ab5245518ddadf38e3361ee36f8b 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php
+++ b/core/vendor/symfony/serializer/Serializer.php
@@ -33,6 +33,7 @@
  * @author Jordi Boggiano <j.boggiano@seld.be>
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  * @author Lukas Kahwe Smith <smith@pooteeweet.org>
+ * @author Kévin Dunglas <dunglas@gmail.com>
  */
 class Serializer implements SerializerInterface, NormalizerInterface, DenormalizerInterface, EncoderInterface, DecoderInterface
 {
@@ -118,6 +119,11 @@ final public function deserialize($data, $type, $format, array $context = array(
      */
     public function normalize($data, $format = null, array $context = array())
     {
+        // If a normalizer supports the given data, use it
+        if ($normalizer = $this->getNormalizer($data, $format)) {
+            return $normalizer->normalize($data, $format, $context);
+        }
+
         if (null === $data || is_scalar($data)) {
             return $data;
         }
@@ -172,21 +178,25 @@ public function supportsDenormalization($data, $type, $format = null)
     /**
      * Returns a matching normalizer.
      *
-     * @param object $data   The object to get the serializer for
+     * @param mixed  $data   Data to get the serializer for
      * @param string $format format name, present to give the option to normalizers to act differently based on formats
      *
      * @return NormalizerInterface|null
      */
     private function getNormalizer($data, $format)
     {
-        $class = get_class($data);
-        if (isset($this->normalizerCache[$class][$format])) {
-            return $this->normalizerCache[$class][$format];
+        if ($isObject = is_object($data)) {
+            $class = get_class($data);
+            if (isset($this->normalizerCache[$class][$format])) {
+                return $this->normalizerCache[$class][$format];
+            }
         }
 
         foreach ($this->normalizers as $normalizer) {
             if ($normalizer instanceof NormalizerInterface && $normalizer->supportsNormalization($data, $format)) {
-                $this->normalizerCache[$class][$format] = $normalizer;
+                if ($isObject) {
+                    $this->normalizerCache[$class][$format] = $normalizer;
+                }
 
                 return $normalizer;
             }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerAwareInterface.php b/core/vendor/symfony/serializer/SerializerAwareInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerAwareInterface.php
rename to core/vendor/symfony/serializer/SerializerAwareInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php b/core/vendor/symfony/serializer/SerializerInterface.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php
rename to core/vendor/symfony/serializer/SerializerInterface.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore b/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
deleted file mode 100644
index a588713f373ef9e3c4a4e9ad913f1cb224a2e69d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
+++ /dev/null
@@ -1,318 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Serializer\Normalizer;
-
-use Symfony\Component\Serializer\Exception\CircularReferenceException;
-use Symfony\Component\Serializer\Exception\InvalidArgumentException;
-use Symfony\Component\Serializer\Exception\LogicException;
-use Symfony\Component\Serializer\Exception\RuntimeException;
-
-/**
- * Converts between objects with getter and setter methods and arrays.
- *
- * The normalization process looks at all public methods and calls the ones
- * which have a name starting with get and take no parameters. The result is a
- * map from property names (method name stripped of the get prefix and converted
- * to lower case) to property values. Property values are normalized through the
- * serializer.
- *
- * The denormalization first looks at the constructor of the given class to see
- * if any of the parameters have the same name as one of the properties. The
- * constructor is then called with all parameters or an exception is thrown if
- * any required parameters were not present as properties. Then the denormalizer
- * walks through the given map of property names to property values to see if a
- * setter method exists for any of the properties. If a setter exists it is
- * called with the property value. No automatic denormalization of the value
- * takes place.
- *
- * @author Nils Adermann <naderman@naderman.de>
- * @author Kévin Dunglas <dunglas@gmail.com>
- */
-class GetSetMethodNormalizer extends SerializerAwareNormalizer implements NormalizerInterface, DenormalizerInterface
-{
-    protected $circularReferenceLimit = 1;
-    protected $circularReferenceHandler;
-    protected $callbacks = array();
-    protected $ignoredAttributes = array();
-    protected $camelizedAttributes = array();
-
-    /**
-     * Set circular reference limit.
-     *
-     * @param $circularReferenceLimit limit of iterations for the same object
-     *
-     * @return self
-     */
-    public function setCircularReferenceLimit($circularReferenceLimit)
-    {
-        $this->circularReferenceLimit = $circularReferenceLimit;
-
-        return $this;
-    }
-
-    /**
-     * Set circular reference handler.
-     *
-     * @param callable $circularReferenceHandler
-     *
-     * @return self
-     *
-     * @throws InvalidArgumentException
-     */
-    public function setCircularReferenceHandler($circularReferenceHandler)
-    {
-        if (!is_callable($circularReferenceHandler)) {
-            throw new InvalidArgumentException('The given circular reference handler is not callable.');
-        }
-
-        $this->circularReferenceHandler = $circularReferenceHandler;
-
-        return $this;
-    }
-
-    /**
-     * Set normalization callbacks.
-     *
-     * @param callable[] $callbacks help normalize the result
-     *
-     * @throws InvalidArgumentException if a non-callable callback is set
-     *
-     * @return self
-     */
-    public function setCallbacks(array $callbacks)
-    {
-        foreach ($callbacks as $attribute => $callback) {
-            if (!is_callable($callback)) {
-                throw new InvalidArgumentException(sprintf('The given callback for attribute "%s" is not callable.', $attribute));
-            }
-        }
-        $this->callbacks = $callbacks;
-
-        return $this;
-    }
-
-    /**
-     * Set ignored attributes for normalization.
-     *
-     * @param array $ignoredAttributes
-     *
-     * @return self
-     */
-    public function setIgnoredAttributes(array $ignoredAttributes)
-    {
-        $this->ignoredAttributes = $ignoredAttributes;
-
-        return $this;
-    }
-
-    /**
-     * Set attributes to be camelized on denormalize.
-     *
-     * @param array $camelizedAttributes
-     *
-     * @return self
-     */
-    public function setCamelizedAttributes(array $camelizedAttributes)
-    {
-        $this->camelizedAttributes = $camelizedAttributes;
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function normalize($object, $format = null, array $context = array())
-    {
-        $objectHash = spl_object_hash($object);
-
-        if (isset($context['circular_reference_limit'][$objectHash])) {
-            if ($context['circular_reference_limit'][$objectHash] >= $this->circularReferenceLimit) {
-                unset($context['circular_reference_limit'][$objectHash]);
-
-                if ($this->circularReferenceHandler) {
-                    return call_user_func($this->circularReferenceHandler, $object);
-                }
-
-                throw new CircularReferenceException(sprintf('A circular reference has been detected (configured limit: %d).', $this->circularReferenceLimit));
-            }
-
-            $context['circular_reference_limit'][$objectHash]++;
-        } else {
-            $context['circular_reference_limit'][$objectHash] = 1;
-        }
-
-        $reflectionObject = new \ReflectionObject($object);
-        $reflectionMethods = $reflectionObject->getMethods(\ReflectionMethod::IS_PUBLIC);
-
-        $attributes = array();
-        foreach ($reflectionMethods as $method) {
-            if ($this->isGetMethod($method)) {
-                $attributeName = lcfirst(substr($method->name, 0 === strpos($method->name, 'is') ? 2 : 3));
-
-                if (in_array($attributeName, $this->ignoredAttributes)) {
-                    continue;
-                }
-
-                $attributeValue = $method->invoke($object);
-                if (array_key_exists($attributeName, $this->callbacks)) {
-                    $attributeValue = call_user_func($this->callbacks[$attributeName], $attributeValue);
-                }
-                if (null !== $attributeValue && !is_scalar($attributeValue)) {
-                    if (!$this->serializer instanceof NormalizerInterface) {
-                        throw new LogicException(sprintf('Cannot normalize attribute "%s" because injected serializer is not a normalizer', $attributeName));
-                    }
-
-                    $attributeValue = $this->serializer->normalize($attributeValue, $format, $context);
-                }
-
-                $attributes[$attributeName] = $attributeValue;
-            }
-        }
-
-        return $attributes;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function denormalize($data, $class, $format = null, array $context = array())
-    {
-        if (is_array($data) || is_object($data) && $data instanceof \ArrayAccess) {
-            $normalizedData = $data;
-        } elseif (is_object($data)) {
-            $normalizedData = array();
-
-            foreach ($data as $attribute => $value) {
-                $normalizedData[$attribute] = $value;
-            }
-        } else {
-            $normalizedData = array();
-        }
-
-        $reflectionClass = new \ReflectionClass($class);
-        $constructor = $reflectionClass->getConstructor();
-
-        if ($constructor) {
-            $constructorParameters = $constructor->getParameters();
-
-            $params = array();
-            foreach ($constructorParameters as $constructorParameter) {
-                $paramName = lcfirst($this->formatAttribute($constructorParameter->name));
-
-                if (isset($normalizedData[$paramName])) {
-                    $params[] = $normalizedData[$paramName];
-                    // don't run set for a parameter passed to the constructor
-                    unset($normalizedData[$paramName]);
-                } elseif ($constructorParameter->isOptional()) {
-                    $params[] = $constructorParameter->getDefaultValue();
-                } else {
-                    throw new RuntimeException(
-                        'Cannot create an instance of '.$class.
-                        ' from serialized data because its constructor requires '.
-                        'parameter "'.$constructorParameter->name.
-                        '" to be present.');
-                }
-            }
-
-            $object = $reflectionClass->newInstanceArgs($params);
-        } else {
-            $object = new $class();
-        }
-
-        foreach ($normalizedData as $attribute => $value) {
-            $setter = 'set'.$this->formatAttribute($attribute);
-
-            if (method_exists($object, $setter)) {
-                $object->$setter($value);
-            }
-        }
-
-        return $object;
-    }
-
-    /**
-     * Format attribute name to access parameters or methods
-     * As option, if attribute name is found on camelizedAttributes array
-     * returns attribute name in camelcase format.
-     *
-     * @param string $attributeName
-     *
-     * @return string
-     */
-    protected function formatAttribute($attributeName)
-    {
-        if (in_array($attributeName, $this->camelizedAttributes)) {
-            return preg_replace_callback(
-                '/(^|_|\.)+(.)/', function ($match) {
-                    return ('.' === $match[1] ? '_' : '').strtoupper($match[2]);
-                }, $attributeName
-            );
-        }
-
-        return $attributeName;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function supportsNormalization($data, $format = null)
-    {
-        return is_object($data) && $this->supports(get_class($data));
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function supportsDenormalization($data, $type, $format = null)
-    {
-        return $this->supports($type);
-    }
-
-    /**
-     * Checks if the given class has any get{Property} method.
-     *
-     * @param string $class
-     *
-     * @return bool
-     */
-    private function supports($class)
-    {
-        $class = new \ReflectionClass($class);
-        $methods = $class->getMethods(\ReflectionMethod::IS_PUBLIC);
-        foreach ($methods as $method) {
-            if ($this->isGetMethod($method)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Checks if a method's name is get.* or is.*, and can be called without parameters.
-     *
-     * @param \ReflectionMethod $method the method to check
-     *
-     * @return bool whether the method is a getter or boolean getter.
-     */
-    private function isGetMethod(\ReflectionMethod $method)
-    {
-        $methodLength = strlen($method->name);
-
-        return (
-            ((0 === strpos($method->name, 'get') && 3 < $methodLength) ||
-            (0 === strpos($method->name, 'is') && 2 < $methodLength)) &&
-            0 === $method->getNumberOfRequiredParameters()
-        );
-    }
-}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php
deleted file mode 100644
index a7ad7ca83e4b5fd662d48367972d11ac6743cef6..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Serializer\Tests\Normalizer;
-
-use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
-
-class PropertyNormalizerTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var PropertyNormalizer
-     */
-    private $normalizer;
-
-    protected function setUp()
-    {
-        $this->normalizer = new PropertyNormalizer();
-        $this->normalizer->setSerializer($this->getMock('Symfony\Component\Serializer\Serializer'));
-    }
-
-    public function testNormalize()
-    {
-        $obj = new PropertyDummy();
-        $obj->foo = 'foo';
-        $obj->setBar('bar');
-        $obj->setCamelCase('camelcase');
-        $this->assertEquals(
-            array('foo' => 'foo', 'bar' => 'bar', 'camelCase' => 'camelcase'),
-            $this->normalizer->normalize($obj, 'any')
-        );
-    }
-
-    public function testDenormalize()
-    {
-        $obj = $this->normalizer->denormalize(
-            array('foo' => 'foo', 'bar' => 'bar'),
-            __NAMESPACE__.'\PropertyDummy',
-            'any'
-        );
-        $this->assertEquals('foo', $obj->foo);
-        $this->assertEquals('bar', $obj->getBar());
-    }
-
-    public function testDenormalizeOnCamelCaseFormat()
-    {
-        $this->normalizer->setCamelizedAttributes(array('camel_case'));
-        $obj = $this->normalizer->denormalize(
-            array('camel_case' => 'value'),
-            __NAMESPACE__.'\PropertyDummy'
-        );
-        $this->assertEquals('value', $obj->getCamelCase());
-    }
-
-    /**
-     * @dataProvider attributeProvider
-     */
-    public function testFormatAttribute($attribute, $camelizedAttributes, $result)
-    {
-        $r = new \ReflectionObject($this->normalizer);
-        $m = $r->getMethod('formatAttribute');
-        $m->setAccessible(true);
-
-        $this->normalizer->setCamelizedAttributes($camelizedAttributes);
-        $this->assertEquals($m->invoke($this->normalizer, $attribute, $camelizedAttributes), $result);
-    }
-
-    public function attributeProvider()
-    {
-        return array(
-            array('attribute_test', array('attribute_test'),'AttributeTest'),
-            array('attribute_test', array('any'),'attribute_test'),
-            array('attribute', array('attribute'),'Attribute'),
-            array('attribute', array(), 'attribute'),
-        );
-    }
-
-    public function testConstructorDenormalize()
-    {
-        $obj = $this->normalizer->denormalize(
-            array('foo' => 'foo', 'bar' => 'bar'),
-            __NAMESPACE__.'\PropertyConstructorDummy',
-            'any'
-        );
-        $this->assertEquals('foo', $obj->getFoo());
-        $this->assertEquals('bar', $obj->getBar());
-    }
-
-    /**
-     * @dataProvider provideCallbacks
-     */
-    public function testCallbacks($callbacks, $value, $result, $message)
-    {
-        $this->normalizer->setCallbacks($callbacks);
-
-        $obj = new PropertyConstructorDummy('', $value);
-
-        $this->assertEquals(
-            $result,
-            $this->normalizer->normalize($obj, 'any'),
-            $message
-        );
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUncallableCallbacks()
-    {
-        $this->normalizer->setCallbacks(array('bar' => null));
-
-        $obj = new PropertyConstructorDummy('baz', 'quux');
-
-        $this->normalizer->normalize($obj, 'any');
-    }
-
-    public function testIgnoredAttributes()
-    {
-        $this->normalizer->setIgnoredAttributes(array('foo', 'bar', 'camelCase'));
-
-        $obj = new PropertyDummy();
-        $obj->foo = 'foo';
-        $obj->setBar('bar');
-
-        $this->assertEquals(
-            array(),
-            $this->normalizer->normalize($obj, 'any')
-        );
-    }
-
-    public function provideCallbacks()
-    {
-        return array(
-            array(
-                array(
-                    'bar' => function ($bar) {
-                        return 'baz';
-                    },
-                ),
-                'baz',
-                array('foo' => '', 'bar' => 'baz'),
-                'Change a string',
-            ),
-            array(
-                array(
-                    'bar' => function ($bar) {
-                        return;
-                    },
-                ),
-                'baz',
-                array('foo' => '', 'bar' => null),
-                'Null an item',
-            ),
-            array(
-                array(
-                    'bar' => function ($bar) {
-                        return $bar->format('d-m-Y H:i:s');
-                    },
-                ),
-                new \DateTime('2011-09-10 06:30:00'),
-                array('foo' => '', 'bar' => '10-09-2011 06:30:00'),
-                'Format a date',
-            ),
-            array(
-                array(
-                    'bar' => function ($bars) {
-                        $foos = '';
-                        foreach ($bars as $bar) {
-                            $foos .= $bar->getFoo();
-                        }
-
-                        return $foos;
-                    },
-                ),
-                array(new PropertyConstructorDummy('baz', ''), new PropertyConstructorDummy('quux', '')),
-                array('foo' => '', 'bar' => 'bazquux'),
-                'Collect a property',
-            ),
-            array(
-                array(
-                    'bar' => function ($bars) {
-                        return count($bars);
-                    },
-                ),
-                array(new PropertyConstructorDummy('baz', ''), new PropertyConstructorDummy('quux', '')),
-                array('foo' => '', 'bar' => 2),
-                'Count a property',
-            ),
-        );
-    }
-
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     * @expectedExceptionMessage Cannot normalize attribute "bar" because injected serializer is not a normalizer
-     */
-    public function testUnableToNormalizeObjectAttribute()
-    {
-        $serializer = $this->getMock('Symfony\Component\Serializer\SerializerInterface');
-        $this->normalizer->setSerializer($serializer);
-
-        $obj = new PropertyDummy();
-        $object = new \stdClass();
-        $obj->setBar($object);
-
-        $this->normalizer->normalize($obj, 'any');
-    }
-}
-
-class PropertyDummy
-{
-    public $foo;
-    private $bar;
-    protected $camelCase;
-
-    public function getBar()
-    {
-        return $this->bar;
-    }
-
-    public function setBar($bar)
-    {
-        $this->bar = $bar;
-    }
-
-    public function getCamelCase()
-    {
-        return $this->camelCase;
-    }
-
-    public function setCamelCase($camelCase)
-    {
-        $this->camelCase = $camelCase;
-    }
-}
-
-class PropertyConstructorDummy
-{
-    protected $foo;
-    private $bar;
-
-    public function __construct($foo, $bar)
-    {
-        $this->foo = $foo;
-        $this->bar = $bar;
-    }
-
-    public function getFoo()
-    {
-        return $this->foo;
-    }
-
-    public function getBar()
-    {
-        return $this->bar;
-    }
-}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/composer.json b/core/vendor/symfony/serializer/Symfony/Component/Serializer/composer.json
deleted file mode 100644
index e073e24f280518ba4cf09782a7735285796c4a56..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/composer.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-    "name": "symfony/serializer",
-    "type": "library",
-    "description": "Symfony Serializer Component",
-    "keywords": [],
-    "homepage": "http://symfony.com",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Fabien Potencier",
-            "email": "fabien@symfony.com"
-        },
-        {
-            "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.3"
-    },
-    "require-dev": {
-        "symfony/phpunit-bridge": "~2.7"
-    },
-    "autoload": {
-        "psr-0": { "Symfony\\Component\\Serializer\\": "" }
-    },
-    "target-dir": "Symfony/Component/Serializer",
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.6-dev"
-        }
-    }
-}
diff --git a/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php b/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b427325f08640c68240b939e9da4406cc9c0fc3e
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Annotation;
+
+use Symfony\Component\Serializer\Annotation\Groups;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class GroupsTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testEmptyGroupsParameter()
+    {
+        new Groups(array('value' => array()));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testNotAnArrayGroupsParameter()
+    {
+        new Groups(array('value' => 'coopTilleuls'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testInvalidGroupsParameter()
+    {
+        new Groups(array('value' => array('a', 1, new \stdClass())));
+    }
+
+    public function testGroupsParameters()
+    {
+        $validData = array('a', 'b');
+
+        $groups = new Groups(array('value' => $validData));
+        $this->assertEquals($validData, $groups->getGroups());
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php b/core/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php
rename to core/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php b/core/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
similarity index 97%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php
rename to core/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
index 67cf7ff072dbd9d702687c4656b9a32c4ecad584..422021ae748762f83280cb7b7f6de7b9c4354877 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php
+++ b/core/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
@@ -137,6 +137,26 @@ public function testEncodeXmlAttributes()
         $this->assertSame($expected, $this->encoder->encode($array, 'xml', $context));
     }
 
+    public function testContext()
+    {
+        $array = array('person' => array('name' => 'George Abitbol'));
+        $expected = <<<XML
+<?xml version="1.0"?>
+<response>
+  <person>
+    <name>George Abitbol</name>
+  </person>
+</response>
+
+XML;
+
+        $context = array(
+            'xml_format_output' => true,
+        );
+
+        $this->assertSame($expected, $this->encoder->encode($array, 'xml', $context));
+    }
+
     public function testEncodeScalarRootAttributes()
     {
         $array = array(
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/CircularReferenceDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/CircularReferenceDummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/CircularReferenceDummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/CircularReferenceDummy.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/DenormalizableDummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/DenormalizableDummy.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/Dummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/Dummy.php
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummy.php
new file mode 100644
index 0000000000000000000000000000000000000000..37bfa7eb3f07550709624bb43a4665e73d36044f
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummy.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+use Symfony\Component\Serializer\Annotation\Groups;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class GroupDummy extends GroupDummyParent implements GroupDummyInterface
+{
+    /**
+     * @Groups({"a"})
+     */
+    private $foo;
+    /**
+     * @Groups({"b", "c", "name_converter"})
+     */
+    protected $bar;
+    private $fooBar;
+    private $symfony;
+
+    /**
+     * @Groups({"b"})
+     */
+    public function setBar($bar)
+    {
+        $this->bar = $bar;
+    }
+
+    /**
+     * @Groups({"c"})
+     */
+    public function getBar()
+    {
+        return $this->bar;
+    }
+
+    public function setFoo($foo)
+    {
+        $this->foo = $foo;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function setFooBar($fooBar)
+    {
+        $this->fooBar = $fooBar;
+    }
+
+    /**
+     * @Groups({"a", "b", "name_converter"})
+     */
+    public function isFooBar()
+    {
+        return $this->fooBar;
+    }
+
+    public function setSymfony($symfony)
+    {
+        $this->symfony = $symfony;
+    }
+
+    public function getSymfony()
+    {
+        return $this->symfony;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyInterface.php b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..a60629e6dd50911b205ed50f667d7c3778a6e0d5
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+use Symfony\Component\Serializer\Annotation\Groups;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+interface GroupDummyInterface
+{
+    /**
+     * @Groups({"a", "name_converter"})
+     */
+    public function getSymfony();
+}
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyParent.php b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyParent.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd24233993b9b7c0101cda591278baa80c92174b
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/GroupDummyParent.php
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+use Symfony\Component\Serializer\Annotation\Groups;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class GroupDummyParent
+{
+    /**
+     * @Groups({"a"})
+     */
+    private $kevin;
+    private $coopTilleuls;
+
+    public function setKevin($kevin)
+    {
+        $this->kevin = $kevin;
+    }
+
+    public function getKevin()
+    {
+        return $this->kevin;
+    }
+
+    public function setCoopTilleuls($coopTilleuls)
+    {
+        $this->coopTilleuls = $coopTilleuls;
+    }
+
+    /**
+     * @Groups({"a", "b"})
+     */
+    public function getCoopTilleuls()
+    {
+        return $this->coopTilleuls;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/NormalizableTraversableDummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/NormalizableTraversableDummy.php
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/PropertyCircularReferenceDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/PropertyCircularReferenceDummy.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a1d9d8cfe152f0e74455dfa7ad86e9fde71050a
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/PropertyCircularReferenceDummy.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class PropertyCircularReferenceDummy
+{
+    public $me;
+
+    public function __construct()
+    {
+        $this->me = $this;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/PropertySiblingHolder.php b/core/vendor/symfony/serializer/Tests/Fixtures/PropertySiblingHolder.php
new file mode 100644
index 0000000000000000000000000000000000000000..af993e697d2c9cfc5d5b5ab857d3455245be7d54
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/PropertySiblingHolder.php
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class PropertySiblingHolder
+{
+    public $sibling0;
+    public $sibling1;
+    public $sibling2;
+
+    public function __construct()
+    {
+        $sibling = new PropertySibling();
+
+        $this->sibling0 = $sibling;
+        $this->sibling1 = $sibling;
+        $this->sibling2 = $sibling;
+    }
+}
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class PropertySibling
+{
+    public $coopTilleuls = 'Les-Tilleuls.coop';
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/ScalarDummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/ScalarDummy.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/SiblingHolder.php b/core/vendor/symfony/serializer/Tests/Fixtures/SiblingHolder.php
similarity index 99%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/SiblingHolder.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/SiblingHolder.php
index b2efd623dc67e03de11ba1b86913f6ffc4c1db51..acd4fe9474f71c431e87eeeb0cd1da1336b77378 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/SiblingHolder.php
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/SiblingHolder.php
@@ -23,6 +23,7 @@ class SiblingHolder
     public function __construct()
     {
         $sibling = new Sibling();
+
         $this->sibling0 = $sibling;
         $this->sibling1 = $sibling;
         $this->sibling2 = $sibling;
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/TraversableDummy.php b/core/vendor/symfony/serializer/Tests/Fixtures/TraversableDummy.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/TraversableDummy.php
rename to core/vendor/symfony/serializer/Tests/Fixtures/TraversableDummy.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml b/core/vendor/symfony/serializer/Tests/Fixtures/empty-mapping.yml
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml
rename to core/vendor/symfony/serializer/Tests/Fixtures/empty-mapping.yml
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/invalid-mapping.yml b/core/vendor/symfony/serializer/Tests/Fixtures/invalid-mapping.yml
new file mode 100644
index 0000000000000000000000000000000000000000..19102815663d23f8b75a47e7a01965dcdc96468c
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/invalid-mapping.yml
@@ -0,0 +1 @@
+foo
\ No newline at end of file
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/serialization.xml b/core/vendor/symfony/serializer/Tests/Fixtures/serialization.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6e95aaf72118b0a7588e5bc45420f98466228d53
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/serialization.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+
+<serializer xmlns="http://symfony.com/schema/dic/serializer-mapping"
+                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                    xsi:schemaLocation="http://symfony.com/schema/dic/serializer-mapping http://symfony.com/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd">
+
+    <class name="Symfony\Component\Serializer\Tests\Fixtures\GroupDummy">
+        <attribute name="foo">
+            <group>group1</group>
+            <group>group2</group>
+        </attribute>
+
+        <attribute name="bar">
+            <group>group2</group>
+        </attribute>
+    </class>
+
+</serializer>
diff --git a/core/vendor/symfony/serializer/Tests/Fixtures/serialization.yml b/core/vendor/symfony/serializer/Tests/Fixtures/serialization.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e855ea472b3d696316cbbae5697fceb72dce5a76
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Fixtures/serialization.yml
@@ -0,0 +1,6 @@
+Symfony\Component\Serializer\Tests\Fixtures\GroupDummy:
+  attributes:
+    foo:
+      groups: ['group1', 'group2']
+    bar:
+      groups: ['group2']
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php b/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f22746bc5de756e868797ae34dc244bc4b15c62b
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping;
+
+use Symfony\Component\Serializer\Mapping\AttributeMetadata;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class AttributeMetadataTest extends \PHPUnit_Framework_TestCase
+{
+    public function testInterface()
+    {
+        $attributeMetadata = new AttributeMetadata('name');
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface', $attributeMetadata);
+    }
+
+    public function testGetName()
+    {
+        $attributeMetadata = new AttributeMetadata('name');
+        $this->assertEquals('name', $attributeMetadata->getName());
+    }
+
+    public function testGroups()
+    {
+        $attributeMetadata = new AttributeMetadata('group');
+        $attributeMetadata->addGroup('a');
+        $attributeMetadata->addGroup('a');
+        $attributeMetadata->addGroup('b');
+
+        $this->assertEquals(array('a', 'b'), $attributeMetadata->getGroups());
+    }
+
+    public function testMerge()
+    {
+        $attributeMetadata1 = new AttributeMetadata('a1');
+        $attributeMetadata1->addGroup('a');
+        $attributeMetadata1->addGroup('b');
+
+        $attributeMetadata2 = new AttributeMetadata('a2');
+        $attributeMetadata2->addGroup('a');
+        $attributeMetadata2->addGroup('c');
+
+        $attributeMetadata1->merge($attributeMetadata2);
+
+        $this->assertEquals(array('a', 'b', 'c'), $attributeMetadata1->getGroups());
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php b/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..90017580ac70392be6917d1cb19ec98fcac7d1ab
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping;
+
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ClassMetadataTest extends \PHPUnit_Framework_TestCase
+{
+    public function testInterface()
+    {
+        $classMetadata = new ClassMetadata('name');
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\ClassMetadataInterface', $classMetadata);
+    }
+
+    public function testAttributeMetadata()
+    {
+        $classMetadata = new ClassMetadata('c');
+
+        $a1 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
+        $a1->method('getName')->willReturn('a1');
+
+        $a2 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
+        $a2->method('getName')->willReturn('a2');
+
+        $classMetadata->addAttributeMetadata($a1);
+        $classMetadata->addAttributeMetadata($a2);
+
+        $this->assertEquals(array('a1' => $a1, 'a2' => $a2), $classMetadata->getAttributesMetadata());
+    }
+
+    public function testMerge()
+    {
+        $classMetadata1 = new ClassMetadata('c1');
+        $classMetadata2 = new ClassMetadata('c2');
+
+        $ac1 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
+        $ac1->method('getName')->willReturn('a1');
+        $ac1->method('getGroups')->willReturn(array('a', 'b'));
+
+        $ac2 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
+        $ac2->method('getName')->willReturn('a1');
+        $ac2->method('getGroups')->willReturn(array('b', 'c'));
+
+        $classMetadata1->addAttributeMetadata($ac1);
+        $classMetadata2->addAttributeMetadata($ac2);
+
+        $classMetadata1->merge($classMetadata2);
+
+        $ac1->method('getGroups')->willReturn('a', 'b', 'c');
+
+        $this->assertEquals(array('a1' => $ac1), $classMetadata2->getAttributesMetadata());
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/Factory/ClassMetadataFactoryTest.php b/core/vendor/symfony/serializer/Tests/Mapping/Factory/ClassMetadataFactoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e2ba22dcee0ba6342617bb0fcced1f3d52aac76
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/Factory/ClassMetadataFactoryTest.php
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping\Factory;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
+use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Serializer\Mapping\Loader\LoaderChain;
+use Symfony\Component\Serializer\Tests\Mapping\TestClassMetadataFactory;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ClassMetadataFactoryTest extends \PHPUnit_Framework_TestCase
+{
+    public function testInterface()
+    {
+        $classMetadata = new ClassMetadataFactory(new LoaderChain(array()));
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory', $classMetadata);
+    }
+
+    public function testGetMetadataFor()
+    {
+        $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $classMetadata = $factory->getMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+
+        $this->assertEquals(TestClassMetadataFactory::createClassMetadata(true, true), $classMetadata);
+    }
+
+    public function testHasMetadataFor()
+    {
+        $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->assertTrue($factory->hasMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy'));
+        $this->assertTrue($factory->hasMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummyParent'));
+        $this->assertTrue($factory->hasMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummyInterface'));
+        $this->assertFalse($factory->hasMetadataFor('Dunglas\Entity'));
+    }
+
+    public function testCacheExists()
+    {
+        $cache = $this->getMock('Doctrine\Common\Cache\Cache');
+        $cache
+            ->expects($this->once())
+            ->method('fetch')
+            ->will($this->returnValue('foo'))
+        ;
+
+        $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()), $cache);
+        $this->assertEquals('foo', $factory->getMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy'));
+    }
+
+    public function testCacheNotExists()
+    {
+        $cache = $this->getMock('Doctrine\Common\Cache\Cache');
+        $cache
+            ->method('fetch')
+            ->will($this->returnValue(false))
+        ;
+
+        $cache
+            ->method('save')
+        ;
+
+        $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()), $cache);
+        $metadata = $factory->getMetadataFor('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+
+        $this->assertEquals(TestClassMetadataFactory::createClassMetadata(true, true), $metadata);
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/Loader/AnnotationLoaderTest.php b/core/vendor/symfony/serializer/Tests/Mapping/Loader/AnnotationLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..484d062f22375912cffce1823cfd82727a43e35e
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/Loader/AnnotationLoaderTest.php
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping\Loader;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Serializer\Tests\Mapping\TestClassMetadataFactory;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var AnnotationLoader
+     */
+    private $loader;
+
+    protected function setUp()
+    {
+        $this->loader = new AnnotationLoader(new AnnotationReader());
+    }
+
+    public function testInterface()
+    {
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\Loader\LoaderInterface', $this->loader);
+    }
+
+    public function testLoadClassMetadataReturnsTrueIfSuccessful()
+    {
+        $classMetadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+
+        $this->assertTrue($this->loader->loadClassMetadata($classMetadata));
+    }
+
+    public function testLoadClassMetadata()
+    {
+        $classMetadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+        $this->loader->loadClassMetadata($classMetadata);
+
+        $this->assertEquals(TestClassMetadataFactory::createClassMetadata(), $classMetadata);
+    }
+
+    public function testLoadClassMetadataAndMerge()
+    {
+        $classMetadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+        $parentClassMetadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummyParent');
+
+        $this->loader->loadClassMetadata($parentClassMetadata);
+        $classMetadata->merge($parentClassMetadata);
+
+        $this->loader->loadClassMetadata($classMetadata);
+
+        $this->assertEquals(TestClassMetadataFactory::createClassMetadata(true), $classMetadata);
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/serializer/Tests/Mapping/Loader/XmlFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b468ff18189c96ca2bccd720b8489c261373acd
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/Loader/XmlFileLoaderTest.php
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping\Loader;
+
+use Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader;
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+use Symfony\Component\Serializer\Tests\Mapping\TestClassMetadataFactory;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var XmlFileLoader
+     */
+    private $loader;
+    /**
+     * @var ClassMetadata
+     */
+    private $metadata;
+
+    protected function setUp()
+    {
+        $this->loader = new XmlFileLoader(__DIR__.'/../../Fixtures/serialization.xml');
+        $this->metadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+    }
+
+    public function testInterface()
+    {
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\Loader\LoaderInterface', $this->loader);
+    }
+
+    public function testLoadClassMetadataReturnsTrueIfSuccessful()
+    {
+        $this->assertTrue($this->loader->loadClassMetadata($this->metadata));
+    }
+
+    public function testLoadClassMetadata()
+    {
+        $this->loader->loadClassMetadata($this->metadata);
+
+        $this->assertEquals(TestClassMetadataFactory::createXmlCLassMetadata(), $this->metadata);
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..72d146f9f52244020c4440a5c0d468bbfb960554
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping\Loader;
+
+use Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader;
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+use Symfony\Component\Serializer\Tests\Mapping\TestClassMetadataFactory;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var YamlFileLoader
+     */
+    private $loader;
+    /**
+     * @var ClassMetadata
+     */
+    private $metadata;
+
+    protected function setUp()
+    {
+        $this->loader = new YamlFileLoader(__DIR__.'/../../Fixtures/serialization.yml');
+        $this->metadata = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+    }
+
+    public function testInterface()
+    {
+        $this->assertInstanceOf('Symfony\Component\Serializer\Mapping\Loader\LoaderInterface', $this->loader);
+    }
+
+    public function testLoadClassMetadataReturnsTrueIfSuccessful()
+    {
+        $this->assertTrue($this->loader->loadClassMetadata($this->metadata));
+    }
+
+    public function testLoadClassMetadataReturnsFalseWhenEmpty()
+    {
+        $loader = new YamlFileLoader(__DIR__.'/../../Fixtures/empty-mapping.yml');
+        $this->assertFalse($loader->loadClassMetadata($this->metadata));
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Serializer\Exception\MappingException
+     */
+    public function testLoadClassMetadataReturnsThrowsInvalidMapping()
+    {
+        $loader = new YamlFileLoader(__DIR__.'/../../Fixtures/invalid-mapping.yml');
+        $loader->loadClassMetadata($this->metadata);
+    }
+
+    public function testLoadClassMetadata()
+    {
+        $this->loader->loadClassMetadata($this->metadata);
+
+        $this->assertEquals(TestClassMetadataFactory::createXmlCLassMetadata(), $this->metadata);
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/TestClassMetadataFactory.php b/core/vendor/symfony/serializer/Tests/Mapping/TestClassMetadataFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..f435d36f744d25a45bdeac51c378837a96d19186
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Mapping/TestClassMetadataFactory.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Mapping;
+
+use Symfony\Component\Serializer\Mapping\AttributeMetadata;
+use Symfony\Component\Serializer\Mapping\ClassMetadata;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class TestClassMetadataFactory
+{
+    public static function createClassMetadata($withParent = false, $withInterface = false)
+    {
+        $expected = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+
+        $foo = new AttributeMetadata('foo');
+        $foo->addGroup('a');
+        $expected->addAttributeMetadata($foo);
+
+        $bar = new AttributeMetadata('bar');
+        $bar->addGroup('b');
+        $bar->addGroup('c');
+        $bar->addGroup('name_converter');
+        $expected->addAttributeMetadata($bar);
+
+        $fooBar = new AttributeMetadata('fooBar');
+        $fooBar->addGroup('a');
+        $fooBar->addGroup('b');
+        $fooBar->addGroup('name_converter');
+        $expected->addAttributeMetadata($fooBar);
+
+        $symfony = new AttributeMetadata('symfony');
+        $expected->addAttributeMetadata($symfony);
+
+        if ($withParent) {
+            $kevin = new AttributeMetadata('kevin');
+            $kevin->addGroup('a');
+            $expected->addAttributeMetadata($kevin);
+
+            $coopTilleuls = new AttributeMetadata('coopTilleuls');
+            $coopTilleuls->addGroup('a');
+            $coopTilleuls->addGroup('b');
+            $expected->addAttributeMetadata($coopTilleuls);
+        }
+
+        if ($withInterface) {
+            $symfony->addGroup('a');
+            $symfony->addGroup('name_converter');
+        }
+
+        // load reflection class so that the comparison passes
+        $expected->getReflectionClass();
+
+        return $expected;
+    }
+
+    public static function createXmlCLassMetadata()
+    {
+        $expected = new ClassMetadata('Symfony\Component\Serializer\Tests\Fixtures\GroupDummy');
+
+        $foo = new AttributeMetadata('foo');
+        $foo->addGroup('group1');
+        $foo->addGroup('group2');
+        $expected->addAttributeMetadata($foo);
+
+        $bar = new AttributeMetadata('bar');
+        $bar->addGroup('group2');
+        $expected->addAttributeMetadata($bar);
+
+        return $expected;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/NameConverter/CamelCaseToSnakeCaseNameConverterTest.php b/core/vendor/symfony/serializer/Tests/NameConverter/CamelCaseToSnakeCaseNameConverterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d57017340207892d2d99f268be3cf47677d1736
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/NameConverter/CamelCaseToSnakeCaseNameConverterTest.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\NameConverter;
+
+use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class CamelCaseToSnakeCaseNameConverterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testInterface()
+    {
+        $attributeMetadata = new CamelCaseToSnakeCaseNameConverter();
+        $this->assertInstanceOf('Symfony\Component\Serializer\NameConverter\NameConverterInterface', $attributeMetadata);
+    }
+
+    /**
+     * @dataProvider attributeProvider
+     */
+    public function testNormalize($underscored, $lowerCamelCased)
+    {
+        $nameConverter = new CamelCaseToSnakeCaseNameConverter();
+        $this->assertEquals($nameConverter->normalize($lowerCamelCased), $underscored);
+    }
+
+    /**
+     * @dataProvider attributeProvider
+     */
+    public function testDenormalize($underscored, $lowerCamelCased)
+    {
+        $nameConverter = new CamelCaseToSnakeCaseNameConverter();
+        $this->assertEquals($nameConverter->denormalize($underscored), $lowerCamelCased);
+    }
+
+    public function attributeProvider()
+    {
+        return array(
+            array('coop_tilleuls', 'coopTilleuls'),
+            array('_kevin_dunglas', '_kevinDunglas'),
+            array('this_is_a_test', 'thisIsATest'),
+        );
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/CustomNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/CustomNormalizerTest.php
similarity index 85%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/CustomNormalizerTest.php
rename to core/vendor/symfony/serializer/Tests/Normalizer/CustomNormalizerTest.php
index 0aeaba472a1748fcdb7af504401ff0fa8f09616e..86ae0031203b4ee7f86888bc9b1eabbe4e0da6ce 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/CustomNormalizerTest.php
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/CustomNormalizerTest.php
@@ -17,12 +17,23 @@
 
 class CustomNormalizerTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var CustomNormalizer
+     */
+    private $normalizer;
+
     protected function setUp()
     {
         $this->normalizer = new CustomNormalizer();
         $this->normalizer->setSerializer(new Serializer());
     }
 
+    public function testInterface()
+    {
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\NormalizerInterface', $this->normalizer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\DenormalizerInterface', $this->normalizer);
+    }
+
     public function testSerialize()
     {
         $obj = new ScalarDummy();
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
similarity index 55%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
rename to core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
index 71271174de0c0a35004e1bcce09a16eca1761a01..e8156dd10fb9de75441dc8886ef4452bc4985d28 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
@@ -11,12 +11,17 @@
 
 namespace Symfony\Component\Serializer\Tests\Normalizer;
 
+use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
 use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
 use Symfony\Component\Serializer\Serializer;
 use Symfony\Component\Serializer\SerializerInterface;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 use Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy;
 use Symfony\Component\Serializer\Tests\Fixtures\SiblingHolder;
+use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
+use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy;
 
 class GetSetMethodNormalizerTest extends \PHPUnit_Framework_TestCase
 {
@@ -24,6 +29,10 @@ class GetSetMethodNormalizerTest extends \PHPUnit_Framework_TestCase
      * @var GetSetMethodNormalizer
      */
     private $normalizer;
+    /**
+     * @var SerializerInterface
+     */
+    private $serializer;
 
     protected function setUp()
     {
@@ -32,6 +41,12 @@ protected function setUp()
         $this->normalizer->setSerializer($this->serializer);
     }
 
+    public function testInterface()
+    {
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\NormalizerInterface', $this->normalizer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\DenormalizerInterface', $this->normalizer);
+    }
+
     public function testNormalize()
     {
         $obj = new GetSetDummy();
@@ -85,13 +100,29 @@ public function testDenormalizeWithObject()
         $this->assertEquals('bar', $obj->getBar());
     }
 
-    public function testDenormalizeOnCamelCaseFormat()
+    /**
+     * @group legacy
+     */
+    public function testLegacyDenormalizeOnCamelCaseFormat()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->normalizer->setCamelizedAttributes(array('camel_case'));
         $obj = $this->normalizer->denormalize(
             array('camel_case' => 'camelCase'),
             __NAMESPACE__.'\GetSetDummy'
         );
+
+        $this->assertEquals('camelCase', $obj->getCamelCase());
+    }
+
+    public function testNameConverterSupport()
+    {
+        $this->normalizer = new GetSetMethodNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
+        $obj = $this->normalizer->denormalize(
+            array('camel_case' => 'camelCase'),
+            __NAMESPACE__.'\GetSetDummy'
+        );
         $this->assertEquals('camelCase', $obj->getCamelCase());
     }
 
@@ -101,26 +132,55 @@ public function testDenormalizeNull()
     }
 
     /**
-     * @dataProvider attributeProvider
+     * @group legacy
      */
-    public function testFormatAttribute($attribute, $camelizedAttributes, $result)
+    public function testLegacyCamelizedAttributesNormalize()
     {
-        $r = new \ReflectionObject($this->normalizer);
-        $m = $r->getMethod('formatAttribute');
-        $m->setAccessible(true);
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $obj = new GetCamelizedDummy('dunglas.fr');
+        $obj->setFooBar('les-tilleuls.coop');
+        $obj->setBar_foo('lostinthesupermarket.fr');
 
-        $this->normalizer->setCamelizedAttributes($camelizedAttributes);
-        $this->assertEquals($m->invoke($this->normalizer, $attribute, $camelizedAttributes), $result);
+        $this->normalizer->setCamelizedAttributes(array('kevin_dunglas'));
+        $this->assertEquals($this->normalizer->normalize($obj), array(
+            'kevin_dunglas' => 'dunglas.fr',
+            'fooBar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ));
+
+        $this->normalizer->setCamelizedAttributes(array('foo_bar'));
+        $this->assertEquals($this->normalizer->normalize($obj), array(
+            'kevinDunglas' => 'dunglas.fr',
+            'foo_bar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ));
     }
 
-    public function attributeProvider()
+    /**
+     * @group legacy
+     */
+    public function testLegacyCamelizedAttributesDenormalize()
     {
-        return array(
-            array('attribute_test', array('attribute_test'),'AttributeTest'),
-            array('attribute_test', array('any'),'attribute_test'),
-            array('attribute', array('attribute'),'Attribute'),
-            array('attribute', array(), 'attribute'),
-        );
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $obj = new GetCamelizedDummy('dunglas.fr');
+        $obj->setFooBar('les-tilleuls.coop');
+        $obj->setBar_foo('lostinthesupermarket.fr');
+
+        $this->normalizer->setCamelizedAttributes(array('kevin_dunglas'));
+        $this->assertEquals($this->normalizer->denormalize(array(
+            'kevin_dunglas' => 'dunglas.fr',
+            'fooBar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ), __NAMESPACE__.'\GetCamelizedDummy'), $obj);
+
+        $this->normalizer->setCamelizedAttributes(array('foo_bar'));
+        $this->assertEquals($this->normalizer->denormalize(array(
+            'kevinDunglas' => 'dunglas.fr',
+            'foo_bar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ), __NAMESPACE__.'\GetCamelizedDummy'), $obj);
     }
 
     public function testConstructorDenormalize()
@@ -133,6 +193,16 @@ public function testConstructorDenormalize()
         $this->assertTrue($obj->isBaz());
     }
 
+    public function testConstructorDenormalizeWithNullArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => null, 'baz' => true),
+            __NAMESPACE__.'\GetConstructorDummy', 'any');
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertNull($obj->getBar());
+        $this->assertTrue($obj->isBaz());
+    }
+
     public function testConstructorDenormalizeWithMissingOptionalArgument()
     {
         $obj = $this->normalizer->denormalize(
@@ -143,6 +213,15 @@ public function testConstructorDenormalizeWithMissingOptionalArgument()
         $this->assertEquals(array(1, 2, 3), $obj->getBaz());
     }
 
+    public function testConstructorDenormalizeWithOptionalDefaultArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('bar' => 'test'),
+            __NAMESPACE__.'\GetConstructorArgsWithDefaultValueDummy', 'any');
+        $this->assertEquals(array(), $obj->getFoo());
+        $this->assertEquals('test', $obj->getBar());
+    }
+
     public function testConstructorWithObjectDenormalize()
     {
         $data = new \stdClass();
@@ -155,6 +234,106 @@ public function testConstructorWithObjectDenormalize()
         $this->assertEquals('bar', $obj->getBar());
     }
 
+    public function testGroupsNormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new GetSetMethodNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+        $obj->setBar('bar');
+        $obj->setFooBar('fooBar');
+        $obj->setSymfony('symfony');
+        $obj->setKevin('kevin');
+        $obj->setCoopTilleuls('coopTilleuls');
+
+        $this->assertEquals(array(
+            'bar' => 'bar',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('c'))));
+
+        $this->assertEquals(array(
+            'symfony' => 'symfony',
+            'foo' => 'foo',
+            'fooBar' => 'fooBar',
+            'bar' => 'bar',
+            'kevin' => 'kevin',
+            'coopTilleuls' => 'coopTilleuls',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('a', 'c'))));
+    }
+
+    public function testGroupsDenormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new GetSetMethodNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+
+        $toNormalize = array('foo' => 'foo', 'bar' => 'bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a'))
+        );
+        $this->assertEquals($obj, $normalized);
+
+        $obj->setBar('bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a', 'b'))
+        );
+        $this->assertEquals($obj, $normalized);
+    }
+
+    public function testGroupsNormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new GetSetMethodNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+        $obj->setCoopTilleuls('les-tilleuls.coop');
+
+        $this->assertEquals(
+            array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+            ),
+            $this->normalizer->normalize($obj, null, array('groups' => array('name_converter')))
+        );
+    }
+
+    public function testGroupsDenormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new GetSetMethodNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+
+        $this->assertEquals(
+            $obj,
+            $this->normalizer->denormalize(array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+                'coop_tilleuls' => 'les-tilleuls.coop',
+            ), 'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy', null, array('groups' => array('name_converter')))
+        );
+    }
+
     /**
      * @dataProvider provideCallbacks
      */
@@ -317,6 +496,36 @@ public function testCircularReferenceHandler()
         $expected = array('me' => 'Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy');
         $this->assertEquals($expected, $this->normalizer->normalize($obj));
     }
+
+    public function testObjectToPopulate()
+    {
+        $dummy = new GetSetDummy();
+        $dummy->setFoo('foo');
+
+        $obj = $this->normalizer->denormalize(
+            array('bar' => 'bar'),
+            __NAMESPACE__.'\GetSetDummy',
+            null,
+            array('object_to_populate' => $dummy)
+        );
+
+        $this->assertEquals($dummy, $obj);
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->getBar());
+    }
+
+    public function testDenormalizeNonExistingAttribute()
+    {
+        $this->assertEquals(
+            new PropertyDummy(),
+            $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\PropertyDummy')
+        );
+    }
+
+    public function testNoTraversableSupport()
+    {
+        $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject()));
+    }
 }
 
 class GetSetDummy
@@ -459,3 +668,67 @@ public function otherMethod()
         throw new \RuntimeException('Dummy::otherMethod() should not be called');
     }
 }
+
+class GetConstructorArgsWithDefaultValueDummy
+{
+    protected $foo;
+    protected $bar;
+
+    public function __construct($foo = array(), $bar)
+    {
+        $this->foo = $foo;
+        $this->bar = $bar;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function getBar()
+    {
+        return $this->bar;
+    }
+
+    public function otherMethod()
+    {
+        throw new \RuntimeException('Dummy::otherMethod() should not be called');
+    }
+}
+
+class GetCamelizedDummy
+{
+    private $kevinDunglas;
+    private $fooBar;
+    private $bar_foo;
+
+    public function __construct($kevinDunglas = null)
+    {
+        $this->kevinDunglas = $kevinDunglas;
+    }
+
+    public function getKevinDunglas()
+    {
+        return $this->kevinDunglas;
+    }
+
+    public function setFooBar($fooBar)
+    {
+        $this->fooBar = $fooBar;
+    }
+
+    public function getFooBar()
+    {
+        return $this->fooBar;
+    }
+
+    public function setBar_foo($bar_foo)
+    {
+        $this->bar_foo = $bar_foo;
+    }
+
+    public function getBar_foo()
+    {
+        return $this->bar_foo;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..14a268f5bc0eb3c439af1f778a42da36eb5dfbfc
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
@@ -0,0 +1,604 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Normalizer;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
+use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
+use Symfony\Component\Serializer\Serializer;
+use Symfony\Component\Serializer\SerializerInterface;
+use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
+use Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy;
+use Symfony\Component\Serializer\Tests\Fixtures\SiblingHolder;
+use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
+use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy;
+
+/**
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class ObjectNormalizerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectNormalizerTest
+     */
+    private $normalizer;
+    /**
+     * @var SerializerInterface
+     */
+    private $serializer;
+
+    protected function setUp()
+    {
+        $this->serializer = $this->getMock(__NAMESPACE__.'\ObjectSerializerNormalizer');
+        $this->normalizer = new ObjectNormalizer();
+        $this->normalizer->setSerializer($this->serializer);
+    }
+
+    public function testNormalize()
+    {
+        $obj = new ObjectDummy();
+        $object = new \stdClass();
+        $obj->setFoo('foo');
+        $obj->bar = 'bar';
+        $obj->setBaz(true);
+        $obj->setCamelCase('camelcase');
+        $obj->setObject($object);
+
+        $this->serializer
+            ->expects($this->once())
+            ->method('normalize')
+            ->with($object, 'any')
+            ->will($this->returnValue('string_object'))
+        ;
+
+        $this->assertEquals(
+            array(
+                'foo' => 'foo',
+                'bar' => 'bar',
+                'baz' => true,
+                'fooBar' => 'foobar',
+                'camelCase' => 'camelcase',
+                'object' => 'string_object',
+            ),
+            $this->normalizer->normalize($obj, 'any')
+        );
+    }
+
+    public function testDenormalize()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'),
+            __NAMESPACE__.'\ObjectDummy',
+            'any'
+        );
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->bar);
+        $this->assertTrue($obj->isBaz());
+    }
+
+    public function testDenormalizeWithObject()
+    {
+        $data = new \stdClass();
+        $data->foo = 'foo';
+        $data->bar = 'bar';
+        $data->fooBar = 'foobar';
+        $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\ObjectDummy', 'any');
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->bar);
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testLegacyDenormalizeOnCamelCaseFormat()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $this->normalizer->setCamelizedAttributes(array('camel_case'));
+        $obj = $this->normalizer->denormalize(
+            array('camel_case' => 'camelCase'),
+            __NAMESPACE__.'\ObjectDummy'
+        );
+        $this->assertEquals('camelCase', $obj->getCamelCase());
+    }
+
+    public function testNameConverterSupport()
+    {
+        $this->normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
+        $obj = $this->normalizer->denormalize(
+            array('camel_case' => 'camelCase'),
+            __NAMESPACE__.'\ObjectDummy'
+        );
+        $this->assertEquals('camelCase', $obj->getCamelCase());
+    }
+
+    public function testDenormalizeNull()
+    {
+        $this->assertEquals(new ObjectDummy(), $this->normalizer->denormalize(null, __NAMESPACE__.'\ObjectDummy'));
+    }
+
+    public function testConstructorDenormalize()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'),
+            __NAMESPACE__.'\ObjectConstructorDummy', 'any');
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->bar);
+        $this->assertTrue($obj->isBaz());
+    }
+
+    public function testConstructorDenormalizeWithNullArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => null, 'baz' => true),
+            __NAMESPACE__.'\ObjectConstructorDummy', 'any');
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertNull($obj->bar);
+        $this->assertTrue($obj->isBaz());
+    }
+
+    public function testConstructorDenormalizeWithMissingOptionalArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'test', 'baz' => array(1, 2, 3)),
+            __NAMESPACE__.'\ObjectConstructorOptionalArgsDummy', 'any');
+        $this->assertEquals('test', $obj->getFoo());
+        $this->assertEquals(array(), $obj->bar);
+        $this->assertEquals(array(1, 2, 3), $obj->getBaz());
+    }
+
+    public function testConstructorDenormalizeWithOptionalDefaultArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('bar' => 'test'),
+            __NAMESPACE__.'\ObjectConstructorArgsWithDefaultValueDummy', 'any');
+        $this->assertEquals(array(), $obj->getFoo());
+        $this->assertEquals('test', $obj->getBar());
+    }
+
+    public function testConstructorWithObjectDenormalize()
+    {
+        $data = new \stdClass();
+        $data->foo = 'foo';
+        $data->bar = 'bar';
+        $data->baz = true;
+        $data->fooBar = 'foobar';
+        $obj = $this->normalizer->denormalize($data, __NAMESPACE__.'\ObjectConstructorDummy', 'any');
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->bar);
+    }
+
+    public function testGroupsNormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new ObjectNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+        $obj->setBar('bar');
+        $obj->setFooBar('fooBar');
+        $obj->setSymfony('symfony');
+        $obj->setKevin('kevin');
+        $obj->setCoopTilleuls('coopTilleuls');
+
+        $this->assertEquals(array(
+            'bar' => 'bar',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('c'))));
+
+        $this->assertEquals(array(
+            'symfony' => 'symfony',
+            'foo' => 'foo',
+            'fooBar' => 'fooBar',
+            'bar' => 'bar',
+            'kevin' => 'kevin',
+            'coopTilleuls' => 'coopTilleuls',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('a', 'c'))));
+    }
+
+    public function testGroupsDenormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new ObjectNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+
+        $toNormalize = array('foo' => 'foo', 'bar' => 'bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a'))
+        );
+        $this->assertEquals($obj, $normalized);
+
+        $obj->setBar('bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a', 'b'))
+        );
+        $this->assertEquals($obj, $normalized);
+    }
+
+    public function testGroupsNormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new ObjectNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+        $obj->setCoopTilleuls('les-tilleuls.coop');
+
+        $this->assertEquals(
+            array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+            ),
+            $this->normalizer->normalize($obj, null, array('groups' => array('name_converter')))
+        );
+    }
+
+    public function testGroupsDenormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new ObjectNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+
+        $this->assertEquals(
+            $obj,
+            $this->normalizer->denormalize(array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+                'coop_tilleuls' => 'les-tilleuls.coop',
+            ), 'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy', null, array('groups' => array('name_converter')))
+        );
+    }
+
+    /**
+     * @dataProvider provideCallbacks
+     */
+    public function testCallbacks($callbacks, $value, $result, $message)
+    {
+        $this->normalizer->setCallbacks($callbacks);
+
+        $obj = new ObjectConstructorDummy('', $value, true);
+
+        $this->assertEquals(
+            $result,
+            $this->normalizer->normalize($obj, 'any'),
+            $message
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testUncallableCallbacks()
+    {
+        $this->normalizer->setCallbacks(array('bar' => null));
+
+        $obj = new ObjectConstructorDummy('baz', 'quux', true);
+
+        $this->normalizer->normalize($obj, 'any');
+    }
+
+    public function testIgnoredAttributes()
+    {
+        $this->normalizer->setIgnoredAttributes(array('foo', 'bar', 'baz', 'camelCase', 'object'));
+
+        $obj = new ObjectDummy();
+        $obj->setFoo('foo');
+        $obj->bar = 'bar';
+        $obj->setBaz(true);
+
+        $this->assertEquals(
+            array('fooBar' => 'foobar'),
+            $this->normalizer->normalize($obj, 'any')
+        );
+    }
+
+    public function provideCallbacks()
+    {
+        return array(
+            array(
+                array(
+                    'bar' => function ($bar) {
+                            return 'baz';
+                        },
+                ),
+                'baz',
+                array('foo' => '', 'bar' => 'baz', 'baz' => true),
+                'Change a string',
+            ),
+            array(
+                array(
+                    'bar' => function ($bar) {
+                            return;
+                        },
+                ),
+                'baz',
+                array('foo' => '', 'bar' => null, 'baz' => true),
+                'Null an item',
+            ),
+            array(
+                array(
+                    'bar' => function ($bar) {
+                            return $bar->format('d-m-Y H:i:s');
+                        },
+                ),
+                new \DateTime('2011-09-10 06:30:00'),
+                array('foo' => '', 'bar' => '10-09-2011 06:30:00', 'baz' => true),
+                'Format a date',
+            ),
+            array(
+                array(
+                    'bar' => function ($bars) {
+                            $foos = '';
+                            foreach ($bars as $bar) {
+                                $foos .= $bar->getFoo();
+                            }
+
+                            return $foos;
+                        },
+                ),
+                array(new ObjectConstructorDummy('baz', '', false), new ObjectConstructorDummy('quux', '', false)),
+                array('foo' => '', 'bar' => 'bazquux', 'baz' => true),
+                'Collect a property',
+            ),
+            array(
+                array(
+                    'bar' => function ($bars) {
+                            return count($bars);
+                        },
+                ),
+                array(new ObjectConstructorDummy('baz', '', false), new ObjectConstructorDummy('quux', '', false)),
+                array('foo' => '', 'bar' => 2, 'baz' => true),
+                'Count a property',
+            ),
+        );
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
+     * @expectedExceptionMessage Cannot normalize attribute "object" because injected serializer is not a normalizer
+     */
+    public function testUnableToNormalizeObjectAttribute()
+    {
+        $serializer = $this->getMock('Symfony\Component\Serializer\SerializerInterface');
+        $this->normalizer->setSerializer($serializer);
+
+        $obj = new ObjectDummy();
+        $object = new \stdClass();
+        $obj->setObject($object);
+
+        $this->normalizer->normalize($obj, 'any');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
+     */
+    public function testUnableToNormalizeCircularReference()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+        $this->normalizer->setCircularReferenceLimit(2);
+
+        $obj = new CircularReferenceDummy();
+
+        $this->normalizer->normalize($obj);
+    }
+
+    public function testSiblingReference()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+
+        $siblingHolder = new SiblingHolder();
+
+        $expected = array(
+            'sibling0' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+            'sibling1' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+            'sibling2' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+        );
+        $this->assertEquals($expected, $this->normalizer->normalize($siblingHolder));
+    }
+
+    public function testCircularReferenceHandler()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+        $this->normalizer->setCircularReferenceHandler(function ($obj) {
+            return get_class($obj);
+        });
+
+        $obj = new CircularReferenceDummy();
+
+        $expected = array('me' => 'Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy');
+        $this->assertEquals($expected, $this->normalizer->normalize($obj));
+    }
+
+    public function testDenormalizeNonExistingAttribute()
+    {
+        $this->assertEquals(
+            new ObjectDummy(),
+            $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\ObjectDummy')
+        );
+    }
+
+    public function testNoTraversableSupport()
+    {
+        $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject()));
+    }
+}
+
+class ObjectDummy
+{
+    protected $foo;
+    public $bar;
+    private $baz;
+    protected $camelCase;
+    protected $object;
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function setFoo($foo)
+    {
+        $this->foo = $foo;
+    }
+
+    public function isBaz()
+    {
+        return $this->baz;
+    }
+
+    public function setBaz($baz)
+    {
+        $this->baz = $baz;
+    }
+
+    public function getFooBar()
+    {
+        return $this->foo.$this->bar;
+    }
+
+    public function getCamelCase()
+    {
+        return $this->camelCase;
+    }
+
+    public function setCamelCase($camelCase)
+    {
+        $this->camelCase = $camelCase;
+    }
+
+    public function otherMethod()
+    {
+        throw new \RuntimeException('Dummy::otherMethod() should not be called');
+    }
+
+    public function setObject($object)
+    {
+        $this->object = $object;
+    }
+
+    public function getObject()
+    {
+        return $this->object;
+    }
+}
+
+class ObjectConstructorDummy
+{
+    protected $foo;
+    public $bar;
+    private $baz;
+
+    public function __construct($foo, $bar, $baz)
+    {
+        $this->foo = $foo;
+        $this->bar = $bar;
+        $this->baz = $baz;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function isBaz()
+    {
+        return $this->baz;
+    }
+
+    public function otherMethod()
+    {
+        throw new \RuntimeException('Dummy::otherMethod() should not be called');
+    }
+}
+
+abstract class ObjectSerializerNormalizer implements SerializerInterface, NormalizerInterface
+{
+}
+
+class ObjectConstructorOptionalArgsDummy
+{
+    protected $foo;
+    public $bar;
+    private $baz;
+
+    public function __construct($foo, $bar = array(), $baz = array())
+    {
+        $this->foo = $foo;
+        $this->bar = $bar;
+        $this->baz = $baz;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function getBaz()
+    {
+        return $this->baz;
+    }
+
+    public function otherMethod()
+    {
+        throw new \RuntimeException('Dummy::otherMethod() should not be called');
+    }
+}
+
+class ObjectConstructorArgsWithDefaultValueDummy
+{
+    protected $foo;
+    protected $bar;
+
+    public function __construct($foo = array(), $bar)
+    {
+        $this->foo = $foo;
+        $this->bar = $bar;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function getBar()
+    {
+        return $this->bar;
+    }
+
+    public function otherMethod()
+    {
+        throw new \RuntimeException('Dummy::otherMethod() should not be called');
+    }
+}
diff --git a/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..52ce54087c343c79249a73513e873d5869812439
--- /dev/null
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
@@ -0,0 +1,499 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Normalizer;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
+use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
+use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
+use Symfony\Component\Serializer\Serializer;
+use Symfony\Component\Serializer\SerializerInterface;
+use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy;
+use Symfony\Component\Serializer\Tests\Fixtures\PropertyCircularReferenceDummy;
+use Symfony\Component\Serializer\Tests\Fixtures\PropertySiblingHolder;
+
+class PropertyNormalizerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var PropertyNormalizer
+     */
+    private $normalizer;
+    /**
+     * @var SerializerInterface
+     */
+    private $serializer;
+
+    protected function setUp()
+    {
+        $this->serializer = $this->getMock('Symfony\Component\Serializer\SerializerInterface');
+        $this->normalizer = new PropertyNormalizer();
+        $this->normalizer->setSerializer($this->serializer);
+    }
+
+    public function testNormalize()
+    {
+        $obj = new PropertyDummy();
+        $obj->foo = 'foo';
+        $obj->setBar('bar');
+        $obj->setCamelCase('camelcase');
+        $this->assertEquals(
+            array('foo' => 'foo', 'bar' => 'bar', 'camelCase' => 'camelcase'),
+            $this->normalizer->normalize($obj, 'any')
+        );
+    }
+
+    public function testDenormalize()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => 'bar'),
+            __NAMESPACE__.'\PropertyDummy',
+            'any'
+        );
+        $this->assertEquals('foo', $obj->foo);
+        $this->assertEquals('bar', $obj->getBar());
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testLegacyDenormalizeOnCamelCaseFormat()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $this->normalizer->setCamelizedAttributes(array('camel_case'));
+        $obj = $this->normalizer->denormalize(
+            array('camel_case' => 'value'),
+            __NAMESPACE__.'\PropertyDummy'
+        );
+        $this->assertEquals('value', $obj->getCamelCase());
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testLegacyCamelizedAttributesNormalize()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $obj = new PropertyCamelizedDummy('dunglas.fr');
+        $obj->fooBar = 'les-tilleuls.coop';
+        $obj->bar_foo = 'lostinthesupermarket.fr';
+
+        $this->normalizer->setCamelizedAttributes(array('kevin_dunglas'));
+        $this->assertEquals($this->normalizer->normalize($obj), array(
+            'kevin_dunglas' => 'dunglas.fr',
+            'fooBar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ));
+
+        $this->normalizer->setCamelizedAttributes(array('foo_bar'));
+        $this->assertEquals($this->normalizer->normalize($obj), array(
+            'kevinDunglas' => 'dunglas.fr',
+            'foo_bar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ));
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testLegacyCamelizedAttributesDenormalize()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $obj = new PropertyCamelizedDummy('dunglas.fr');
+        $obj->fooBar = 'les-tilleuls.coop';
+        $obj->bar_foo = 'lostinthesupermarket.fr';
+
+        $this->normalizer->setCamelizedAttributes(array('kevin_dunglas'));
+        $this->assertEquals($this->normalizer->denormalize(array(
+            'kevin_dunglas' => 'dunglas.fr',
+            'fooBar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ), __NAMESPACE__.'\PropertyCamelizedDummy'), $obj);
+
+        $this->normalizer->setCamelizedAttributes(array('foo_bar'));
+        $this->assertEquals($this->normalizer->denormalize(array(
+            'kevinDunglas' => 'dunglas.fr',
+            'foo_bar' => 'les-tilleuls.coop',
+            'bar_foo' => 'lostinthesupermarket.fr',
+        ), __NAMESPACE__.'\PropertyCamelizedDummy'), $obj);
+    }
+
+    public function testNameConverterSupport()
+    {
+        $this->normalizer = new PropertyNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
+        $obj = $this->normalizer->denormalize(
+            array('camel_case' => 'camelCase'),
+            __NAMESPACE__.'\PropertyDummy'
+        );
+        $this->assertEquals('camelCase', $obj->getCamelCase());
+    }
+
+    public function testConstructorDenormalize()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => 'foo', 'bar' => 'bar'),
+            __NAMESPACE__.'\PropertyConstructorDummy',
+            'any'
+        );
+        $this->assertEquals('foo', $obj->getFoo());
+        $this->assertEquals('bar', $obj->getBar());
+    }
+
+    public function testConstructorDenormalizeWithNullArgument()
+    {
+        $obj = $this->normalizer->denormalize(
+            array('foo' => null, 'bar' => 'bar'),
+            __NAMESPACE__.'\PropertyConstructorDummy', '
+            any'
+        );
+        $this->assertNull($obj->getFoo());
+        $this->assertEquals('bar', $obj->getBar());
+    }
+
+    /**
+     * @dataProvider provideCallbacks
+     */
+    public function testCallbacks($callbacks, $value, $result, $message)
+    {
+        $this->normalizer->setCallbacks($callbacks);
+
+        $obj = new PropertyConstructorDummy('', $value);
+
+        $this->assertEquals(
+            $result,
+            $this->normalizer->normalize($obj, 'any'),
+            $message
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testUncallableCallbacks()
+    {
+        $this->normalizer->setCallbacks(array('bar' => null));
+
+        $obj = new PropertyConstructorDummy('baz', 'quux');
+
+        $this->normalizer->normalize($obj, 'any');
+    }
+
+    public function testIgnoredAttributes()
+    {
+        $this->normalizer->setIgnoredAttributes(array('foo', 'bar', 'camelCase'));
+
+        $obj = new PropertyDummy();
+        $obj->foo = 'foo';
+        $obj->setBar('bar');
+
+        $this->assertEquals(
+            array(),
+            $this->normalizer->normalize($obj, 'any')
+        );
+    }
+
+    public function testGroupsNormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new PropertyNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+        $obj->setBar('bar');
+        $obj->setFooBar('fooBar');
+        $obj->setSymfony('symfony');
+        $obj->setKevin('kevin');
+        $obj->setCoopTilleuls('coopTilleuls');
+
+        $this->assertEquals(array(
+            'bar' => 'bar',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('c'))));
+
+        // The PropertyNormalizer is not able to hydrate properties from parent classes
+        $this->assertEquals(array(
+            'symfony' => 'symfony',
+            'foo' => 'foo',
+            'fooBar' => 'fooBar',
+            'bar' => 'bar',
+        ), $this->normalizer->normalize($obj, null, array('groups' => array('a', 'c'))));
+    }
+
+    public function testGroupsDenormalize()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new PropertyNormalizer($classMetadataFactory);
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFoo('foo');
+
+        $toNormalize = array('foo' => 'foo', 'bar' => 'bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a'))
+        );
+        $this->assertEquals($obj, $normalized);
+
+        $obj->setBar('bar');
+
+        $normalized = $this->normalizer->denormalize(
+            $toNormalize,
+            'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy',
+            null,
+            array('groups' => array('a', 'b'))
+        );
+        $this->assertEquals($obj, $normalized);
+    }
+
+    public function testGroupsNormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new PropertyNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+        $obj->setCoopTilleuls('les-tilleuls.coop');
+
+        $this->assertEquals(
+            array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+            ),
+            $this->normalizer->normalize($obj, null, array('groups' => array('name_converter')))
+        );
+    }
+
+    public function testGroupsDenormalizeWithNameConverter()
+    {
+        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
+        $this->normalizer = new PropertyNormalizer($classMetadataFactory, new CamelCaseToSnakeCaseNameConverter());
+        $this->normalizer->setSerializer($this->serializer);
+
+        $obj = new GroupDummy();
+        $obj->setFooBar('@dunglas');
+        $obj->setSymfony('@coopTilleuls');
+
+        $this->assertEquals(
+            $obj,
+            $this->normalizer->denormalize(array(
+                'bar' => null,
+                'foo_bar' => '@dunglas',
+                'symfony' => '@coopTilleuls',
+                'coop_tilleuls' => 'les-tilleuls.coop',
+            ), 'Symfony\Component\Serializer\Tests\Fixtures\GroupDummy', null, array('groups' => array('name_converter')))
+        );
+    }
+
+    public function provideCallbacks()
+    {
+        return array(
+            array(
+                array(
+                    'bar' => function ($bar) {
+                        return 'baz';
+                    },
+                ),
+                'baz',
+                array('foo' => '', 'bar' => 'baz'),
+                'Change a string',
+            ),
+            array(
+                array(
+                    'bar' => function ($bar) {
+                        return;
+                    },
+                ),
+                'baz',
+                array('foo' => '', 'bar' => null),
+                'Null an item',
+            ),
+            array(
+                array(
+                    'bar' => function ($bar) {
+                        return $bar->format('d-m-Y H:i:s');
+                    },
+                ),
+                new \DateTime('2011-09-10 06:30:00'),
+                array('foo' => '', 'bar' => '10-09-2011 06:30:00'),
+                'Format a date',
+            ),
+            array(
+                array(
+                    'bar' => function ($bars) {
+                        $foos = '';
+                        foreach ($bars as $bar) {
+                            $foos .= $bar->getFoo();
+                        }
+
+                        return $foos;
+                    },
+                ),
+                array(new PropertyConstructorDummy('baz', ''), new PropertyConstructorDummy('quux', '')),
+                array('foo' => '', 'bar' => 'bazquux'),
+                'Collect a property',
+            ),
+            array(
+                array(
+                    'bar' => function ($bars) {
+                        return count($bars);
+                    },
+                ),
+                array(new PropertyConstructorDummy('baz', ''), new PropertyConstructorDummy('quux', '')),
+                array('foo' => '', 'bar' => 2),
+                'Count a property',
+            ),
+        );
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
+     */
+    public function testUnableToNormalizeCircularReference()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+        $this->normalizer->setCircularReferenceLimit(2);
+
+        $obj = new PropertyCircularReferenceDummy();
+
+        $this->normalizer->normalize($obj);
+    }
+
+    public function testSiblingReference()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+
+        $siblingHolder = new PropertySiblingHolder();
+
+        $expected = array(
+            'sibling0' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+            'sibling1' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+            'sibling2' => array('coopTilleuls' => 'Les-Tilleuls.coop'),
+        );
+        $this->assertEquals($expected, $this->normalizer->normalize($siblingHolder));
+    }
+
+    public function testCircularReferenceHandler()
+    {
+        $serializer = new Serializer(array($this->normalizer));
+        $this->normalizer->setSerializer($serializer);
+        $this->normalizer->setCircularReferenceHandler(function ($obj) {
+            return get_class($obj);
+        });
+
+        $obj = new PropertyCircularReferenceDummy();
+
+        $expected = array('me' => 'Symfony\Component\Serializer\Tests\Fixtures\PropertyCircularReferenceDummy');
+        $this->assertEquals($expected, $this->normalizer->normalize($obj));
+    }
+
+    public function testDenormalizeNonExistingAttribute()
+    {
+        $this->assertEquals(
+            new PropertyDummy(),
+            $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\PropertyDummy')
+        );
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
+     * @expectedExceptionMessage Cannot normalize attribute "bar" because injected serializer is not a normalizer
+     */
+    public function testUnableToNormalizeObjectAttribute()
+    {
+        $serializer = $this->getMock('Symfony\Component\Serializer\SerializerInterface');
+        $this->normalizer->setSerializer($serializer);
+
+        $obj = new PropertyDummy();
+        $object = new \stdClass();
+        $obj->setBar($object);
+
+        $this->normalizer->normalize($obj, 'any');
+    }
+
+    public function testNoTraversableSupport()
+    {
+        $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject()));
+    }
+}
+
+class PropertyDummy
+{
+    public $foo;
+    private $bar;
+    protected $camelCase;
+
+    public function getBar()
+    {
+        return $this->bar;
+    }
+
+    public function setBar($bar)
+    {
+        $this->bar = $bar;
+    }
+
+    public function getCamelCase()
+    {
+        return $this->camelCase;
+    }
+
+    public function setCamelCase($camelCase)
+    {
+        $this->camelCase = $camelCase;
+    }
+}
+
+class PropertyConstructorDummy
+{
+    protected $foo;
+    private $bar;
+
+    public function __construct($foo, $bar)
+    {
+        $this->foo = $foo;
+        $this->bar = $bar;
+    }
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+
+    public function getBar()
+    {
+        return $this->bar;
+    }
+}
+
+class PropertyCamelizedDummy
+{
+    private $kevinDunglas;
+    public $fooBar;
+    public $bar_foo;
+
+    public function __construct($kevinDunglas = null)
+    {
+        $this->kevinDunglas = $kevinDunglas;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/TestDenormalizer.php b/core/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/TestDenormalizer.php
rename to core/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/TestNormalizer.php b/core/vendor/symfony/serializer/Tests/Normalizer/TestNormalizer.php
similarity index 100%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Normalizer/TestNormalizer.php
rename to core/vendor/symfony/serializer/Tests/Normalizer/TestNormalizer.php
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/SerializerTest.php b/core/vendor/symfony/serializer/Tests/SerializerTest.php
similarity index 89%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/SerializerTest.php
rename to core/vendor/symfony/serializer/Tests/SerializerTest.php
index c2a231b11eef00f2a7d96f083b96181fb2f078e7..68f70fcfe51ad07ab91f72167309b6724147235d 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/SerializerTest.php
+++ b/core/vendor/symfony/serializer/Tests/SerializerTest.php
@@ -22,6 +22,17 @@
 
 class SerializerTest extends \PHPUnit_Framework_TestCase
 {
+    public function testInterface()
+    {
+        $serializer = new Serializer();
+
+        $this->assertInstanceOf('Symfony\Component\Serializer\SerializerInterface', $serializer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\NormalizerInterface', $serializer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Normalizer\DenormalizerInterface', $serializer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Encoder\EncoderInterface', $serializer);
+        $this->assertInstanceOf('Symfony\Component\Serializer\Encoder\DecoderInterface', $serializer);
+    }
+
     /**
      * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
      */
@@ -73,6 +84,15 @@ public function testDenormalizeOnNormalizer()
         $this->assertTrue($this->serializer->denormalize(json_encode($data), 'stdClass', 'json'));
     }
 
+    public function testCustomNormalizerCanNormalizeCollectionsAndScalar()
+    {
+        $this->serializer = new Serializer(array(new TestNormalizer()), array());
+        $this->assertNull($this->serializer->normalize(array('a', 'b')));
+        $this->assertNull($this->serializer->normalize(new \ArrayObject(array('c', 'd'))));
+        $this->assertNull($this->serializer->normalize(array()));
+        $this->assertNull($this->serializer->normalize('test'));
+    }
+
     public function testSerialize()
     {
         $this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
diff --git a/core/vendor/symfony/serializer/composer.json b/core/vendor/symfony/serializer/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f28b518b8ac733195f8c5e04ce86d0ed225e937
--- /dev/null
+++ b/core/vendor/symfony/serializer/composer.json
@@ -0,0 +1,45 @@
+{
+    "name": "symfony/serializer",
+    "type": "library",
+    "description": "Symfony Serializer Component",
+    "keywords": [],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.9"
+    },
+    "require-dev": {
+        "symfony/phpunit-bridge": "~2.7",
+        "symfony/yaml": "~2.0",
+        "symfony/config": "~2.2",
+        "symfony/property-access": "~2.3",
+        "doctrine/annotations": "~1.0",
+        "doctrine/cache": "~1.0"
+    },
+    "suggest": {
+        "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+        "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+        "symfony/yaml": "For using the default YAML mapping loader.",
+        "symfony/config": "For using the XML mapping loader.",
+        "symfony/property-access": "For using the ObjectNormalizer."
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Component\\Serializer\\": "" }
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.7-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/phpunit.xml.dist b/core/vendor/symfony/serializer/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/serializer/Symfony/Component/Serializer/phpunit.xml.dist
rename to core/vendor/symfony/serializer/phpunit.xml.dist
index da0540137b19a27a10c79321503ed13e525f28fb..279e1eb3aa53c1a487f62f92f5c06dceb9950dfb 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/phpunit.xml.dist
+++ b/core/vendor/symfony/serializer/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony Serializer Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/core/vendor/symfony/translation/CHANGELOG.md b/core/vendor/symfony/translation/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..157752ca7718005db47ac773f18482e08f7c0ecf
--- /dev/null
+++ b/core/vendor/symfony/translation/CHANGELOG.md
@@ -0,0 +1,47 @@
+CHANGELOG
+=========
+
+2.7.0
+-----
+
+ * added DataCollectorTranslator for collecting the translated messages.
+
+2.6.0
+-----
+
+ * added possibility to cache catalogues
+ * added TranslatorBagInterface
+ * added LoggingTranslator
+ * added Translator::getMessages() for retrieving the message catalogue as an array
+
+2.5.0
+-----
+
+ * added relative file path template to the file dumpers
+ * added optional backup to the file dumpers
+ * changed IcuResFileDumper to extend FileDumper
+
+2.3.0
+-----
+
+ * added classes to make operations on catalogues (like making a diff or a merge on 2 catalogues)
+ * added Translator::getFallbackLocales()
+ * deprecated Translator::setFallbackLocale() in favor of the new Translator::setFallbackLocales() method
+
+2.2.0
+-----
+
+ * QtTranslationsLoader class renamed to QtFileLoader. QtTranslationsLoader is deprecated and will be removed in 2.3.
+ * [BC BREAK] uniformized the exception thrown by the load() method when an error occurs. The load() method now
+   throws Symfony\Component\Translation\Exception\NotFoundResourceException when a resource cannot be found
+   and Symfony\Component\Translation\Exception\InvalidResourceException when a resource is invalid.
+ * changed the exception class thrown by some load() methods from \RuntimeException to \InvalidArgumentException
+   (IcuDatFileLoader, IcuResFileLoader and QtFileLoader)
+
+2.1.0
+-----
+
+ * added support for more than one fallback locale
+ * added support for extracting translation messages from templates (Twig and PHP)
+ * added dumpers for translation catalogs
+ * added support for QT, gettext, and ResourceBundles
diff --git a/core/vendor/symfony/translation/Catalogue/AbstractOperation.php b/core/vendor/symfony/translation/Catalogue/AbstractOperation.php
new file mode 100644
index 0000000000000000000000000000000000000000..062056b7317c434e229f42cb163ff0e7944bdd66
--- /dev/null
+++ b/core/vendor/symfony/translation/Catalogue/AbstractOperation.php
@@ -0,0 +1,146 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Catalogue;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\MessageCatalogueInterface;
+
+/**
+ * Base catalogues binary operation class.
+ *
+ * @author Jean-François Simon <contact@jfsimon.fr>
+ */
+abstract class AbstractOperation implements OperationInterface
+{
+    /**
+     * @var MessageCatalogueInterface
+     */
+    protected $source;
+
+    /**
+     * @var MessageCatalogueInterface
+     */
+    protected $target;
+
+    /**
+     * @var MessageCatalogue
+     */
+    protected $result;
+
+    /**
+     * @var null|array
+     */
+    private $domains;
+
+    /**
+     * @var array
+     */
+    protected $messages;
+
+    /**
+     * @param MessageCatalogueInterface $source
+     * @param MessageCatalogueInterface $target
+     *
+     * @throws \LogicException
+     */
+    public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
+    {
+        if ($source->getLocale() !== $target->getLocale()) {
+            throw new \LogicException('Operated catalogues must belong to the same locale.');
+        }
+
+        $this->source = $source;
+        $this->target = $target;
+        $this->result = new MessageCatalogue($source->getLocale());
+        $this->domains = null;
+        $this->messages = array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getDomains()
+    {
+        if (null === $this->domains) {
+            $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
+        }
+
+        return $this->domains;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getMessages($domain)
+    {
+        if (!in_array($domain, $this->getDomains())) {
+            throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
+        }
+
+        if (!isset($this->messages[$domain]['all'])) {
+            $this->processDomain($domain);
+        }
+
+        return $this->messages[$domain]['all'];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getNewMessages($domain)
+    {
+        if (!in_array($domain, $this->getDomains())) {
+            throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
+        }
+
+        if (!isset($this->messages[$domain]['new'])) {
+            $this->processDomain($domain);
+        }
+
+        return $this->messages[$domain]['new'];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getObsoleteMessages($domain)
+    {
+        if (!in_array($domain, $this->getDomains())) {
+            throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
+        }
+
+        if (!isset($this->messages[$domain]['obsolete'])) {
+            $this->processDomain($domain);
+        }
+
+        return $this->messages[$domain]['obsolete'];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult()
+    {
+        foreach ($this->getDomains() as $domain) {
+            if (!isset($this->messages[$domain])) {
+                $this->processDomain($domain);
+            }
+        }
+
+        return $this->result;
+    }
+
+    /**
+     * @param string $domain
+     */
+    abstract protected function processDomain($domain);
+}
diff --git a/core/vendor/symfony/translation/Catalogue/DiffOperation.php b/core/vendor/symfony/translation/Catalogue/DiffOperation.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d1994ee279146d54203ce6bca92fbe44b70b1c1
--- /dev/null
+++ b/core/vendor/symfony/translation/Catalogue/DiffOperation.php
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Catalogue;
+
+/**
+ * Diff operation between two catalogues.
+ *
+ * @author Jean-François Simon <contact@jfsimon.fr>
+ */
+class DiffOperation extends AbstractOperation
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function processDomain($domain)
+    {
+        $this->messages[$domain] = array(
+            'all' => array(),
+            'new' => array(),
+            'obsolete' => array(),
+        );
+
+        foreach ($this->source->all($domain) as $id => $message) {
+            if ($this->target->has($id, $domain)) {
+                $this->messages[$domain]['all'][$id] = $message;
+                $this->result->add(array($id => $message), $domain);
+                if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) {
+                    $this->result->setMetadata($id, $keyMetadata, $domain);
+                }
+            } else {
+                $this->messages[$domain]['obsolete'][$id] = $message;
+            }
+        }
+
+        foreach ($this->target->all($domain) as $id => $message) {
+            if (!$this->source->has($id, $domain)) {
+                $this->messages[$domain]['all'][$id] = $message;
+                $this->messages[$domain]['new'][$id] = $message;
+                $this->result->add(array($id => $message), $domain);
+                if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) {
+                    $this->result->setMetadata($id, $keyMetadata, $domain);
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Catalogue/MergeOperation.php b/core/vendor/symfony/translation/Catalogue/MergeOperation.php
new file mode 100644
index 0000000000000000000000000000000000000000..562ca0ea0854aa6d4a92836fd7596cd48960a87f
--- /dev/null
+++ b/core/vendor/symfony/translation/Catalogue/MergeOperation.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Catalogue;
+
+/**
+ * Merge operation between two catalogues.
+ *
+ * @author Jean-François Simon <contact@jfsimon.fr>
+ */
+class MergeOperation extends AbstractOperation
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function processDomain($domain)
+    {
+        $this->messages[$domain] = array(
+            'all' => array(),
+            'new' => array(),
+            'obsolete' => array(),
+        );
+
+        foreach ($this->source->all($domain) as $id => $message) {
+            $this->messages[$domain]['all'][$id] = $message;
+            $this->result->add(array($id => $message), $domain);
+            if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) {
+                $this->result->setMetadata($id, $keyMetadata, $domain);
+            }
+        }
+
+        foreach ($this->target->all($domain) as $id => $message) {
+            if (!$this->source->has($id, $domain)) {
+                $this->messages[$domain]['all'][$id] = $message;
+                $this->messages[$domain]['new'][$id] = $message;
+                $this->result->add(array($id => $message), $domain);
+                if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) {
+                    $this->result->setMetadata($id, $keyMetadata, $domain);
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Catalogue/OperationInterface.php b/core/vendor/symfony/translation/Catalogue/OperationInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d72378a3b3c175a53713ace530eb49cd26107078
--- /dev/null
+++ b/core/vendor/symfony/translation/Catalogue/OperationInterface.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Catalogue;
+
+use Symfony\Component\Translation\MessageCatalogueInterface;
+
+/**
+ * Represents an operation on catalogue(s).
+ *
+ * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
+ */
+interface OperationInterface
+{
+    /**
+     * Returns domains affected by operation.
+     *
+     * @return array
+     */
+    public function getDomains();
+
+    /**
+     * Returns all valid messages after operation.
+     *
+     * @param string $domain
+     *
+     * @return array
+     */
+    public function getMessages($domain);
+
+    /**
+     * Returns new messages after operation.
+     *
+     * @param string $domain
+     *
+     * @return array
+     */
+    public function getNewMessages($domain);
+
+    /**
+     * Returns obsolete messages after operation.
+     *
+     * @param string $domain
+     *
+     * @return array
+     */
+    public function getObsoleteMessages($domain);
+
+    /**
+     * Returns resulting catalogue.
+     *
+     * @return MessageCatalogueInterface
+     */
+    public function getResult();
+}
diff --git a/core/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/core/vendor/symfony/translation/DataCollector/TranslationDataCollector.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb9d1e733306738726e8ca5de43b89c5fc8c2138
--- /dev/null
+++ b/core/vendor/symfony/translation/DataCollector/TranslationDataCollector.php
@@ -0,0 +1,145 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\DataCollector;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\DataCollector\DataCollector;
+use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
+use Symfony\Component\Translation\DataCollectorTranslator;
+
+/**
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface
+{
+    /**
+     * @var DataCollectorTranslator
+     */
+    private $translator;
+
+    /**
+     * @param DataCollectorTranslator $translator
+     */
+    public function __construct(DataCollectorTranslator $translator)
+    {
+        $this->translator = $translator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function lateCollect()
+    {
+        $messages = $this->sanitizeCollectedMessages($this->translator->getCollectedMessages());
+
+        $this->data = $this->computeCount($messages);
+        $this->data['messages'] = $messages;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function collect(Request $request, Response $response, \Exception $exception = null)
+    {
+    }
+
+    /**
+     * @return array
+     */
+    public function getMessages()
+    {
+        return isset($this->data['messages']) ? $this->data['messages'] : array();
+    }
+
+    /**
+     * @return int
+     */
+    public function getCountMissings()
+    {
+        return isset($this->data[DataCollectorTranslator::MESSAGE_MISSING]) ? $this->data[DataCollectorTranslator::MESSAGE_MISSING] : 0;
+    }
+
+    /**
+     * @return int
+     */
+    public function getCountFallbacks()
+    {
+        return isset($this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK]) ? $this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK] : 0;
+    }
+
+    /**
+     * @return int
+     */
+    public function getCountDefines()
+    {
+        return isset($this->data[DataCollectorTranslator::MESSAGE_DEFINED]) ? $this->data[DataCollectorTranslator::MESSAGE_DEFINED] : 0;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return 'translation';
+    }
+
+    private function sanitizeCollectedMessages($messages)
+    {
+        $result = array();
+        foreach ($messages as $key => $message) {
+            $messageId = $message['locale'].$message['domain'].$message['id'];
+
+            if (!isset($result[$messageId])) {
+                $message['count'] = 1;
+                $messages[$key]['translation'] = $this->sanitizeString($message['translation']);
+                $result[$messageId] = $message;
+            } else {
+                $result[$messageId]['count']++;
+            }
+
+            unset($messages[$key]);
+        }
+
+        return $result;
+    }
+
+    private function computeCount($messages)
+    {
+        $count = array(
+            DataCollectorTranslator::MESSAGE_DEFINED => 0,
+            DataCollectorTranslator::MESSAGE_MISSING => 0,
+            DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK => 0,
+        );
+
+        foreach ($messages as $message) {
+            ++$count[$message['state']];
+        }
+
+        return $count;
+    }
+
+    private function sanitizeString($string, $length = 80)
+    {
+        $string = trim(preg_replace('/\s+/', ' ', $string));
+
+        if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($string)) {
+            if (mb_strlen($string, $encoding) > $length) {
+                return mb_substr($string, 0, $length - 3, $encoding).'...';
+            }
+        } elseif (strlen($string) > $length) {
+            return substr($string, 0, $length - 3).'...';
+        }
+
+        return $string;
+    }
+}
diff --git a/core/vendor/symfony/translation/DataCollectorTranslator.php b/core/vendor/symfony/translation/DataCollectorTranslator.php
new file mode 100644
index 0000000000000000000000000000000000000000..813a85760ae141e0662b59d12fab17e91bf29c72
--- /dev/null
+++ b/core/vendor/symfony/translation/DataCollectorTranslator.php
@@ -0,0 +1,152 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface
+{
+    const MESSAGE_DEFINED = 0;
+    const MESSAGE_MISSING = 1;
+    const MESSAGE_EQUALS_FALLBACK = 2;
+
+    /**
+     * @var TranslatorInterface|TranslatorBagInterface
+     */
+    private $translator;
+
+    /**
+     * @var array
+     */
+    private $messages = array();
+
+    /**
+     * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
+     */
+    public function __construct(TranslatorInterface $translator)
+    {
+        if (!$translator instanceof TranslatorBagInterface) {
+            throw new \InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', get_class($translator)));
+        }
+
+        $this->translator = $translator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function trans($id, array $parameters = array(), $domain = null, $locale = null)
+    {
+        $trans = $this->translator->trans($id, $parameters, $domain, $locale);
+        $this->collectMessage($locale, $domain, $id, $trans);
+
+        return $trans;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
+    {
+        $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
+        $this->collectMessage($locale, $domain, $id, $trans);
+
+        return $trans;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function setLocale($locale)
+    {
+        $this->translator->setLocale($locale);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getLocale()
+    {
+        return $this->translator->getLocale();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCatalogue($locale = null)
+    {
+        return $this->translator->getCatalogue($locale);
+    }
+
+    /**
+     * Passes through all unknown calls onto the translator object.
+     */
+    public function __call($method, $args)
+    {
+        return call_user_func_array(array($this->translator, $method), $args);
+    }
+
+    /**
+     * @return array
+     */
+    public function getCollectedMessages()
+    {
+        return $this->messages;
+    }
+
+    /**
+     * @param string|null $locale
+     * @param string|null $domain
+     * @param string      $id
+     * @param string      $trans
+     */
+    private function collectMessage($locale, $domain, $id, $translation)
+    {
+        if (null === $domain) {
+            $domain = 'messages';
+        }
+
+        $id = (string) $id;
+        $catalogue = $this->translator->getCatalogue($locale);
+        $locale = $catalogue->getLocale();
+        if ($catalogue->defines($id, $domain)) {
+            $state = self::MESSAGE_DEFINED;
+        } elseif ($catalogue->has($id, $domain)) {
+            $state = self::MESSAGE_EQUALS_FALLBACK;
+
+            $fallbackCatalogue = $catalogue->getFallBackCatalogue();
+            while ($fallbackCatalogue) {
+                if ($fallbackCatalogue->defines($id, $domain)) {
+                    $locale = $fallbackCatalogue->getLocale();
+                    break;
+                }
+
+                $fallbackCatalogue = $fallbackCatalogue->getFallBackCatalogue();
+            }
+        } else {
+            $state = self::MESSAGE_MISSING;
+        }
+
+        $this->messages[] = array(
+            'locale' => $locale,
+            'domain' => $domain,
+            'id' => $id,
+            'translation' => $translation,
+            'state' => $state,
+        );
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/CsvFileDumper.php b/core/vendor/symfony/translation/Dumper/CsvFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..08005b097d54d65ac0ba22f23a06a5f914e0b77d
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/CsvFileDumper.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * CsvFileDumper generates a csv formatted string representation of a message catalogue.
+ *
+ * @author Stealth35
+ */
+class CsvFileDumper extends FileDumper
+{
+    private $delimiter = ';';
+    private $enclosure = '"';
+
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        $handle = fopen('php://memory', 'rb+');
+
+        foreach ($messages->all($domain) as $source => $target) {
+            fputcsv($handle, array($source, $target), $this->delimiter, $this->enclosure);
+        }
+
+        rewind($handle);
+        $output = stream_get_contents($handle);
+        fclose($handle);
+
+        return $output;
+    }
+
+    /**
+     * Sets the delimiter and escape character for CSV.
+     *
+     * @param string $delimiter delimiter character
+     * @param string $enclosure enclosure character
+     */
+    public function setCsvControl($delimiter = ';', $enclosure = '"')
+    {
+        $this->delimiter = $delimiter;
+        $this->enclosure = $enclosure;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'csv';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/DumperInterface.php b/core/vendor/symfony/translation/Dumper/DumperInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..cebc65ed89d90f6b1a2c7e5f627d5b6afce60353
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/DumperInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * DumperInterface is the interface implemented by all translation dumpers.
+ * There is no common option.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+interface DumperInterface
+{
+    /**
+     * Dumps the message catalogue.
+     *
+     * @param MessageCatalogue $messages The message catalogue
+     * @param array            $options  Options that are used by the dumper
+     */
+    public function dump(MessageCatalogue $messages, $options = array());
+}
diff --git a/core/vendor/symfony/translation/Dumper/FileDumper.php b/core/vendor/symfony/translation/Dumper/FileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..f2f17d64fde16b29f9a9dc5eb4d27b5f0f919ca2
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/FileDumper.php
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s).
+ * Performs backup of already existing files.
+ *
+ * Options:
+ * - path (mandatory): the directory where the files should be saved
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+abstract class FileDumper implements DumperInterface
+{
+    /**
+     * A template for the relative paths to files.
+     *
+     * @var string
+     */
+    protected $relativePathTemplate = '%domain%.%locale%.%extension%';
+
+    /**
+     * Make file backup before the dump.
+     *
+     * @var bool
+     */
+    private $backup = true;
+
+    /**
+     * Sets the template for the relative paths to files.
+     *
+     * @param string $relativePathTemplate A template for the relative paths to files
+     */
+    public function setRelativePathTemplate($relativePathTemplate)
+    {
+        $this->relativePathTemplate = $relativePathTemplate;
+    }
+
+    /**
+     * Sets backup flag.
+     *
+     * @param bool
+     */
+    public function setBackup($backup)
+    {
+        $this->backup = $backup;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function dump(MessageCatalogue $messages, $options = array())
+    {
+        if (!array_key_exists('path', $options)) {
+            throw new \InvalidArgumentException('The file dumper needs a path option.');
+        }
+
+        // save a file for each domain
+        foreach ($messages->getDomains() as $domain) {
+            // backup
+            $fullpath = $options['path'].'/'.$this->getRelativePath($domain, $messages->getLocale());
+            if (file_exists($fullpath)) {
+                if ($this->backup) {
+                    copy($fullpath, $fullpath.'~');
+                }
+            } else {
+                $directory = dirname($fullpath);
+                if (!file_exists($directory) && !@mkdir($directory, 0777, true)) {
+                    throw new \RuntimeException(sprintf('Unable to create directory "%s".', $directory));
+                }
+            }
+            // save file
+            file_put_contents($fullpath, $this->format($messages, $domain));
+        }
+    }
+
+    /**
+     * Transforms a domain of a message catalogue to its string representation.
+     *
+     * @param MessageCatalogue $messages
+     * @param string           $domain
+     *
+     * @return string representation
+     */
+    abstract protected function format(MessageCatalogue $messages, $domain);
+
+    /**
+     * Gets the file extension of the dumper.
+     *
+     * @return string file extension
+     */
+    abstract protected function getExtension();
+
+    /**
+     * Gets the relative file path using the template.
+     *
+     * @param string $domain The domain
+     * @param string $locale The locale
+     *
+     * @return string The relative file path
+     */
+    private function getRelativePath($domain, $locale)
+    {
+        return strtr($this->relativePathTemplate, array(
+            '%domain%' => $domain,
+            '%locale%' => $locale,
+            '%extension%' => $this->getExtension(),
+        ));
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/IcuResFileDumper.php b/core/vendor/symfony/translation/Dumper/IcuResFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a2ed9f737335b3672993d774b43275331d90a94
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/IcuResFileDumper.php
@@ -0,0 +1,112 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * IcuResDumper generates an ICU ResourceBundle formatted string representation of a message catalogue.
+ *
+ * @author Stealth35
+ */
+class IcuResFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected $relativePathTemplate = '%domain%/%locale%.%extension%';
+
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        $data = $indexes = $resources = '';
+
+        foreach ($messages->all($domain) as $source => $target) {
+            $indexes .= pack('v', strlen($data) + 28);
+            $data    .= $source."\0";
+        }
+
+        $data .= $this->writePadding($data);
+
+        $keyTop = $this->getPosition($data);
+
+        foreach ($messages->all($domain) as $source => $target) {
+            $resources .= pack('V', $this->getPosition($data));
+
+            $data .= pack('V', strlen($target))
+                .mb_convert_encoding($target."\0", 'UTF-16LE', 'UTF-8')
+                .$this->writePadding($data)
+                  ;
+        }
+
+        $resOffset = $this->getPosition($data);
+
+        $data .= pack('v', count($messages))
+            .$indexes
+            .$this->writePadding($data)
+            .$resources
+              ;
+
+        $bundleTop = $this->getPosition($data);
+
+        $root = pack('V7',
+            $resOffset + (2 << 28), // Resource Offset + Resource Type
+            6,                      // Index length
+            $keyTop,                // Index keys top
+            $bundleTop,             // Index resources top
+            $bundleTop,             // Index bundle top
+            count($messages),       // Index max table length
+            0                       // Index attributes
+        );
+
+        $header = pack('vC2v4C12@32',
+            32,                     // Header size
+            0xDA, 0x27,             // Magic number 1 and 2
+            20, 0, 0, 2,            // Rest of the header, ..., Size of a char
+            0x52, 0x65, 0x73, 0x42, // Data format identifier
+            1, 2, 0, 0,             // Data version
+            1, 4, 0, 0              // Unicode version
+        );
+
+        $output = $header
+               .$root
+               .$data;
+
+        return $output;
+    }
+
+    private function writePadding($data)
+    {
+        $padding = strlen($data) % 4;
+
+        if ($padding) {
+            return str_repeat("\xAA", 4 - $padding);
+        }
+    }
+
+    private function getPosition($data)
+    {
+        $position = (strlen($data) + 28) / 4;
+
+        return $position;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'res';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/IniFileDumper.php b/core/vendor/symfony/translation/Dumper/IniFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..45df389bd6987844c2218150273b2f802b3cfa11
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/IniFileDumper.php
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * IniFileDumper generates an ini formatted string representation of a message catalogue.
+ *
+ * @author Stealth35
+ */
+class IniFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        $output = '';
+
+        foreach ($messages->all($domain) as $source => $target) {
+            $escapeTarget = str_replace('"', '\"', $target);
+            $output .= $source.'="'.$escapeTarget."\"\n";
+        }
+
+        return $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'ini';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/JsonFileDumper.php b/core/vendor/symfony/translation/Dumper/JsonFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ad35184cd55e98041266b4d01c3c653ffe7e83d
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/JsonFileDumper.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * JsonFileDumper generates an json formatted string representation of a message catalogue.
+ *
+ * @author singles
+ */
+class JsonFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        return json_encode($messages->all($domain), defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'json';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/MoFileDumper.php b/core/vendor/symfony/translation/Dumper/MoFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8dc6ac395fc492a6f3caabdc82ed47b02abe67b
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/MoFileDumper.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Loader\MoFileLoader;
+
+/**
+ * MoFileDumper generates a gettext formatted string representation of a message catalogue.
+ *
+ * @author Stealth35
+ */
+class MoFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        $output = $sources = $targets = $sourceOffsets = $targetOffsets = '';
+        $offsets = array();
+        $size = 0;
+
+        foreach ($messages->all($domain) as $source => $target) {
+            $offsets[] = array_map('strlen', array($sources, $source, $targets, $target));
+            $sources .= "\0".$source;
+            $targets .= "\0".$target;
+            ++$size;
+        }
+
+        $header = array(
+            'magicNumber' => MoFileLoader::MO_LITTLE_ENDIAN_MAGIC,
+            'formatRevision' => 0,
+            'count' => $size,
+            'offsetId' => MoFileLoader::MO_HEADER_SIZE,
+            'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size),
+            'sizeHashes' => 0,
+            'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size),
+        );
+
+        $sourcesSize = strlen($sources);
+        $sourcesStart = $header['offsetHashes'] + 1;
+
+        foreach ($offsets as $offset) {
+            $sourceOffsets .= $this->writeLong($offset[1])
+                          .$this->writeLong($offset[0] + $sourcesStart);
+            $targetOffsets .= $this->writeLong($offset[3])
+                          .$this->writeLong($offset[2] + $sourcesStart + $sourcesSize);
+        }
+
+        $output = implode(array_map(array($this, 'writeLong'), $header))
+               .$sourceOffsets
+               .$targetOffsets
+               .$sources
+               .$targets
+                ;
+
+        return $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'mo';
+    }
+
+    private function writeLong($str)
+    {
+        return pack('V*', $str);
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/PhpFileDumper.php b/core/vendor/symfony/translation/Dumper/PhpFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..b354c1245c993915b1c413f11fa8861438b44ac6
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/PhpFileDumper.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * PhpFileDumper generates PHP files from a message catalogue.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+class PhpFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function format(MessageCatalogue $messages, $domain)
+    {
+        $output = "<?php\n\nreturn ".var_export($messages->all($domain), true).";\n";
+
+        return $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'php';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/PoFileDumper.php b/core/vendor/symfony/translation/Dumper/PoFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..983064b5d7ca9e68c5c361d4e0edf05aec5775cc
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/PoFileDumper.php
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * PoFileDumper generates a gettext formatted string representation of a message catalogue.
+ *
+ * @author Stealth35
+ */
+class PoFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain = 'messages')
+    {
+        $output = 'msgid ""'."\n";
+        $output .= 'msgstr ""'."\n";
+        $output .= '"Content-Type: text/plain; charset=UTF-8\n"'."\n";
+        $output .= '"Content-Transfer-Encoding: 8bit\n"'."\n";
+        $output .= '"Language: '.$messages->getLocale().'\n"'."\n";
+        $output .= "\n";
+
+        $newLine = false;
+        foreach ($messages->all($domain) as $source => $target) {
+            if ($newLine) {
+                $output .= "\n";
+            } else {
+                $newLine = true;
+            }
+            $output .= sprintf('msgid "%s"'."\n", $this->escape($source));
+            $output .= sprintf('msgstr "%s"', $this->escape($target));
+        }
+
+        return $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'po';
+    }
+
+    private function escape($str)
+    {
+        return addcslashes($str, "\0..\37\42\134");
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/QtFileDumper.php b/core/vendor/symfony/translation/Dumper/QtFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..42aa0934814932fb417471a5d74b4456b71bdf39
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/QtFileDumper.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * QtFileDumper generates ts files from a message catalogue.
+ *
+ * @author Benjamin Eberlei <kontakt@beberlei.de>
+ */
+class QtFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function format(MessageCatalogue $messages, $domain)
+    {
+        $dom = new \DOMDocument('1.0', 'utf-8');
+        $dom->formatOutput = true;
+        $ts = $dom->appendChild($dom->createElement('TS'));
+        $context = $ts->appendChild($dom->createElement('context'));
+        $context->appendChild($dom->createElement('name', $domain));
+
+        foreach ($messages->all($domain) as $source => $target) {
+            $message = $context->appendChild($dom->createElement('message'));
+            $message->appendChild($dom->createElement('source', $source));
+            $message->appendChild($dom->createElement('translation', $target));
+        }
+
+        return $dom->saveXML();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'ts';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/XliffFileDumper.php b/core/vendor/symfony/translation/Dumper/XliffFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..58d19733dbb36a65dfc337812b53783915bb248e
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/XliffFileDumper.php
@@ -0,0 +1,109 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * XliffFileDumper generates xliff files from a message catalogue.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+class XliffFileDumper extends FileDumper
+{
+    /**
+     * @var string
+     */
+    private $defaultLocale;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function dump(MessageCatalogue $messages, $options = array())
+    {
+        if (array_key_exists('default_locale', $options)) {
+            $this->defaultLocale = $options['default_locale'];
+        } else {
+            $this->defaultLocale = \Locale::getDefault();
+        }
+
+        parent::dump($messages, $options);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function format(MessageCatalogue $messages, $domain)
+    {
+        $dom = new \DOMDocument('1.0', 'utf-8');
+        $dom->formatOutput = true;
+
+        $xliff = $dom->appendChild($dom->createElement('xliff'));
+        $xliff->setAttribute('version', '1.2');
+        $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2');
+
+        $xliffFile = $xliff->appendChild($dom->createElement('file'));
+        $xliffFile->setAttribute('source-language', str_replace('_', '-', $this->defaultLocale));
+        $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale()));
+        $xliffFile->setAttribute('datatype', 'plaintext');
+        $xliffFile->setAttribute('original', 'file.ext');
+
+        $xliffBody = $xliffFile->appendChild($dom->createElement('body'));
+        foreach ($messages->all($domain) as $source => $target) {
+            $translation = $dom->createElement('trans-unit');
+
+            $translation->setAttribute('id', md5($source));
+            $translation->setAttribute('resname', $source);
+
+            $s = $translation->appendChild($dom->createElement('source'));
+            $s->appendChild($dom->createTextNode($source));
+
+            // Does the target contain characters requiring a CDATA section?
+            $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
+
+            $t = $translation->appendChild($dom->createElement('target'));
+            $t->appendChild($text);
+
+            $metadata = $messages->getMetadata($source, $domain);
+            if (null !== $metadata && array_key_exists('notes', $metadata) && is_array($metadata['notes'])) {
+                foreach ($metadata['notes'] as $note) {
+                    if (!isset($note['content'])) {
+                        continue;
+                    }
+
+                    $n = $translation->appendChild($dom->createElement('note'));
+                    $n->appendChild($dom->createTextNode($note['content']));
+
+                    if (isset($note['priority'])) {
+                        $n->setAttribute('priority', $note['priority']);
+                    }
+
+                    if (isset($note['from'])) {
+                        $n->setAttribute('from', $note['from']);
+                    }
+                }
+            }
+
+            $xliffBody->appendChild($translation);
+        }
+
+        return $dom->saveXML();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'xlf';
+    }
+}
diff --git a/core/vendor/symfony/translation/Dumper/YamlFileDumper.php b/core/vendor/symfony/translation/Dumper/YamlFileDumper.php
new file mode 100644
index 0000000000000000000000000000000000000000..870fb9838042da23f0c2ecbb959a3b8f0fb7a650
--- /dev/null
+++ b/core/vendor/symfony/translation/Dumper/YamlFileDumper.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * YamlFileDumper generates yaml files from a message catalogue.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+class YamlFileDumper extends FileDumper
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function format(MessageCatalogue $messages, $domain)
+    {
+        if (!class_exists('Symfony\Component\Yaml\Yaml')) {
+            throw new \LogicException('Dumping translations in the YAML format requires the Symfony Yaml component.');
+        }
+
+        return Yaml::dump($messages->all($domain));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getExtension()
+    {
+        return 'yml';
+    }
+}
diff --git a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableSeparator.php b/core/vendor/symfony/translation/Exception/ExceptionInterface.php
similarity index 65%
rename from core/vendor/symfony/console/Symfony/Component/Console/Helper/TableSeparator.php
rename to core/vendor/symfony/translation/Exception/ExceptionInterface.php
index 1f6981b03865d5ae805792e4ea55e793a7d96904..7757e669a0cc95072481f1529535f72e1f66ed6a 100644
--- a/core/vendor/symfony/console/Symfony/Component/Console/Helper/TableSeparator.php
+++ b/core/vendor/symfony/translation/Exception/ExceptionInterface.php
@@ -9,13 +9,15 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Console\Helper;
+namespace Symfony\Component\Translation\Exception;
 
 /**
- * Marks a row as being a separator.
+ * Exception interface for all exceptions thrown by the component.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
  */
-class TableSeparator
+interface ExceptionInterface
 {
 }
diff --git a/core/vendor/symfony/translation/Exception/InvalidResourceException.php b/core/vendor/symfony/translation/Exception/InvalidResourceException.php
new file mode 100644
index 0000000000000000000000000000000000000000..6413f1ae79ee574e7ce62501078e9ee12aa73c35
--- /dev/null
+++ b/core/vendor/symfony/translation/Exception/InvalidResourceException.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Exception;
+
+/**
+ * Thrown when a resource cannot be loaded.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class InvalidResourceException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/symfony/translation/Exception/NotFoundResourceException.php b/core/vendor/symfony/translation/Exception/NotFoundResourceException.php
new file mode 100644
index 0000000000000000000000000000000000000000..7826e5ce51bef6b125e80aa10f8225179303bf61
--- /dev/null
+++ b/core/vendor/symfony/translation/Exception/NotFoundResourceException.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Exception;
+
+/**
+ * Thrown when a resource does not exist.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class NotFoundResourceException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/core/vendor/symfony/translation/Extractor/AbstractFileExtractor.php
new file mode 100644
index 0000000000000000000000000000000000000000..196bc3341060aa718dc86a31d32aabacd236faf7
--- /dev/null
+++ b/core/vendor/symfony/translation/Extractor/AbstractFileExtractor.php
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Extractor;
+
+/**
+ * Base class used by classes that extract translation messages from files.
+ *
+ * @author Marcos D. Sánchez <marcosdsanchez@gmail.com>
+ */
+abstract class AbstractFileExtractor
+{
+    /**
+     * @param string|array $resource files, a file or a directory
+     *
+     * @return array
+     */
+    protected function extractFiles($resource)
+    {
+        if (is_array($resource) || $resource instanceof \Traversable) {
+            $files = array();
+            foreach ($resource as $file) {
+                if ($this->canBeExtracted($file)) {
+                    $files[] = $this->toSplFileInfo($file);
+                }
+            }
+        } elseif (is_file($resource)) {
+            $files = $this->canBeExtracted($resource) ? array($this->toSplFileInfo($resource)) : array();
+        } else {
+            $files = $this->extractFromDirectory($resource);
+        }
+
+        return $files;
+    }
+
+    /**
+     * @param string $file
+     *
+     * @return \SplFileInfo
+     */
+    private function toSplFileInfo($file)
+    {
+        return ($file instanceof \SplFileInfo) ? $file : new \SplFileInfo($file);
+    }
+
+    /**
+     * @param string $file
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @return bool
+     */
+    protected function isFile($file)
+    {
+        if (!is_file($file)) {
+            throw new \InvalidArgumentException(sprintf('The "%s" file does not exist.', $file));
+        }
+
+        return true;
+    }
+
+    /**
+     * @param string $file
+     *
+     * @return bool
+     */
+    abstract protected function canBeExtracted($file);
+
+    /**
+     * @param string|array $resource files, a file or a directory
+     *
+     * @return array files to be extracted
+     */
+    abstract protected function extractFromDirectory($resource);
+}
diff --git a/core/vendor/symfony/translation/Extractor/ChainExtractor.php b/core/vendor/symfony/translation/Extractor/ChainExtractor.php
new file mode 100644
index 0000000000000000000000000000000000000000..50e3c84579f2bcbcd1174cf9de019904e7c1d6fc
--- /dev/null
+++ b/core/vendor/symfony/translation/Extractor/ChainExtractor.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Extractor;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * ChainExtractor extracts translation messages from template files.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+class ChainExtractor implements ExtractorInterface
+{
+    /**
+     * The extractors.
+     *
+     * @var ExtractorInterface[]
+     */
+    private $extractors = array();
+
+    /**
+     * Adds a loader to the translation extractor.
+     *
+     * @param string             $format    The format of the loader
+     * @param ExtractorInterface $extractor The loader
+     */
+    public function addExtractor($format, ExtractorInterface $extractor)
+    {
+        $this->extractors[$format] = $extractor;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setPrefix($prefix)
+    {
+        foreach ($this->extractors as $extractor) {
+            $extractor->setPrefix($prefix);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function extract($directory, MessageCatalogue $catalogue)
+    {
+        foreach ($this->extractors as $extractor) {
+            $extractor->extract($directory, $catalogue);
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Extractor/ExtractorInterface.php b/core/vendor/symfony/translation/Extractor/ExtractorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..438f80b32f053a026ca3cecb640dd9e5c34c0626
--- /dev/null
+++ b/core/vendor/symfony/translation/Extractor/ExtractorInterface.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Extractor;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * Extracts translation messages from a directory or files to the catalogue.
+ * New found messages are injected to the catalogue using the prefix.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+interface ExtractorInterface
+{
+    /**
+     * Extracts translation messages from files, a file or a directory to the catalogue.
+     *
+     * @param string|array     $resource  files, a file or a directory
+     * @param MessageCatalogue $catalogue The catalogue
+     */
+    public function extract($resource, MessageCatalogue $catalogue);
+
+    /**
+     * Sets the prefix that should be used for new found messages.
+     *
+     * @param string $prefix The prefix
+     */
+    public function setPrefix($prefix);
+}
diff --git a/core/vendor/symfony/translation/IdentityTranslator.php b/core/vendor/symfony/translation/IdentityTranslator.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c9212e80305028c0cde67208d719c4780f2939a
--- /dev/null
+++ b/core/vendor/symfony/translation/IdentityTranslator.php
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * IdentityTranslator does not translate anything.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class IdentityTranslator implements TranslatorInterface
+{
+    private $selector;
+    private $locale;
+
+    /**
+     * Constructor.
+     *
+     * @param MessageSelector|null $selector The message selector for pluralization
+     *
+     * @api
+     */
+    public function __construct(MessageSelector $selector = null)
+    {
+        $this->selector = $selector ?: new MessageSelector();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function setLocale($locale)
+    {
+        $this->locale = $locale;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getLocale()
+    {
+        return $this->locale ?: \Locale::getDefault();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function trans($id, array $parameters = array(), $domain = null, $locale = null)
+    {
+        return strtr((string) $id, $parameters);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
+    {
+        return strtr($this->selector->choose((string) $id, (int) $number, $locale ?: $this->getLocale()), $parameters);
+    }
+}
diff --git a/core/vendor/symfony/translation/Interval.php b/core/vendor/symfony/translation/Interval.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a51156ef73560e9bea2a419f392f930fcf632ef
--- /dev/null
+++ b/core/vendor/symfony/translation/Interval.php
@@ -0,0 +1,107 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * Tests if a given number belongs to a given math interval.
+ *
+ * An interval can represent a finite set of numbers:
+ *
+ *  {1,2,3,4}
+ *
+ * An interval can represent numbers between two numbers:
+ *
+ *  [1, +Inf]
+ *  ]-1,2[
+ *
+ * The left delimiter can be [ (inclusive) or ] (exclusive).
+ * The right delimiter can be [ (exclusive) or ] (inclusive).
+ * Beside numbers, you can use -Inf and +Inf for the infinite.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @see    http://en.wikipedia.org/wiki/Interval_%28mathematics%29#The_ISO_notation
+ */
+class Interval
+{
+    /**
+     * Tests if the given number is in the math interval.
+     *
+     * @param int    $number   A number
+     * @param string $interval An interval
+     *
+     * @return bool
+     *
+     * @throws \InvalidArgumentException
+     */
+    public static function test($number, $interval)
+    {
+        $interval = trim($interval);
+
+        if (!preg_match('/^'.self::getIntervalRegexp().'$/x', $interval, $matches)) {
+            throw new \InvalidArgumentException(sprintf('"%s" is not a valid interval.', $interval));
+        }
+
+        if ($matches[1]) {
+            foreach (explode(',', $matches[2]) as $n) {
+                if ($number == $n) {
+                    return true;
+                }
+            }
+        } else {
+            $leftNumber = self::convertNumber($matches['left']);
+            $rightNumber = self::convertNumber($matches['right']);
+
+            return
+                ('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber)
+                && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)
+            ;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a Regexp that matches valid intervals.
+     *
+     * @return string A Regexp (without the delimiters)
+     */
+    public static function getIntervalRegexp()
+    {
+        return <<<EOF
+        ({\s*
+            (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
+        \s*})
+
+            |
+
+        (?P<left_delimiter>[\[\]])
+            \s*
+            (?P<left>-Inf|\-?\d+(\.\d+)?)
+            \s*,\s*
+            (?P<right>\+?Inf|\-?\d+(\.\d+)?)
+            \s*
+        (?P<right_delimiter>[\[\]])
+EOF;
+    }
+
+    private static function convertNumber($number)
+    {
+        if ('-Inf' === $number) {
+            return log(0);
+        } elseif ('+Inf' === $number || 'Inf' === $number) {
+            return -log(0);
+        }
+
+        return (float) $number;
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/LICENSE b/core/vendor/symfony/translation/LICENSE
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/LICENSE
rename to core/vendor/symfony/translation/LICENSE
diff --git a/core/vendor/symfony/translation/Loader/ArrayLoader.php b/core/vendor/symfony/translation/Loader/ArrayLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..68ba81d4658d141853d0471711c1a15bdcad5d4c
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/ArrayLoader.php
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+/**
+ * ArrayLoader loads translations from a PHP array.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class ArrayLoader implements LoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        $this->flatten($resource);
+        $catalogue = new MessageCatalogue($locale);
+        $catalogue->add($resource, $domain);
+
+        return $catalogue;
+    }
+
+    /**
+     * Flattens an nested array of translations.
+     *
+     * The scheme used is:
+     *   'key' => array('key2' => array('key3' => 'value'))
+     * Becomes:
+     *   'key.key2.key3' => 'value'
+     *
+     * This function takes an array by reference and will modify it
+     *
+     * @param array  &$messages The array that will be flattened
+     * @param array  $subnode   Current subnode being parsed, used internally for recursive calls
+     * @param string $path      Current path being parsed, used internally for recursive calls
+     */
+    private function flatten(array &$messages, array $subnode = null, $path = null)
+    {
+        if (null === $subnode) {
+            $subnode = &$messages;
+        }
+        foreach ($subnode as $key => $value) {
+            if (is_array($value)) {
+                $nodePath = $path ? $path.'.'.$key : $key;
+                $this->flatten($messages, $value, $nodePath);
+                if (null === $path) {
+                    unset($messages[$key]);
+                }
+            } elseif (null !== $path) {
+                $messages[$path.'.'.$key] = $value;
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/CsvFileLoader.php b/core/vendor/symfony/translation/Loader/CsvFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc927601d900eb45b271a46daa1929998ba855e2
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/CsvFileLoader.php
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * CsvFileLoader loads translations from CSV files.
+ *
+ * @author Saša Stamenković <umpirsky@gmail.com>
+ *
+ * @api
+ */
+class CsvFileLoader extends ArrayLoader
+{
+    private $delimiter = ';';
+    private $enclosure = '"';
+    private $escape = '\\';
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = array();
+
+        try {
+            $file = new \SplFileObject($resource, 'rb');
+        } catch (\RuntimeException $e) {
+            throw new NotFoundResourceException(sprintf('Error opening file "%s".', $resource), 0, $e);
+        }
+
+        $file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY);
+        $file->setCsvControl($this->delimiter, $this->enclosure, $this->escape);
+
+        foreach ($file as $data) {
+            if (substr($data[0], 0, 1) === '#') {
+                continue;
+            }
+
+            if (!isset($data[1])) {
+                continue;
+            }
+
+            if (count($data) == 2) {
+                $messages[$data[0]] = $data[1];
+            } else {
+                continue;
+            }
+        }
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+
+    /**
+     * Sets the delimiter, enclosure, and escape character for CSV.
+     *
+     * @param string $delimiter delimiter character
+     * @param string $enclosure enclosure character
+     * @param string $escape    escape character
+     */
+    public function setCsvControl($delimiter = ';', $enclosure = '"', $escape = '\\')
+    {
+        $this->delimiter = $delimiter;
+        $this->enclosure = $enclosure;
+        $this->escape = $escape;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/IcuDatFileLoader.php b/core/vendor/symfony/translation/Loader/IcuDatFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..71ba90a39d9cc118f6ee9622029632b193c35eff
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/IcuDatFileLoader.php
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * IcuResFileLoader loads translations from a resource bundle.
+ *
+ * @author stealth35
+ */
+class IcuDatFileLoader extends IcuResFileLoader
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource.'.dat')) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource.'.dat')) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        try {
+            $rb = new \ResourceBundle($locale, $resource);
+        } catch (\Exception $e) {
+            // HHVM compatibility: constructor throws on invalid resource
+            $rb = null;
+        }
+
+        if (!$rb) {
+            throw new InvalidResourceException(sprintf('Cannot load resource "%s"', $resource));
+        } elseif (intl_is_failure($rb->getErrorCode())) {
+            throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());
+        }
+
+        $messages = $this->flatten($rb);
+        $catalogue = new MessageCatalogue($locale);
+        $catalogue->add($messages, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource.'.dat'));
+        }
+
+        return $catalogue;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/IcuResFileLoader.php b/core/vendor/symfony/translation/Loader/IcuResFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f8037fb164d8a70ad2210f4e21130f92d1039fe
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/IcuResFileLoader.php
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\DirectoryResource;
+
+/**
+ * IcuResFileLoader loads translations from a resource bundle.
+ *
+ * @author stealth35
+ */
+class IcuResFileLoader implements LoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!is_dir($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        try {
+            $rb = new \ResourceBundle($locale, $resource);
+        } catch (\Exception $e) {
+            // HHVM compatibility: constructor throws on invalid resource
+            $rb = null;
+        }
+
+        if (!$rb) {
+            throw new InvalidResourceException(sprintf('Cannot load resource "%s"', $resource));
+        } elseif (intl_is_failure($rb->getErrorCode())) {
+            throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());
+        }
+
+        $messages = $this->flatten($rb);
+        $catalogue = new MessageCatalogue($locale);
+        $catalogue->add($messages, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\DirectoryResource')) {
+            $catalogue->addResource(new DirectoryResource($resource));
+        }
+
+        return $catalogue;
+    }
+
+    /**
+     * Flattens an ResourceBundle.
+     *
+     * The scheme used is:
+     *   key { key2 { key3 { "value" } } }
+     * Becomes:
+     *   'key.key2.key3' => 'value'
+     *
+     * This function takes an array by reference and will modify it
+     *
+     * @param \ResourceBundle $rb       the ResourceBundle that will be flattened
+     * @param array           $messages used internally for recursive calls
+     * @param string          $path     current path being parsed, used internally for recursive calls
+     *
+     * @return array the flattened ResourceBundle
+     */
+    protected function flatten(\ResourceBundle $rb, array &$messages = array(), $path = null)
+    {
+        foreach ($rb as $key => $value) {
+            $nodePath = $path ? $path.'.'.$key : $key;
+            if ($value instanceof \ResourceBundle) {
+                $this->flatten($value, $messages, $nodePath);
+            } else {
+                $messages[$nodePath] = $value;
+            }
+        }
+
+        return $messages;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/IniFileLoader.php b/core/vendor/symfony/translation/Loader/IniFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b3a7b19118ff4cf4d302231b1931d56a7feed9e
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/IniFileLoader.php
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * IniFileLoader loads translations from an ini file.
+ *
+ * @author stealth35
+ */
+class IniFileLoader extends ArrayLoader
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = parse_ini_file($resource, true);
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/JsonFileLoader.php b/core/vendor/symfony/translation/Loader/JsonFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..8327c63b57f109713ae20c904c025201aebe9237
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/JsonFileLoader.php
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * JsonFileLoader loads translations from an json file.
+ *
+ * @author singles
+ */
+class JsonFileLoader extends ArrayLoader implements LoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = json_decode(file_get_contents($resource), true);
+
+        if (0 < $errorCode = json_last_error()) {
+            throw new InvalidResourceException(sprintf('Error parsing JSON - %s', $this->getJSONErrorMessage($errorCode)));
+        }
+
+        if (null === $messages) {
+            $messages = array();
+        }
+
+        $catalogue = parent::load($messages, $locale, $domain);
+        $catalogue->addResource(new FileResource($resource));
+
+        return $catalogue;
+    }
+
+    /**
+     * Translates JSON_ERROR_* constant into meaningful message.
+     *
+     * @param int $errorCode Error code returned by json_last_error() call
+     *
+     * @return string Message string
+     */
+    private function getJSONErrorMessage($errorCode)
+    {
+        switch ($errorCode) {
+            case JSON_ERROR_DEPTH:
+                return 'Maximum stack depth exceeded';
+            case JSON_ERROR_STATE_MISMATCH:
+                return 'Underflow or the modes mismatch';
+            case JSON_ERROR_CTRL_CHAR:
+                return 'Unexpected control character found';
+            case JSON_ERROR_SYNTAX:
+                return 'Syntax error, malformed JSON';
+            case JSON_ERROR_UTF8:
+                return 'Malformed UTF-8 characters, possibly incorrectly encoded';
+            default:
+                return 'Unknown error';
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/LoaderInterface.php b/core/vendor/symfony/translation/Loader/LoaderInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b28e14a0de82232cc9fde3fd676f2e25ee9d6c8
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/LoaderInterface.php
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+
+/**
+ * LoaderInterface is the interface implemented by all translation loaders.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+interface LoaderInterface
+{
+    /**
+     * Loads a locale.
+     *
+     * @param mixed  $resource A resource
+     * @param string $locale   A locale
+     * @param string $domain   The domain
+     *
+     * @return MessageCatalogue A MessageCatalogue instance
+     *
+     * @api
+     *
+     * @throws NotFoundResourceException when the resource cannot be found
+     * @throws InvalidResourceException  when the resource cannot be loaded
+     */
+    public function load($resource, $locale, $domain = 'messages');
+}
diff --git a/core/vendor/symfony/translation/Loader/MoFileLoader.php b/core/vendor/symfony/translation/Loader/MoFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab4e7a9574cd69cb705b1e61d2697c13b8a7bbfd
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/MoFileLoader.php
@@ -0,0 +1,191 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
+ */
+class MoFileLoader extends ArrayLoader
+{
+    /**
+     * Magic used for validating the format of a MO file as well as
+     * detecting if the machine used to create that file was little endian.
+     *
+     * @var float
+     */
+    const MO_LITTLE_ENDIAN_MAGIC = 0x950412de;
+
+    /**
+     * Magic used for validating the format of a MO file as well as
+     * detecting if the machine used to create that file was big endian.
+     *
+     * @var float
+     */
+    const MO_BIG_ENDIAN_MAGIC = 0xde120495;
+
+    /**
+     * The size of the header of a MO file in bytes.
+     *
+     * @var int Number of bytes.
+     */
+    const MO_HEADER_SIZE = 28;
+
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = $this->parse($resource);
+
+        // empty file
+        if (null === $messages) {
+            $messages = array();
+        }
+
+        // not an array
+        if (!is_array($messages)) {
+            throw new InvalidResourceException(sprintf('The file "%s" must contain a valid mo file.', $resource));
+        }
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+
+    /**
+     * Parses machine object (MO) format, independent of the machine's endian it
+     * was created on. Both 32bit and 64bit systems are supported.
+     *
+     * @param resource $resource
+     *
+     * @return array
+     *
+     * @throws InvalidResourceException If stream content has an invalid format.
+     */
+    private function parse($resource)
+    {
+        $stream = fopen($resource, 'r');
+
+        $stat = fstat($stream);
+
+        if ($stat['size'] < self::MO_HEADER_SIZE) {
+            throw new InvalidResourceException('MO stream content has an invalid format.');
+        }
+        $magic = unpack('V1', fread($stream, 4));
+        $magic = hexdec(substr(dechex(current($magic)), -8));
+
+        if ($magic == self::MO_LITTLE_ENDIAN_MAGIC) {
+            $isBigEndian = false;
+        } elseif ($magic == self::MO_BIG_ENDIAN_MAGIC) {
+            $isBigEndian = true;
+        } else {
+            throw new InvalidResourceException('MO stream content has an invalid format.');
+        }
+
+        // formatRevision
+        $this->readLong($stream, $isBigEndian);
+        $count = $this->readLong($stream, $isBigEndian);
+        $offsetId = $this->readLong($stream, $isBigEndian);
+        $offsetTranslated = $this->readLong($stream, $isBigEndian);
+        // sizeHashes
+        $this->readLong($stream, $isBigEndian);
+        // offsetHashes
+        $this->readLong($stream, $isBigEndian);
+
+        $messages = array();
+
+        for ($i = 0; $i < $count; $i++) {
+            $singularId = $pluralId = null;
+            $translated = null;
+
+            fseek($stream, $offsetId + $i * 8);
+
+            $length = $this->readLong($stream, $isBigEndian);
+            $offset = $this->readLong($stream, $isBigEndian);
+
+            if ($length < 1) {
+                continue;
+            }
+
+            fseek($stream, $offset);
+            $singularId = fread($stream, $length);
+
+            if (strpos($singularId, "\000") !== false) {
+                list($singularId, $pluralId) = explode("\000", $singularId);
+            }
+
+            fseek($stream, $offsetTranslated + $i * 8);
+            $length = $this->readLong($stream, $isBigEndian);
+            $offset = $this->readLong($stream, $isBigEndian);
+
+            if ($length < 1) {
+                continue;
+            }
+
+            fseek($stream, $offset);
+            $translated = fread($stream, $length);
+
+            if (strpos($translated, "\000") !== false) {
+                $translated = explode("\000", $translated);
+            }
+
+            $ids = array('singular' => $singularId, 'plural' => $pluralId);
+            $item = compact('ids', 'translated');
+
+            if (is_array($item['translated'])) {
+                $messages[$item['ids']['singular']] = stripcslashes($item['translated'][0]);
+                if (isset($item['ids']['plural'])) {
+                    $plurals = array();
+                    foreach ($item['translated'] as $plural => $translated) {
+                        $plurals[] = sprintf('{%d} %s', $plural, $translated);
+                    }
+                    $messages[$item['ids']['plural']] = stripcslashes(implode('|', $plurals));
+                }
+            } elseif (!empty($item['ids']['singular'])) {
+                $messages[$item['ids']['singular']] = stripcslashes($item['translated']);
+            }
+        }
+
+        fclose($stream);
+
+        return array_filter($messages);
+    }
+
+    /**
+     * Reads an unsigned long from stream respecting endianess.
+     *
+     * @param resource $stream
+     * @param bool     $isBigEndian
+     *
+     * @return int
+     */
+    private function readLong($stream, $isBigEndian)
+    {
+        $result = unpack($isBigEndian ? 'N1' : 'V1', fread($stream, 4));
+        $result = current($result);
+
+        return (int) substr($result, -8);
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/PhpFileLoader.php b/core/vendor/symfony/translation/Loader/PhpFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..9ce2e7d2fa0debcf9e1558becd2729b0699fb43c
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/PhpFileLoader.php
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * PhpFileLoader loads translations from PHP files returning an array of translations.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class PhpFileLoader extends ArrayLoader
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = require $resource;
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/PoFileLoader.php b/core/vendor/symfony/translation/Loader/PoFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5d12e98216437bdb28fde1230f6ba464130d435
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/PoFileLoader.php
@@ -0,0 +1,180 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
+ * @copyright Copyright (c) 2012, Clemens Tolboom
+ */
+class PoFileLoader extends ArrayLoader
+{
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        $messages = $this->parse($resource);
+
+        // empty file
+        if (null === $messages) {
+            $messages = array();
+        }
+
+        // not an array
+        if (!is_array($messages)) {
+            throw new InvalidResourceException(sprintf('The file "%s" must contain a valid po file.', $resource));
+        }
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+
+    /**
+     * Parses portable object (PO) format.
+     *
+     * From http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files
+     * we should be able to parse files having:
+     *
+     * white-space
+     * #  translator-comments
+     * #. extracted-comments
+     * #: reference...
+     * #, flag...
+     * #| msgid previous-untranslated-string
+     * msgid untranslated-string
+     * msgstr translated-string
+     *
+     * extra or different lines are:
+     *
+     * #| msgctxt previous-context
+     * #| msgid previous-untranslated-string
+     * msgctxt context
+     *
+     * #| msgid previous-untranslated-string-singular
+     * #| msgid_plural previous-untranslated-string-plural
+     * msgid untranslated-string-singular
+     * msgid_plural untranslated-string-plural
+     * msgstr[0] translated-string-case-0
+     * ...
+     * msgstr[N] translated-string-case-n
+     *
+     * The definition states:
+     * - white-space and comments are optional.
+     * - msgid "" that an empty singleline defines a header.
+     *
+     * This parser sacrifices some features of the reference implementation the
+     * differences to that implementation are as follows.
+     * - No support for comments spanning multiple lines.
+     * - Translator and extracted comments are treated as being the same type.
+     * - Message IDs are allowed to have other encodings as just US-ASCII.
+     *
+     * Items with an empty id are ignored.
+     *
+     * @param resource $resource
+     *
+     * @return array
+     */
+    private function parse($resource)
+    {
+        $stream = fopen($resource, 'r');
+
+        $defaults = array(
+            'ids' => array(),
+            'translated' => null,
+        );
+
+        $messages = array();
+        $item = $defaults;
+
+        while ($line = fgets($stream)) {
+            $line = trim($line);
+
+            if ($line === '') {
+                // Whitespace indicated current item is done
+                $this->addMessage($messages, $item);
+                $item = $defaults;
+            } elseif (substr($line, 0, 7) === 'msgid "') {
+                // We start a new msg so save previous
+                // TODO: this fails when comments or contexts are added
+                $this->addMessage($messages, $item);
+                $item = $defaults;
+                $item['ids']['singular'] = substr($line, 7, -1);
+            } elseif (substr($line, 0, 8) === 'msgstr "') {
+                $item['translated'] = substr($line, 8, -1);
+            } elseif ($line[0] === '"') {
+                $continues = isset($item['translated']) ? 'translated' : 'ids';
+
+                if (is_array($item[$continues])) {
+                    end($item[$continues]);
+                    $item[$continues][key($item[$continues])] .= substr($line, 1, -1);
+                } else {
+                    $item[$continues] .= substr($line, 1, -1);
+                }
+            } elseif (substr($line, 0, 14) === 'msgid_plural "') {
+                $item['ids']['plural'] = substr($line, 14, -1);
+            } elseif (substr($line, 0, 7) === 'msgstr[') {
+                $size = strpos($line, ']');
+                $item['translated'][(int) substr($line, 7, 1)] = substr($line, $size + 3, -1);
+            }
+        }
+        // save last item
+        $this->addMessage($messages, $item);
+        fclose($stream);
+
+        return $messages;
+    }
+
+    /**
+     * Save a translation item to the messages.
+     *
+     * A .po file could contain by error missing plural indexes. We need to
+     * fix these before saving them.
+     *
+     * @param array $messages
+     * @param array $item
+     */
+    private function addMessage(array &$messages, array $item)
+    {
+        if (is_array($item['translated'])) {
+            $messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated'][0]);
+            if (isset($item['ids']['plural'])) {
+                $plurals = $item['translated'];
+                // PO are by definition indexed so sort by index.
+                ksort($plurals);
+                // Make sure every index is filled.
+                end($plurals);
+                $count = key($plurals);
+                // Fill missing spots with '-'.
+                $empties = array_fill(0, $count + 1, '-');
+                $plurals += $empties;
+                ksort($plurals);
+                $messages[stripcslashes($item['ids']['plural'])] = stripcslashes(implode('|', $plurals));
+            }
+        } elseif (!empty($item['ids']['singular'])) {
+            $messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated']);
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/QtFileLoader.php b/core/vendor/symfony/translation/Loader/QtFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dd0696c6f5ffb26f385cc8940e62bf7f0b1ee13
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/QtFileLoader.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Config\Util\XmlUtils;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * QtFileLoader loads translations from QT Translations XML files.
+ *
+ * @author Benjamin Eberlei <kontakt@beberlei.de>
+ *
+ * @api
+ */
+class QtFileLoader implements LoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        try {
+            $dom = XmlUtils::loadFile($resource);
+        } catch (\InvalidArgumentException $e) {
+            throw new InvalidResourceException(sprintf('Unable to load "%s".', $resource), $e->getCode(), $e);
+        }
+
+        $internalErrors = libxml_use_internal_errors(true);
+        libxml_clear_errors();
+
+        $xpath = new \DOMXPath($dom);
+        $nodes = $xpath->evaluate('//TS/context/name[text()="'.$domain.'"]');
+
+        $catalogue = new MessageCatalogue($locale);
+        if ($nodes->length == 1) {
+            $translations = $nodes->item(0)->nextSibling->parentNode->parentNode->getElementsByTagName('message');
+            foreach ($translations as $translation) {
+                $translationValue = (string) $translation->getElementsByTagName('translation')->item(0)->nodeValue;
+
+                if (!empty($translationValue)) {
+                    $catalogue->set(
+                        (string) $translation->getElementsByTagName('source')->item(0)->nodeValue,
+                        $translationValue,
+                        $domain
+                    );
+                }
+                $translation = $translation->nextSibling;
+            }
+
+            if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+                $catalogue->addResource(new FileResource($resource));
+            }
+        }
+
+        libxml_use_internal_errors($internalErrors);
+
+        return $catalogue;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/XliffFileLoader.php b/core/vendor/symfony/translation/Loader/XliffFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..99761e7f246cae64414b367b1ed2da5571dc1a4a
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/XliffFileLoader.php
@@ -0,0 +1,188 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Config\Util\XmlUtils;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+
+/**
+ * XliffFileLoader loads translations from XLIFF files.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class XliffFileLoader implements LoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        list($xml, $encoding) = $this->parseFile($resource);
+        $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2');
+
+        $catalogue = new MessageCatalogue($locale);
+        foreach ($xml->xpath('//xliff:trans-unit') as $translation) {
+            $attributes = $translation->attributes();
+
+            if (!(isset($attributes['resname']) || isset($translation->source)) || !isset($translation->target)) {
+                continue;
+            }
+
+            $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;
+            // If the xlf file has another encoding specified, try to convert it because
+            // simple_xml will always return utf-8 encoded values
+            $target = $this->utf8ToCharset((string) $translation->target, $encoding);
+
+            $catalogue->set((string) $source, $target, $domain);
+
+            if (isset($translation->note)) {
+                $notes = array();
+                foreach ($translation->note as $xmlNote) {
+                    $noteAttributes = $xmlNote->attributes();
+                    $note = array('content' => $this->utf8ToCharset((string) $xmlNote, $encoding));
+                    if (isset($noteAttributes['priority'])) {
+                        $note['priority'] = (int) $noteAttributes['priority'];
+                    }
+
+                    if (isset($noteAttributes['from'])) {
+                        $note['from'] = (string) $noteAttributes['from'];
+                    }
+
+                    $notes[] = $note;
+                }
+
+                $catalogue->setMetadata((string) $source, array('notes' => $notes), $domain);
+            }
+        }
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+
+    /**
+     * Convert a UTF8 string to the specified encoding.
+     *
+     * @param string $content  String to decode
+     * @param string $encoding Target encoding
+     *
+     * @return string
+     */
+    private function utf8ToCharset($content, $encoding = null)
+    {
+        if ('UTF-8' !== $encoding && !empty($encoding)) {
+            if (function_exists('mb_convert_encoding')) {
+                return mb_convert_encoding($content, $encoding, 'UTF-8');
+            }
+
+            if (function_exists('iconv')) {
+                return iconv('UTF-8', $encoding, $content);
+            }
+
+            throw new \RuntimeException('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).');
+        }
+
+        return $content;
+    }
+
+    /**
+     * Validates and parses the given file into a SimpleXMLElement.
+     *
+     * @param string $file
+     *
+     * @throws \RuntimeException
+     *
+     * @return \SimpleXMLElement
+     *
+     * @throws InvalidResourceException
+     */
+    private function parseFile($file)
+    {
+        try {
+            $dom = XmlUtils::loadFile($file);
+        } catch (\InvalidArgumentException $e) {
+            throw new InvalidResourceException(sprintf('Unable to load "%s": %s', $file, $e->getMessage()), $e->getCode(), $e);
+        }
+
+        $internalErrors = libxml_use_internal_errors(true);
+
+        $location = str_replace('\\', '/', __DIR__).'/schema/dic/xliff-core/xml.xsd';
+        $parts = explode('/', $location);
+        if (0 === stripos($location, 'phar://')) {
+            $tmpfile = tempnam(sys_get_temp_dir(), 'sf2');
+            if ($tmpfile) {
+                copy($location, $tmpfile);
+                $parts = explode('/', str_replace('\\', '/', $tmpfile));
+            }
+        }
+        $drive = '\\' === DIRECTORY_SEPARATOR ? array_shift($parts).'/' : '';
+        $location = 'file:///'.$drive.implode('/', array_map('rawurlencode', $parts));
+
+        $source = file_get_contents(__DIR__.'/schema/dic/xliff-core/xliff-core-1.2-strict.xsd');
+        $source = str_replace('http://www.w3.org/2001/xml.xsd', $location, $source);
+
+        if (!@$dom->schemaValidateSource($source)) {
+            throw new InvalidResourceException(implode("\n", $this->getXmlErrors($internalErrors)));
+        }
+
+        $dom->normalizeDocument();
+
+        libxml_clear_errors();
+        libxml_use_internal_errors($internalErrors);
+
+        return array(simplexml_import_dom($dom), strtoupper($dom->encoding));
+    }
+
+    /**
+     * Returns the XML errors of the internal XML parser.
+     *
+     * @param bool $internalErrors
+     *
+     * @return array An array of errors
+     */
+    private function getXmlErrors($internalErrors)
+    {
+        $errors = array();
+        foreach (libxml_get_errors() as $error) {
+            $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)',
+                LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
+                $error->code,
+                trim($error->message),
+                $error->file ?: 'n/a',
+                $error->line,
+                $error->column
+            );
+        }
+
+        libxml_clear_errors();
+        libxml_use_internal_errors($internalErrors);
+
+        return $errors;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/YamlFileLoader.php b/core/vendor/symfony/translation/Loader/YamlFileLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb0946cc577f5a6a4135fc5625dfde3d170de9c5
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/YamlFileLoader.php
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Loader;
+
+use Symfony\Component\Translation\Exception\InvalidResourceException;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\Resource\FileResource;
+use Symfony\Component\Yaml\Parser as YamlParser;
+use Symfony\Component\Yaml\Exception\ParseException;
+
+/**
+ * YamlFileLoader loads translations from Yaml files.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class YamlFileLoader extends ArrayLoader
+{
+    private $yamlParser;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function load($resource, $locale, $domain = 'messages')
+    {
+        if (!stream_is_local($resource)) {
+            throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
+        }
+
+        if (!file_exists($resource)) {
+            throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
+        }
+
+        if (!class_exists('Symfony\Component\Yaml\Parser')) {
+            throw new \LogicException('Loading translations from the YAML format requires the Symfony Yaml component.');
+        }
+
+        if (null === $this->yamlParser) {
+            $this->yamlParser = new YamlParser();
+        }
+
+        try {
+            $messages = $this->yamlParser->parse(file_get_contents($resource));
+        } catch (ParseException $e) {
+            throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s"', $resource), 0, $e);
+        }
+
+        // empty file
+        if (null === $messages) {
+            $messages = array();
+        }
+
+        // not an array
+        if (!is_array($messages)) {
+            throw new InvalidResourceException(sprintf('The file "%s" must contain a YAML array.', $resource));
+        }
+
+        $catalogue = parent::load($messages, $locale, $domain);
+
+        if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
+            $catalogue->addResource(new FileResource($resource));
+        }
+
+        return $catalogue;
+    }
+}
diff --git a/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd b/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..3ce2a8e8ab73fbf27bd55bde01579962bc3060f5
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd
@@ -0,0 +1,2223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+May-19-2004:
+- Changed the <choice> for ElemType_header, moving minOccurs="0" maxOccurs="unbounded" from its elements 
+to <choice> itself.
+- Added <choice> for ElemType_trans-unit to allow "any order" for <context-group>, <count-group>, <prop-group>, <note>, and
+<alt-trans>.
+
+Oct-2005
+- updated version info to 1.2
+- equiv-trans attribute to <trans-unit> element 
+- merged-trans attribute for <group> element
+- Add the <seg-source> element as optional in the <trans-unit> and <alt-trans> content models, at the same level as <source> 
+- Create a new value "seg" for the mtype attribute of the <mrk> element
+- Add mid as an optional attribute for the <alt-trans> element
+
+Nov-14-2005
+- Changed name attribute for <context-group> from required to optional
+- Added extension point at <xliff>
+
+Jan-9-2006
+- Added alttranstype type attribute to <alt-trans>, and values
+
+Jan-10-2006
+- Corrected error with overwritten purposeValueList
+- Corrected name="AttrType_Version",  attribute should have been "name"
+
+-->
+<xsd:schema xmlns:xlf="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:oasis:names:tc:xliff:document:1.2" xml:lang="en">
+  <!-- Import for xml:lang and xml:space -->
+  <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+  <!-- Attributes Lists -->
+  <xsd:simpleType name="XTend">
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="x-[^\s]+"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="context-typeValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'context-type'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="database">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a database content.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="element">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the content of an element within an XML document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="elementtitle">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the name of an element within an XML document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="linenumber">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the line number from the sourcefile (see context-type="sourcefile") where the &lt;source&gt; is found.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="numparams">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a the number of parameters contained within the &lt;source&gt;.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="paramnotes">
+        <xsd:annotation>
+          <xsd:documentation>Indicates notes pertaining to the parameters in the &lt;source&gt;.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="record">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the content of a record within a database.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="recordtitle">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the name of a record within a database.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="sourcefile">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the original source file in the case that multiple files are merged to form the original file from which the XLIFF file is created. This differs from the original &lt;file&gt; attribute in that this sourcefile is one of many that make up that file.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="count-typeValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'count-type'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="num-usages">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the count units are items that are used X times in a certain context; example: this is a reusable text unit which is used 42 times in other texts.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="repetition">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the count units are translation units existing already in the same document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="total">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a total count.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="InlineDelimitersValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'ctype' when used other elements than &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="bold">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a run of bolded text.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="italic">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a run of text in italics.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="underlined">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a run of underlined text.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="link">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a run of hyper-text.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="InlinePlaceholdersValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'ctype' when used with &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="image">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a inline image.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pb">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a page break.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="lb">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a line break.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="mime-typeValueList">
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="(text|multipart|message|application|image|audio|video|model)(/.+)*"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="datatypeValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'datatype'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="asp">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Active Server Page data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="c">
+        <xsd:annotation>
+          <xsd:documentation>Indicates C source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cdf">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Channel Definition Format (CDF) data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cfm">
+        <xsd:annotation>
+          <xsd:documentation>Indicates ColdFusion data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cpp">
+        <xsd:annotation>
+          <xsd:documentation>Indicates C++ source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="csharp">
+        <xsd:annotation>
+          <xsd:documentation>Indicates C-Sharp data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cstring">
+        <xsd:annotation>
+          <xsd:documentation>Indicates strings from C, ASM, and driver files data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="csv">
+        <xsd:annotation>
+          <xsd:documentation>Indicates comma-separated values data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="database">
+        <xsd:annotation>
+          <xsd:documentation>Indicates database data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="documentfooter">
+        <xsd:annotation>
+          <xsd:documentation>Indicates portions of document that follows data and contains metadata.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="documentheader">
+        <xsd:annotation>
+          <xsd:documentation>Indicates portions of document that precedes data and contains metadata.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="filedialog">
+        <xsd:annotation>
+          <xsd:documentation>Indicates data from standard UI file operations dialogs (e.g., Open, Save, Save As, Export, Import).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="form">
+        <xsd:annotation>
+          <xsd:documentation>Indicates standard user input screen data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="html">
+        <xsd:annotation>
+          <xsd:documentation>Indicates HyperText Markup Language (HTML) data - document instance.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="htmlbody">
+        <xsd:annotation>
+          <xsd:documentation>Indicates content within an HTML document’s &lt;body&gt; element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="ini">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Windows INI file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="interleaf">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Interleaf data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="javaclass">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Java source file data (extension '.java').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="javapropertyresourcebundle">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Java property resource bundle data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="javalistresourcebundle">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Java list resource bundle data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="javascript">
+        <xsd:annotation>
+          <xsd:documentation>Indicates JavaScript source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="jscript">
+        <xsd:annotation>
+          <xsd:documentation>Indicates JScript source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="layout">
+        <xsd:annotation>
+          <xsd:documentation>Indicates information relating to formatting.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="lisp">
+        <xsd:annotation>
+          <xsd:documentation>Indicates LISP source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="margin">
+        <xsd:annotation>
+          <xsd:documentation>Indicates information relating to margin formats.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="menufile">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a file containing menu.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="messagefile">
+        <xsd:annotation>
+          <xsd:documentation>Indicates numerically identified string table.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="mif">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Maker Interchange Format (MIF) data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="mimetype">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the datatype attribute value is a MIME Type value and is defined in the mime-type attribute.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="mo">
+        <xsd:annotation>
+          <xsd:documentation>Indicates GNU Machine Object data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="msglib">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Message Librarian strings created by Novell's Message Librarian Tool.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pagefooter">
+        <xsd:annotation>
+          <xsd:documentation>Indicates information to be displayed at the bottom of each page of a document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pageheader">
+        <xsd:annotation>
+          <xsd:documentation>Indicates information to be displayed at the top of each page of a document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="parameters">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a list of property values (e.g., settings within INI files or preferences dialog).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pascal">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Pascal source file data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="php">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Hypertext Preprocessor data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="plaintext">
+        <xsd:annotation>
+          <xsd:documentation>Indicates plain text file (no formatting other than, possibly, wrapping).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="po">
+        <xsd:annotation>
+          <xsd:documentation>Indicates GNU Portable Object file.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="report">
+        <xsd:annotation>
+          <xsd:documentation>Indicates dynamically generated user defined document. e.g. Oracle Report, Crystal Report, etc.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="resources">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Windows .NET binary resources.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="resx">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Windows .NET Resources.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rtf">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Rich Text Format (RTF) data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="sgml">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - document instance.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="sgmldtd">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - Document Type Definition (DTD).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="svg">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Scalable Vector Graphic (SVG) data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="vbscript">
+        <xsd:annotation>
+          <xsd:documentation>Indicates VisualBasic Script source file.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="warning">
+        <xsd:annotation>
+          <xsd:documentation>Indicates warning message.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="winres">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Windows (Win32) resources (i.e. resources extracted from an RC script, a message file, or a compiled file).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="xhtml">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Extensible HyperText Markup Language (XHTML) data - document instance.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="xml">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Extensible Markup Language (XML) data - document instance.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="xmldtd">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Extensible Markup Language (XML) data - Document Type Definition (DTD).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="xsl">
+        <xsd:annotation>
+          <xsd:documentation>Indicates Extensible Stylesheet Language (XSL) data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="xul">
+        <xsd:annotation>
+          <xsd:documentation>Indicates XUL elements.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="mtypeValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'mtype'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="abbrev">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text is an abbreviation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="abbreviated-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8: A term resulting from the omission of any part of the full term while designating the same concept.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="abbreviation">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8.1: An abbreviated form of a simple term resulting from the omission of some of its letters (e.g. 'adj.' for 'adjective').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="acronym">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8.4: An abbreviated form of a term made up of letters from the full form of a multiword term strung together into a sequence pronounced only syllabically (e.g. 'radar' for 'radio detecting and ranging').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="appellation">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620: A proper-name term, such as the name of an agency or other proper entity.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="collocation">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.18.1: A recurrent word combination characterized by cohesion in that the components of the collocation must co-occur within an utterance or series of utterances, even though they do not necessarily have to maintain immediate proximity to one another.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="common-name">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.5: A synonym for an international scientific term that is used in general discourse in a given language.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="datetime">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text is a date and/or time.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="equation">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.15: An expression used to represent a concept based on a statement that two mathematical expressions are, for instance, equal as identified by the equal sign (=), or assigned to one another by a similar sign.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="expanded-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.7: The complete representation of a term for which there is an abbreviated form.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="formula">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.14: Figures, symbols or the like used to express a concept briefly, such as a mathematical or chemical formula.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="head-term">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.1: The concept designation that has been chosen to head a terminological record.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="initialism">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8.3: An abbreviated form of a term consisting of some of the initial letters of the words making up a multiword term or the term elements making up a compound term when these letters are pronounced individually (e.g. 'BSE' for 'bovine spongiform encephalopathy').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="international-scientific-term">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.4: A term that is part of an international scientific nomenclature as adopted by an appropriate scientific body.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="internationalism">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.6: A term that has the same or nearly identical orthographic or phonemic form in many languages.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="logical-expression">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.16: An expression used to represent a concept based on mathematical or logical relations, such as statements of inequality, set relationships, Boolean operations, and the like.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="materials-management-unit">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.17: A unit to track object.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="name">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text is a name.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="near-synonym">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.3: A term that represents the same or a very similar concept as another term in the same language, but for which interchangeability is limited to some contexts and inapplicable in others.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="part-number">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.17.2: A unique alphanumeric designation assigned to an object in a manufacturing system.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="phrase">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text is a phrase.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="phraseological-unit">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.18: Any group of two or more words that form a unit, the meaning of which frequently cannot be deduced based on the combined sense of the words making up the phrase.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="protected">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text should not be translated.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="romanized-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.12: A form of a term resulting from an operation whereby non-Latin writing systems are converted to the Latin alphabet.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="seg">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the marked text represents a segment.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="set-phrase">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.18.2: A fixed, lexicalized phrase.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="short-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8.2: A variant of a multiword term that includes fewer words than the full form of the term (e.g. 'Group of Twenty-four' for 'Intergovernmental Group of Twenty-four on International Monetary Affairs').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="sku">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.17.1: Stock keeping unit, an inventory item identified by a unique alphanumeric designation assigned to an object in an inventory control system.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="standard-text">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.19: A fixed chunk of recurring text.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="symbol">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.13: A designation of a concept by letters, numerals, pictograms or any combination thereof.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="synonym">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.2: Any term that represents the same or a very similar concept as the main entry term in a term entry.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="synonymous-phrase">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.18.3: Phraseological unit in a language that expresses the same semantic content as another phrase in that same language.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="term">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the marked text is a term.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="transcribed-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.11: A form of a term resulting from an operation whereby the characters of one writing system are represented by characters from another writing system, taking into account the pronunciation of the characters converted.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="transliterated-form">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.10: A form of a term resulting from an operation whereby the characters of an alphabetic writing system are represented by characters from another alphabetic writing system.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="truncated-term">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.8.5: An abbreviated form of a term resulting from the omission of one or more term elements or syllables (e.g. 'flu' for 'influenza').</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="variant">
+        <xsd:annotation>
+          <xsd:documentation>ISO-12620 2.1.9: One of the alternate forms of a term.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="restypeValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'restype'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="auto3state">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC AUTO3STATE control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="autocheckbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC AUTOCHECKBOX control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="autoradiobutton">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC AUTORADIOBUTTON control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="bedit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC BEDIT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="bitmap">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a bitmap, for example a BITMAP resource in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="button">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a button object, for example a BUTTON control Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="caption">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a caption, such as the caption of a dialog box.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cell">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the cell in a table, for example the content of the &lt;td&gt; element in HTML.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="checkbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates check box object, for example a CHECKBOX control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="checkboxmenuitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a menu item with an associated checkbox.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="checkedlistbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a list box, but with a check-box for each item.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="colorchooser">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a color selection dialog.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="combobox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a combination of edit box and listbox object, for example a COMBOBOX control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="comboboxexitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an initialization entry of an extended combobox DLGINIT resource block. (code 0x1234).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="comboboxitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an initialization entry of a combobox DLGINIT resource block (code 0x0403).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="component">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a UI base class element that cannot be represented by any other element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="contextmenu">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a context menu.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="ctext">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC CTEXT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cursor">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a cursor, for example a CURSOR resource in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="datetimepicker">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a date/time picker.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="defpushbutton">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC DEFPUSHBUTTON control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="dialog">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a dialog box.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="dlginit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC DLGINIT resource block.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="edit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an edit box object, for example an EDIT control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="file">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a filename.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="filechooser">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a file dialog.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="fn">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a footnote.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="font">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a font name.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="footer">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a footer.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="frame">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a frame object.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="grid">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a XUL grid element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="groupbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a groupbox object, for example a GROUPBOX control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="header">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a header item.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="heading">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a heading, such has the content of &lt;h1&gt;, &lt;h2&gt;, etc. in HTML.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="hedit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC HEDIT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="hscrollbar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a horizontal scrollbar.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="icon">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an icon, for example an ICON resource in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="iedit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC IEDIT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="keywords">
+        <xsd:annotation>
+          <xsd:documentation>Indicates keyword list, such as the content of the Keywords meta-data in HTML, or a K footnote in WinHelp RTF.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="label">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a label object.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="linklabel">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a label that is also a HTML link (not necessarily a URL).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="list">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a list (a group of list-items, for example an &lt;ol&gt; or &lt;ul&gt; element in HTML).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="listbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a listbox object, for example an LISTBOX control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="listitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an list item (an entry in a list).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="ltext">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC LTEXT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="menu">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a menu (a group of menu-items).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="menubar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a toolbar containing one or more tope level menus.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="menuitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a menu item (an entry in a menu).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="menuseparator">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a XUL menuseparator element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="message">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a message, for example an entry in a MESSAGETABLE resource in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="monthcalendar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a calendar control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="numericupdown">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an edit box beside a spin control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="panel">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a catch all for rectangular areas.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="popupmenu">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a standalone menu not necessarily associated with a menubar.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pushbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a pushbox object, for example a PUSHBOX control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pushbutton">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC PUSHBUTTON control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="radio">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a radio button object.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="radiobuttonmenuitem">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a menuitem with associated radio button.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rcdata">
+        <xsd:annotation>
+          <xsd:documentation>Indicates raw data resources for an application.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="row">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a row in a table.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rtext">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC RTEXT control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="scrollpane">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a user navigable container used to show a portion of a document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="separator">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a generic divider object (e.g. menu group separator).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="shortcut">
+        <xsd:annotation>
+          <xsd:documentation>Windows accelerators, shortcuts in resource or property files.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="spinner">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a UI control to indicate process activity but not progress.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="splitter">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a splitter bar.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="state3">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC STATE3 control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="statusbar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a window for providing feedback to the users, like 'read-only', etc.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="string">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a string, for example an entry in a STRINGTABLE resource in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="tabcontrol">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a layers of controls with a tab to select layers.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="table">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a display and edits regular two-dimensional tables of cells.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="textbox">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a XUL textbox element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="togglebutton">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a UI button that can be toggled to on or off state.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="toolbar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an array of controls, usually buttons.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="tooltip">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a pop up tool tip text.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="trackbar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a bar with a pointer indicating a position within a certain range.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="tree">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a control that displays a set of hierarchical data.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="uri">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a URI (URN or URL).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="userbutton">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a Windows RC USERBUTTON control.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="usercontrol">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a user-defined control like CONTROL control in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="var">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the text of a variable.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="versioninfo">
+        <xsd:annotation>
+          <xsd:documentation>Indicates version information about a resource like VERSIONINFO in Windows.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="vscrollbar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a vertical scrollbar.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="window">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a graphical window.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="size-unitValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'size-unit'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="byte">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in 8-bit bytes.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="char">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in Unicode characters.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="col">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in columns. Used for HTML text area.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="cm">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in centimeters.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="dlgunit">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in dialog units, as defined in Windows resources.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="em">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in 'font-size' units (as defined in CSS).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="ex">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in 'x-height' units (as defined in CSS).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="glyph">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in glyphs. A glyph is considered to be one or more combined Unicode characters that represent a single displayable text character. Sometimes referred to as a 'grapheme cluster'</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="in">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in inches.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="mm">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in millimeters.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="percent">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in percentage.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="pixel">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in pixels.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="point">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in point.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="row">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a size in rows. Used for HTML text area.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="stateValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'state'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="final">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the terminating state.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-adaptation">
+        <xsd:annotation>
+          <xsd:documentation>Indicates only non-textual information needs adaptation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-l10n">
+        <xsd:annotation>
+          <xsd:documentation>Indicates both text and non-textual information needs adaptation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-review-adaptation">
+        <xsd:annotation>
+          <xsd:documentation>Indicates only non-textual information needs review.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-review-l10n">
+        <xsd:annotation>
+          <xsd:documentation>Indicates both text and non-textual information needs review.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-review-translation">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that only the text of the item needs to be reviewed.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="needs-translation">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item needs to be translated.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="new">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item is new. For example, translation units that were not in a previous version of the document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="signed-off">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that changes are reviewed and approved.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="translated">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item has been translated.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="state-qualifierValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'state-qualifier'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="exact-match">
+        <xsd:annotation>
+          <xsd:documentation>Indicates an exact match. An exact match occurs when a source text of a segment is exactly the same as the source text of a segment that was translated previously.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="fuzzy-match">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a fuzzy match. A fuzzy match occurs when a source text of a segment is very similar to the source text of a segment that was translated previously (e.g. when the difference is casing, a few changed words, white-space discripancy, etc.).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="id-match">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a match based on matching IDs (in addition to matching text).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="leveraged-glossary">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a translation derived from a glossary.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="leveraged-inherited">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a translation derived from existing translation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="leveraged-mt">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a translation derived from machine translation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="leveraged-repository">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a translation derived from a translation repository.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="leveraged-tm">
+        <xsd:annotation>
+          <xsd:documentation>Indicates a translation derived from a translation memory.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="mt-suggestion">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the translation is suggested by machine translation.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rejected-grammar">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item has been rejected because of incorrect grammar.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rejected-inaccurate">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item has been rejected because it is incorrect.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rejected-length">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item has been rejected because it is too long or too short.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rejected-spelling">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the item has been rejected because of incorrect spelling.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="tm-suggestion">
+        <xsd:annotation>
+          <xsd:documentation>Indicates the translation is suggested by translation memory.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="unitValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'unit'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="word">
+        <xsd:annotation>
+          <xsd:documentation>Refers to words.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="page">
+        <xsd:annotation>
+          <xsd:documentation>Refers to pages.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="trans-unit">
+        <xsd:annotation>
+          <xsd:documentation>Refers to &lt;trans-unit&gt; elements.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="bin-unit">
+        <xsd:annotation>
+          <xsd:documentation>Refers to &lt;bin-unit&gt; elements.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="glyph">
+        <xsd:annotation>
+          <xsd:documentation>Refers to glyphs.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="item">
+        <xsd:annotation>
+          <xsd:documentation>Refers to &lt;trans-unit&gt; and/or &lt;bin-unit&gt; elements.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="instance">
+        <xsd:annotation>
+          <xsd:documentation>Refers to the occurrences of instances defined by the count-type value.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="character">
+        <xsd:annotation>
+          <xsd:documentation>Refers to characters.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="line">
+        <xsd:annotation>
+          <xsd:documentation>Refers to lines.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="sentence">
+        <xsd:annotation>
+          <xsd:documentation>Refers to sentences.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="paragraph">
+        <xsd:annotation>
+          <xsd:documentation>Refers to paragraphs.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="segment">
+        <xsd:annotation>
+          <xsd:documentation>Refers to segments.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="placeable">
+        <xsd:annotation>
+          <xsd:documentation>Refers to placeables (inline elements).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="priorityValueList">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'priority'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:positiveInteger">
+      <xsd:enumeration value="1">
+        <xsd:annotation>
+          <xsd:documentation>Highest priority.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="2">
+        <xsd:annotation>
+          <xsd:documentation>High priority.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="3">
+        <xsd:annotation>
+          <xsd:documentation>High priority, but not as important as 2.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="4">
+        <xsd:annotation>
+          <xsd:documentation>High priority, but not as important as 3.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="5">
+        <xsd:annotation>
+          <xsd:documentation>Medium priority, but more important than 6.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="6">
+        <xsd:annotation>
+          <xsd:documentation>Medium priority, but less important than 5.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="7">
+        <xsd:annotation>
+          <xsd:documentation>Low priority, but more important than 8.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="8">
+        <xsd:annotation>
+          <xsd:documentation>Low priority, but more important than 9.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="9">
+        <xsd:annotation>
+          <xsd:documentation>Low priority.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="10">
+        <xsd:annotation>
+          <xsd:documentation>Lowest priority.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="reformatValueYesNo">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="yes">
+        <xsd:annotation>
+          <xsd:documentation>This value indicates that all properties can be reformatted. This value must be used alone.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="no">
+        <xsd:annotation>
+          <xsd:documentation>This value indicates that no properties should be reformatted. This value must be used alone.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="reformatValueList">
+    <xsd:list>
+      <xsd:simpleType>
+        <xsd:union memberTypes="xlf:XTend">
+          <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+              <xsd:enumeration value="coord">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that all information in the coord attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="coord-x">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the x information in the coord attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="coord-y">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the y information in the coord attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="coord-cx">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the cx information in the coord attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="coord-cy">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the cy information in the coord attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="font">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that all the information in the font attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="font-name">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the name information in the font attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="font-size">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the size information in the font attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="font-weight">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the weight information in the font attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="css-style">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the information in the css-style attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="style">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the information in the style attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+              <xsd:enumeration value="ex-style">
+                <xsd:annotation>
+                  <xsd:documentation>This value indicates that the information in the exstyle attribute can be modified.</xsd:documentation>
+                </xsd:annotation>
+              </xsd:enumeration>
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:union>
+      </xsd:simpleType>
+    </xsd:list>
+  </xsd:simpleType>
+  <xsd:simpleType name="purposeValueList">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="information">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the context is informational in nature, specifying for example, how a term should be translated. Thus, should be displayed to anyone editing the XLIFF document.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="location">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the context-group is used to specify where the term was found in the translatable source. Thus, it is not displayed.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="match">
+        <xsd:annotation>
+          <xsd:documentation>Indicates that the context information should be used during translation memory lookups. Thus, it is not displayed.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="alttranstypeValueList">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="proposal">
+        <xsd:annotation>
+          <xsd:documentation>Represents a translation proposal from a translation memory or other resource.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="previous-version">
+        <xsd:annotation>
+          <xsd:documentation>Represents a previous version of the target element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="rejected">
+        <xsd:annotation>
+          <xsd:documentation>Represents a rejected version of the target element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="reference">
+        <xsd:annotation>
+          <xsd:documentation>Represents a translation to be used for reference purposes only, for example from a related product or a different language.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+      <xsd:enumeration value="accepted">
+        <xsd:annotation>
+          <xsd:documentation>Represents a proposed translation that was used for the translation of the trans-unit, possibly modified.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:enumeration>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <!-- Other Types -->
+  <xsd:complexType name="ElemType_ExternalReference">
+    <xsd:choice>
+      <xsd:element ref="xlf:internal-file"/>
+      <xsd:element ref="xlf:external-file"/>
+    </xsd:choice>
+  </xsd:complexType>
+  <xsd:simpleType name="AttrType_purpose">
+    <xsd:list>
+      <xsd:simpleType>
+        <xsd:union memberTypes="xlf:purposeValueList xlf:XTend"/>
+      </xsd:simpleType>
+    </xsd:list>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_datatype">
+    <xsd:union memberTypes="xlf:datatypeValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_restype">
+    <xsd:union memberTypes="xlf:restypeValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_alttranstype">
+    <xsd:union memberTypes="xlf:alttranstypeValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_context-type">
+    <xsd:union memberTypes="xlf:context-typeValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_state">
+    <xsd:union memberTypes="xlf:stateValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_state-qualifier">
+    <xsd:union memberTypes="xlf:state-qualifierValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_count-type">
+    <xsd:union memberTypes="xlf:restypeValueList xlf:count-typeValueList xlf:datatypeValueList xlf:stateValueList xlf:state-qualifierValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_InlineDelimiters">
+    <xsd:union memberTypes="xlf:InlineDelimitersValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_InlinePlaceholders">
+    <xsd:union memberTypes="xlf:InlinePlaceholdersValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_size-unit">
+    <xsd:union memberTypes="xlf:size-unitValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_mtype">
+    <xsd:union memberTypes="xlf:mtypeValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_unit">
+    <xsd:union memberTypes="xlf:unitValueList xlf:XTend"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_priority">
+    <xsd:union memberTypes="xlf:priorityValueList"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_reformat">
+    <xsd:union memberTypes="xlf:reformatValueYesNo xlf:reformatValueList"/>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_YesNo">
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="yes"/>
+      <xsd:enumeration value="no"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_Position">
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="open"/>
+      <xsd:enumeration value="close"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_assoc">
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="preceding"/>
+      <xsd:enumeration value="following"/>
+      <xsd:enumeration value="both"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_annotates">
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="source"/>
+      <xsd:enumeration value="target"/>
+      <xsd:enumeration value="general"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_Coordinates">
+    <xsd:annotation>
+      <xsd:documentation>Values for the attribute 'coord'.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="(-?\d+|#);(-?\d+|#);(-?\d+|#);(-?\d+|#)"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="AttrType_Version">
+    <xsd:annotation>
+      <xsd:documentation>Version values: 1.0 and 1.1 are allowed for backward compatibility.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="1.2"/>
+      <xsd:enumeration value="1.1"/>
+      <xsd:enumeration value="1.0"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <!-- Groups -->
+  <xsd:group name="ElemGroup_TextContent">
+    <xsd:choice>
+      <xsd:element ref="xlf:g"/>
+      <xsd:element ref="xlf:bpt"/>
+      <xsd:element ref="xlf:ept"/>
+      <xsd:element ref="xlf:ph"/>
+      <xsd:element ref="xlf:it"/>
+      <xsd:element ref="xlf:mrk"/>
+      <xsd:element ref="xlf:x"/>
+      <xsd:element ref="xlf:bx"/>
+      <xsd:element ref="xlf:ex"/>
+    </xsd:choice>
+  </xsd:group>
+  <xsd:attributeGroup name="AttrGroup_TextContent">
+    <xsd:attribute name="id" type="xsd:string" use="required"/>
+    <xsd:attribute name="xid" type="xsd:string" use="optional"/>
+    <xsd:attribute name="equiv-text" type="xsd:string" use="optional"/>
+    <xsd:anyAttribute namespace="##other" processContents="strict"/>
+  </xsd:attributeGroup>
+  <!-- XLIFF Structure -->
+  <xsd:element name="xliff">
+    <xsd:complexType>
+      <xsd:sequence maxOccurs="unbounded">
+        <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+        <xsd:element ref="xlf:file"/>
+      </xsd:sequence>
+      <xsd:attribute name="version" type="xlf:AttrType_Version" use="required"/>
+      <xsd:attribute ref="xml:lang" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="file">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element minOccurs="0" ref="xlf:header"/>
+        <xsd:element ref="xlf:body"/>
+      </xsd:sequence>
+      <xsd:attribute name="original" type="xsd:string" use="required"/>
+      <xsd:attribute name="source-language" type="xsd:language" use="required"/>
+      <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="required"/>
+      <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+      <xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
+      <xsd:attribute ref="xml:space" use="optional"/>
+      <xsd:attribute name="category" type="xsd:string" use="optional"/>
+      <xsd:attribute name="target-language" type="xsd:language" use="optional"/>
+      <xsd:attribute name="product-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="product-version" type="xsd:string" use="optional"/>
+      <xsd:attribute name="build-num" type="xsd:string" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_group_id">
+      <xsd:selector xpath=".//xlf:group"/>
+      <xsd:field xpath="@id"/>
+    </xsd:unique>
+    <xsd:key name="K_unit_id">
+      <xsd:selector xpath=".//xlf:trans-unit|.//xlf:bin-unit"/>
+      <xsd:field xpath="@id"/>
+    </xsd:key>
+    <xsd:keyref name="KR_unit_id" refer="xlf:K_unit_id">
+      <xsd:selector xpath=".//bpt|.//ept|.//it|.//ph|.//g|.//x|.//bx|.//ex|.//sub"/>
+      <xsd:field xpath="@xid"/>
+    </xsd:keyref>
+    <xsd:key name="K_tool-id">
+      <xsd:selector xpath="xlf:header/xlf:tool"/>
+      <xsd:field xpath="@tool-id"/>
+    </xsd:key>
+    <xsd:keyref name="KR_file_tool-id" refer="xlf:K_tool-id">
+      <xsd:selector xpath="."/>
+      <xsd:field xpath="@tool-id"/>
+    </xsd:keyref>
+    <xsd:keyref name="KR_phase_tool-id" refer="xlf:K_tool-id">
+      <xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
+      <xsd:field xpath="@tool-id"/>
+    </xsd:keyref>
+    <xsd:keyref name="KR_alt-trans_tool-id" refer="xlf:K_tool-id">
+      <xsd:selector xpath=".//xlf:trans-unit/xlf:alt-trans"/>
+      <xsd:field xpath="@tool-id"/>
+    </xsd:keyref>
+    <xsd:key name="K_count-group_name">
+      <xsd:selector xpath=".//xlf:count-group"/>
+      <xsd:field xpath="@name"/>
+    </xsd:key>
+    <xsd:unique name="U_context-group_name">
+      <xsd:selector xpath=".//xlf:context-group"/>
+      <xsd:field xpath="@name"/>
+    </xsd:unique>
+    <xsd:key name="K_phase-name">
+      <xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
+      <xsd:field xpath="@phase-name"/>
+    </xsd:key>
+    <xsd:keyref name="KR_phase-name" refer="xlf:K_phase-name">
+      <xsd:selector xpath=".//xlf:count|.//xlf:trans-unit|.//xlf:target|.//bin-unit|.//bin-target"/>
+      <xsd:field xpath="@phase-name"/>
+    </xsd:keyref>
+    <xsd:unique name="U_uid">
+      <xsd:selector xpath=".//xlf:external-file"/>
+      <xsd:field xpath="@uid"/>
+    </xsd:unique>
+  </xsd:element>
+  <xsd:element name="header">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element minOccurs="0" name="skl" type="xlf:ElemType_ExternalReference"/>
+        <xsd:element minOccurs="0" ref="xlf:phase-group"/>
+        <xsd:choice maxOccurs="unbounded" minOccurs="0">
+          <xsd:element name="glossary" type="xlf:ElemType_ExternalReference"/>
+          <xsd:element name="reference" type="xlf:ElemType_ExternalReference"/>
+          <xsd:element ref="xlf:count-group"/>
+          <xsd:element ref="xlf:note"/>
+          <xsd:element ref="xlf:tool"/>
+        </xsd:choice>
+        <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+      </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="internal-file">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="xsd:string">
+          <xsd:attribute name="form" type="xsd:string"/>
+          <xsd:attribute name="crc" type="xsd:NMTOKEN"/>
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="external-file">
+    <xsd:complexType>
+      <xsd:attribute name="href" type="xsd:string" use="required"/>
+      <xsd:attribute name="crc" type="xsd:NMTOKEN"/>
+      <xsd:attribute name="uid" type="xsd:NMTOKEN"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="note">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="xsd:string">
+          <xsd:attribute ref="xml:lang" use="optional"/>
+          <xsd:attribute default="1" name="priority" type="xlf:AttrType_priority" use="optional"/>
+          <xsd:attribute name="from" type="xsd:string" use="optional"/>
+          <xsd:attribute default="general" name="annotates" type="xlf:AttrType_annotates" use="optional"/>
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="phase-group">
+    <xsd:complexType>
+      <xsd:sequence maxOccurs="unbounded">
+        <xsd:element ref="xlf:phase"/>
+      </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="phase">
+    <xsd:complexType>
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:note"/>
+      </xsd:sequence>
+      <xsd:attribute name="phase-name" type="xsd:string" use="required"/>
+      <xsd:attribute name="process-name" type="xsd:string" use="required"/>
+      <xsd:attribute name="company-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+      <xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
+      <xsd:attribute name="job-id" type="xsd:string" use="optional"/>
+      <xsd:attribute name="contact-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="contact-email" type="xsd:string" use="optional"/>
+      <xsd:attribute name="contact-phone" type="xsd:string" use="optional"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="count-group">
+    <xsd:complexType>
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:count"/>
+      </xsd:sequence>
+      <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="count">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="xsd:string">
+          <xsd:attribute name="count-type" type="xlf:AttrType_count-type" use="optional"/>
+          <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+          <xsd:attribute default="word" name="unit" type="xlf:AttrType_unit" use="optional"/>
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="context-group">
+    <xsd:complexType>
+      <xsd:sequence maxOccurs="unbounded">
+        <xsd:element ref="xlf:context"/>
+      </xsd:sequence>
+      <xsd:attribute name="name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="purpose" type="xlf:AttrType_purpose" use="optional"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="context">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="xsd:string">
+          <xsd:attribute name="context-type" type="xlf:AttrType_context-type" use="required"/>
+          <xsd:attribute default="no" name="match-mandatory" type="xlf:AttrType_YesNo" use="optional"/>
+          <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="tool">
+    <xsd:complexType mixed="true">
+      <xsd:sequence>
+        <xsd:any namespace="##any" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+      <xsd:attribute name="tool-id" type="xsd:string" use="required"/>
+      <xsd:attribute name="tool-name" type="xsd:string" use="required"/>
+      <xsd:attribute name="tool-version" type="xsd:string" use="optional"/>
+      <xsd:attribute name="tool-company" type="xsd:string" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="body">
+    <xsd:complexType>
+      <xsd:choice maxOccurs="unbounded" minOccurs="0">
+        <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
+        <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
+        <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
+      </xsd:choice>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="group">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:count-group"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
+          <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+        </xsd:sequence>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
+        </xsd:choice>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:string" use="optional"/>
+      <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+      <xsd:attribute default="default" ref="xml:space" use="optional"/>
+      <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+      <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+      <xsd:attribute name="font" type="xsd:string" use="optional"/>
+      <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+      <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+      <xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
+      <xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="charclass" type="xsd:string" use="optional"/>
+      <xsd:attribute default="no" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="trans-unit">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element ref="xlf:source"/>
+        <xsd:element minOccurs="0" ref="xlf:seg-source"/>
+        <xsd:element minOccurs="0" ref="xlf:target"/>
+        <xsd:choice maxOccurs="unbounded" minOccurs="0">
+          <xsd:element ref="xlf:context-group"/>
+          <xsd:element ref="xlf:count-group"/>
+          <xsd:element ref="xlf:note"/>
+          <xsd:element ref="xlf:alt-trans"/>
+        </xsd:choice>
+        <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:string" use="required"/>
+      <xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+      <xsd:attribute default="default" ref="xml:space" use="optional"/>
+      <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+      <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+      <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+      <xsd:attribute name="font" type="xsd:string" use="optional"/>
+      <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+      <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
+      <xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="charclass" type="xsd:string" use="optional"/>
+      <xsd:attribute default="yes" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_tu_segsrc_mid">
+      <xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
+      <xsd:field xpath="@mid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_tu_segsrc_mid" refer="xlf:U_tu_segsrc_mid">
+      <xsd:selector xpath="./xlf:target/xlf:mrk|./xlf:alt-trans"/>
+      <xsd:field xpath="@mid"/>
+    </xsd:keyref>
+  </xsd:element>
+  <xsd:element name="source">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute ref="xml:lang" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_source_bpt_rid">
+      <xsd:selector xpath=".//xlf:bpt"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_source_ept_rid" refer="xlf:U_source_bpt_rid">
+      <xsd:selector xpath=".//xlf:ept"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+    <xsd:unique name="U_source_bx_rid">
+      <xsd:selector xpath=".//xlf:bx"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_source_ex_rid" refer="xlf:U_source_bx_rid">
+      <xsd:selector xpath=".//xlf:ex"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+  </xsd:element>
+  <xsd:element name="seg-source">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute ref="xml:lang" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_segsrc_bpt_rid">
+      <xsd:selector xpath=".//xlf:bpt"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_segsrc_ept_rid" refer="xlf:U_segsrc_bpt_rid">
+      <xsd:selector xpath=".//xlf:ept"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+    <xsd:unique name="U_segsrc_bx_rid">
+      <xsd:selector xpath=".//xlf:bx"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_segsrc_ex_rid" refer="xlf:U_segsrc_bx_rid">
+      <xsd:selector xpath=".//xlf:ex"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+  </xsd:element>
+  <xsd:element name="target">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
+      <xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
+      <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute ref="xml:lang" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+      <xsd:attribute name="font" type="xsd:string" use="optional"/>
+      <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+      <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute default="yes" name="equiv-trans" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_target_bpt_rid">
+      <xsd:selector xpath=".//xlf:bpt"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_target_ept_rid" refer="xlf:U_target_bpt_rid">
+      <xsd:selector xpath=".//xlf:ept"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+    <xsd:unique name="U_target_bx_rid">
+      <xsd:selector xpath=".//xlf:bx"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_target_ex_rid" refer="xlf:U_target_bx_rid">
+      <xsd:selector xpath=".//xlf:ex"/>
+      <xsd:field xpath="@rid"/>
+    </xsd:keyref>
+  </xsd:element>
+  <xsd:element name="alt-trans">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element minOccurs="0" ref="xlf:source"/>
+        <xsd:element minOccurs="0" ref="xlf:seg-source"/>
+        <xsd:element maxOccurs="1" ref="xlf:target"/>
+        <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
+        <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
+        <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+      </xsd:sequence>
+      <xsd:attribute name="match-quality" type="xsd:string" use="optional"/>
+      <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute ref="xml:lang" use="optional"/>
+      <xsd:attribute name="origin" type="xsd:string" use="optional"/>
+      <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+      <xsd:attribute default="default" ref="xml:space" use="optional"/>
+      <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+      <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+      <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+      <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+      <xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+      <xsd:attribute name="font" type="xsd:string" use="optional"/>
+      <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+      <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute default="proposal" name="alttranstype" type="xlf:AttrType_alttranstype" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+    <xsd:unique name="U_at_segsrc_mid">
+      <xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
+      <xsd:field xpath="@mid"/>
+    </xsd:unique>
+    <xsd:keyref name="KR_at_segsrc_mid" refer="xlf:U_at_segsrc_mid">
+      <xsd:selector xpath="./xlf:target/xlf:mrk"/>
+      <xsd:field xpath="@mid"/>
+    </xsd:keyref>
+  </xsd:element>
+  <xsd:element name="bin-unit">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element ref="xlf:bin-source"/>
+        <xsd:element minOccurs="0" ref="xlf:bin-target"/>
+        <xsd:choice maxOccurs="unbounded" minOccurs="0">
+          <xsd:element ref="xlf:context-group"/>
+          <xsd:element ref="xlf:count-group"/>
+          <xsd:element ref="xlf:note"/>
+          <xsd:element ref="xlf:trans-unit"/>
+        </xsd:choice>
+        <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:string" use="required"/>
+      <xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="required"/>
+      <xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+      <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="bin-source">
+    <xsd:complexType>
+      <xsd:choice>
+        <xsd:element ref="xlf:internal-file"/>
+        <xsd:element ref="xlf:external-file"/>
+      </xsd:choice>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="bin-target">
+    <xsd:complexType>
+      <xsd:choice>
+        <xsd:element ref="xlf:internal-file"/>
+        <xsd:element ref="xlf:external-file"/>
+      </xsd:choice>
+      <xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="optional"/>
+      <xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
+      <xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
+      <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+      <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+  <!-- Element for inline codes -->
+  <xsd:element name="g">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+      <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="x">
+    <xsd:complexType>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
+      <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="bx">
+    <xsd:complexType>
+      <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+      <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="ex">
+    <xsd:complexType>
+      <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="ph">
+    <xsd:complexType mixed="true">
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:sub"/>
+      </xsd:sequence>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+      <xsd:attribute name="assoc" type="xlf:AttrType_assoc" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="bpt">
+    <xsd:complexType mixed="true">
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:sub"/>
+      </xsd:sequence>
+      <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="ept">
+    <xsd:complexType mixed="true">
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:sub"/>
+      </xsd:sequence>
+      <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="it">
+    <xsd:complexType mixed="true">
+      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+        <xsd:element ref="xlf:sub"/>
+      </xsd:sequence>
+      <xsd:attribute name="pos" type="xlf:AttrType_Position" use="required"/>
+      <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+      <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+      <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="sub">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+      <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+      <xsd:attribute name="xid" type="xsd:string" use="optional"/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="mrk">
+    <xsd:complexType mixed="true">
+      <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+      <xsd:attribute name="mtype" type="xlf:AttrType_mtype" use="required"/>
+      <xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
+      <xsd:attribute name="comment" type="xsd:string" use="optional"/>
+      <xsd:anyAttribute namespace="##other" processContents="strict"/>
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>
diff --git a/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd b/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..a46162a7a7a647cd1b0c90f30783c6d0b9c27aa7
--- /dev/null
+++ b/core/vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd
@@ -0,0 +1,309 @@
+<?xml version='1.0'?>
+<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+  xmlns ="http://www.w3.org/1999/xhtml"
+  xml:lang="en">
+
+ <xs:annotation>
+  <xs:documentation>
+   <div>
+    <h1>About the XML namespace</h1>
+
+    <div class="bodytext">
+     <p>
+
+      This schema document describes the XML namespace, in a form
+      suitable for import by other schema documents.
+     </p>
+     <p>
+      See <a href="http://www.w3.org/XML/1998/namespace.html">
+      http://www.w3.org/XML/1998/namespace.html</a> and
+      <a href="http://www.w3.org/TR/REC-xml">
+      http://www.w3.org/TR/REC-xml</a> for information 
+      about this namespace.
+     </p>
+
+     <p>
+      Note that local names in this namespace are intended to be
+      defined only by the World Wide Web Consortium or its subgroups.
+      The names currently defined in this namespace are listed below.
+      They should not be used with conflicting semantics by any Working
+      Group, specification, or document instance.
+     </p>
+     <p>   
+      See further below in this document for more information about <a
+      href="#usage">how to refer to this schema document from your own
+      XSD schema documents</a> and about <a href="#nsversioning">the
+      namespace-versioning policy governing this schema document</a>.
+     </p>
+    </div>
+   </div>
+
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>lang (as an attribute name)</h3>
+      <p>
+
+       denotes an attribute whose value
+       is a language code for the natural language of the content of
+       any element; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML specification.</p>
+     
+    </div>
+    <div>
+     <h4>Notes</h4>
+     <p>
+      Attempting to install the relevant ISO 2- and 3-letter
+      codes as the enumerated possible values is probably never
+      going to be a realistic possibility.  
+     </p>
+     <p>
+
+      See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
+       http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
+      and the IANA language subtag registry at
+      <a href="http://www.iana.org/assignments/language-subtag-registry">
+       http://www.iana.org/assignments/language-subtag-registry</a>
+      for further information.
+     </p>
+     <p>
+
+      The union allows for the 'un-declaration' of xml:lang with
+      the empty string.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+   <xs:union memberTypes="xs:language">
+    <xs:simpleType>    
+     <xs:restriction base="xs:string">
+      <xs:enumeration value=""/>
+
+     </xs:restriction>
+    </xs:simpleType>
+   </xs:union>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="space">
+  <xs:annotation>
+   <xs:documentation>
+
+    <div>
+     
+      <h3>space (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose
+       value is a keyword indicating what whitespace processing
+       discipline is intended for the content of the element; its
+       value is inherited.  This name is reserved by virtue of its
+       definition in the XML specification.</p>
+     
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+
+   <xs:restriction base="xs:NCName">
+    <xs:enumeration value="default"/>
+    <xs:enumeration value="preserve"/>
+   </xs:restriction>
+  </xs:simpleType>
+ </xs:attribute>
+ 
+ <xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
+   <xs:documentation>
+
+    <div>
+     
+      <h3>base (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       provides a URI to be used as the base for interpreting any
+       relative URIs in the scope of the element on which it
+       appears; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML Base specification.</p>
+     
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
+      for information about this attribute.
+     </p>
+
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+ 
+ <xs:attribute name="id" type="xs:ID">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>id (as an attribute name)</h3> 
+      <p>
+
+       denotes an attribute whose value
+       should be interpreted as if declared to be of type ID.
+       This name is reserved by virtue of its definition in the
+       xml:id specification.</p>
+     
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
+      for information about this attribute.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+  <xs:attribute ref="xml:base"/>
+  <xs:attribute ref="xml:lang"/>
+  <xs:attribute ref="xml:space"/>
+  <xs:attribute ref="xml:id"/>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+
+  <xs:documentation>
+   <div>
+   
+    <h3>Father (in any context at all)</h3> 
+
+    <div class="bodytext">
+     <p>
+      denotes Jon Bosak, the chair of 
+      the original XML Working Group.  This name is reserved by 
+      the following decision of the W3C XML Plenary and 
+      XML Coordination groups:
+     </p>
+     <blockquote>
+       <p>
+
+	In appreciation for his vision, leadership and
+	dedication the W3C XML Plenary on this 10th day of
+	February, 2000, reserves for Jon Bosak in perpetuity
+	the XML name "xml:Father".
+       </p>
+     </blockquote>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+
+   <div xml:id="usage" id="usage">
+    <h2><a name="usage">About this schema document</a></h2>
+
+    <div class="bodytext">
+     <p>
+      This schema defines attributes and an attribute group suitable
+      for use by schemas wishing to allow <code>xml:base</code>,
+      <code>xml:lang</code>, <code>xml:space</code> or
+      <code>xml:id</code> attributes on elements they define.
+     </p>
+
+     <p>
+      To enable this, such a schema must import this schema for
+      the XML namespace, e.g. as follows:
+     </p>
+     <pre>
+          &lt;schema.. .>
+          .. .
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+     </pre>
+     <p>
+      or
+     </p>
+     <pre>
+
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+     </pre>
+     <p>
+      Subsequently, qualified reference to any of the attributes or the
+      group defined below will have the desired effect, e.g.
+     </p>
+     <pre>
+          &lt;type.. .>
+          .. .
+           &lt;attributeGroup ref="xml:specialAttrs"/>
+     </pre>
+     <p>
+      will define a type which will schema-validate an instance element
+      with any of those attributes.
+     </p>
+
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div id="nsversioning" xml:id="nsversioning">
+    <h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
+
+    <div class="bodytext">
+     <p>
+      In keeping with the XML Schema WG's standard versioning
+      policy, this schema document will persist at
+      <a href="http://www.w3.org/2009/01/xml.xsd">
+       http://www.w3.org/2009/01/xml.xsd</a>.
+     </p>
+     <p>
+      At the date of issue it can also be found at
+      <a href="http://www.w3.org/2001/xml.xsd">
+       http://www.w3.org/2001/xml.xsd</a>.
+     </p>
+
+     <p>
+      The schema document at that URI may however change in the future,
+      in order to remain compatible with the latest version of XML
+      Schema itself, or with the XML namespace itself.  In other words,
+      if the XML Schema or XML namespaces change, the version of this
+      document at <a href="http://www.w3.org/2001/xml.xsd">
+       http://www.w3.org/2001/xml.xsd 
+      </a> 
+      will change accordingly; the version at 
+      <a href="http://www.w3.org/2009/01/xml.xsd">
+       http://www.w3.org/2009/01/xml.xsd 
+      </a> 
+      will not change.
+     </p>
+     <p>
+
+      Previous dated (and unchanging) versions of this schema 
+      document are at:
+     </p>
+     <ul>
+      <li><a href="http://www.w3.org/2009/01/xml.xsd">
+	http://www.w3.org/2009/01/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2007/08/xml.xsd">
+	http://www.w3.org/2007/08/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2004/10/xml.xsd">
+
+	http://www.w3.org/2004/10/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2001/03/xml.xsd">
+	http://www.w3.org/2001/03/xml.xsd</a></li>
+     </ul>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+</xs:schema>
diff --git a/core/vendor/symfony/translation/LoggingTranslator.php b/core/vendor/symfony/translation/LoggingTranslator.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ff3531228071f0ae924532de35e6d7f0ecbedb2
--- /dev/null
+++ b/core/vendor/symfony/translation/LoggingTranslator.php
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+use Psr\Log\LoggerInterface;
+
+/**
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface
+{
+    /**
+     * @var TranslatorInterface|TranslatorBagInterface
+     */
+    private $translator;
+
+    /**
+     * @var LoggerInterface
+     */
+    private $logger;
+
+    /**
+     * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
+     * @param LoggerInterface     $logger
+     */
+    public function __construct(TranslatorInterface $translator, LoggerInterface $logger)
+    {
+        if (!$translator instanceof TranslatorBagInterface) {
+            throw new \InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', get_class($translator)));
+        }
+
+        $this->translator = $translator;
+        $this->logger = $logger;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function trans($id, array $parameters = array(), $domain = null, $locale = null)
+    {
+        $trans = $this->translator->trans($id, $parameters, $domain, $locale);
+        $this->log($id, $domain, $locale);
+
+        return $trans;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
+    {
+        $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
+        $this->log($id, $domain, $locale);
+
+        return $trans;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function setLocale($locale)
+    {
+        $this->translator->setLocale($locale);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getLocale()
+    {
+        return $this->translator->getLocale();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCatalogue($locale = null)
+    {
+        return $this->translator->getCatalogue($locale);
+    }
+
+    /**
+     * Passes through all unknown calls onto the translator object.
+     */
+    public function __call($method, $args)
+    {
+        return call_user_func_array(array($this->translator, $method), $args);
+    }
+
+    /**
+     * Logs for missing translations.
+     *
+     * @param string      $id
+     * @param string|null $domain
+     * @param string|null $locale
+     */
+    private function log($id, $domain, $locale)
+    {
+        if (null === $domain) {
+            $domain = 'messages';
+        }
+
+        $id = (string) $id;
+        $catalogue = $this->translator->getCatalogue($locale);
+        if ($catalogue->defines($id, $domain)) {
+            return;
+        }
+
+        if ($catalogue->has($id, $domain)) {
+            $this->logger->debug('Translation use fallback catalogue.', array('id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()));
+        } else {
+            $this->logger->warning('Translation not found.', array('id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()));
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/MessageCatalogue.php b/core/vendor/symfony/translation/MessageCatalogue.php
new file mode 100644
index 0000000000000000000000000000000000000000..aa92a587fbc86b8a908681bfc00af3876737c77d
--- /dev/null
+++ b/core/vendor/symfony/translation/MessageCatalogue.php
@@ -0,0 +1,293 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+use Symfony\Component\Config\Resource\ResourceInterface;
+
+/**
+ * MessageCatalogue.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface
+{
+    private $messages = array();
+    private $metadata = array();
+    private $resources = array();
+    private $locale;
+    private $fallbackCatalogue;
+    private $parent;
+
+    /**
+     * Constructor.
+     *
+     * @param string $locale   The locale
+     * @param array  $messages An array of messages classified by domain
+     *
+     * @api
+     */
+    public function __construct($locale, array $messages = array())
+    {
+        $this->locale = $locale;
+        $this->messages = $messages;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getLocale()
+    {
+        return $this->locale;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getDomains()
+    {
+        return array_keys($this->messages);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function all($domain = null)
+    {
+        if (null === $domain) {
+            return $this->messages;
+        }
+
+        return isset($this->messages[$domain]) ? $this->messages[$domain] : array();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function set($id, $translation, $domain = 'messages')
+    {
+        $this->add(array($id => $translation), $domain);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function has($id, $domain = 'messages')
+    {
+        if (isset($this->messages[$domain][$id])) {
+            return true;
+        }
+
+        if (null !== $this->fallbackCatalogue) {
+            return $this->fallbackCatalogue->has($id, $domain);
+        }
+
+        return false;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function defines($id, $domain = 'messages')
+    {
+        return isset($this->messages[$domain][$id]);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function get($id, $domain = 'messages')
+    {
+        if (isset($this->messages[$domain][$id])) {
+            return $this->messages[$domain][$id];
+        }
+
+        if (null !== $this->fallbackCatalogue) {
+            return $this->fallbackCatalogue->get($id, $domain);
+        }
+
+        return $id;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function replace($messages, $domain = 'messages')
+    {
+        $this->messages[$domain] = array();
+
+        $this->add($messages, $domain);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function add($messages, $domain = 'messages')
+    {
+        if (!isset($this->messages[$domain])) {
+            $this->messages[$domain] = $messages;
+        } else {
+            $this->messages[$domain] = array_replace($this->messages[$domain], $messages);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function addCatalogue(MessageCatalogueInterface $catalogue)
+    {
+        if ($catalogue->getLocale() !== $this->locale) {
+            throw new \LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s"', $catalogue->getLocale(), $this->locale));
+        }
+
+        foreach ($catalogue->all() as $domain => $messages) {
+            $this->add($messages, $domain);
+        }
+
+        foreach ($catalogue->getResources() as $resource) {
+            $this->addResource($resource);
+        }
+
+        if ($catalogue instanceof MetadataAwareInterface) {
+            $metadata = $catalogue->getMetadata('', '');
+            $this->addMetadata($metadata);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function addFallbackCatalogue(MessageCatalogueInterface $catalogue)
+    {
+        // detect circular references
+        $c = $this;
+        do {
+            if ($c->getLocale() === $catalogue->getLocale()) {
+                throw new \LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale()));
+            }
+        } while ($c = $c->parent);
+
+        $catalogue->parent = $this;
+        $this->fallbackCatalogue = $catalogue;
+
+        foreach ($catalogue->getResources() as $resource) {
+            $this->addResource($resource);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getFallbackCatalogue()
+    {
+        return $this->fallbackCatalogue;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getResources()
+    {
+        return array_values($this->resources);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function addResource(ResourceInterface $resource)
+    {
+        $this->resources[$resource->__toString()] = $resource;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getMetadata($key = '', $domain = 'messages')
+    {
+        if ('' == $domain) {
+            return $this->metadata;
+        }
+
+        if (isset($this->metadata[$domain])) {
+            if ('' == $key) {
+                return $this->metadata[$domain];
+            }
+
+            if (isset($this->metadata[$domain][$key])) {
+                return $this->metadata[$domain][$key];
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setMetadata($key, $value, $domain = 'messages')
+    {
+        $this->metadata[$domain][$key] = $value;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function deleteMetadata($key = '', $domain = 'messages')
+    {
+        if ('' == $domain) {
+            $this->metadata = array();
+        } elseif ('' == $key) {
+            unset($this->metadata[$domain]);
+        } else {
+            unset($this->metadata[$domain][$key]);
+        }
+    }
+
+    /**
+     * Adds current values with the new values.
+     *
+     * @param array $values Values to add
+     */
+    private function addMetadata(array $values)
+    {
+        foreach ($values as $domain => $keys) {
+            foreach ($keys as $key => $value) {
+                $this->setMetadata($key, $value, $domain);
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/MessageCatalogueInterface.php b/core/vendor/symfony/translation/MessageCatalogueInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..647e3374e1eca2c584ea67f9adf5dac4479a6186
--- /dev/null
+++ b/core/vendor/symfony/translation/MessageCatalogueInterface.php
@@ -0,0 +1,172 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+use Symfony\Component\Config\Resource\ResourceInterface;
+
+/**
+ * MessageCatalogueInterface.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+interface MessageCatalogueInterface
+{
+    /**
+     * Gets the catalogue locale.
+     *
+     * @return string The locale
+     *
+     * @api
+     */
+    public function getLocale();
+
+    /**
+     * Gets the domains.
+     *
+     * @return array An array of domains
+     *
+     * @api
+     */
+    public function getDomains();
+
+    /**
+     * Gets the messages within a given domain.
+     *
+     * If $domain is null, it returns all messages.
+     *
+     * @param string $domain The domain name
+     *
+     * @return array An array of messages
+     *
+     * @api
+     */
+    public function all($domain = null);
+
+    /**
+     * Sets a message translation.
+     *
+     * @param string $id          The message id
+     * @param string $translation The messages translation
+     * @param string $domain      The domain name
+     *
+     * @api
+     */
+    public function set($id, $translation, $domain = 'messages');
+
+    /**
+     * Checks if a message has a translation.
+     *
+     * @param string $id     The message id
+     * @param string $domain The domain name
+     *
+     * @return bool true if the message has a translation, false otherwise
+     *
+     * @api
+     */
+    public function has($id, $domain = 'messages');
+
+    /**
+     * Checks if a message has a translation (it does not take into account the fallback mechanism).
+     *
+     * @param string $id     The message id
+     * @param string $domain The domain name
+     *
+     * @return bool true if the message has a translation, false otherwise
+     *
+     * @api
+     */
+    public function defines($id, $domain = 'messages');
+
+    /**
+     * Gets a message translation.
+     *
+     * @param string $id     The message id
+     * @param string $domain The domain name
+     *
+     * @return string The message translation
+     *
+     * @api
+     */
+    public function get($id, $domain = 'messages');
+
+    /**
+     * Sets translations for a given domain.
+     *
+     * @param array  $messages An array of translations
+     * @param string $domain   The domain name
+     *
+     * @api
+     */
+    public function replace($messages, $domain = 'messages');
+
+    /**
+     * Adds translations for a given domain.
+     *
+     * @param array  $messages An array of translations
+     * @param string $domain   The domain name
+     *
+     * @api
+     */
+    public function add($messages, $domain = 'messages');
+
+    /**
+     * Merges translations from the given Catalogue into the current one.
+     *
+     * The two catalogues must have the same locale.
+     *
+     * @param MessageCatalogueInterface $catalogue A MessageCatalogueInterface instance
+     *
+     * @api
+     */
+    public function addCatalogue(MessageCatalogueInterface $catalogue);
+
+    /**
+     * Merges translations from the given Catalogue into the current one
+     * only when the translation does not exist.
+     *
+     * This is used to provide default translations when they do not exist for the current locale.
+     *
+     * @param MessageCatalogueInterface $catalogue A MessageCatalogueInterface instance
+     *
+     * @api
+     */
+    public function addFallbackCatalogue(MessageCatalogueInterface $catalogue);
+
+    /**
+     * Gets the fallback catalogue.
+     *
+     * @return MessageCatalogueInterface|null A MessageCatalogueInterface instance or null when no fallback has been set
+     *
+     * @api
+     */
+    public function getFallbackCatalogue();
+
+    /**
+     * Returns an array of resources loaded to build this collection.
+     *
+     * @return ResourceInterface[] An array of resources
+     *
+     * @api
+     */
+    public function getResources();
+
+    /**
+     * Adds a resource for this collection.
+     *
+     * @param ResourceInterface $resource A resource instance
+     *
+     * @api
+     */
+    public function addResource(ResourceInterface $resource);
+}
diff --git a/core/vendor/symfony/translation/MessageSelector.php b/core/vendor/symfony/translation/MessageSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f5430cfe29ae3fc851bc4bb4ed2a1a821717027
--- /dev/null
+++ b/core/vendor/symfony/translation/MessageSelector.php
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * MessageSelector.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @api
+ */
+class MessageSelector
+{
+    /**
+     * Given a message with different plural translations separated by a
+     * pipe (|), this method returns the correct portion of the message based
+     * on the given number, locale and the pluralization rules in the message
+     * itself.
+     *
+     * The message supports two different types of pluralization rules:
+     *
+     * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
+     * indexed:  There is one apple|There are %count% apples
+     *
+     * The indexed solution can also contain labels (e.g. one: There is one apple).
+     * This is purely for making the translations more clear - it does not
+     * affect the functionality.
+     *
+     * The two methods can also be mixed:
+     *     {0} There are no apples|one: There is one apple|more: There are %count% apples
+     *
+     * @param string $message The message being translated
+     * @param int    $number  The number of items represented for the message
+     * @param string $locale  The locale to use for choosing
+     *
+     * @return string
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @api
+     */
+    public function choose($message, $number, $locale)
+    {
+        $parts = explode('|', $message);
+        $explicitRules = array();
+        $standardRules = array();
+        foreach ($parts as $part) {
+            $part = trim($part);
+
+            if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/x', $part, $matches)) {
+                $explicitRules[$matches['interval']] = $matches['message'];
+            } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) {
+                $standardRules[] = $matches[1];
+            } else {
+                $standardRules[] = $part;
+            }
+        }
+
+        // try to match an explicit rule, then fallback to the standard ones
+        foreach ($explicitRules as $interval => $m) {
+            if (Interval::test($number, $interval)) {
+                return $m;
+            }
+        }
+
+        $position = PluralizationRules::get($number, $locale);
+
+        if (!isset($standardRules[$position])) {
+            // when there's exactly one rule given, and that rule is a standard
+            // rule, use this rule
+            if (1 === count($parts) && isset($standardRules[0])) {
+                return $standardRules[0];
+            }
+
+            throw new \InvalidArgumentException(sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $message, $locale, $number));
+        }
+
+        return $standardRules[$position];
+    }
+}
diff --git a/core/vendor/symfony/translation/MetadataAwareInterface.php b/core/vendor/symfony/translation/MetadataAwareInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..e93c6fbc713114d79dfa40f653b6878c5f3a3bc0
--- /dev/null
+++ b/core/vendor/symfony/translation/MetadataAwareInterface.php
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * MetadataAwareInterface.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface MetadataAwareInterface
+{
+    /**
+     * Gets metadata for the given domain and key.
+     *
+     * Passing an empty domain will return an array with all metadata indexed by
+     * domain and then by key. Passing an empty key will return an array with all
+     * metadata for the given domain.
+     *
+     * @param string $key    The key
+     * @param string $domain The domain name
+     *
+     * @return mixed The value that was set or an array with the domains/keys or null
+     */
+    public function getMetadata($key = '', $domain = 'messages');
+
+    /**
+     * Adds metadata to a message domain.
+     *
+     * @param string $key    The key
+     * @param mixed  $value  The value
+     * @param string $domain The domain name
+     */
+    public function setMetadata($key, $value, $domain = 'messages');
+
+    /**
+     * Deletes metadata for the given key and domain.
+     *
+     * Passing an empty domain will delete all metadata. Passing an empty key will
+     * delete all metadata for the given domain.
+     *
+     * @param string $key    The key
+     * @param string $domain The domain name
+     */
+    public function deleteMetadata($key = '', $domain = 'messages');
+}
diff --git a/core/vendor/symfony/translation/PluralizationRules.php b/core/vendor/symfony/translation/PluralizationRules.php
new file mode 100644
index 0000000000000000000000000000000000000000..e1eac82ce9b56106428b1200e5b9ddf2d5875059
--- /dev/null
+++ b/core/vendor/symfony/translation/PluralizationRules.php
@@ -0,0 +1,214 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * Returns the plural rules for a given locale.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class PluralizationRules
+{
+    private static $rules = array();
+
+    /**
+     * Returns the plural position to use for the given locale and number.
+     *
+     * @param int    $number The number
+     * @param string $locale The locale
+     *
+     * @return int The plural position
+     */
+    public static function get($number, $locale)
+    {
+        if ('pt_BR' === $locale) {
+            // temporary set a locale for brazilian
+            $locale = 'xbr';
+        }
+
+        if (strlen($locale) > 3) {
+            $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
+        }
+
+        if (isset(self::$rules[$locale])) {
+            $return = call_user_func(self::$rules[$locale], $number);
+
+            if (!is_int($return) || $return < 0) {
+                return 0;
+            }
+
+            return $return;
+        }
+
+        /*
+         * The plural rules are derived from code of the Zend Framework (2010-09-25),
+         * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).
+         * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+         */
+        switch ($locale) {
+            case 'bo':
+            case 'dz':
+            case 'id':
+            case 'ja':
+            case 'jv':
+            case 'ka':
+            case 'km':
+            case 'kn':
+            case 'ko':
+            case 'ms':
+            case 'th':
+            case 'tr':
+            case 'vi':
+            case 'zh':
+                return 0;
+                break;
+
+            case 'af':
+            case 'az':
+            case 'bn':
+            case 'bg':
+            case 'ca':
+            case 'da':
+            case 'de':
+            case 'el':
+            case 'en':
+            case 'eo':
+            case 'es':
+            case 'et':
+            case 'eu':
+            case 'fa':
+            case 'fi':
+            case 'fo':
+            case 'fur':
+            case 'fy':
+            case 'gl':
+            case 'gu':
+            case 'ha':
+            case 'he':
+            case 'hu':
+            case 'is':
+            case 'it':
+            case 'ku':
+            case 'lb':
+            case 'ml':
+            case 'mn':
+            case 'mr':
+            case 'nah':
+            case 'nb':
+            case 'ne':
+            case 'nl':
+            case 'nn':
+            case 'no':
+            case 'om':
+            case 'or':
+            case 'pa':
+            case 'pap':
+            case 'ps':
+            case 'pt':
+            case 'so':
+            case 'sq':
+            case 'sv':
+            case 'sw':
+            case 'ta':
+            case 'te':
+            case 'tk':
+            case 'ur':
+            case 'zu':
+                return ($number == 1) ? 0 : 1;
+
+            case 'am':
+            case 'bh':
+            case 'fil':
+            case 'fr':
+            case 'gun':
+            case 'hi':
+            case 'ln':
+            case 'mg':
+            case 'nso':
+            case 'xbr':
+            case 'ti':
+            case 'wa':
+                return (($number == 0) || ($number == 1)) ? 0 : 1;
+
+            case 'be':
+            case 'bs':
+            case 'hr':
+            case 'ru':
+            case 'sr':
+            case 'uk':
+                return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
+
+            case 'cs':
+            case 'sk':
+                return ($number == 1) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2);
+
+            case 'ga':
+                return ($number == 1) ? 0 : (($number == 2) ? 1 : 2);
+
+            case 'lt':
+                return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
+
+            case 'sl':
+                return ($number % 100 == 1) ? 0 : (($number % 100 == 2) ? 1 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 2 : 3));
+
+            case 'mk':
+                return ($number % 10 == 1) ? 0 : 1;
+
+            case 'mt':
+                return ($number == 1) ? 0 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3));
+
+            case 'lv':
+                return ($number == 0) ? 0 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2);
+
+            case 'pl':
+                return ($number == 1) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2);
+
+            case 'cy':
+                return ($number == 1) ? 0 : (($number == 2) ? 1 : ((($number == 8) || ($number == 11)) ? 2 : 3));
+
+            case 'ro':
+                return ($number == 1) ? 0 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2);
+
+            case 'ar':
+                return ($number == 0) ? 0 : (($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5))));
+
+            default:
+                return 0;
+        }
+    }
+
+    /**
+     * Overrides the default plural rule for a given locale.
+     *
+     * @param string $rule   A PHP callable
+     * @param string $locale The locale
+     *
+     * @throws \LogicException
+     */
+    public static function set($rule, $locale)
+    {
+        if ('pt_BR' === $locale) {
+            // temporary set a locale for brazilian
+            $locale = 'xbr';
+        }
+
+        if (strlen($locale) > 3) {
+            $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
+        }
+
+        if (!is_callable($rule)) {
+            throw new \LogicException('The given rule can not be called');
+        }
+
+        self::$rules[$locale] = $rule;
+    }
+}
diff --git a/core/vendor/symfony/translation/README.md b/core/vendor/symfony/translation/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b008629578c3c26b92610d86996ce037a13df53
--- /dev/null
+++ b/core/vendor/symfony/translation/README.md
@@ -0,0 +1,37 @@
+Translation Component
+=====================
+
+Translation provides tools for loading translation files and generating
+translated strings from these including support for pluralization.
+
+```php
+use Symfony\Component\Translation\Translator;
+use Symfony\Component\Translation\MessageSelector;
+use Symfony\Component\Translation\Loader\ArrayLoader;
+
+$translator = new Translator('fr_FR', new MessageSelector());
+$translator->setFallbackLocales(array('fr'));
+$translator->addLoader('array', new ArrayLoader());
+$translator->addResource('array', array(
+    'Hello World!' => 'Bonjour',
+), 'fr');
+
+echo $translator->trans('Hello World!')."\n";
+```
+
+Resources
+---------
+
+Silex integration:
+
+https://github.com/fabpot/Silex/blob/master/src/Silex/Provider/TranslationServiceProvider.php
+
+Documentation:
+
+https://symfony.com/doc/2.7/book/translation.html
+
+You can run the unit tests with the following command:
+
+    $ cd path/to/Symfony/Component/Translation/
+    $ composer install
+    $ phpunit
diff --git a/core/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php b/core/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..30c21afa64c155f039f736e2f56686e20efe68c7
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Catalogue;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\MessageCatalogueInterface;
+
+abstract class AbstractOperationTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetEmptyDomains()
+    {
+        $this->assertEquals(
+            array(),
+            $this->createOperation(
+                new MessageCatalogue('en'),
+                new MessageCatalogue('en')
+            )->getDomains()
+        );
+    }
+
+    public function testGetMergedDomains()
+    {
+        $this->assertEquals(
+            array('a', 'b', 'c'),
+            $this->createOperation(
+                new MessageCatalogue('en', array('a' => array(), 'b' => array())),
+                new MessageCatalogue('en', array('b' => array(), 'c' => array()))
+            )->getDomains()
+        );
+    }
+
+    public function testGetMessagesFromUnknownDomain()
+    {
+        $this->setExpectedException('InvalidArgumentException');
+        $this->createOperation(
+            new MessageCatalogue('en'),
+            new MessageCatalogue('en')
+        )->getMessages('domain');
+    }
+
+    public function testGetEmptyMessages()
+    {
+        $this->assertEquals(
+            array(),
+            $this->createOperation(
+                new MessageCatalogue('en', array('a' => array())),
+                new MessageCatalogue('en')
+            )->getMessages('a')
+        );
+    }
+
+    public function testGetEmptyResult()
+    {
+        $this->assertEquals(
+            new MessageCatalogue('en'),
+            $this->createOperation(
+                new MessageCatalogue('en'),
+                new MessageCatalogue('en')
+            )->getResult()
+        );
+    }
+
+    abstract protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target);
+}
diff --git a/core/vendor/symfony/translation/Tests/Catalogue/DiffOperationTest.php b/core/vendor/symfony/translation/Tests/Catalogue/DiffOperationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..26bd5823df1296eb92a06d701ce6c29286aa578d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Catalogue/DiffOperationTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Catalogue;
+
+use Symfony\Component\Translation\Catalogue\DiffOperation;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\MessageCatalogueInterface;
+
+class DiffOperationTest extends AbstractOperationTest
+{
+    public function testGetMessagesFromSingleDomain()
+    {
+        $operation = $this->createOperation(
+            new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b'))),
+            new MessageCatalogue('en', array('messages' => array('a' => 'new_a', 'c' => 'new_c')))
+        );
+
+        $this->assertEquals(
+            array('a' => 'old_a', 'c' => 'new_c'),
+            $operation->getMessages('messages')
+        );
+
+        $this->assertEquals(
+            array('c' => 'new_c'),
+            $operation->getNewMessages('messages')
+        );
+
+        $this->assertEquals(
+            array('b' => 'old_b'),
+            $operation->getObsoleteMessages('messages')
+        );
+    }
+
+    public function testGetResultFromSingleDomain()
+    {
+        $this->assertEquals(
+            new MessageCatalogue('en', array(
+                'messages' => array('a' => 'old_a', 'c' => 'new_c'),
+            )),
+            $this->createOperation(
+                new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b'))),
+                new MessageCatalogue('en', array('messages' => array('a' => 'new_a', 'c' => 'new_c')))
+            )->getResult()
+        );
+    }
+
+    public function testGetResultWithMetadata()
+    {
+        $leftCatalogue = new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b')));
+        $leftCatalogue->setMetadata('a', 'foo', 'messages');
+        $leftCatalogue->setMetadata('b', 'bar', 'messages');
+        $rightCatalogue = new MessageCatalogue('en', array('messages' => array('b' => 'new_b', 'c' => 'new_c')));
+        $rightCatalogue->setMetadata('b', 'baz', 'messages');
+        $rightCatalogue->setMetadata('c', 'qux', 'messages');
+
+        $diffCatalogue = new MessageCatalogue('en', array('messages' => array('b' => 'old_b', 'c' => 'new_c')));
+        $diffCatalogue->setMetadata('b', 'bar', 'messages');
+        $diffCatalogue->setMetadata('c', 'qux', 'messages');
+
+        $this->assertEquals(
+            $diffCatalogue,
+            $this->createOperation(
+                $leftCatalogue,
+                $rightCatalogue
+            )->getResult()
+        );
+    }
+
+    protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
+    {
+        return new DiffOperation($source, $target);
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Catalogue/MergeOperationTest.php b/core/vendor/symfony/translation/Tests/Catalogue/MergeOperationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b51c15daec9210788f1e6d7ba5754664401bd63
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Catalogue/MergeOperationTest.php
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Catalogue;
+
+use Symfony\Component\Translation\Catalogue\MergeOperation;
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\MessageCatalogueInterface;
+
+class MergeOperationTest extends AbstractOperationTest
+{
+    public function testGetMessagesFromSingleDomain()
+    {
+        $operation = $this->createOperation(
+            new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b'))),
+            new MessageCatalogue('en', array('messages' => array('a' => 'new_a', 'c' => 'new_c')))
+        );
+
+        $this->assertEquals(
+            array('a' => 'old_a', 'b' => 'old_b', 'c' => 'new_c'),
+            $operation->getMessages('messages')
+        );
+
+        $this->assertEquals(
+            array('c' => 'new_c'),
+            $operation->getNewMessages('messages')
+        );
+
+        $this->assertEquals(
+            array(),
+            $operation->getObsoleteMessages('messages')
+        );
+    }
+
+    public function testGetResultFromSingleDomain()
+    {
+        $this->assertEquals(
+            new MessageCatalogue('en', array(
+                'messages' => array('a' => 'old_a', 'b' => 'old_b', 'c' => 'new_c'),
+            )),
+            $this->createOperation(
+                new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b'))),
+                new MessageCatalogue('en', array('messages' => array('a' => 'new_a', 'c' => 'new_c')))
+            )->getResult()
+        );
+    }
+
+    public function testGetResultWithMetadata()
+    {
+        $leftCatalogue = new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b')));
+        $leftCatalogue->setMetadata('a', 'foo', 'messages');
+        $leftCatalogue->setMetadata('b', 'bar', 'messages');
+        $rightCatalogue = new MessageCatalogue('en', array('messages' => array('b' => 'new_b', 'c' => 'new_c')));
+        $rightCatalogue->setMetadata('b', 'baz', 'messages');
+        $rightCatalogue->setMetadata('c', 'qux', 'messages');
+
+        $mergedCatalogue = new MessageCatalogue('en', array('messages' => array('a' => 'old_a', 'b' => 'old_b', 'c' => 'new_c')));
+        $mergedCatalogue->setMetadata('a', 'foo', 'messages');
+        $mergedCatalogue->setMetadata('b', 'bar', 'messages');
+        $mergedCatalogue->setMetadata('c', 'qux', 'messages');
+
+        $this->assertEquals(
+            $mergedCatalogue,
+            $this->createOperation(
+                $leftCatalogue,
+                $rightCatalogue
+            )->getResult()
+        );
+    }
+
+    protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
+    {
+        return new MergeOperation($source, $target);
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/DataCollector/TranslationDataCollectorTest.php b/core/vendor/symfony/translation/Tests/DataCollector/TranslationDataCollectorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..085d31267b3a456b44e625d471bf057203d37483
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/DataCollector/TranslationDataCollectorTest.php
@@ -0,0 +1,121 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\DataCollector;
+
+use Symfony\Component\Translation\DataCollectorTranslator;
+use Symfony\Component\Translation\DataCollector\TranslationDataCollector;
+
+class TranslationDataCollectorTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!class_exists('Symfony\Component\HttpKernel\DataCollector\DataCollector')) {
+            $this->markTestSkipped('The "DataCollector" is not available');
+        }
+    }
+
+    public function testCollectEmptyMessages()
+    {
+        $translator = $this->getTranslator();
+        $translator->expects($this->any())->method('getCollectedMessages')->will($this->returnValue(array()));
+
+        $dataCollector = new TranslationDataCollector($translator);
+        $dataCollector->lateCollect();
+
+        $this->assertEquals(0, $dataCollector->getCountMissings());
+        $this->assertEquals(0, $dataCollector->getCountFallbacks());
+        $this->assertEquals(0, $dataCollector->getCountDefines());
+        $this->assertEquals(array(), $dataCollector->getMessages());
+    }
+
+    public function testCollect()
+    {
+        $collectedMessages = array(
+            array(
+                  'id' => 'foo',
+                  'translation' => 'foo (en)',
+                  'locale' => 'en',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_DEFINED,
+            ),
+            array(
+                  'id' => 'bar',
+                  'translation' => 'bar (fr)',
+                  'locale' => 'fr',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
+            ),
+            array(
+                  'id' => 'choice',
+                  'translation' => 'choice',
+                  'locale' => 'en',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_MISSING,
+            ),
+            array(
+                  'id' => 'choice',
+                  'translation' => 'choice',
+                  'locale' => 'en',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_MISSING,
+            ),
+        );
+        $expectedMessages = array(
+            array(
+                  'id' => 'foo',
+                  'translation' => 'foo (en)',
+                  'locale' => 'en',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_DEFINED,
+                  'count' => 1,
+            ),
+            array(
+                  'id' => 'bar',
+                  'translation' => 'bar (fr)',
+                  'locale' => 'fr',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
+                  'count' => 1,
+            ),
+            array(
+                  'id' => 'choice',
+                  'translation' => 'choice',
+                  'locale' => 'en',
+                  'domain' => 'messages',
+                  'state' => DataCollectorTranslator::MESSAGE_MISSING,
+                  'count' => 2,
+            ),
+        );
+
+        $translator = $this->getTranslator();
+        $translator->expects($this->any())->method('getCollectedMessages')->will($this->returnValue($collectedMessages));
+
+        $dataCollector = new TranslationDataCollector($translator);
+        $dataCollector->lateCollect();
+
+        $this->assertEquals(1, $dataCollector->getCountMissings());
+        $this->assertEquals(1, $dataCollector->getCountFallbacks());
+        $this->assertEquals(1, $dataCollector->getCountDefines());
+        $this->assertEquals($expectedMessages, array_values($dataCollector->getMessages()));
+    }
+
+    private function getTranslator()
+    {
+        $translator = $this
+            ->getMockBuilder('Symfony\Component\Translation\DataCollectorTranslator')
+            ->disableOriginalConstructor()
+            ->getMock()
+        ;
+
+        return $translator;
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php b/core/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e98ad31f43c8679ade7d1db7b09d78f11394c8c
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\Translator;
+use Symfony\Component\Translation\DataCollectorTranslator;
+use Symfony\Component\Translation\Loader\ArrayLoader;
+
+class DataCollectorTranslatorTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!class_exists('Symfony\Component\HttpKernel\DataCollector\DataCollector')) {
+            $this->markTestSkipped('The "DataCollector" is not available');
+        }
+    }
+    public function testCollectMessages()
+    {
+        $collector = $this->createCollector();
+        $collector->setFallbackLocales(array('fr', 'ru'));
+
+        $collector->trans('foo');
+        $collector->trans('bar');
+        $collector->transChoice('choice', 0);
+        $collector->trans('bar_ru');
+
+        $expectedMessages = array();
+        $expectedMessages[] = array(
+              'id' => 'foo',
+              'translation' => 'foo (en)',
+              'locale' => 'en',
+              'domain' => 'messages',
+              'state' => DataCollectorTranslator::MESSAGE_DEFINED,
+        );
+        $expectedMessages[] = array(
+              'id' => 'bar',
+              'translation' => 'bar (fr)',
+              'locale' => 'fr',
+              'domain' => 'messages',
+              'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
+        );
+        $expectedMessages[] = array(
+              'id' => 'choice',
+              'translation' => 'choice',
+              'locale' => 'en',
+              'domain' => 'messages',
+              'state' => DataCollectorTranslator::MESSAGE_MISSING,
+        );
+        $expectedMessages[] = array(
+              'id' => 'bar_ru',
+              'translation' => 'bar (ru)',
+              'locale' => 'ru',
+              'domain' => 'messages',
+              'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
+        );
+
+        $this->assertEquals($expectedMessages, $collector->getCollectedMessages());
+    }
+
+    private function createCollector()
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (en)'), 'en');
+        $translator->addResource('array', array('bar' => 'bar (fr)'), 'fr');
+        $translator->addResource('array', array('bar_ru' => 'bar (ru)'), 'ru');
+
+        $collector = new DataCollectorTranslator($translator);
+
+        return $collector;
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/CsvFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/CsvFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..29177ff5f59034cb3de5a55cfc1bd39f1d44d1e5
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/CsvFileDumperTest.php
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\CsvFileDumper;
+
+class CsvFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar', 'bar' => 'foo
+foo', 'foo;foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new CsvFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/valid.csv'), file_get_contents($tempDir.'/messages.en.csv'));
+
+        unlink($tempDir.'/messages.en.csv');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/FileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/FileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..96820890922a055ccbc52c986c882f79a3d3dcbe
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/FileDumperTest.php
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\FileDumper;
+
+class FileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDumpBackupsFileIfExisting()
+    {
+        $tempDir = sys_get_temp_dir();
+        $file = $tempDir.'/messages.en.concrete';
+        $backupFile = $file.'~';
+
+        @touch($file);
+
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $dumper = new ConcreteFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertTrue(file_exists($backupFile));
+
+        @unlink($file);
+        @unlink($backupFile);
+    }
+
+    public function testDumpCreatesNestedDirectoriesAndFile()
+    {
+        $tempDir = sys_get_temp_dir();
+        $translationsDir = $tempDir.'/test/translations';
+        $file = $translationsDir.'/messages.en.concrete';
+
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $dumper = new ConcreteFileDumper();
+        $dumper->setRelativePathTemplate('test/translations/%domain%.%locale%.%extension%');
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertTrue(file_exists($file));
+
+        @unlink($file);
+        @rmdir($translationsDir);
+    }
+}
+
+class ConcreteFileDumper extends FileDumper
+{
+    protected function format(MessageCatalogue $messages, $domain)
+    {
+        return '';
+    }
+
+    protected function getExtension()
+    {
+        return 'concrete';
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/IcuResFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/IcuResFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7be7dfbf5de067caee30561fd547e521ba1758c7
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/IcuResFileDumperTest.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\IcuResFileDumper;
+
+class IcuResFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        if (!function_exists('mb_convert_encoding')) {
+            $this->markTestSkipped('This test requires mbstring to work.');
+        }
+
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir().'/IcuResFileDumperTest';
+        $dumper = new IcuResFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resourcebundle/res/en.res'), file_get_contents($tempDir.'/messages/en.res'));
+
+        @unlink($tempDir.'/messages/en.res');
+        @rmdir($tempDir.'/messages');
+        @rmdir($tempDir);
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/IniFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/IniFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a2cefde1ef50205c7f1258374bae5ef9d6e1714
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/IniFileDumperTest.php
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\IniFileDumper;
+
+class IniFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new IniFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.ini'), file_get_contents($tempDir.'/messages.en.ini'));
+
+        unlink($tempDir.'/messages.en.ini');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/JsonFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/JsonFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..697cd939f607ad5ae23ac2b24a7b52d50a7b5519
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/JsonFileDumperTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\JsonFileDumper;
+
+class JsonFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        if (PHP_VERSION_ID < 50400) {
+            $this->markTestIncomplete('PHP below 5.4 doesn\'t support JSON pretty printing');
+        }
+
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new JsonFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.json'), file_get_contents($tempDir.'/messages.en.json'));
+
+        unlink($tempDir.'/messages.en.json');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/MoFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/MoFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..439a25cd222fcff4060ace1225394f8dba075101
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/MoFileDumperTest.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\MoFileDumper;
+
+class MoFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new MoFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.mo'), file_get_contents($tempDir.'/messages.en.mo'));
+
+        unlink($tempDir.'/messages.en.mo');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/PhpFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/PhpFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18be5a0dc48a6fddfad58abfde2c02fd57ec75f3
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/PhpFileDumperTest.php
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\PhpFileDumper;
+
+class PhpFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new PhpFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.php'), file_get_contents($tempDir.'/messages.en.php'));
+
+        unlink($tempDir.'/messages.en.php');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/PoFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/PoFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0296d6b2eaaa1cafd8488a7f2666d79cd3f4ff47
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/PoFileDumperTest.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\PoFileDumper;
+
+class PoFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new PoFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.po'), file_get_contents($tempDir.'/messages.en.po'));
+
+        unlink($tempDir.'/messages.en.po');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/QtFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/QtFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d7d8fb7e469878102be1805ffe65ad204c04cacf
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/QtFileDumperTest.php
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\QtFileDumper;
+
+class QtFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'), 'resources');
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new QtFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.ts'), file_get_contents($tempDir.'/resources.en.ts'));
+
+        unlink($tempDir.'/resources.en.ts');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/XliffFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/XliffFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dff2cc4c94a5bc6c3e58e3c939a7aa6b92185c84
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/XliffFileDumperTest.php
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\XliffFileDumper;
+
+class XliffFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en_US');
+        $catalogue->add(array(
+            'foo' => 'bar',
+            'key' => '',
+            'key.with.cdata' => '<source> & <target>',
+        ));
+        $catalogue->setMetadata('foo', array('notes' => array(array('priority' => 1, 'from' => 'bar', 'content' => 'baz'))));
+        $catalogue->setMetadata('key', array('notes' => array(array('content' => 'baz'), array('content' => 'qux'))));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new XliffFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir, 'default_locale' => 'fr_FR'));
+
+        $this->assertEquals(
+            file_get_contents(__DIR__.'/../fixtures/resources-clean.xlf'),
+            file_get_contents($tempDir.'/messages.en_US.xlf')
+        );
+
+        unlink($tempDir.'/messages.en_US.xlf');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Dumper/YamlFileDumperTest.php b/core/vendor/symfony/translation/Tests/Dumper/YamlFileDumperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c68ade753114ab6aeaa6bf97bfccdef44f530af
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Dumper/YamlFileDumperTest.php
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Dumper;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\YamlFileDumper;
+
+class YamlFileDumperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDump()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->add(array('foo' => 'bar'));
+
+        $tempDir = sys_get_temp_dir();
+        $dumper = new YamlFileDumper();
+        $dumper->dump($catalogue, array('path' => $tempDir));
+
+        $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources.yml'), file_get_contents($tempDir.'/messages.en.yml'));
+
+        unlink($tempDir.'/messages.en.yml');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/IdentityTranslatorTest.php b/core/vendor/symfony/translation/Tests/IdentityTranslatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..352dd318dc73c6d3a3a33ed6410dd67a0203437d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/IdentityTranslatorTest.php
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Intl\Util\IntlTestHelper;
+use Symfony\Component\Translation\IdentityTranslator;
+
+class IdentityTranslatorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getTransTests
+     */
+    public function testTrans($expected, $id, $parameters)
+    {
+        $translator = new IdentityTranslator();
+
+        $this->assertEquals($expected, $translator->trans($id, $parameters));
+    }
+
+    /**
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoiceWithExplicitLocale($expected, $id, $number, $parameters)
+    {
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        $this->assertEquals($expected, $translator->transChoice($id, $number, $parameters));
+    }
+
+    /**
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoiceWithDefaultLocale($expected, $id, $number, $parameters)
+    {
+        \Locale::setDefault('en');
+
+        $translator = new IdentityTranslator();
+
+        $this->assertEquals($expected, $translator->transChoice($id, $number, $parameters));
+    }
+
+    public function testGetSetLocale()
+    {
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        $this->assertEquals('en', $translator->getLocale());
+    }
+
+    public function testGetLocaleReturnsDefaultLocaleIfNotSet()
+    {
+        // in order to test with "pt_BR"
+        IntlTestHelper::requireFullIntl($this);
+
+        $translator = new IdentityTranslator();
+
+        \Locale::setDefault('en');
+        $this->assertEquals('en', $translator->getLocale());
+
+        \Locale::setDefault('pt_BR');
+        $this->assertEquals('pt_BR', $translator->getLocale());
+    }
+
+    public function getTransTests()
+    {
+        return array(
+            array('Symfony is great!', 'Symfony is great!', array()),
+            array('Symfony is awesome!', 'Symfony is %what%!', array('%what%' => 'awesome')),
+        );
+    }
+
+    public function getTransChoiceTests()
+    {
+        return array(
+            array('There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0, array('%count%' => 0)),
+            array('There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1, array('%count%' => 1)),
+            array('There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10, array('%count%' => 10)),
+            array('There are 0 apples', 'There is 1 apple|There are %count% apples', 0, array('%count%' => 0)),
+            array('There is 1 apple', 'There is 1 apple|There are %count% apples', 1, array('%count%' => 1)),
+            array('There are 10 apples', 'There is 1 apple|There are %count% apples', 10, array('%count%' => 10)),
+            // custom validation messages may be coded with a fixed value
+            array('There are 2 apples', 'There are 2 apples', 2, array('%count%' => 2)),
+        );
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/IntervalTest.php b/core/vendor/symfony/translation/Tests/IntervalTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..075c98b768f8e29687af45da345b23b6a3a4fb4e
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/IntervalTest.php
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\Interval;
+
+class IntervalTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getTests
+     */
+    public function testTest($expected, $number, $interval)
+    {
+        $this->assertEquals($expected, Interval::test($number, $interval));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testTestException()
+    {
+        Interval::test(1, 'foobar');
+    }
+
+    public function getTests()
+    {
+        return array(
+            array(true, 3, '{1,2, 3 ,4}'),
+            array(false, 10, '{1,2, 3 ,4}'),
+            array(false, 3, '[1,2]'),
+            array(true, 1, '[1,2]'),
+            array(true, 2, '[1,2]'),
+            array(false, 1, ']1,2['),
+            array(false, 2, ']1,2['),
+            array(true, log(0), '[-Inf,2['),
+            array(true, -log(0), '[-2,+Inf]'),
+        );
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..463d3b50816f6b9f08ff452b3c09b2c4f77a87b1
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\CsvFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class CsvFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new CsvFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.csv';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadDoesNothingIfEmpty()
+    {
+        $loader = new CsvFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.csv';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array(), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new CsvFileLoader();
+        $resource = __DIR__.'/../fixtures/not-exists.csv';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadNonLocalResource()
+    {
+        $loader = new CsvFileLoader();
+        $resource = 'http://example.com/resources.csv';
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea9643d682b3eeddb5c498565528679671b6ad2a
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\IcuDatFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class IcuDatFileLoaderTest extends LocalizedTestCase
+{
+    protected function setUp()
+    {
+        if (!extension_loaded('intl')) {
+            $this->markTestSkipped('This test requires intl extension to work.');
+        }
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadInvalidResource()
+    {
+        $loader = new IcuDatFileLoader();
+        $loader->load(__DIR__.'/../fixtures/resourcebundle/corrupted/resources', 'es', 'domain2');
+    }
+
+    public function testDatEnglishLoad()
+    {
+        // bundled resource is build using pkgdata command which at least in ICU 4.2 comes in extremely! buggy form
+        // you must specify an temporary build directory which is not the same as current directory and
+        // MUST reside on the same partition. pkgdata -p resources -T /srv -d.packagelist.txt
+        $loader = new IcuDatFileLoader();
+        $resource = __DIR__.'/../fixtures/resourcebundle/dat/resources';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('symfony' => 'Symfony 2 is great'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource.'.dat')), $catalogue->getResources());
+    }
+
+    public function testDatFrenchLoad()
+    {
+        $loader = new IcuDatFileLoader();
+        $resource = __DIR__.'/../fixtures/resourcebundle/dat/resources';
+        $catalogue = $loader->load($resource, 'fr', 'domain1');
+
+        $this->assertEquals(array('symfony' => 'Symfony 2 est génial'), $catalogue->all('domain1'));
+        $this->assertEquals('fr', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource.'.dat')), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new IcuDatFileLoader();
+        $loader->load(__DIR__.'/../fixtures/non-existing.txt', 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a935c0404d322c306be43f68449f947cabbdbe5
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\IcuResFileLoader;
+use Symfony\Component\Config\Resource\DirectoryResource;
+
+class IcuResFileLoaderTest extends LocalizedTestCase
+{
+    protected function setUp()
+    {
+        if (!extension_loaded('intl')) {
+            $this->markTestSkipped('This test requires intl extension to work.');
+        }
+    }
+
+    public function testLoad()
+    {
+        // resource is build using genrb command
+        $loader = new IcuResFileLoader();
+        $resource = __DIR__.'/../fixtures/resourcebundle/res';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new DirectoryResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new IcuResFileLoader();
+        $loader->load(__DIR__.'/../fixtures/non-existing.txt', 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadInvalidResource()
+    {
+        $loader = new IcuResFileLoader();
+        $loader->load(__DIR__.'/../fixtures/resourcebundle/corrupted', 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a5de0ed58d69c7bd0fea63050e6f060e373042c
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\IniFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class IniFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new IniFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.ini';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadDoesNothingIfEmpty()
+    {
+        $loader = new IniFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.ini';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array(), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new IniFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.ini';
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d4f353bf7dde2e8dfba585d04245569d9f06287
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\JsonFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class JsonFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!class_exists('Symfony\Component\Config\Loader\Loader')) {
+            $this->markTestSkipped('The "Config" component is not available');
+        }
+    }
+
+    public function testLoad()
+    {
+        $loader = new JsonFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.json';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadDoesNothingIfEmpty()
+    {
+        $loader = new JsonFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.json';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array(), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new JsonFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.json';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException           \Symfony\Component\Translation\Exception\InvalidResourceException
+     * @expectedExceptionMessage    Error parsing JSON - Syntax error, malformed JSON
+     */
+    public function testParseException()
+    {
+        $loader = new JsonFileLoader();
+        $resource = __DIR__.'/../fixtures/malformed.json';
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/LocalizedTestCase.php b/core/vendor/symfony/translation/Tests/Loader/LocalizedTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d7c5d70e826319c6d3fc4f3a64ff5ec1e9fd8f1
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/LocalizedTestCase.php
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+abstract class LocalizedTestCase extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!extension_loaded('intl')) {
+            $this->markTestSkipped('The "intl" extension is not available');
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..34078d0a9e48c251e5d6e1b92262a8975a163a70
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\MoFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class MoFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new MoFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.mo';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadPlurals()
+    {
+        $loader = new MoFileLoader();
+        $resource = __DIR__.'/../fixtures/plurals.mo';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar', 'foos' => '{0} bar|{1} bars'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new MoFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.mo';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadInvalidResource()
+    {
+        $loader = new MoFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.mo';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    public function testLoadEmptyTranslation()
+    {
+        $loader = new MoFileLoader();
+        $resource = __DIR__.'/../fixtures/empty-translation.mo';
+        $catalogue = $loader->load($resource, 'en', 'message');
+
+        $this->assertEquals(array(), $catalogue->all('message'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0816b0f8549d19d839e201fce69963d346b9f00a
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\PhpFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class PhpFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new PhpFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.php';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new PhpFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.php';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadThrowsAnExceptionIfFileNotLocal()
+    {
+        $loader = new PhpFileLoader();
+        $resource = 'http://example.com/resources.php';
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..87090eb7369227c82a338a05903065177dc97d98
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\PoFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class PoFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadPlurals()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/plurals.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar', 'foos' => 'bar|bars'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadDoesNothingIfEmpty()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array(), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.po';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    public function testLoadEmptyTranslation()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/empty-translation.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => ''), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testEscapedId()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/escaped-id.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $messages = $catalogue->all('domain1');
+        $this->assertArrayHasKey('escaped "foo"', $messages);
+        $this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
+    }
+
+    public function testEscapedIdPlurals()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/escaped-id-plurals.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $messages = $catalogue->all('domain1');
+        $this->assertArrayHasKey('escaped "foo"', $messages);
+        $this->assertArrayHasKey('escaped "foos"', $messages);
+        $this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
+        $this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foos"']);
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3aca86a53ed64ac297c490a7d01da459966cbbbe
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\QtFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class QtFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new QtFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.ts';
+        $catalogue = $loader->load($resource, 'en', 'resources');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('resources'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new QtFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.ts';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadNonLocalResource()
+    {
+        $loader = new QtFileLoader();
+        $resource = 'http://domain1.com/resources.ts';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadInvalidResource()
+    {
+        $loader = new QtFileLoader();
+        $resource = __DIR__.'/../fixtures/invalid-xml-resources.xlf';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    public function testLoadEmptyResource()
+    {
+        $loader = new QtFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.xlf';
+        $this->setExpectedException('Symfony\Component\Translation\Exception\InvalidResourceException', sprintf('Unable to load "%s".', $resource));
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3d65b493202e875268ef34ee999e8c224fdc54d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php
@@ -0,0 +1,142 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\XliffFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class XliffFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new XliffFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.xlf';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+        $this->assertSame(array(), libxml_get_errors());
+    }
+
+    public function testLoadWithInternalErrorsEnabled()
+    {
+        libxml_use_internal_errors(true);
+
+        $this->assertSame(array(), libxml_get_errors());
+
+        $loader = new XliffFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.xlf';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+        $this->assertSame(array(), libxml_get_errors());
+    }
+
+    public function testLoadWithResname()
+    {
+        $loader = new XliffFileLoader();
+        $catalogue = $loader->load(__DIR__.'/../fixtures/resname.xlf', 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz', 'baz' => 'foo'), $catalogue->all('domain1'));
+    }
+
+    public function testIncompleteResource()
+    {
+        $loader = new XliffFileLoader();
+        $catalogue = $loader->load(__DIR__.'/../fixtures/resources.xlf', 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar', 'key' => '', 'test' => 'with'), $catalogue->all('domain1'));
+        $this->assertFalse($catalogue->has('extra', 'domain1'));
+    }
+
+    public function testEncoding()
+    {
+        if (!function_exists('iconv') && !function_exists('mb_convert_encoding')) {
+            $this->markTestSkipped('The iconv and mbstring extensions are not available.');
+        }
+
+        $loader = new XliffFileLoader();
+        $catalogue = $loader->load(__DIR__.'/../fixtures/encoding.xlf', 'en', 'domain1');
+
+        $this->assertEquals(utf8_decode('föö'), $catalogue->get('bar', 'domain1'));
+        $this->assertEquals(utf8_decode('bär'), $catalogue->get('foo', 'domain1'));
+        $this->assertEquals(array('notes' => array(array('content' => utf8_decode('bäz')))), $catalogue->getMetadata('foo', 'domain1'));
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadInvalidResource()
+    {
+        $loader = new XliffFileLoader();
+        $loader->load(__DIR__.'/../fixtures/resources.php', 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadResourceDoesNotValidate()
+    {
+        $loader = new XliffFileLoader();
+        $loader->load(__DIR__.'/../fixtures/non-valid.xlf', 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new XliffFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.xlf';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadThrowsAnExceptionIfFileNotLocal()
+    {
+        $loader = new XliffFileLoader();
+        $resource = 'http://example.com/resources.xlf';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException        \Symfony\Component\Translation\Exception\InvalidResourceException
+     * @expectedExceptionMessage Document types are not allowed.
+     */
+    public function testDocTypeIsNotAllowed()
+    {
+        $loader = new XliffFileLoader();
+        $loader->load(__DIR__.'/../fixtures/withdoctype.xlf', 'en', 'domain1');
+    }
+
+    public function testParseEmptyFile()
+    {
+        $loader = new XliffFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.xlf';
+        $this->setExpectedException('Symfony\Component\Translation\Exception\InvalidResourceException', sprintf('Unable to load "%s":', $resource));
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    public function testLoadNotes()
+    {
+        $loader = new XliffFileLoader();
+        $catalogue = $loader->load(__DIR__.'/../fixtures/withnote.xlf', 'en', 'domain1');
+
+        $this->assertEquals(array('notes' => array(array('priority' => 1, 'content' => 'foo'))), $catalogue->getMetadata('foo', 'domain1'));
+        // message without target
+        $this->assertNull($catalogue->getMetadata('extra', 'domain1'));
+        $this->assertEquals(array('notes' => array(array('content' => 'baz'), array('priority' => 2, 'from' => 'bar', 'content' => 'qux'))), $catalogue->getMetadata('key', 'domain1'));
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..00f7163468d557e7dbeee413b30b019e21392d6c
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests\Loader;
+
+use Symfony\Component\Translation\Loader\YamlFileLoader;
+use Symfony\Component\Config\Resource\FileResource;
+
+class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLoad()
+    {
+        $loader = new YamlFileLoader();
+        $resource = __DIR__.'/../fixtures/resources.yml';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array('foo' => 'bar'), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    public function testLoadDoesNothingIfEmpty()
+    {
+        $loader = new YamlFileLoader();
+        $resource = __DIR__.'/../fixtures/empty.yml';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals(array(), $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+        $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testLoadNonExistingResource()
+    {
+        $loader = new YamlFileLoader();
+        $resource = __DIR__.'/../fixtures/non-existing.yml';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadThrowsAnExceptionIfFileNotLocal()
+    {
+        $loader = new YamlFileLoader();
+        $resource = 'http://example.com/resources.yml';
+        $loader->load($resource, 'en', 'domain1');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
+     */
+    public function testLoadThrowsAnExceptionIfNotAnArray()
+    {
+        $loader = new YamlFileLoader();
+        $resource = __DIR__.'/../fixtures/non-valid.yml';
+        $loader->load($resource, 'en', 'domain1');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/LoggingTranslatorTest.php b/core/vendor/symfony/translation/Tests/LoggingTranslatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab98d72e7425c78a3803129e5872e532eeb36b2d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/LoggingTranslatorTest.php
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\Translator;
+use Symfony\Component\Translation\LoggingTranslator;
+use Symfony\Component\Translation\Loader\ArrayLoader;
+
+class LoggingTranslatorTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!interface_exists('Psr\Log\LoggerInterface')) {
+            $this->markTestSkipped('The "LoggerInterface" is not available');
+        }
+    }
+
+    public function testTransWithNoTranslationIsLogged()
+    {
+        $logger = $this->getMock('Psr\Log\LoggerInterface');
+        $logger->expects($this->exactly(2))
+            ->method('warning')
+            ->with('Translation not found.')
+        ;
+
+        $translator = new Translator('ar');
+        $loggableTranslator = new LoggingTranslator($translator, $logger);
+        $loggableTranslator->transChoice('some_message2', 10, array('%count%' => 10));
+        $loggableTranslator->trans('bar');
+    }
+
+    public function testTransChoiceFallbackIsLogged()
+    {
+        $logger = $this->getMock('Psr\Log\LoggerInterface');
+        $logger->expects($this->once())
+            ->method('debug')
+            ->with('Translation use fallback catalogue.')
+        ;
+
+        $translator = new Translator('ar');
+        $translator->setFallbackLocales(array('en'));
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('some_message2' => 'one thing|%count% things'), 'en');
+        $loggableTranslator = new LoggingTranslator($translator, $logger);
+        $loggableTranslator->transChoice('some_message2', 10, array('%count%' => 10));
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/MessageCatalogueTest.php b/core/vendor/symfony/translation/Tests/MessageCatalogueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d956553d98c630ef42a630c41cf48c37ab2f07e
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/MessageCatalogueTest.php
@@ -0,0 +1,200 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+class MessageCatalogueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetLocale()
+    {
+        $catalogue = new MessageCatalogue('en');
+
+        $this->assertEquals('en', $catalogue->getLocale());
+    }
+
+    public function testGetDomains()
+    {
+        $catalogue = new MessageCatalogue('en', array('domain1' => array(), 'domain2' => array()));
+
+        $this->assertEquals(array('domain1', 'domain2'), $catalogue->getDomains());
+    }
+
+    public function testAll()
+    {
+        $catalogue = new MessageCatalogue('en', $messages = array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+
+        $this->assertEquals(array('foo' => 'foo'), $catalogue->all('domain1'));
+        $this->assertEquals(array(), $catalogue->all('domain88'));
+        $this->assertEquals($messages, $catalogue->all());
+    }
+
+    public function testHas()
+    {
+        $catalogue = new MessageCatalogue('en', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+
+        $this->assertTrue($catalogue->has('foo', 'domain1'));
+        $this->assertFalse($catalogue->has('bar', 'domain1'));
+        $this->assertFalse($catalogue->has('foo', 'domain88'));
+    }
+
+    public function testGetSet()
+    {
+        $catalogue = new MessageCatalogue('en', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+        $catalogue->set('foo1', 'foo1', 'domain1');
+
+        $this->assertEquals('foo', $catalogue->get('foo', 'domain1'));
+        $this->assertEquals('foo1', $catalogue->get('foo1', 'domain1'));
+    }
+
+    public function testAdd()
+    {
+        $catalogue = new MessageCatalogue('en', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+        $catalogue->add(array('foo1' => 'foo1'), 'domain1');
+
+        $this->assertEquals('foo', $catalogue->get('foo', 'domain1'));
+        $this->assertEquals('foo1', $catalogue->get('foo1', 'domain1'));
+
+        $catalogue->add(array('foo' => 'bar'), 'domain1');
+        $this->assertEquals('bar', $catalogue->get('foo', 'domain1'));
+        $this->assertEquals('foo1', $catalogue->get('foo1', 'domain1'));
+
+        $catalogue->add(array('foo' => 'bar'), 'domain88');
+        $this->assertEquals('bar', $catalogue->get('foo', 'domain88'));
+    }
+
+    public function testReplace()
+    {
+        $catalogue = new MessageCatalogue('en', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+        $catalogue->replace($messages = array('foo1' => 'foo1'), 'domain1');
+
+        $this->assertEquals($messages, $catalogue->all('domain1'));
+    }
+
+    public function testAddCatalogue()
+    {
+        $r = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r->expects($this->any())->method('__toString')->will($this->returnValue('r'));
+
+        $r1 = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r1->expects($this->any())->method('__toString')->will($this->returnValue('r1'));
+
+        $catalogue = new MessageCatalogue('en', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+        $catalogue->addResource($r);
+
+        $catalogue1 = new MessageCatalogue('en', array('domain1' => array('foo1' => 'foo1')));
+        $catalogue1->addResource($r1);
+
+        $catalogue->addCatalogue($catalogue1);
+
+        $this->assertEquals('foo', $catalogue->get('foo', 'domain1'));
+        $this->assertEquals('foo1', $catalogue->get('foo1', 'domain1'));
+
+        $this->assertEquals(array($r, $r1), $catalogue->getResources());
+    }
+
+    public function testAddFallbackCatalogue()
+    {
+        $r = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r->expects($this->any())->method('__toString')->will($this->returnValue('r'));
+
+        $r1 = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r1->expects($this->any())->method('__toString')->will($this->returnValue('r1'));
+
+        $catalogue = new MessageCatalogue('en_US', array('domain1' => array('foo' => 'foo'), 'domain2' => array('bar' => 'bar')));
+        $catalogue->addResource($r);
+
+        $catalogue1 = new MessageCatalogue('en', array('domain1' => array('foo' => 'bar', 'foo1' => 'foo1')));
+        $catalogue1->addResource($r1);
+
+        $catalogue->addFallbackCatalogue($catalogue1);
+
+        $this->assertEquals('foo', $catalogue->get('foo', 'domain1'));
+        $this->assertEquals('foo1', $catalogue->get('foo1', 'domain1'));
+
+        $this->assertEquals(array($r, $r1), $catalogue->getResources());
+    }
+
+    /**
+     * @expectedException \LogicException
+     */
+    public function testAddFallbackCatalogueWithCircularReference()
+    {
+        $main = new MessageCatalogue('en_US');
+        $fallback = new MessageCatalogue('fr_FR');
+
+        $fallback->addFallbackCatalogue($main);
+        $main->addFallbackCatalogue($fallback);
+    }
+
+    /**
+     * @expectedException \LogicException
+     */
+    public function testAddCatalogueWhenLocaleIsNotTheSameAsTheCurrentOne()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->addCatalogue(new MessageCatalogue('fr', array()));
+    }
+
+    public function testGetAddResource()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $r = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r->expects($this->any())->method('__toString')->will($this->returnValue('r'));
+        $catalogue->addResource($r);
+        $catalogue->addResource($r);
+        $r1 = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $r1->expects($this->any())->method('__toString')->will($this->returnValue('r1'));
+        $catalogue->addResource($r1);
+
+        $this->assertEquals(array($r, $r1), $catalogue->getResources());
+    }
+
+    public function testMetadataDelete()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $this->assertEquals(array(), $catalogue->getMetadata('', ''), 'Metadata is empty');
+        $catalogue->deleteMetadata('key', 'messages');
+        $catalogue->deleteMetadata('', 'messages');
+        $catalogue->deleteMetadata();
+    }
+
+    public function testMetadataSetGetDelete()
+    {
+        $catalogue = new MessageCatalogue('en');
+        $catalogue->setMetadata('key', 'value');
+        $this->assertEquals('value', $catalogue->getMetadata('key', 'messages'), "Metadata 'key' = 'value'");
+
+        $catalogue->setMetadata('key2', array());
+        $this->assertEquals(array(), $catalogue->getMetadata('key2', 'messages'), 'Metadata key2 is array');
+
+        $catalogue->deleteMetadata('key2', 'messages');
+        $this->assertEquals(null, $catalogue->getMetadata('key2', 'messages'), 'Metadata key2 should is deleted.');
+
+        $catalogue->deleteMetadata('key2', 'domain');
+        $this->assertEquals(null, $catalogue->getMetadata('key2', 'domain'), 'Metadata key2 should is deleted.');
+    }
+
+    public function testMetadataMerge()
+    {
+        $cat1 = new MessageCatalogue('en');
+        $cat1->setMetadata('a', 'b');
+        $this->assertEquals(array('messages' => array('a' => 'b')), $cat1->getMetadata('', ''), 'Cat1 contains messages metadata.');
+
+        $cat2 = new MessageCatalogue('en');
+        $cat2->setMetadata('b', 'c', 'domain');
+        $this->assertEquals(array('domain' => array('b' => 'c')), $cat2->getMetadata('', ''), 'Cat2 contains domain metadata.');
+
+        $cat1->addCatalogue($cat2);
+        $this->assertEquals(array('messages' => array('a' => 'b'), 'domain' => array('b' => 'c')), $cat1->getMetadata('', ''), 'Cat1 contains merged metadata.');
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/MessageSelectorTest.php b/core/vendor/symfony/translation/Tests/MessageSelectorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5a4f3e3d536abe02875c3764f5e7d5f7f20c5df
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/MessageSelectorTest.php
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\MessageSelector;
+
+class MessageSelectorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getChooseTests
+     */
+    public function testChoose($expected, $id, $number)
+    {
+        $selector = new MessageSelector();
+
+        $this->assertEquals($expected, $selector->choose($id, $number, 'en'));
+    }
+
+    public function testReturnMessageIfExactlyOneStandardRuleIsGiven()
+    {
+        $selector = new MessageSelector();
+
+        $this->assertEquals('There are two apples', $selector->choose('There are two apples', 2, 'en'));
+    }
+
+    /**
+     * @dataProvider getNonMatchingMessages
+     * @expectedException \InvalidArgumentException
+     */
+    public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number)
+    {
+        $selector = new MessageSelector();
+
+        $selector->choose($id, $number, 'en');
+    }
+
+    public function getNonMatchingMessages()
+    {
+        return array(
+            array('{0} There are no apples|{1} There is one apple', 2),
+            array('{1} There is one apple|]1,Inf] There are %count% apples', 0),
+            array('{1} There is one apple|]2,Inf] There are %count% apples', 2),
+            array('{0} There are no apples|There is one apple', 2),
+        );
+    }
+
+    public function getChooseTests()
+    {
+        return array(
+            array('There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0),
+            array('There are no apples', '{0}     There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0),
+            array('There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0),
+
+            array('There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1),
+
+            array('There are %count% apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10),
+            array('There are %count% apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10),
+            array('There are %count% apples', '{0} There are no apples|{1} There is one apple|]1,Inf]     There are %count% apples', 10),
+
+            array('There are %count% apples', 'There is one apple|There are %count% apples', 0),
+            array('There is one apple', 'There is one apple|There are %count% apples', 1),
+            array('There are %count% apples', 'There is one apple|There are %count% apples', 10),
+
+            array('There are %count% apples', 'one: There is one apple|more: There are %count% apples', 0),
+            array('There is one apple', 'one: There is one apple|more: There are %count% apples', 1),
+            array('There are %count% apples', 'one: There is one apple|more: There are %count% apples', 10),
+
+            array('There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0),
+            array('There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1),
+            array('There are %count% apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10),
+
+            array('', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0),
+            array('', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1),
+
+            // Indexed only tests which are Gettext PoFile* compatible strings.
+            array('There are %count% apples', 'There is one apple|There are %count% apples', 0),
+            array('There is one apple', 'There is one apple|There are %count% apples', 1),
+            array('There are %count% apples', 'There is one apple|There are %count% apples', 2),
+
+            // Tests for float numbers
+            array('There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7),
+            array('There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1),
+            array('There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7),
+            array('There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0),
+            array('There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0),
+            array('There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0),
+        );
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/PluralizationRulesTest.php b/core/vendor/symfony/translation/Tests/PluralizationRulesTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e8ee704fa95320fddf63d410ba15d82e51487b4
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/PluralizationRulesTest.php
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\PluralizationRules;
+
+/**
+ * Test should cover all languages mentioned on http://translate.sourceforge.net/wiki/l10n/pluralforms
+ * and Plural forms mentioned on http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms.
+ *
+ * See also https://developer.mozilla.org/en/Localization_and_Plurals which mentions 15 rules having a maximum of 6 forms.
+ * The mozilla code is also interesting to check for.
+ *
+ * As mentioned by chx http://drupal.org/node/1273968 we can cover all by testing number from 0 to 199
+ *
+ * The goal to cover all languages is to far fetched so this test case is smaller.
+ *
+ * @author Clemens Tolboom clemens@build2be.nl
+ */
+class PluralizationRulesTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * We test failed langcode here.
+     *
+     * TODO: The languages mentioned in the data provide need to get fixed somehow within PluralizationRules.
+     *
+     * @dataProvider failingLangcodes
+     */
+    public function testFailedLangcodes($nplural, $langCodes)
+    {
+        $matrix = $this->generateTestData($nplural, $langCodes);
+        $this->validateMatrix($nplural, $matrix, false);
+    }
+
+    /**
+     * @dataProvider successLangcodes
+     */
+    public function testLangcodes($nplural, $langCodes)
+    {
+        $matrix = $this->generateTestData($nplural, $langCodes);
+        $this->validateMatrix($nplural, $matrix);
+    }
+
+    /**
+     * This array should contain all currently known langcodes.
+     *
+     * As it is impossible to have this ever complete we should try as hard as possible to have it almost complete.
+     *
+     * @return array
+     */
+    public function successLangcodes()
+    {
+        return array(
+            array('1', array('ay','bo', 'cgg','dz','id', 'ja', 'jbo', 'ka','kk','km','ko','ky')),
+            array('2', array('nl', 'fr', 'en', 'de', 'de_GE')),
+            array('3', array('be','bs','cs','hr')),
+            array('4', array('cy','mt', 'sl')),
+            array('5', array()),
+            array('6', array('ar')),
+        );
+    }
+
+    /**
+     * This array should be at least empty within the near future.
+     *
+     * This both depends on a complete list trying to add above as understanding
+     * the plural rules of the current failing languages.
+     *
+     * @return array with nplural together with langcodes
+     */
+    public function failingLangcodes()
+    {
+        return array(
+            array('1', array('fa')),
+            array('2', array('jbo')),
+            array('3', array('cbs')),
+            array('4', array('gd','kw')),
+            array('5', array('ga')),
+            array('6', array()),
+        );
+    }
+
+    /**
+     * We validate only on the plural coverage. Thus the real rules is not tested.
+     *
+     * @param string $nplural       plural expected
+     * @param array  $matrix        containing langcodes and their plural index values.
+     * @param bool   $expectSuccess
+     */
+    protected function validateMatrix($nplural, $matrix, $expectSuccess = true)
+    {
+        foreach ($matrix as $langCode => $data) {
+            $indexes = array_flip($data);
+            if ($expectSuccess) {
+                $this->assertEquals($nplural, count($indexes), "Langcode '$langCode' has '$nplural' plural forms.");
+            } else {
+                $this->assertNotEquals((int) $nplural, count($indexes), "Langcode '$langCode' has '$nplural' plural forms.");
+            }
+        }
+    }
+
+    protected function generateTestData($plural, $langCodes)
+    {
+        $matrix = array();
+        foreach ($langCodes as $langCode) {
+            for ($count = 0; $count < 200; $count++) {
+                $plural = PluralizationRules::get($count, $langCode);
+                $matrix[$langCode][$count] = $plural;
+            }
+        }
+
+        return $matrix;
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php b/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5d4639984ce5c9bbc135069c4bd3ddb36fa14f4
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php
@@ -0,0 +1,360 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Config\Resource\ResourceInterface;
+use Symfony\Component\Translation\Loader\ArrayLoader;
+use Symfony\Component\Translation\Loader\LoaderInterface;
+use Symfony\Component\Translation\Translator;
+use Symfony\Component\Translation\MessageCatalogue;
+
+class TranslatorCacheTest extends \PHPUnit_Framework_TestCase
+{
+    protected $tmpDir;
+
+    protected function setUp()
+    {
+        $this->tmpDir = sys_get_temp_dir().'/sf2_translation';
+        $this->deleteTmpDir();
+    }
+
+    protected function tearDown()
+    {
+        $this->deleteTmpDir();
+    }
+
+    protected function deleteTmpDir()
+    {
+        if (!file_exists($dir = $this->tmpDir)) {
+            return;
+        }
+
+        $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->tmpDir), \RecursiveIteratorIterator::CHILD_FIRST);
+        foreach ($iterator as $path) {
+            if (preg_match('#[/\\\\]\.\.?$#', $path->__toString())) {
+                continue;
+            }
+            if ($path->isDir()) {
+                rmdir($path->__toString());
+            } else {
+                unlink($path->__toString());
+            }
+        }
+        rmdir($this->tmpDir);
+    }
+
+    /**
+     * @dataProvider runForDebugAndProduction
+     */
+    public function testThatACacheIsUsed($debug)
+    {
+        $locale = 'any_locale';
+        $format = 'some_format';
+        $msgid = 'test';
+
+        // Prime the cache
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+        $translator->trans($msgid);
+
+        // Try again and see we get a valid result whilst no loader can be used
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, $this->createFailingLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+        $this->assertEquals('OK', $translator->trans($msgid), '-> caching does not work in '.($debug ? 'debug' : 'production'));
+    }
+
+    public function testRefreshCacheWhenResourcesChange()
+    {
+        // prime the cache
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->method('load')
+            ->will($this->returnValue($this->getCatalogue('fr', array(
+                'foo' => 'foo A',
+            ))))
+        ;
+
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->setLocale('fr');
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'foo', 'fr');
+
+        $this->assertEquals('foo A', $translator->trans('foo'));
+
+        // add a new resource to refresh the cache
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->method('load')
+            ->will($this->returnValue($this->getCatalogue('fr', array(
+                'foo' => 'foo B',
+            ))))
+        ;
+
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->setLocale('fr');
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'bar', 'fr');
+
+        $this->assertEquals('foo B', $translator->trans('foo'));
+    }
+
+    public function testCatalogueIsReloadedWhenResourcesAreNoLongerFresh()
+    {
+        /*
+         * The testThatACacheIsUsed() test showed that we don't need the loader as long as the cache
+         * is fresh.
+         *
+         * Now we add a Resource that is never fresh and make sure that the
+         * cache is discarded (the loader is called twice).
+         *
+         * We need to run this for debug=true only because in production the cache
+         * will never be revalidated.
+         */
+
+        $locale = 'any_locale';
+        $format = 'some_format';
+        $msgid = 'test';
+
+        $catalogue = new MessageCatalogue($locale, array());
+        $catalogue->addResource(new StaleResource()); // better use a helper class than a mock, because it gets serialized in the cache and re-loaded
+
+        /** @var LoaderInterface|\PHPUnit_Framework_MockObject_MockObject $loader */
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->expects($this->exactly(2))
+            ->method('load')
+            ->will($this->returnValue($catalogue))
+        ;
+
+        // 1st pass
+        $translator = new Translator($locale, null, $this->tmpDir, true);
+        $translator->addLoader($format, $loader);
+        $translator->addResource($format, null, $locale);
+        $translator->trans($msgid);
+
+        // 2nd pass
+        $translator = new Translator($locale, null, $this->tmpDir, true);
+        $translator->addLoader($format, $loader);
+        $translator->addResource($format, null, $locale);
+        $translator->trans($msgid);
+    }
+
+    /**
+     * @dataProvider runForDebugAndProduction
+     */
+    public function testDifferentTranslatorsForSameLocaleDoNotInterfere($debug)
+    {
+        $locale = 'any_locale';
+        $format = 'some_format';
+        $msgid = 'test';
+
+        // Create a Translator and prime its cache
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'FAIL'), $locale);
+        $translator->trans($msgid);
+
+        /*
+         * Create another Translator with the same locale but a different resource.
+         * It should not use the first translator's cache but return the value from its own resource.
+         */
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+
+        $this->assertEquals('OK', $translator->trans($msgid), '-> different translators for the same domain interfere in '.($debug ? 'debug' : 'production'));
+    }
+
+    /**
+     * @dataProvider runForDebugAndProduction
+     */
+    public function testDifferentTranslatorsForSameLocaleDoNotOverwriteEachOthersCache($debug)
+    {
+        /*
+         * Similar to the previous test. After we used the second translator, make
+         * sure there's still a useable cache for the first one.
+         */
+
+        $locale = 'any_locale';
+        $format = 'some_format';
+        $msgid = 'test';
+
+        // Create a Translator and prime its cache
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+        $translator->trans($msgid);
+
+        // Create another Translator with a different catalogue for the same locale
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'FAIL'), $locale);
+        $translator->trans($msgid);
+
+        // Now the first translator must still have a useable cache.
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, $this->createFailingLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+        $this->assertEquals('OK', $translator->trans($msgid), '-> the cache was overwritten by another translator instance in '.($debug ? 'debug' : 'production'));
+    }
+
+    public function testDifferentCacheFilesAreUsedForDifferentSetsOfFallbackLocales()
+    {
+        /*
+         * Because the cache file contains a catalogue including all of its fallback
+         * catalogues, we must take the set of fallback locales into consideration when
+         * loading a catalogue from the cache.
+         */
+        $translator = new Translator('a', null, $this->tmpDir);
+        $translator->setFallbackLocales(array('b'));
+
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (a)'), 'a');
+        $translator->addResource('array', array('bar' => 'bar (b)'), 'b');
+
+        $this->assertEquals('bar (b)', $translator->trans('bar'));
+
+        // Remove fallback locale
+        $translator->setFallbackLocales(array());
+        $this->assertEquals('bar', $translator->trans('bar'));
+
+        // Use a fresh translator with no fallback locales, result should be the same
+        $translator = new Translator('a', null, $this->tmpDir);
+
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (a)'), 'a');
+        $translator->addResource('array', array('bar' => 'bar (b)'), 'b');
+
+        $this->assertEquals('bar', $translator->trans('bar'));
+    }
+
+    public function testPrimaryAndFallbackCataloguesContainTheSameMessagesRegardlessOfCaching()
+    {
+        /*
+         * As a safeguard against potential BC breaks, make sure that primary and fallback
+         * catalogues (reachable via getFallbackCatalogue()) always contain the full set of
+         * messages provided by the loader. This must also be the case when these catalogues
+         * are (internally) read from a cache.
+         *
+         * Optimizations inside the translator must not change this behaviour.
+         */
+
+        /*
+         * Create a translator that loads two catalogues for two different locales.
+         * The catalogues contain distinct sets of messages.
+         */
+        $translator = new Translator('a', null, $this->tmpDir);
+        $translator->setFallbackLocales(array('b'));
+
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (a)'), 'a');
+        $translator->addResource('array', array('foo' => 'foo (b)'), 'b');
+        $translator->addResource('array', array('bar' => 'bar (b)'), 'b');
+
+        $catalogue = $translator->getCatalogue('a');
+        $this->assertFalse($catalogue->defines('bar')); // Sure, the "a" catalogue does not contain that message.
+
+        $fallback = $catalogue->getFallbackCatalogue();
+        $this->assertTrue($fallback->defines('foo')); // "foo" is present in "a" and "b"
+
+        /*
+         * Now, repeat the same test.
+         * Behind the scenes, the cache is used. But that should not matter, right?
+         */
+        $translator = new Translator('a', null, $this->tmpDir);
+        $translator->setFallbackLocales(array('b'));
+
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (a)'), 'a');
+        $translator->addResource('array', array('foo' => 'foo (b)'), 'b');
+        $translator->addResource('array', array('bar' => 'bar (b)'), 'b');
+
+        $catalogue = $translator->getCatalogue('a');
+        $this->assertFalse($catalogue->defines('bar'));
+
+        $fallback = $catalogue->getFallbackCatalogue();
+        $this->assertTrue($fallback->defines('foo'));
+    }
+
+    public function testRefreshCacheWhenResourcesAreNoLongerFresh()
+    {
+        $resource = $this->getMock('Symfony\Component\Config\Resource\ResourceInterface');
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $resource->method('isFresh')->will($this->returnValue(false));
+        $loader
+            ->expects($this->exactly(2))
+            ->method('load')
+            ->will($this->returnValue($this->getCatalogue('fr', array(), array($resource))));
+
+        // prime the cache
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'foo', 'fr');
+        $translator->trans('foo');
+
+        // prime the cache second time
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'foo', 'fr');
+        $translator->trans('foo');
+    }
+
+    protected function getCatalogue($locale, $messages, $resources = array())
+    {
+        $catalogue = new MessageCatalogue($locale);
+        foreach ($messages as $key => $translation) {
+            $catalogue->set($key, $translation);
+        }
+        foreach ($resources as $resource) {
+            $catalogue->addResource($resource);
+        }
+
+        return $catalogue;
+    }
+
+    public function runForDebugAndProduction()
+    {
+        return array(array(true), array(false));
+    }
+
+    /**
+     * @return LoaderInterface
+     */
+    private function createFailingLoader()
+    {
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->expects($this->never())
+            ->method('load');
+
+        return $loader;
+    }
+}
+
+class StaleResource implements ResourceInterface
+{
+    public function isFresh($timestamp)
+    {
+        return false;
+    }
+
+    public function getResource()
+    {
+    }
+
+    public function __toString()
+    {
+        return '';
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/TranslatorTest.php b/core/vendor/symfony/translation/Tests/TranslatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ee9be019dd25109328f0050100888510e8958cd
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/TranslatorTest.php
@@ -0,0 +1,627 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Tests;
+
+use Symfony\Component\Translation\Translator;
+use Symfony\Component\Translation\MessageSelector;
+use Symfony\Component\Translation\Loader\ArrayLoader;
+use Symfony\Component\Translation\MessageCatalogue;
+
+class TranslatorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testConstructorInvalidLocale($locale)
+    {
+        $translator = new Translator($locale, new MessageSelector());
+    }
+
+    /**
+     * @dataProvider getValidLocalesTests
+     */
+    public function testConstructorValidLocale($locale)
+    {
+        $translator = new Translator($locale, new MessageSelector());
+
+        $this->assertEquals($locale, $translator->getLocale());
+    }
+
+    public function testConstructorWithoutLocale()
+    {
+        $translator = new Translator(null, new MessageSelector());
+
+        $this->assertNull($translator->getLocale());
+    }
+
+    public function testSetGetLocale()
+    {
+        $translator = new Translator('en');
+
+        $this->assertEquals('en', $translator->getLocale());
+
+        $translator->setLocale('fr');
+        $this->assertEquals('fr', $translator->getLocale());
+    }
+
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testSetInvalidLocale($locale)
+    {
+        $translator = new Translator('fr', new MessageSelector());
+        $translator->setLocale($locale);
+    }
+
+    /**
+     * @dataProvider getValidLocalesTests
+     */
+    public function testSetValidLocale($locale)
+    {
+        $translator = new Translator($locale, new MessageSelector());
+        $translator->setLocale($locale);
+
+        $this->assertEquals($locale, $translator->getLocale());
+    }
+
+    public function testGetCatalogue()
+    {
+        $translator = new Translator('en');
+
+        $this->assertEquals(new MessageCatalogue('en'), $translator->getCatalogue());
+
+        $translator->setLocale('fr');
+        $this->assertEquals(new MessageCatalogue('fr'), $translator->getCatalogue('fr'));
+    }
+
+    public function testGetCatalogueReturnsConsolidatedCatalogue()
+    {
+        /*
+         * This will be useful once we refactor so that different domains will be loaded lazily (on-demand).
+         * In that case, getCatalogue() will probably have to load all missing domains in order to return
+         * one complete catalogue.
+         */
+
+        $locale = 'whatever';
+        $translator = new Translator($locale);
+        $translator->addLoader('loader-a', new ArrayLoader());
+        $translator->addLoader('loader-b', new ArrayLoader());
+        $translator->addResource('loader-a', array('foo' => 'foofoo'), $locale, 'domain-a');
+        $translator->addResource('loader-b', array('bar' => 'foobar'), $locale, 'domain-b');
+
+        /*
+         * Test that we get a single catalogue comprising messages
+         * from different loaders and different domains
+         */
+        $catalogue = $translator->getCatalogue($locale);
+        $this->assertTrue($catalogue->defines('foo', 'domain-a'));
+        $this->assertTrue($catalogue->defines('bar', 'domain-b'));
+    }
+
+    public function testSetFallbackLocales()
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+        $translator->addResource('array', array('bar' => 'foobar'), 'fr');
+
+        // force catalogue loading
+        $translator->trans('bar');
+
+        $translator->setFallbackLocales(array('fr'));
+        $this->assertEquals('foobar', $translator->trans('bar'));
+    }
+
+    public function testSetFallbackLocalesMultiple()
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (en)'), 'en');
+        $translator->addResource('array', array('bar' => 'bar (fr)'), 'fr');
+
+        // force catalogue loading
+        $translator->trans('bar');
+
+        $translator->setFallbackLocales(array('fr_FR', 'fr'));
+        $this->assertEquals('bar (fr)', $translator->trans('bar'));
+    }
+
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testSetFallbackInvalidLocales($locale)
+    {
+        $translator = new Translator('fr', new MessageSelector());
+        $translator->setFallbackLocales(array('fr', $locale));
+    }
+
+    /**
+     * @dataProvider getValidLocalesTests
+     */
+    public function testSetFallbackValidLocales($locale)
+    {
+        $translator = new Translator($locale, new MessageSelector());
+        $translator->setFallbackLocales(array('fr', $locale));
+        // no assertion. this method just asserts that no exception is thrown
+    }
+
+    public function testTransWithFallbackLocale()
+    {
+        $translator = new Translator('fr_FR');
+        $translator->setFallbackLocales(array('en'));
+
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('bar' => 'foobar'), 'en');
+
+        $this->assertEquals('foobar', $translator->trans('bar'));
+    }
+
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testAddResourceInvalidLocales($locale)
+    {
+        $translator = new Translator('fr', new MessageSelector());
+        $translator->addResource('array', array('foo' => 'foofoo'), $locale);
+    }
+
+    /**
+     * @dataProvider getValidLocalesTests
+     */
+    public function testAddResourceValidLocales($locale)
+    {
+        $translator = new Translator('fr', new MessageSelector());
+        $translator->addResource('array', array('foo' => 'foofoo'), $locale);
+        // no assertion. this method just asserts that no exception is thrown
+    }
+
+    public function testAddResourceAfterTrans()
+    {
+        $translator = new Translator('fr');
+        $translator->addLoader('array', new ArrayLoader());
+
+        $translator->setFallbackLocales(array('en'));
+
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+        $this->assertEquals('foofoo', $translator->trans('foo'));
+
+        $translator->addResource('array', array('bar' => 'foobar'), 'en');
+        $this->assertEquals('foobar', $translator->trans('bar'));
+    }
+
+    /**
+     * @dataProvider      getTransFileTests
+     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     */
+    public function testTransWithoutFallbackLocaleFile($format, $loader)
+    {
+        $loaderClass = 'Symfony\\Component\\Translation\\Loader\\'.$loader;
+        $translator = new Translator('en');
+        $translator->addLoader($format, new $loaderClass());
+        $translator->addResource($format, __DIR__.'/fixtures/non-existing', 'en');
+        $translator->addResource($format, __DIR__.'/fixtures/resources.'.$format, 'en');
+
+        // force catalogue loading
+        $translator->trans('foo');
+    }
+
+    /**
+     * @dataProvider getTransFileTests
+     */
+    public function testTransWithFallbackLocaleFile($format, $loader)
+    {
+        $loaderClass = 'Symfony\\Component\\Translation\\Loader\\'.$loader;
+        $translator = new Translator('en_GB');
+        $translator->addLoader($format, new $loaderClass());
+        $translator->addResource($format, __DIR__.'/fixtures/non-existing', 'en_GB');
+        $translator->addResource($format, __DIR__.'/fixtures/resources.'.$format, 'en', 'resources');
+
+        $this->assertEquals('bar', $translator->trans('foo', array(), 'resources'));
+    }
+
+    public function testTransWithFallbackLocaleBis()
+    {
+        $translator = new Translator('en_US');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en_US');
+        $translator->addResource('array', array('bar' => 'foobar'), 'en');
+        $this->assertEquals('foobar', $translator->trans('bar'));
+    }
+
+    public function testTransWithFallbackLocaleTer()
+    {
+        $translator = new Translator('fr_FR');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foo (en_US)'), 'en_US');
+        $translator->addResource('array', array('bar' => 'bar (en)'), 'en');
+
+        $translator->setFallbackLocales(array('en_US', 'en'));
+
+        $this->assertEquals('foo (en_US)', $translator->trans('foo'));
+        $this->assertEquals('bar (en)', $translator->trans('bar'));
+    }
+
+    public function testTransNonExistentWithFallback()
+    {
+        $translator = new Translator('fr');
+        $translator->setFallbackLocales(array('en'));
+        $translator->addLoader('array', new ArrayLoader());
+        $this->assertEquals('non-existent', $translator->trans('non-existent'));
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testWhenAResourceHasNoRegisteredLoader()
+    {
+        $translator = new Translator('en');
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+
+        $translator->trans('foo');
+    }
+
+    /**
+     * @dataProvider getTransTests
+     */
+    public function testTrans($expected, $id, $translation, $parameters, $locale, $domain)
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array((string) $id => $translation), $locale, $domain);
+
+        $this->assertEquals($expected, $translator->trans($id, $parameters, $domain, $locale));
+    }
+
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testTransInvalidLocale($locale)
+    {
+        $translator = new Translator('en', new MessageSelector());
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+
+        $translator->trans('foo', array(), '', $locale);
+    }
+
+    /**
+     * @dataProvider      getValidLocalesTests
+     */
+    public function testTransValidLocale($locale)
+    {
+        $translator = new Translator($locale, new MessageSelector());
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('test' => 'OK'), $locale);
+
+        $this->assertEquals('OK', $translator->trans('test'));
+        $this->assertEquals('OK', $translator->trans('test', array(), null, $locale));
+    }
+
+    /**
+     * @dataProvider getFlattenedTransTests
+     */
+    public function testFlattenedTrans($expected, $messages, $id)
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', $messages, 'fr', '');
+
+        $this->assertEquals($expected, $translator->trans($id, array(), '', 'fr'));
+    }
+
+    /**
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoice($expected, $id, $translation, $number, $parameters, $locale, $domain)
+    {
+        $translator = new Translator('en');
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array((string) $id => $translation), $locale, $domain);
+
+        $this->assertEquals($expected, $translator->transChoice($id, $number, $parameters, $domain, $locale));
+    }
+
+    /**
+     * @dataProvider      getInvalidLocalesTests
+     * @expectedException \InvalidArgumentException
+     */
+    public function testTransChoiceInvalidLocale($locale)
+    {
+        $translator = new Translator('en', new MessageSelector());
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+
+        $translator->transChoice('foo', 1, array(), '', $locale);
+    }
+
+    /**
+     * @dataProvider      getValidLocalesTests
+     */
+    public function testTransChoiceValidLocale($locale)
+    {
+        $translator = new Translator('en', new MessageSelector());
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('foo' => 'foofoo'), 'en');
+
+        $translator->transChoice('foo', 1, array(), '', $locale);
+        // no assertion. this method just asserts that no exception is thrown
+    }
+
+    public function getTransFileTests()
+    {
+        return array(
+            array('csv', 'CsvFileLoader'),
+            array('ini', 'IniFileLoader'),
+            array('mo', 'MoFileLoader'),
+            array('po', 'PoFileLoader'),
+            array('php', 'PhpFileLoader'),
+            array('ts', 'QtFileLoader'),
+            array('xlf', 'XliffFileLoader'),
+            array('yml', 'YamlFileLoader'),
+            array('json', 'JsonFileLoader'),
+        );
+    }
+
+    public function getTransTests()
+    {
+        return array(
+            array('Symfony est super !', 'Symfony is great!', 'Symfony est super !', array(), 'fr', ''),
+            array('Symfony est awesome !', 'Symfony is %what%!', 'Symfony est %what% !', array('%what%' => 'awesome'), 'fr', ''),
+            array('Symfony est super !', new StringClass('Symfony is great!'), 'Symfony est super !', array(), 'fr', ''),
+        );
+    }
+
+    public function getFlattenedTransTests()
+    {
+        $messages = array(
+            'symfony' => array(
+                'is' => array(
+                    'great' => 'Symfony est super!',
+                ),
+            ),
+            'foo' => array(
+                'bar' => array(
+                    'baz' => 'Foo Bar Baz',
+                ),
+                'baz' => 'Foo Baz',
+            ),
+        );
+
+        return array(
+            array('Symfony est super!', $messages, 'symfony.is.great'),
+            array('Foo Bar Baz', $messages, 'foo.bar.baz'),
+            array('Foo Baz', $messages, 'foo.baz'),
+        );
+    }
+
+    public function getTransChoiceTests()
+    {
+        return array(
+            array('Il y a 0 pomme', '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples', '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes', 0, array('%count%' => 0), 'fr', ''),
+            array('Il y a 1 pomme', '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples', '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes', 1, array('%count%' => 1), 'fr', ''),
+            array('Il y a 10 pommes', '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples', '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes', 10, array('%count%' => 10), 'fr', ''),
+
+            array('Il y a 0 pomme', 'There is one apple|There is %count% apples', 'Il y a %count% pomme|Il y a %count% pommes', 0, array('%count%' => 0), 'fr', ''),
+            array('Il y a 1 pomme', 'There is one apple|There is %count% apples', 'Il y a %count% pomme|Il y a %count% pommes', 1, array('%count%' => 1), 'fr', ''),
+            array('Il y a 10 pommes', 'There is one apple|There is %count% apples', 'Il y a %count% pomme|Il y a %count% pommes', 10, array('%count%' => 10), 'fr', ''),
+
+            array('Il y a 0 pomme', 'one: There is one apple|more: There is %count% apples', 'one: Il y a %count% pomme|more: Il y a %count% pommes', 0, array('%count%' => 0), 'fr', ''),
+            array('Il y a 1 pomme', 'one: There is one apple|more: There is %count% apples', 'one: Il y a %count% pomme|more: Il y a %count% pommes', 1, array('%count%' => 1), 'fr', ''),
+            array('Il y a 10 pommes', 'one: There is one apple|more: There is %count% apples', 'one: Il y a %count% pomme|more: Il y a %count% pommes', 10, array('%count%' => 10), 'fr', ''),
+
+            array('Il n\'y a aucune pomme', '{0} There are no apples|one: There is one apple|more: There is %count% apples', '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes', 0, array('%count%' => 0), 'fr', ''),
+            array('Il y a 1 pomme', '{0} There are no apples|one: There is one apple|more: There is %count% apples', '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes', 1, array('%count%' => 1), 'fr', ''),
+            array('Il y a 10 pommes', '{0} There are no apples|one: There is one apple|more: There is %count% apples', '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes', 10, array('%count%' => 10), 'fr', ''),
+
+            array('Il y a 0 pomme', new StringClass('{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples'), '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes', 0, array('%count%' => 0), 'fr', ''),
+        );
+    }
+
+    public function getInvalidLocalesTests()
+    {
+        return array(
+            array('fr FR'),
+            array('français'),
+            array('fr+en'),
+            array('utf#8'),
+            array('fr&en'),
+            array('fr~FR'),
+            array(' fr'),
+            array('fr '),
+            array('fr*'),
+            array('fr/FR'),
+            array('fr\\FR'),
+        );
+    }
+
+    public function getValidLocalesTests()
+    {
+        return array(
+            array(''),
+            array(null),
+            array('fr'),
+            array('francais'),
+            array('FR'),
+            array('frFR'),
+            array('fr-FR'),
+            array('fr_FR'),
+            array('fr.FR'),
+            array('fr-FR.UTF8'),
+            array('sr@latin'),
+        );
+    }
+
+    public function testTransChoiceFallback()
+    {
+        $translator = new Translator('ru');
+        $translator->setFallbackLocales(array('en'));
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('some_message2' => 'one thing|%count% things'), 'en');
+
+        $this->assertEquals('10 things', $translator->transChoice('some_message2', 10, array('%count%' => 10)));
+    }
+
+    public function testTransChoiceFallbackBis()
+    {
+        $translator = new Translator('ru');
+        $translator->setFallbackLocales(array('en_US', 'en'));
+        $translator->addLoader('array', new ArrayLoader());
+        $translator->addResource('array', array('some_message2' => 'one thing|%count% things'), 'en_US');
+
+        $this->assertEquals('10 things', $translator->transChoice('some_message2', 10, array('%count%' => 10)));
+    }
+
+    public function testTransChoiceFallbackWithNoTranslation()
+    {
+        $translator = new Translator('ru');
+        $translator->setFallbackLocales(array('en'));
+        $translator->addLoader('array', new ArrayLoader());
+
+        // consistent behavior with Translator::trans(), which returns the string
+        // unchanged if it can't be found
+        $this->assertEquals('some_message2', $translator->transChoice('some_message2', 10, array('%count%' => 10)));
+    }
+
+    /**
+     * @dataProvider dataProviderGetMessages
+     */
+    public function testGetMessages($resources, $locale, $expected)
+    {
+        $locales = array_keys($resources);
+        $_locale = !is_null($locale) ? $locale : reset($locales);
+        $locales = array_slice($locales, 0, array_search($_locale, $locales));
+
+        $translator = new Translator($_locale, new MessageSelector());
+        $translator->setFallbackLocales(array_reverse($locales));
+        $translator->addLoader('array', new ArrayLoader());
+        foreach ($resources as $_locale => $domainMessages) {
+            foreach ($domainMessages as $domain => $messages) {
+                $translator->addResource('array', $messages, $_locale, $domain);
+            }
+        }
+        $result = $translator->getMessages($locale);
+
+        $this->assertEquals($expected, $result);
+    }
+
+    public function dataProviderGetMessages()
+    {
+        $resources = array(
+            'en' => array(
+                'jsmessages' => array(
+                    'foo' => 'foo (EN)',
+                    'bar' => 'bar (EN)',
+                ),
+                'messages' => array(
+                    'foo' => 'foo messages (EN)',
+                ),
+                'validators' => array(
+                    'int' => 'integer (EN)',
+                ),
+            ),
+            'pt-PT' => array(
+                'messages' => array(
+                    'foo' => 'foo messages (PT)',
+                ),
+                'validators' => array(
+                    'str' => 'integer (PT)',
+                ),
+            ),
+            'pt_BR' => array(
+                'validators' => array(
+                    'int' => 'integer (BR)',
+                ),
+            ),
+        );
+
+        return array(
+            array($resources, null,
+                array(
+                    'jsmessages' => array(
+                        'foo' => 'foo (EN)',
+                        'bar' => 'bar (EN)',
+                    ),
+                    'messages' => array(
+                        'foo' => 'foo messages (EN)',
+                    ),
+                    'validators' => array(
+                        'int' => 'integer (EN)',
+                    ),
+                ),
+            ),
+            array($resources, 'en',
+                array(
+                    'jsmessages' => array(
+                        'foo' => 'foo (EN)',
+                        'bar' => 'bar (EN)',
+                    ),
+                    'messages' => array(
+                        'foo' => 'foo messages (EN)',
+                    ),
+                    'validators' => array(
+                        'int' => 'integer (EN)',
+                    ),
+                ),
+            ),
+            array($resources, 'pt-PT',
+                array(
+                    'jsmessages' => array(
+                        'foo' => 'foo (EN)',
+                        'bar' => 'bar (EN)',
+                    ),
+                    'messages' => array(
+                        'foo' => 'foo messages (PT)',
+                    ),
+                    'validators' => array(
+                        'int' => 'integer (EN)',
+                        'str' => 'integer (PT)',
+                    ),
+                ),
+            ),
+            array($resources, 'pt_BR',
+                array(
+                    'jsmessages' => array(
+                        'foo' => 'foo (EN)',
+                        'bar' => 'bar (EN)',
+                    ),
+                    'messages' => array(
+                        'foo' => 'foo messages (PT)',
+                    ),
+                    'validators' => array(
+                        'int' => 'integer (BR)',
+                        'str' => 'integer (PT)',
+                    ),
+                ),
+            ),
+        );
+    }
+}
+
+class StringClass
+{
+    protected $str;
+
+    public function __construct($str)
+    {
+        $this->str = $str;
+    }
+
+    public function __toString()
+    {
+        return $this->str;
+    }
+}
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty-translation.mo b/core/vendor/symfony/translation/Tests/fixtures/empty-translation.mo
new file mode 100644
index 0000000000000000000000000000000000000000..ed01000c9b1b3fdf40fc2369a7799e72e41a1edf
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/empty-translation.mo differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty-translation.po b/core/vendor/symfony/translation/Tests/fixtures/empty-translation.po
new file mode 100644
index 0000000000000000000000000000000000000000..ff6f22afb1c98ce736da5876cdb7dcbbb3219417
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/empty-translation.po
@@ -0,0 +1,3 @@
+msgid "foo"
+msgstr ""
+
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo b/core/vendor/symfony/translation/Tests/fixtures/empty.csv
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo
rename to core/vendor/symfony/translation/Tests/fixtures/empty.csv
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.ini b/core/vendor/symfony/translation/Tests/fixtures/empty.ini
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.json b/core/vendor/symfony/translation/Tests/fixtures/empty.json
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.mo b/core/vendor/symfony/translation/Tests/fixtures/empty.mo
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.po b/core/vendor/symfony/translation/Tests/fixtures/empty.po
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.xlf b/core/vendor/symfony/translation/Tests/fixtures/empty.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/empty.yml b/core/vendor/symfony/translation/Tests/fixtures/empty.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/translation/Tests/fixtures/encoding.xlf b/core/vendor/symfony/translation/Tests/fixtures/encoding.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..0a88f9265052e53c6cc080ce040660e8e20b331a
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/encoding.xlf
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="en" datatype="plaintext" original="file.ext">
+    <body>
+      <trans-unit id="1" resname="foo">
+        <source>foo</source>
+        <target>bär</target>
+        <note>bäz</note>
+      </trans-unit>
+      <trans-unit id="2" resname="bar">
+        <source>bar</source>
+        <target>föö</target>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/escaped-id-plurals.po b/core/vendor/symfony/translation/Tests/fixtures/escaped-id-plurals.po
new file mode 100644
index 0000000000000000000000000000000000000000..c412aa26ec89c9a7a5cc5da72e10d68158c9145d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/escaped-id-plurals.po
@@ -0,0 +1,10 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+
+msgid "escaped \"foo\""
+msgid_plural "escaped \"foos\""
+msgstr[0] "escaped \"bar\""
+msgstr[1] "escaped \"bars\""
diff --git a/core/vendor/symfony/translation/Tests/fixtures/escaped-id.po b/core/vendor/symfony/translation/Tests/fixtures/escaped-id.po
new file mode 100644
index 0000000000000000000000000000000000000000..308eadd92659e0faad84c40cf3e254e48ad77538
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/escaped-id.po
@@ -0,0 +1,8 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+
+msgid "escaped \"foo\""
+msgstr "escaped \"bar\""
diff --git a/core/vendor/symfony/translation/Tests/fixtures/invalid-xml-resources.xlf b/core/vendor/symfony/translation/Tests/fixtures/invalid-xml-resources.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..7bf6c98ba3309950f94204558750a1ac27dc83fe
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/invalid-xml-resources.xlf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>foo</source>
+                <target>bar
+            </trans-unit>
+            <trans-unit id="2">
+                <source>extra</source>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>key</source>
+                <target></target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>test</source>
+                <target>with</target>
+                <note>note</note>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/malformed.json b/core/vendor/symfony/translation/Tests/fixtures/malformed.json
new file mode 100644
index 0000000000000000000000000000000000000000..4563ec6da8d9fe2357bd7cf6a3d9524ec629ff8f
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/malformed.json
@@ -0,0 +1,3 @@
+{
+    "foo" "bar"
+}
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/non-valid.xlf b/core/vendor/symfony/translation/Tests/fixtures/non-valid.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..734fc97e413c736c14f2dca3aed47ad780fde20e
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/non-valid.xlf
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit>
+                <source>foo</source>
+                <target>bar</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml b/core/vendor/symfony/translation/Tests/fixtures/non-valid.yml
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml
rename to core/vendor/symfony/translation/Tests/fixtures/non-valid.yml
diff --git a/core/vendor/symfony/translation/Tests/fixtures/plurals.mo b/core/vendor/symfony/translation/Tests/fixtures/plurals.mo
new file mode 100644
index 0000000000000000000000000000000000000000..6445e77beab595289cd154ea253c4e49dfd6af47
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/plurals.mo differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/plurals.po b/core/vendor/symfony/translation/Tests/fixtures/plurals.po
new file mode 100644
index 0000000000000000000000000000000000000000..439c41ad7fef4bc29f09cb011c01e15e54b1c778
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/plurals.po
@@ -0,0 +1,5 @@
+msgid "foo"
+msgid_plural "foos"
+msgstr[0] "bar"
+msgstr[1] "bars"
+
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resname.xlf b/core/vendor/symfony/translation/Tests/fixtures/resname.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..2df16af942f4348158a46090268b9b8a4631413d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resname.xlf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="en" datatype="plaintext" original="file.ext">
+    <body>
+      <trans-unit id="1" resname="foo">
+        <source></source>
+        <target>bar</target>
+      </trans-unit>
+      <trans-unit id="2" resname="bar">
+        <source>bar source</source>
+        <target>baz</target>
+      </trans-unit>
+      <trans-unit id="3">
+        <source>baz</source>
+        <target>foo</target>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/corrupted/resources.dat b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/corrupted/resources.dat
new file mode 100644
index 0000000000000000000000000000000000000000..391250caa0ad639a4ff3420607b7cef8241a15ae
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/corrupted/resources.dat
@@ -0,0 +1 @@
+XXX
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.res b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.res
new file mode 100644
index 0000000000000000000000000000000000000000..1fc1436d6641b7290ad5d9f4d331111e4a0419dd
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.res differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.txt b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3d9e9eae1c95686295064d6859ffbfd9b84fd49e
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.txt
@@ -0,0 +1,3 @@
+en{
+    symfony{"Symfony is great"}
+}
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.res b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.res
new file mode 100644
index 0000000000000000000000000000000000000000..f58416094be89f5fb64f78f6c3b873c6458696d0
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.res differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.txt b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.txt
new file mode 100644
index 0000000000000000000000000000000000000000..182d0a0de3f7e6e9c6a0561d640d013f2d3b8502
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.txt
@@ -0,0 +1,3 @@
+fr{
+    symfony{"Symfony est génial"}
+}
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/packagelist.txt b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/packagelist.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c5783ed4315abfd9186c4c5c4459c283de0b5f07
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/packagelist.txt
@@ -0,0 +1,2 @@
+en.res
+fr.res
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/resources.dat b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/resources.dat
new file mode 100644
index 0000000000000000000000000000000000000000..563b0eaef2e5a0a6e9623bf7b93b44beb0a7dc27
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/resources.dat differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/res/en.res b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/res/en.res
new file mode 100644
index 0000000000000000000000000000000000000000..ad894a92be2d5392136de413bc2cb5ea8a94bfb1
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/resourcebundle/res/en.res differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources-clean.xlf b/core/vendor/symfony/translation/Tests/fixtures/resources-clean.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..4ce15af2f5f71daea2f468b12ec079fd8492a2c0
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources-clean.xlf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="fr-FR" target-language="en-US" datatype="plaintext" original="file.ext">
+    <body>
+      <trans-unit id="acbd18db4cc2f85cedef654fccc4a4d8" resname="foo">
+        <source>foo</source>
+        <target>bar</target>
+        <note priority="1" from="bar">baz</note>
+      </trans-unit>
+      <trans-unit id="3c6e0b8a9c15224a8228b9a98ca1531d" resname="key">
+        <source>key</source>
+        <target></target>
+        <note>baz</note>
+        <note>qux</note>
+      </trans-unit>
+      <trans-unit id="18e6a493872558d949b4c16ea1fa6ab6" resname="key.with.cdata">
+        <source>key.with.cdata</source>
+        <target><![CDATA[<source> & <target>]]></target>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.csv b/core/vendor/symfony/translation/Tests/fixtures/resources.csv
new file mode 100644
index 0000000000000000000000000000000000000000..374b9eb5eb68e8f20ee26def7ea8bbf9c18ebd0f
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.csv
@@ -0,0 +1,4 @@
+"foo"; "bar"
+#"bar"; "foo"
+"incorrect"; "number"; "columns"; "will"; "be"; "ignored"
+"incorrect"
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.ini b/core/vendor/symfony/translation/Tests/fixtures/resources.ini
new file mode 100644
index 0000000000000000000000000000000000000000..4953062e69e5d3ba43f30765783621197fa45529
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.ini
@@ -0,0 +1 @@
+foo="bar"
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.json b/core/vendor/symfony/translation/Tests/fixtures/resources.json
new file mode 100644
index 0000000000000000000000000000000000000000..8a79687628fe86b467ec0e87e7e155c4661caa4f
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.json
@@ -0,0 +1,3 @@
+{
+    "foo": "bar"
+}
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.mo b/core/vendor/symfony/translation/Tests/fixtures/resources.mo
new file mode 100644
index 0000000000000000000000000000000000000000..0a9660257c07afef243a011d9806d6217e4f1379
Binary files /dev/null and b/core/vendor/symfony/translation/Tests/fixtures/resources.mo differ
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.php b/core/vendor/symfony/translation/Tests/fixtures/resources.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2913985391cb6d33df2ccadc187876b516d310d
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.php
@@ -0,0 +1,5 @@
+<?php
+
+return array (
+  'foo' => 'bar',
+);
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.po b/core/vendor/symfony/translation/Tests/fixtures/resources.po
new file mode 100644
index 0000000000000000000000000000000000000000..ccfce6bb98d466a78252d2d0b420213d213c495c
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.po
@@ -0,0 +1,8 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+
+msgid "foo"
+msgstr "bar"
\ No newline at end of file
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.ts b/core/vendor/symfony/translation/Tests/fixtures/resources.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40e18522c85b61912b25b052d061c957b8cc2336
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.ts
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TS>
+  <context>
+    <name>resources</name>
+    <message>
+      <source>foo</source>
+      <translation>bar</translation>
+    </message>
+  </context>
+</TS>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.xlf b/core/vendor/symfony/translation/Tests/fixtures/resources.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..b0e59880f889414f3734de99c19d5abbc6c67ecd
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.xlf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="en" datatype="plaintext" original="file.ext">
+    <body>
+      <trans-unit id="1">
+        <source>foo</source>
+        <target>bar</target>
+      </trans-unit>
+      <trans-unit id="2">
+        <source>extra</source>
+      </trans-unit>
+      <trans-unit id="3">
+        <source>key</source>
+        <target></target>
+      </trans-unit>
+      <trans-unit id="4">
+        <source>test</source>
+        <target>with</target>
+        <note>note</note>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/resources.yml b/core/vendor/symfony/translation/Tests/fixtures/resources.yml
new file mode 100644
index 0000000000000000000000000000000000000000..20e9ff3feaa8ede30f707e5f1b4356e3c02bb7ec
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/resources.yml
@@ -0,0 +1 @@
+foo: bar
diff --git a/core/vendor/symfony/translation/Tests/fixtures/valid.csv b/core/vendor/symfony/translation/Tests/fixtures/valid.csv
new file mode 100644
index 0000000000000000000000000000000000000000..59882e5da4d94c9643a3d8680154ce6981c9a977
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/valid.csv
@@ -0,0 +1,4 @@
+foo;bar
+bar;"foo
+foo"
+"foo;foo";bar
diff --git a/core/vendor/symfony/translation/Tests/fixtures/withdoctype.xlf b/core/vendor/symfony/translation/Tests/fixtures/withdoctype.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..f83e834ddc4772f66498c0cb44262708f683d2b2
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/withdoctype.xlf
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE foo>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>foo</source>
+                <target>bar</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Tests/fixtures/withnote.xlf b/core/vendor/symfony/translation/Tests/fixtures/withnote.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..b1d3f83a0c7148aee05e70eac73d553029c630d2
--- /dev/null
+++ b/core/vendor/symfony/translation/Tests/fixtures/withnote.xlf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+  <file source-language="en" datatype="plaintext" original="file.ext">
+    <body>
+      <trans-unit id="1">
+        <source>foo</source>
+        <target>bar</target>
+        <note priority="1">foo</note>
+      </trans-unit>
+      <trans-unit id="2">
+        <source>extra</source>
+        <note from="foo">bar</note>
+      </trans-unit>
+      <trans-unit id="3">
+        <source>key</source>
+        <target></target>
+        <note>baz</note>
+        <note priority="2" from="bar">qux</note>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
diff --git a/core/vendor/symfony/translation/Translator.php b/core/vendor/symfony/translation/Translator.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec315066f7b04c084a9efbb7e807e94c84d0dd59
--- /dev/null
+++ b/core/vendor/symfony/translation/Translator.php
@@ -0,0 +1,504 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+use Symfony\Component\Translation\Loader\LoaderInterface;
+use Symfony\Component\Translation\Exception\NotFoundResourceException;
+use Symfony\Component\Config\ConfigCacheInterface;
+use Symfony\Component\Config\ConfigCacheFactoryInterface;
+use Symfony\Component\Config\ConfigCacheFactory;
+
+/**
+ * Translator.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Translator implements TranslatorInterface, TranslatorBagInterface
+{
+    /**
+     * @var MessageCatalogueInterface[]
+     */
+    protected $catalogues = array();
+
+    /**
+     * @var string
+     */
+    protected $locale;
+
+    /**
+     * @var array
+     */
+    private $fallbackLocales = array();
+
+    /**
+     * @var LoaderInterface[]
+     */
+    private $loaders = array();
+
+    /**
+     * @var array
+     */
+    private $resources = array();
+
+    /**
+     * @var MessageSelector
+     */
+    private $selector;
+
+    /**
+     * @var string
+     */
+    private $cacheDir;
+
+    /**
+     * @var bool
+     */
+    private $debug;
+
+    /**
+     * @var ConfigCacheFactoryInterface|null
+     */
+    private $configCacheFactory;
+
+    /**
+     * Constructor.
+     *
+     * @param string               $locale   The locale
+     * @param MessageSelector|null $selector The message selector for pluralization
+     * @param string|null          $cacheDir The directory to use for the cache
+     * @param bool                 $debug    Use cache in debug mode ?
+     *
+     * @throws \InvalidArgumentException If a locale contains invalid characters
+     *
+     * @api
+     */
+    public function __construct($locale, MessageSelector $selector = null, $cacheDir = null, $debug = false)
+    {
+        $this->setLocale($locale);
+        $this->selector = $selector ?: new MessageSelector();
+        $this->cacheDir = $cacheDir;
+        $this->debug = $debug;
+    }
+
+    /**
+     * Sets the ConfigCache factory to use.
+     *
+     * @param ConfigCacheFactoryInterface $configCacheFactory
+     */
+    public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory)
+    {
+        $this->configCacheFactory = $configCacheFactory;
+    }
+
+    /**
+     * Adds a Loader.
+     *
+     * @param string          $format The name of the loader (@see addResource())
+     * @param LoaderInterface $loader A LoaderInterface instance
+     *
+     * @api
+     */
+    public function addLoader($format, LoaderInterface $loader)
+    {
+        $this->loaders[$format] = $loader;
+    }
+
+    /**
+     * Adds a Resource.
+     *
+     * @param string $format   The name of the loader (@see addLoader())
+     * @param mixed  $resource The resource name
+     * @param string $locale   The locale
+     * @param string $domain   The domain
+     *
+     * @throws \InvalidArgumentException If the locale contains invalid characters
+     *
+     * @api
+     */
+    public function addResource($format, $resource, $locale, $domain = null)
+    {
+        if (null === $domain) {
+            $domain = 'messages';
+        }
+
+        $this->assertValidLocale($locale);
+
+        $this->resources[$locale][] = array($format, $resource, $domain);
+
+        if (in_array($locale, $this->fallbackLocales)) {
+            $this->catalogues = array();
+        } else {
+            unset($this->catalogues[$locale]);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function setLocale($locale)
+    {
+        $this->assertValidLocale($locale);
+        $this->locale = $locale;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function getLocale()
+    {
+        return $this->locale;
+    }
+
+    /**
+     * Sets the fallback locale(s).
+     *
+     * @param string|array $locales The fallback locale(s)
+     *
+     * @throws \InvalidArgumentException If a locale contains invalid characters
+     *
+     * @deprecated since version 2.3, to be removed in 3.0. Use setFallbackLocales() instead.
+     *
+     * @api
+     */
+    public function setFallbackLocale($locales)
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the setFallbackLocales() method instead.', E_USER_DEPRECATED);
+
+        $this->setFallbackLocales(is_array($locales) ? $locales : array($locales));
+    }
+
+    /**
+     * Sets the fallback locales.
+     *
+     * @param array $locales The fallback locales
+     *
+     * @throws \InvalidArgumentException If a locale contains invalid characters
+     *
+     * @api
+     */
+    public function setFallbackLocales(array $locales)
+    {
+        // needed as the fallback locales are linked to the already loaded catalogues
+        $this->catalogues = array();
+
+        foreach ($locales as $locale) {
+            $this->assertValidLocale($locale);
+        }
+
+        $this->fallbackLocales = $locales;
+    }
+
+    /**
+     * Gets the fallback locales.
+     *
+     * @return array $locales The fallback locales
+     *
+     * @api
+     */
+    public function getFallbackLocales()
+    {
+        return $this->fallbackLocales;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function trans($id, array $parameters = array(), $domain = null, $locale = null)
+    {
+        if (null === $domain) {
+            $domain = 'messages';
+        }
+
+        return strtr($this->getCatalogue($locale)->get((string) $id, $domain), $parameters);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @api
+     */
+    public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
+    {
+        if (null === $domain) {
+            $domain = 'messages';
+        }
+
+        $id = (string) $id;
+        $catalogue = $this->getCatalogue($locale);
+        $locale = $catalogue->getLocale();
+        while (!$catalogue->defines($id, $domain)) {
+            if ($cat = $catalogue->getFallbackCatalogue()) {
+                $catalogue = $cat;
+                $locale = $catalogue->getLocale();
+            } else {
+                break;
+            }
+        }
+
+        return strtr($this->selector->choose($catalogue->get($id, $domain), (int) $number, $locale), $parameters);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCatalogue($locale = null)
+    {
+        if (null === $locale) {
+            $locale = $this->getLocale();
+        } else {
+            $this->assertValidLocale($locale);
+        }
+
+        if (!isset($this->catalogues[$locale])) {
+            $this->loadCatalogue($locale);
+        }
+
+        return $this->catalogues[$locale];
+    }
+
+    /**
+     * Gets the loaders.
+     *
+     * @return array LoaderInterface[]
+     */
+    protected function getLoaders()
+    {
+        return $this->loaders;
+    }
+
+    /**
+     * Collects all messages for the given locale.
+     *
+     * @param string|null $locale Locale of translations, by default is current locale
+     *
+     * @return array[array] indexed by catalog
+     */
+    public function getMessages($locale = null)
+    {
+        $catalogue = $this->getCatalogue($locale);
+        $messages = $catalogue->all();
+        while ($catalogue = $catalogue->getFallbackCatalogue()) {
+            $messages = array_replace_recursive($catalogue->all(), $messages);
+        }
+
+        return $messages;
+    }
+
+    /**
+     * @param string $locale
+     */
+    protected function loadCatalogue($locale)
+    {
+        if (null === $this->cacheDir) {
+            $this->initializeCatalogue($locale);
+        } else {
+            $this->initializeCacheCatalogue($locale);
+        }
+    }
+
+    /**
+     * @param string $locale
+     */
+    protected function initializeCatalogue($locale)
+    {
+        $this->assertValidLocale($locale);
+
+        try {
+            $this->doLoadCatalogue($locale);
+        } catch (NotFoundResourceException $e) {
+            if (!$this->computeFallbackLocales($locale)) {
+                throw $e;
+            }
+        }
+        $this->loadFallbackCatalogues($locale);
+    }
+
+    /**
+     * @param string $locale
+     */
+    private function initializeCacheCatalogue($locale)
+    {
+        if (isset($this->catalogues[$locale])) {
+            /* Catalogue already initialized. */
+            return;
+        }
+
+        $this->assertValidLocale($locale);
+        $self = $this; // required for PHP 5.3 where "$this" cannot be use()d in anonymous functions. Change in Symfony 3.0.
+        $cache = $this->getConfigCacheFactory()->cache($this->getCatalogueCachePath($locale),
+            function (ConfigCacheInterface $cache) use ($self, $locale) {
+                $self->dumpCatalogue($locale, $cache);
+            }
+        );
+
+        if (isset($this->catalogues[$locale])) {
+            /* Catalogue has been initialized as it was written out to cache. */
+            return;
+        }
+
+        /* Read catalogue from cache. */
+        $this->catalogues[$locale] = include $cache->getPath();
+    }
+
+    /**
+     * This method is public because it needs to be callable from a closure in PHP 5.3. It should be made protected (or even private, if possible) in 3.0.
+     *
+     * @internal
+     */
+    public function dumpCatalogue($locale, ConfigCacheInterface $cache)
+    {
+        $this->initializeCatalogue($locale);
+        $fallbackContent = $this->getFallbackContent($this->catalogues[$locale]);
+
+        $content = sprintf(<<<EOF
+<?php
+
+use Symfony\Component\Translation\MessageCatalogue;
+
+\$catalogue = new MessageCatalogue('%s', %s);
+
+%s
+return \$catalogue;
+
+EOF
+            ,
+            $locale,
+            var_export($this->catalogues[$locale]->all(), true),
+            $fallbackContent
+        );
+
+        $cache->write($content, $this->catalogues[$locale]->getResources());
+    }
+
+    private function getFallbackContent(MessageCatalogue $catalogue)
+    {
+        $fallbackContent = '';
+        $current = '';
+        $replacementPattern = '/[^a-z0-9_]/i';
+        $fallbackCatalogue = $catalogue->getFallbackCatalogue();
+        while ($fallbackCatalogue) {
+            $fallback = $fallbackCatalogue->getLocale();
+            $fallbackSuffix = ucfirst(preg_replace($replacementPattern, '_', $fallback));
+            $currentSuffix = ucfirst(preg_replace($replacementPattern, '_', $current));
+
+            $fallbackContent .= sprintf(<<<EOF
+\$catalogue%s = new MessageCatalogue('%s', %s);
+\$catalogue%s->addFallbackCatalogue(\$catalogue%s);
+
+EOF
+                ,
+                $fallbackSuffix,
+                $fallback,
+                var_export($fallbackCatalogue->all(), true),
+                $currentSuffix,
+                $fallbackSuffix
+            );
+            $current = $fallbackCatalogue->getLocale();
+            $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
+        }
+
+        return $fallbackContent;
+    }
+
+    private function getCatalogueCachePath($locale)
+    {
+        $catalogueHash = sha1(serialize(array(
+            'resources' => isset($this->resources[$locale]) ? $this->resources[$locale] : array(),
+            'fallback_locales' => $this->fallbackLocales,
+        )));
+
+        return $this->cacheDir.'/catalogue.'.$locale.'.'.$catalogueHash.'.php';
+    }
+
+    private function doLoadCatalogue($locale)
+    {
+        $this->catalogues[$locale] = new MessageCatalogue($locale);
+
+        if (isset($this->resources[$locale])) {
+            foreach ($this->resources[$locale] as $resource) {
+                if (!isset($this->loaders[$resource[0]])) {
+                    throw new \RuntimeException(sprintf('The "%s" translation loader is not registered.', $resource[0]));
+                }
+                $this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2]));
+            }
+        }
+    }
+
+    private function loadFallbackCatalogues($locale)
+    {
+        $current = $this->catalogues[$locale];
+
+        foreach ($this->computeFallbackLocales($locale) as $fallback) {
+            if (!isset($this->catalogues[$fallback])) {
+                $this->doLoadCatalogue($fallback);
+            }
+
+            $current->addFallbackCatalogue($this->catalogues[$fallback]);
+            $current = $this->catalogues[$fallback];
+        }
+    }
+
+    protected function computeFallbackLocales($locale)
+    {
+        $locales = array();
+        foreach ($this->fallbackLocales as $fallback) {
+            if ($fallback === $locale) {
+                continue;
+            }
+
+            $locales[] = $fallback;
+        }
+
+        if (strrchr($locale, '_') !== false) {
+            array_unshift($locales, substr($locale, 0, -strlen(strrchr($locale, '_'))));
+        }
+
+        return array_unique($locales);
+    }
+
+    /**
+     * Asserts that the locale is valid, throws an Exception if not.
+     *
+     * @param string $locale Locale to tests
+     *
+     * @throws \InvalidArgumentException If the locale contains invalid characters
+     */
+    protected function assertValidLocale($locale)
+    {
+        if (1 !== preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) {
+            throw new \InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale));
+        }
+    }
+
+    /**
+     * Provides the ConfigCache factory implementation, falling back to a
+     * default implementation if necessary.
+     *
+     * @return ConfigCacheFactoryInterface $configCacheFactory
+     */
+    private function getConfigCacheFactory()
+    {
+        if (!$this->configCacheFactory) {
+            $this->configCacheFactory = new ConfigCacheFactory($this->debug);
+        }
+
+        return $this->configCacheFactory;
+    }
+}
diff --git a/core/vendor/symfony/translation/TranslatorBagInterface.php b/core/vendor/symfony/translation/TranslatorBagInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f650b5ee0f88ee1fc6a442e4948370c7612b2a7
--- /dev/null
+++ b/core/vendor/symfony/translation/TranslatorBagInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation;
+
+/**
+ * TranslatorBagInterface.
+ *
+ * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
+ */
+interface TranslatorBagInterface
+{
+    /**
+     * Gets the catalogue by locale.
+     *
+     * @param string|null $locale The locale or null to use the default
+     *
+     * @throws \InvalidArgumentException If the locale contains invalid characters
+     *
+     * @return MessageCatalogueInterface
+     */
+    public function getCatalogue($locale = null);
+}
diff --git a/core/vendor/symfony/translation/Symfony/Component/Translation/TranslatorInterface.php b/core/vendor/symfony/translation/TranslatorInterface.php
similarity index 100%
rename from core/vendor/symfony/translation/Symfony/Component/Translation/TranslatorInterface.php
rename to core/vendor/symfony/translation/TranslatorInterface.php
diff --git a/core/vendor/symfony/translation/Writer/TranslationWriter.php b/core/vendor/symfony/translation/Writer/TranslationWriter.php
new file mode 100644
index 0000000000000000000000000000000000000000..44ac182d74a16c435b03ed7b75f8fc73a5e9bb1e
--- /dev/null
+++ b/core/vendor/symfony/translation/Writer/TranslationWriter.php
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Translation\Writer;
+
+use Symfony\Component\Translation\MessageCatalogue;
+use Symfony\Component\Translation\Dumper\DumperInterface;
+
+/**
+ * TranslationWriter writes translation messages.
+ *
+ * @author Michel Salib <michelsalib@hotmail.com>
+ */
+class TranslationWriter
+{
+    /**
+     * Dumpers used for export.
+     *
+     * @var array
+     */
+    private $dumpers = array();
+
+    /**
+     * Adds a dumper to the writer.
+     *
+     * @param string          $format The format of the dumper
+     * @param DumperInterface $dumper The dumper
+     */
+    public function addDumper($format, DumperInterface $dumper)
+    {
+        $this->dumpers[$format] = $dumper;
+    }
+
+    /**
+     * Disables dumper backup.
+     */
+    public function disableBackup()
+    {
+        foreach ($this->dumpers as $dumper) {
+            $dumper->setBackup(false);
+        }
+    }
+
+    /**
+     * Obtains the list of supported formats.
+     *
+     * @return array
+     */
+    public function getFormats()
+    {
+        return array_keys($this->dumpers);
+    }
+
+    /**
+     * Writes translation from the catalogue according to the selected format.
+     *
+     * @param MessageCatalogue $catalogue The message catalogue to dump
+     * @param string           $format    The format to use to dump the messages
+     * @param array            $options   Options that are passed to the dumper
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function writeTranslations(MessageCatalogue $catalogue, $format, $options = array())
+    {
+        if (!isset($this->dumpers[$format])) {
+            throw new \InvalidArgumentException(sprintf('There is no dumper associated with format "%s".', $format));
+        }
+
+        // get the right dumper
+        $dumper = $this->dumpers[$format];
+
+        if (isset($options['path']) && !is_dir($options['path'])) {
+            mkdir($options['path'], 0777, true);
+        }
+
+        // save
+        $dumper->dump($catalogue, $options);
+    }
+}
diff --git a/core/vendor/symfony/translation/composer.json b/core/vendor/symfony/translation/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..6f1053e66caf08b1e60c20110db3047a4eac6845
--- /dev/null
+++ b/core/vendor/symfony/translation/composer.json
@@ -0,0 +1,45 @@
+{
+    "name": "symfony/translation",
+    "type": "library",
+    "description": "Symfony Translation Component",
+    "keywords": [],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.9"
+    },
+    "require-dev": {
+        "symfony/phpunit-bridge": "~2.7",
+        "symfony/config": "~2.7",
+        "symfony/intl": "~2.3",
+        "symfony/yaml": "~2.2",
+        "psr/log": "~1.0"
+    },
+    "conflict": {
+        "symfony/config": "<2.7"
+    },
+    "suggest": {
+        "symfony/config": "",
+        "symfony/yaml": "",
+        "psr/log": "To use logging capability in translator"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Component\\Translation\\": "" }
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.7-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/translation/phpunit.xml.dist b/core/vendor/symfony/translation/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..16cca4afb7c69ec317af617da65cd044d78dd693
--- /dev/null
+++ b/core/vendor/symfony/translation/phpunit.xml.dist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
+         backupGlobals="false"
+         colors="true"
+         bootstrap="vendor/autoload.php"
+>
+    <php>
+        <ini name="error_reporting" value="-1" />
+    </php>
+
+    <testsuites>
+        <testsuite name="Symfony Translation Component Test Suite">
+            <directory>./Tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./</directory>
+            <exclude>
+                <directory>./vendor</directory>
+                <directory>./Tests</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md b/core/vendor/symfony/validator/CHANGELOG.md
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md
rename to core/vendor/symfony/validator/CHANGELOG.md
index 329eaf3eb0aed69f7c2b1103ad900671c9ffb6de..4531286fdbcb74716c13a8c23029725c457b2966 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md
+++ b/core/vendor/symfony/validator/CHANGELOG.md
@@ -1,6 +1,12 @@
 CHANGELOG
 =========
 
+2.7.0
+-----
+
+ * deprecated `DefaultTranslator` in favor of `Symfony\Component\Translation\IdentityTranslator`
+ * deprecated PHP7-incompatible constraints (Null, True, False) and related validators (NullValidator, TrueValidator, FalseValidator) in favor of their `Is`-prefixed equivalent
+
 2.6.0
 -----
 
@@ -74,7 +80,7 @@ CHANGELOG
  * added `Util\PropertyPath`
  * made the PropertyAccess component an optional dependency
  * deprecated `ValidatorBuilder::setPropertyAccessor()`
-
+ * deprecated `validate` and `validateValue` on `Validator\Context\ExecutionContext` use `getValidator()` together with `inContext()` instead
 
 2.4.0
 -----
@@ -82,6 +88,11 @@ CHANGELOG
  * added a constraint the uses the expression language
  * added `minRatio`, `maxRatio`, `allowSquare`, `allowLandscape`, and `allowPortrait` to Image validator
 
+2.3.29
+------
+
+ * fixed compatibility with PHP7 and up by introducing new constraints (IsNull, IsTrue, IsFalse) and related validators (IsNullValidator, IsTrueValidator, IsFalseValidator)
+
 2.3.0
 -----
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php b/core/vendor/symfony/validator/ClassBasedInterface.php
similarity index 89%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php
rename to core/vendor/symfony/validator/ClassBasedInterface.php
index fe532efe5170227b0b3df213fa8d58a0106dfb76..7c2eb8f0f7c92842f770635ea26d574256a6f237 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php
+++ b/core/vendor/symfony/validator/ClassBasedInterface.php
@@ -16,7 +16,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Mapping\ClassMetadataInterface} instead.
  */
 interface ClassBasedInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php b/core/vendor/symfony/validator/Constraint.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php
rename to core/vendor/symfony/validator/Constraint.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php b/core/vendor/symfony/validator/ConstraintValidator.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php
rename to core/vendor/symfony/validator/ConstraintValidator.php
index 61c994a6293b693a5b569effc6f21c28987b5764..7a412737bd9a135ab48538964b773711be6ad330 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php
+++ b/core/vendor/symfony/validator/ConstraintValidator.php
@@ -61,10 +61,12 @@ public function initialize(ExecutionContextInterface $context)
      *
      * @return ConstraintViolationBuilderInterface The violation builder
      *
-     * @deprecated This method will be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     protected function buildViolation($message, array $parameters = array())
     {
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if ($this->context instanceof ExecutionContextInterface2Dot5) {
             return $this->context->buildViolation($message, $parameters);
         }
@@ -82,10 +84,12 @@ protected function buildViolation($message, array $parameters = array())
      *
      * @return ConstraintViolationBuilderInterface The violation builder
      *
-     * @deprecated This method will be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     protected function buildViolationInContext(ExecutionContextInterface $context, $message, array $parameters = array())
     {
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if ($context instanceof ExecutionContextInterface2Dot5) {
             return $context->buildViolation($message, $parameters);
         }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php b/core/vendor/symfony/validator/ConstraintValidatorFactory.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php
rename to core/vendor/symfony/validator/ConstraintValidatorFactory.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php b/core/vendor/symfony/validator/ConstraintValidatorFactoryInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php
rename to core/vendor/symfony/validator/ConstraintValidatorFactoryInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php b/core/vendor/symfony/validator/ConstraintValidatorInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php
rename to core/vendor/symfony/validator/ConstraintValidatorInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php b/core/vendor/symfony/validator/ConstraintViolation.php
similarity index 89%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php
rename to core/vendor/symfony/validator/ConstraintViolation.php
index 8f4744f576fe64b341cecaabd9c7b30ef442644d..7df3f3fadeef729218861e0022eb2dabadbc00f6 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php
+++ b/core/vendor/symfony/validator/ConstraintViolation.php
@@ -141,9 +141,14 @@ public function getMessageTemplate()
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated since version 2.7, to be removed in 3.0.
+     *             Use getParameters() instead
      */
     public function getMessageParameters()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getParameters() method instead.', E_USER_DEPRECATED);
+
         return $this->parameters;
     }
 
@@ -157,9 +162,14 @@ public function getParameters()
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated since version 2.7, to be removed in 3.0.
+     *             Use getPlural() instead
      */
     public function getMessagePluralization()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getPlural() method instead.', E_USER_DEPRECATED);
+
         return $this->plural;
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php b/core/vendor/symfony/validator/ConstraintViolationInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php
rename to core/vendor/symfony/validator/ConstraintViolationInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php b/core/vendor/symfony/validator/ConstraintViolationList.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php
rename to core/vendor/symfony/validator/ConstraintViolationList.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php b/core/vendor/symfony/validator/ConstraintViolationListInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php
rename to core/vendor/symfony/validator/ConstraintViolationListInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php b/core/vendor/symfony/validator/Constraints/AbstractComparison.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php
rename to core/vendor/symfony/validator/Constraints/AbstractComparison.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php b/core/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
similarity index 67%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php
rename to core/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
index ec734b3f70819109b5e966f0d9256e595ea36bb8..67d73a5ee25f88a26b202415e0459c98c32795cc 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php
+++ b/core/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -54,11 +55,19 @@ public function validate($value, Constraint $constraint)
         }
 
         if (!$this->compareValues($value, $comparedValue)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE))
-                ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE))
-                ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                    ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                    ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                    ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                    ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue))
+                    ->addViolation();
+            }
         }
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php b/core/vendor/symfony/validator/Constraints/All.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php
rename to core/vendor/symfony/validator/Constraints/All.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php b/core/vendor/symfony/validator/Constraints/AllValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php
rename to core/vendor/symfony/validator/Constraints/AllValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php b/core/vendor/symfony/validator/Constraints/Blank.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php
rename to core/vendor/symfony/validator/Constraints/Blank.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php b/core/vendor/symfony/validator/Constraints/BlankValidator.php
similarity index 62%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php
rename to core/vendor/symfony/validator/Constraints/BlankValidator.php
index 031c7a581cd3a8595eb3e17f887fa32e1b30944f..2d26e4a91b808ea60028a2abbc36ae54dcf3f96a 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php
+++ b/core/vendor/symfony/validator/Constraints/BlankValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -32,9 +33,15 @@ public function validate($value, Constraint $constraint)
         }
 
         if ('' !== $value && null !== $value) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php b/core/vendor/symfony/validator/Constraints/Callback.php
similarity index 78%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php
rename to core/vendor/symfony/validator/Constraints/Callback.php
index 312952a7fa2f8009656881a929dddf9ffa8c7782..bb8c076e0454734e79bb6de93492641a3b9e7464 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php
+++ b/core/vendor/symfony/validator/Constraints/Callback.php
@@ -33,7 +33,7 @@ class Callback extends Constraint
     /**
      * @var array
      *
-     * @deprecated Deprecated since version 2.4, to be removed in Symfony 3.0.
+     * @deprecated since version 2.4, to be removed in 3.0.
      */
     public $methods;
 
@@ -47,11 +47,15 @@ public function __construct($options = null)
             $options = $options['value'];
         }
 
+        if (is_array($options) && isset($options['methods'])) {
+            trigger_error('The "methods" option of the '.__CLASS__.' class is deprecated since version 2.4 and will be removed in 3.0. Use the "callback" option instead.', E_USER_DEPRECATED);
+        }
+
         if (is_array($options) && !isset($options['callback']) && !isset($options['methods']) && !isset($options['groups'])) {
-            if (is_callable($options)) {
+            if (is_callable($options) || !$options) {
                 $options = array('callback' => $options);
             } else {
-                // BC with Symfony < 2.4
+                // @deprecated, to be removed in 3.0
                 $options = array('methods' => $options);
             }
         }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php b/core/vendor/symfony/validator/Constraints/CallbackValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php
rename to core/vendor/symfony/validator/Constraints/CallbackValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php b/core/vendor/symfony/validator/Constraints/CardScheme.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php
rename to core/vendor/symfony/validator/Constraints/CardScheme.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php b/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
similarity index 79%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php
rename to core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
index 0e7de0881c1139aa9245cc5eb36b17458f5bda08..708ae09390b397bbd53681b25912eb589b8297ab 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -95,10 +96,17 @@ public function validate($value, Constraint $constraint)
         }
 
         if (!is_numeric($value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(CardScheme::NOT_NUMERIC_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(CardScheme::NOT_NUMERIC_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(CardScheme::NOT_NUMERIC_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
@@ -114,9 +122,16 @@ public function validate($value, Constraint $constraint)
             }
         }
 
-        $this->buildViolation($constraint->message)
-            ->setParameter('{{ value }}', $this->formatValue($value))
-            ->setCode(CardScheme::INVALID_FORMAT_ERROR)
-            ->addViolation();
+        if ($this->context instanceof ExecutionContextInterface) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(CardScheme::INVALID_FORMAT_ERROR)
+                ->addViolation();
+        } else {
+            $this->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(CardScheme::INVALID_FORMAT_ERROR)
+                ->addViolation();
+        }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php b/core/vendor/symfony/validator/Constraints/Choice.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php
rename to core/vendor/symfony/validator/Constraints/Choice.php
diff --git a/core/vendor/symfony/validator/Constraints/ChoiceValidator.php b/core/vendor/symfony/validator/Constraints/ChoiceValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8bb63b41649f08796f2e1c6690941b70a2601f3
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/ChoiceValidator.php
@@ -0,0 +1,135 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * ChoiceValidator validates that the value is one of the expected values.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Florian Eckerstorfer <florian@eckerstorfer.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @api
+ */
+class ChoiceValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Choice) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Choice');
+        }
+
+        if (!is_array($constraint->choices) && !$constraint->callback) {
+            throw new ConstraintDefinitionException('Either "choices" or "callback" must be specified on constraint Choice');
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if ($constraint->multiple && !is_array($value)) {
+            throw new UnexpectedTypeException($value, 'array');
+        }
+
+        if ($constraint->callback) {
+            if (!is_callable($choices = array($this->context->getClassName(), $constraint->callback))
+                && !is_callable($choices = $constraint->callback)
+            ) {
+                throw new ConstraintDefinitionException('The Choice constraint expects a valid callback');
+            }
+            $choices = call_user_func($choices);
+        } else {
+            $choices = $constraint->choices;
+        }
+
+        if ($constraint->multiple) {
+            foreach ($value as $_value) {
+                if (!in_array($_value, $choices, $constraint->strict)) {
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->multipleMessage)
+                            ->setParameter('{{ value }}', $this->formatValue($_value))
+                            ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                            ->setInvalidValue($_value)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->multipleMessage)
+                            ->setParameter('{{ value }}', $this->formatValue($_value))
+                            ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                            ->setInvalidValue($_value)
+                            ->addViolation();
+                    }
+
+                    return;
+                }
+            }
+
+            $count = count($value);
+
+            if ($constraint->min !== null && $count < $constraint->min) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->minMessage)
+                        ->setParameter('{{ limit }}', $constraint->min)
+                        ->setPlural((int) $constraint->min)
+                        ->setCode(Choice::TOO_FEW_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->minMessage)
+                        ->setParameter('{{ limit }}', $constraint->min)
+                        ->setPlural((int) $constraint->min)
+                        ->setCode(Choice::TOO_FEW_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+
+            if ($constraint->max !== null && $count > $constraint->max) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->maxMessage)
+                        ->setParameter('{{ limit }}', $constraint->max)
+                        ->setPlural((int) $constraint->max)
+                        ->setCode(Choice::TOO_MANY_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->maxMessage)
+                        ->setParameter('{{ limit }}', $constraint->max)
+                        ->setPlural((int) $constraint->max)
+                        ->setCode(Choice::TOO_MANY_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        } elseif (!in_array($value, $choices, $constraint->strict)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php b/core/vendor/symfony/validator/Constraints/Collection.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php
rename to core/vendor/symfony/validator/Constraints/Collection.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php b/core/vendor/symfony/validator/Constraints/Collection/Optional.php
similarity index 60%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php
rename to core/vendor/symfony/validator/Constraints/Collection/Optional.php
index f7a9204eb66d699fc2db14546e5f2437ca513bbd..cd9af50b9acfa370bf724bfe71a32e51ad724d2a 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php
+++ b/core/vendor/symfony/validator/Constraints/Collection/Optional.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator\Constraints\Collection;
 
+trigger_error('The '.__NAMESPACE__.'\Optional class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Optional class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Validator\Constraints\Optional as BaseOptional;
 
 /**
@@ -19,8 +21,8 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use
- *             {@link \Symfony\Component\Validator\Constraints\Optional} instead.
+ * @deprecated since version 2.3, to be removed in 3.0.
+ *             Use {@link \Symfony\Component\Validator\Constraints\Optional} instead.
  */
 class Optional extends BaseOptional
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php b/core/vendor/symfony/validator/Constraints/Collection/Required.php
similarity index 60%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php
rename to core/vendor/symfony/validator/Constraints/Collection/Required.php
index e358343618bda66afc54608986093453dbb629ee..55041020b7a56ce223ad3458bb0b22fe93e07863 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php
+++ b/core/vendor/symfony/validator/Constraints/Collection/Required.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator\Constraints\Collection;
 
+trigger_error('The '.__NAMESPACE__.'\Required class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Required class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Validator\Constraints\Required as BaseRequired;
 
 /**
@@ -19,8 +21,8 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use
- *             {@link \Symfony\Component\Validator\Constraints\Required} instead.
+ * @deprecated since version 2.3, to be removed in 3.0.
+ *             Use {@link \Symfony\Component\Validator\Constraints\Required} instead.
  */
 class Required extends BaseRequired
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php b/core/vendor/symfony/validator/Constraints/CollectionValidator.php
similarity index 67%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php
rename to core/vendor/symfony/validator/Constraints/CollectionValidator.php
index c3180d21622b92051a01ddcc1e87ff40117d6309..e70a79b11ee78210e36a97b4b8dbdf4ba764847e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CollectionValidator.php
@@ -69,24 +69,42 @@ public function validate($value, Constraint $constraint)
                     }
                 }
             } elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
-                $this->buildViolationInContext($context, $constraint->missingFieldsMessage)
-                    ->atPath('['.$field.']')
-                    ->setParameter('{{ field }}', $this->formatValue($field))
-                    ->setInvalidValue(null)
-                    ->setCode(Collection::MISSING_FIELD_ERROR)
-                    ->addViolation();
+                if ($context instanceof ExecutionContextInterface) {
+                    $context->buildViolation($constraint->missingFieldsMessage)
+                        ->atPath('['.$field.']')
+                        ->setParameter('{{ field }}', $this->formatValue($field))
+                        ->setInvalidValue(null)
+                        ->setCode(Collection::MISSING_FIELD_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolationInContext($context, $constraint->missingFieldsMessage)
+                        ->atPath('['.$field.']')
+                        ->setParameter('{{ field }}', $this->formatValue($field))
+                        ->setInvalidValue(null)
+                        ->setCode(Collection::MISSING_FIELD_ERROR)
+                        ->addViolation();
+                }
             }
         }
 
         if (!$constraint->allowExtraFields) {
             foreach ($value as $field => $fieldValue) {
                 if (!isset($constraint->fields[$field])) {
-                    $this->buildViolationInContext($context, $constraint->extraFieldsMessage)
-                        ->atPath('['.$field.']')
-                        ->setParameter('{{ field }}', $this->formatValue($field))
-                        ->setInvalidValue($fieldValue)
-                        ->setCode(Collection::NO_SUCH_FIELD_ERROR)
-                        ->addViolation();
+                    if ($context instanceof ExecutionContextInterface) {
+                        $context->buildViolation($constraint->extraFieldsMessage)
+                            ->atPath('['.$field.']')
+                            ->setParameter('{{ field }}', $this->formatValue($field))
+                            ->setInvalidValue($fieldValue)
+                            ->setCode(Collection::NO_SUCH_FIELD_ERROR)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolationInContext($context, $constraint->extraFieldsMessage)
+                            ->atPath('['.$field.']')
+                            ->setParameter('{{ field }}', $this->formatValue($field))
+                            ->setInvalidValue($fieldValue)
+                            ->setCode(Collection::NO_SUCH_FIELD_ERROR)
+                            ->addViolation();
+                    }
                 }
             }
         }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php b/core/vendor/symfony/validator/Constraints/Composite.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php
rename to core/vendor/symfony/validator/Constraints/Composite.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php b/core/vendor/symfony/validator/Constraints/Count.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php
rename to core/vendor/symfony/validator/Constraints/Count.php
diff --git a/core/vendor/symfony/validator/Constraints/CountValidator.php b/core/vendor/symfony/validator/Constraints/CountValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..cbe90e09571f8baee1529895a0bdaab22889eb76
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/CountValidator.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CountValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (null === $value) {
+            return;
+        }
+
+        if (!is_array($value) && !$value instanceof \Countable) {
+            throw new UnexpectedTypeException($value, 'array or \Countable');
+        }
+
+        $count = count($value);
+
+        if (null !== $constraint->max && $count > $constraint->max) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
+                    ->setParameter('{{ count }}', $count)
+                    ->setParameter('{{ limit }}', $constraint->max)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->max)
+                    ->setCode(Count::TOO_MANY_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
+                    ->setParameter('{{ count }}', $count)
+                    ->setParameter('{{ limit }}', $constraint->max)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->max)
+                    ->setCode(Count::TOO_MANY_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (null !== $constraint->min && $count < $constraint->min) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
+                    ->setParameter('{{ count }}', $count)
+                    ->setParameter('{{ limit }}', $constraint->min)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->min)
+                    ->setCode(Count::TOO_FEW_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
+                    ->setParameter('{{ count }}', $count)
+                    ->setParameter('{{ limit }}', $constraint->min)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->min)
+                    ->setCode(Count::TOO_FEW_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php b/core/vendor/symfony/validator/Constraints/Country.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php
rename to core/vendor/symfony/validator/Constraints/Country.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php b/core/vendor/symfony/validator/Constraints/CountryValidator.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php
rename to core/vendor/symfony/validator/Constraints/CountryValidator.php
index 0d001f768650c858ab1a9ddfc01b9521aeddffac..8139adf943119c743bd596fe5bfe7d60b021972e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CountryValidator.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Validator\Constraints;
 
 use Symfony\Component\Intl\Intl;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -46,9 +47,15 @@ public function validate($value, Constraint $constraint)
         $countries = Intl::getRegionBundle()->getCountryNames();
 
         if (!isset($countries[$value])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php b/core/vendor/symfony/validator/Constraints/Currency.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php
rename to core/vendor/symfony/validator/Constraints/Currency.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php b/core/vendor/symfony/validator/Constraints/CurrencyValidator.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php
rename to core/vendor/symfony/validator/Constraints/CurrencyValidator.php
index 558542653790eeefaf1a37f57f5ce15accfa23e8..9c41dc4a100eeefc40c8780df9e8327bc08319b6 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CurrencyValidator.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Validator\Constraints;
 
 use Symfony\Component\Intl\Intl;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -46,9 +47,15 @@ public function validate($value, Constraint $constraint)
         $currencies = Intl::getCurrencyBundle()->getCurrencyNames();
 
         if (!isset($currencies[$value])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php b/core/vendor/symfony/validator/Constraints/Date.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php
rename to core/vendor/symfony/validator/Constraints/Date.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php b/core/vendor/symfony/validator/Constraints/DateTime.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php
rename to core/vendor/symfony/validator/Constraints/DateTime.php
diff --git a/core/vendor/symfony/validator/Constraints/DateTimeValidator.php b/core/vendor/symfony/validator/Constraints/DateTimeValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..a53c463125845def5c4cf3e274f11482d92f134f
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/DateTimeValidator.php
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @api
+ */
+class DateTimeValidator extends DateValidator
+{
+    const PATTERN = '/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/';
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof DateTime) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\DateTime');
+        }
+
+        if (null === $value || '' === $value || $value instanceof \DateTime) {
+            return;
+        }
+
+        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
+            throw new UnexpectedTypeException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!preg_match(static::PATTERN, $value, $matches)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (!DateValidator::checkDate($matches[1], $matches[2], $matches[3])) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_DATE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_DATE_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (!TimeValidator::checkTime($matches[4], $matches[5], $matches[6])) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_TIME_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_TIME_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php b/core/vendor/symfony/validator/Constraints/DateValidator.php
similarity index 58%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php
rename to core/vendor/symfony/validator/Constraints/DateValidator.php
index 77f01116666161266724b0587a373466f43b54dc..0a5dfd493916b3d293a44875c79bf7f063c8e5cb 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php
+++ b/core/vendor/symfony/validator/Constraints/DateValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -60,19 +61,33 @@ public function validate($value, Constraint $constraint)
         $value = (string) $value;
 
         if (!preg_match(static::PATTERN, $value, $matches)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Date::INVALID_FORMAT_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Date::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Date::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
 
         if (!self::checkDate($matches[1], $matches[2], $matches[3])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Date::INVALID_DATE_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Date::INVALID_DATE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Date::INVALID_DATE_ERROR)
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php b/core/vendor/symfony/validator/Constraints/Email.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php
rename to core/vendor/symfony/validator/Constraints/Email.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php b/core/vendor/symfony/validator/Constraints/EmailValidator.php
similarity index 60%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php
rename to core/vendor/symfony/validator/Constraints/EmailValidator.php
index 8d3a7c5104a210aa500abc594ae12503856836ec..95f9aa123bfb5b43c528284b5237e130917ba11f 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php
+++ b/core/vendor/symfony/validator/Constraints/EmailValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\RuntimeException;
@@ -66,18 +67,32 @@ public function validate($value, Constraint $constraint)
             $strictValidator = new \Egulias\EmailValidator\EmailValidator();
 
             if (!$strictValidator->isValid($value, false, true)) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Email::INVALID_FORMAT_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Email::INVALID_FORMAT_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        } elseif (!preg_match('/.+\@.+\..+/', $value)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Email::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            } else {
                 $this->buildViolation($constraint->message)
                     ->setParameter('{{ value }}', $this->formatValue($value))
                     ->setCode(Email::INVALID_FORMAT_ERROR)
                     ->addViolation();
-
-                return;
             }
-        } elseif (!preg_match('/.+\@.+\..+/', $value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Email::INVALID_FORMAT_ERROR)
-                ->addViolation();
 
             return;
         }
@@ -87,20 +102,34 @@ public function validate($value, Constraint $constraint)
         // Check for host DNS resource records
         if ($constraint->checkMX) {
             if (!$this->checkMX($host)) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Email::MX_CHECK_FAILED_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Email::MX_CHECK_FAILED_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Email::MX_CHECK_FAILED_ERROR)
+                        ->addViolation();
+                }
             }
 
             return;
         }
 
         if ($constraint->checkHost && !$this->checkHost($host)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Email::HOST_CHECK_FAILED_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Email::HOST_CHECK_FAILED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Email::HOST_CHECK_FAILED_ERROR)
+                    ->addViolation();
+            }
         }
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php b/core/vendor/symfony/validator/Constraints/EqualTo.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php
rename to core/vendor/symfony/validator/Constraints/EqualTo.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php b/core/vendor/symfony/validator/Constraints/EqualToValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php
rename to core/vendor/symfony/validator/Constraints/EqualToValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php b/core/vendor/symfony/validator/Constraints/Existence.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php
rename to core/vendor/symfony/validator/Constraints/Existence.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php b/core/vendor/symfony/validator/Constraints/Expression.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php
rename to core/vendor/symfony/validator/Constraints/Expression.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php b/core/vendor/symfony/validator/Constraints/ExpressionValidator.php
similarity index 89%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php
rename to core/vendor/symfony/validator/Constraints/ExpressionValidator.php
index fd3e903f2220f90ab4bc454d72732c2e3a00b0c9..15d51f9ff10c0fe4982b50e3af02ad5f0d274099 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php
+++ b/core/vendor/symfony/validator/Constraints/ExpressionValidator.php
@@ -85,9 +85,15 @@ public function validate($value, Constraint $constraint)
         }
 
         if (!$this->getExpressionLanguage()->evaluate($constraint->expression, $variables)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 
diff --git a/core/vendor/symfony/validator/Constraints/False.php b/core/vendor/symfony/validator/Constraints/False.php
new file mode 100644
index 0000000000000000000000000000000000000000..166878863cf7d2a735a4508f050e853d2ef5cda9
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/False.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\False class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalse class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsFalse instead.
+ */
+class False extends IsFalse
+{
+}
diff --git a/core/vendor/symfony/validator/Constraints/FalseValidator.php b/core/vendor/symfony/validator/Constraints/FalseValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..24eb91010feb5ddfda4af79a40516d4d8fabe58c
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/FalseValidator.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\FalseValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalseValidator class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsFalseValidator instead.
+ */
+class FalseValidator extends IsFalseValidator
+{
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php b/core/vendor/symfony/validator/Constraints/File.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php
rename to core/vendor/symfony/validator/Constraints/File.php
diff --git a/core/vendor/symfony/validator/Constraints/FileValidator.php b/core/vendor/symfony/validator/Constraints/FileValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..5125a3265cdb4ed15a5153f392dfba92f7f0a45d
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/FileValidator.php
@@ -0,0 +1,331 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\HttpFoundation\File\File as FileObject;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @api
+ */
+class FileValidator extends ConstraintValidator
+{
+    const KB_BYTES = 1000;
+    const MB_BYTES = 1000000;
+    const KIB_BYTES = 1024;
+    const MIB_BYTES = 1048576;
+
+    private static $suffices = array(
+        1 => 'bytes',
+        self::KB_BYTES => 'kB',
+        self::MB_BYTES => 'MB',
+        self::KIB_BYTES => 'KiB',
+        self::MIB_BYTES => 'MiB',
+    );
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof File) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\File');
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if ($value instanceof UploadedFile && !$value->isValid()) {
+            switch ($value->getError()) {
+                case UPLOAD_ERR_INI_SIZE:
+                    $iniLimitSize = UploadedFile::getMaxFilesize();
+                    if ($constraint->maxSize && $constraint->maxSize < $iniLimitSize) {
+                        $limitInBytes = $constraint->maxSize;
+                        $binaryFormat = $constraint->binaryFormat;
+                    } else {
+                        $limitInBytes = $iniLimitSize;
+                        $binaryFormat = true;
+                    }
+
+                    list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes(0, $limitInBytes, $binaryFormat);
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadIniSizeErrorMessage)
+                            ->setParameter('{{ limit }}', $limitAsString)
+                            ->setParameter('{{ suffix }}', $suffix)
+                            ->setCode(UPLOAD_ERR_INI_SIZE)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadIniSizeErrorMessage)
+                            ->setParameter('{{ limit }}', $limitAsString)
+                            ->setParameter('{{ suffix }}', $suffix)
+                            ->setCode(UPLOAD_ERR_INI_SIZE)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_FORM_SIZE:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadFormSizeErrorMessage)
+                            ->setCode(UPLOAD_ERR_FORM_SIZE)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadFormSizeErrorMessage)
+                            ->setCode(UPLOAD_ERR_FORM_SIZE)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_PARTIAL:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadPartialErrorMessage)
+                            ->setCode(UPLOAD_ERR_PARTIAL)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadPartialErrorMessage)
+                            ->setCode(UPLOAD_ERR_PARTIAL)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_NO_FILE:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadNoFileErrorMessage)
+                            ->setCode(UPLOAD_ERR_NO_FILE)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadNoFileErrorMessage)
+                            ->setCode(UPLOAD_ERR_NO_FILE)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_NO_TMP_DIR:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadNoTmpDirErrorMessage)
+                            ->setCode(UPLOAD_ERR_NO_TMP_DIR)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadNoTmpDirErrorMessage)
+                            ->setCode(UPLOAD_ERR_NO_TMP_DIR)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_CANT_WRITE:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadCantWriteErrorMessage)
+                            ->setCode(UPLOAD_ERR_CANT_WRITE)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadCantWriteErrorMessage)
+                            ->setCode(UPLOAD_ERR_CANT_WRITE)
+                            ->addViolation();
+                    }
+
+                    return;
+                case UPLOAD_ERR_EXTENSION:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadExtensionErrorMessage)
+                            ->setCode(UPLOAD_ERR_EXTENSION)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadExtensionErrorMessage)
+                            ->setCode(UPLOAD_ERR_EXTENSION)
+                            ->addViolation();
+                    }
+
+                    return;
+                default:
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->uploadErrorMessage)
+                            ->setCode($value->getError())
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->uploadErrorMessage)
+                            ->setCode($value->getError())
+                            ->addViolation();
+                    }
+
+                    return;
+            }
+        }
+
+        if (!is_scalar($value) && !$value instanceof FileObject && !(is_object($value) && method_exists($value, '__toString'))) {
+            throw new UnexpectedTypeException($value, 'string');
+        }
+
+        $path = $value instanceof FileObject ? $value->getPathname() : (string) $value;
+
+        if (!is_file($path)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->notFoundMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::NOT_FOUND_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->notFoundMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::NOT_FOUND_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (!is_readable($path)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->notReadableMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::NOT_READABLE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->notReadableMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::NOT_READABLE_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        $sizeInBytes = filesize($path);
+
+        if (0 === $sizeInBytes) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->disallowEmptyMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::EMPTY_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->disallowEmptyMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setCode(File::EMPTY_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if ($constraint->maxSize) {
+            $limitInBytes = $constraint->maxSize;
+
+            if ($sizeInBytes > $limitInBytes) {
+                list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes($sizeInBytes, $limitInBytes, $constraint->binaryFormat);
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->maxSizeMessage)
+                        ->setParameter('{{ file }}', $this->formatValue($path))
+                        ->setParameter('{{ size }}', $sizeAsString)
+                        ->setParameter('{{ limit }}', $limitAsString)
+                        ->setParameter('{{ suffix }}', $suffix)
+                        ->setCode(File::TOO_LARGE_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->maxSizeMessage)
+                        ->setParameter('{{ file }}', $this->formatValue($path))
+                        ->setParameter('{{ size }}', $sizeAsString)
+                        ->setParameter('{{ limit }}', $limitAsString)
+                        ->setParameter('{{ suffix }}', $suffix)
+                        ->setCode(File::TOO_LARGE_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        }
+
+        if ($constraint->mimeTypes) {
+            if (!$value instanceof FileObject) {
+                $value = new FileObject($value);
+            }
+
+            $mimeTypes = (array) $constraint->mimeTypes;
+            $mime = $value->getMimeType();
+
+            foreach ($mimeTypes as $mimeType) {
+                if ($mimeType === $mime) {
+                    return;
+                }
+
+                if ($discrete = strstr($mimeType, '/*', true)) {
+                    if (strstr($mime, '/', true) === $discrete) {
+                        return;
+                    }
+                }
+            }
+
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->mimeTypesMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setParameter('{{ type }}', $this->formatValue($mime))
+                    ->setParameter('{{ types }}', $this->formatValues($mimeTypes))
+                    ->setCode(File::INVALID_MIME_TYPE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->mimeTypesMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setParameter('{{ type }}', $this->formatValue($mime))
+                    ->setParameter('{{ types }}', $this->formatValues($mimeTypes))
+                    ->setCode(File::INVALID_MIME_TYPE_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+
+    private static function moreDecimalsThan($double, $numberOfDecimals)
+    {
+        return strlen((string) $double) > strlen(round($double, $numberOfDecimals));
+    }
+
+    /**
+     * Convert the limit to the smallest possible number
+     * (i.e. try "MB", then "kB", then "bytes")
+     */
+    private function factorizeSizes($size, $limit, $binaryFormat)
+    {
+        if ($binaryFormat) {
+            $coef = self::MIB_BYTES;
+            $coefFactor = self::KIB_BYTES;
+        } else {
+            $coef = self::MB_BYTES;
+            $coefFactor = self::KB_BYTES;
+        }
+
+        $limitAsString = (string) ($limit / $coef);
+
+        // Restrict the limit to 2 decimals (without rounding! we
+        // need the precise value)
+        while (self::moreDecimalsThan($limitAsString, 2)) {
+            $coef /= $coefFactor;
+            $limitAsString = (string) ($limit / $coef);
+        }
+
+        // Convert size to the same measure, but round to 2 decimals
+        $sizeAsString = (string) round($size / $coef, 2);
+
+        // If the size and limit produce the same string output
+        // (due to rounding), reduce the coefficient
+        while ($sizeAsString === $limitAsString) {
+            $coef /= $coefFactor;
+            $limitAsString = (string) ($limit / $coef);
+            $sizeAsString = (string) round($size / $coef, 2);
+        }
+
+        return array($sizeAsString, $limitAsString, self::$suffices[$coef]);
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php b/core/vendor/symfony/validator/Constraints/GreaterThan.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php
rename to core/vendor/symfony/validator/Constraints/GreaterThan.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php b/core/vendor/symfony/validator/Constraints/GreaterThanOrEqual.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php
rename to core/vendor/symfony/validator/Constraints/GreaterThanOrEqual.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php b/core/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php
rename to core/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php b/core/vendor/symfony/validator/Constraints/GreaterThanValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php
rename to core/vendor/symfony/validator/Constraints/GreaterThanValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php b/core/vendor/symfony/validator/Constraints/GroupSequence.php
similarity index 75%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php
rename to core/vendor/symfony/validator/Constraints/GroupSequence.php
index 72bfb16d2c8628ad2623d96d63c25e78258f5c89..52d75394313a8b50e2b6a1df40e9825fe2c02031 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php
+++ b/core/vendor/symfony/validator/Constraints/GroupSequence.php
@@ -97,47 +97,56 @@ public function __construct(array $groups)
     /**
      * Returns an iterator for this group.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @return \Traversable The iterator
      *
      * @see \IteratorAggregate::getIterator()
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function getIterator()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         return new \ArrayIterator($this->groups);
     }
 
     /**
      * Returns whether the given offset exists in the sequence.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @param int $offset The offset
      *
      * @return bool Whether the offset exists
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function offsetExists($offset)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         return isset($this->groups[$offset]);
     }
 
     /**
      * Returns the group at the given offset.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @param int $offset The offset
      *
      * @return string The group a the given offset
      *
      * @throws OutOfBoundsException If the object does not exist
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function offsetGet($offset)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if (!isset($this->groups[$offset])) {
             throw new OutOfBoundsException(sprintf(
                 'The offset "%s" does not exist.',
@@ -151,14 +160,17 @@ public function offsetGet($offset)
     /**
      * Sets the group at the given offset.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @param int    $offset The offset
      * @param string $value  The group name
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function offsetSet($offset, $value)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if (null !== $offset) {
             $this->groups[$offset] = $value;
 
@@ -171,26 +183,32 @@ public function offsetSet($offset, $value)
     /**
      * Removes the group at the given offset.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @param int $offset The offset
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function offsetUnset($offset)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         unset($this->groups[$offset]);
     }
 
     /**
      * Returns the number of groups in the sequence.
      *
+     * Implemented for backwards compatibility with Symfony < 2.5.
+     *
      * @return int The number of groups
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             To be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function count()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         return count($this->groups);
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php b/core/vendor/symfony/validator/Constraints/GroupSequenceProvider.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php
rename to core/vendor/symfony/validator/Constraints/GroupSequenceProvider.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php b/core/vendor/symfony/validator/Constraints/Iban.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php
rename to core/vendor/symfony/validator/Constraints/Iban.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php b/core/vendor/symfony/validator/Constraints/IbanValidator.php
similarity index 52%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php
rename to core/vendor/symfony/validator/Constraints/IbanValidator.php
index 35995d2eb75a1f6e3247ece203e83476cd31b4f2..65c22ff9c0c9772af2173df6747d2ede7ca07790 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IbanValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -48,40 +49,68 @@ public function validate($value, Constraint $constraint)
 
         // The IBAN must have at least 4 characters...
         if (strlen($canonicalized) < 4) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Iban::TOO_SHORT_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::TOO_SHORT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::TOO_SHORT_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
 
         // ...start with a country code...
         if (!ctype_alpha($canonicalized{0}) || !ctype_alpha($canonicalized{1})) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Iban::INVALID_COUNTRY_CODE_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_COUNTRY_CODE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_COUNTRY_CODE_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
 
         // ...contain only digits and characters...
         if (!ctype_alnum($canonicalized)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Iban::INVALID_CHARACTERS_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
 
         // ...and contain uppercase characters only
         if ($canonicalized !== strtoupper($canonicalized)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Iban::INVALID_CASE_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_CASE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::INVALID_CASE_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
@@ -102,10 +131,17 @@ public function validate($value, Constraint $constraint)
         // We cannot use PHP's modulo operator, so we calculate the
         // modulo step-wisely instead
         if (1 !== $this->bigModulo97($checkSum)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Iban::CHECKSUM_FAILED_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Iban::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            }
         }
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php b/core/vendor/symfony/validator/Constraints/IdenticalTo.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php
rename to core/vendor/symfony/validator/Constraints/IdenticalTo.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php b/core/vendor/symfony/validator/Constraints/IdenticalToValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php
rename to core/vendor/symfony/validator/Constraints/IdenticalToValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php b/core/vendor/symfony/validator/Constraints/Image.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php
rename to core/vendor/symfony/validator/Constraints/Image.php
diff --git a/core/vendor/symfony/validator/Constraints/ImageValidator.php b/core/vendor/symfony/validator/Constraints/ImageValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5165e25532cdb42bd2852e2f187f1cb66294fa5
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/ImageValidator.php
@@ -0,0 +1,261 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validates whether a value is a valid image file and is valid
+ * against minWidth, maxWidth, minHeight and maxHeight constraints.
+ *
+ * @author Benjamin Dulau <benjamin.dulau@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ImageValidator extends FileValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Image) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Image');
+        }
+
+        $violations = count($this->context->getViolations());
+
+        parent::validate($value, $constraint);
+
+        $failed = count($this->context->getViolations()) !== $violations;
+
+        if ($failed || null === $value || '' === $value) {
+            return;
+        }
+
+        if (null === $constraint->minWidth && null === $constraint->maxWidth
+            && null === $constraint->minHeight && null === $constraint->maxHeight
+            && null === $constraint->minRatio && null === $constraint->maxRatio
+            && $constraint->allowSquare && $constraint->allowLandscape && $constraint->allowPortrait) {
+            return;
+        }
+
+        $size = @getimagesize($value);
+
+        if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->sizeNotDetectedMessage)
+                    ->setCode(Image::SIZE_NOT_DETECTED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->sizeNotDetectedMessage)
+                    ->setCode(Image::SIZE_NOT_DETECTED_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        $width = $size[0];
+        $height = $size[1];
+
+        if ($constraint->minWidth) {
+            if (!ctype_digit((string) $constraint->minWidth)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum width', $constraint->minWidth));
+            }
+
+            if ($width < $constraint->minWidth) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->minWidthMessage)
+                        ->setParameter('{{ width }}', $width)
+                        ->setParameter('{{ min_width }}', $constraint->minWidth)
+                        ->setCode(Image::TOO_NARROW_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->minWidthMessage)
+                        ->setParameter('{{ width }}', $width)
+                        ->setParameter('{{ min_width }}', $constraint->minWidth)
+                        ->setCode(Image::TOO_NARROW_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        }
+
+        if ($constraint->maxWidth) {
+            if (!ctype_digit((string) $constraint->maxWidth)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum width', $constraint->maxWidth));
+            }
+
+            if ($width > $constraint->maxWidth) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->maxWidthMessage)
+                        ->setParameter('{{ width }}', $width)
+                        ->setParameter('{{ max_width }}', $constraint->maxWidth)
+                        ->setCode(Image::TOO_WIDE_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->maxWidthMessage)
+                        ->setParameter('{{ width }}', $width)
+                        ->setParameter('{{ max_width }}', $constraint->maxWidth)
+                        ->setCode(Image::TOO_WIDE_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        }
+
+        if ($constraint->minHeight) {
+            if (!ctype_digit((string) $constraint->minHeight)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height', $constraint->minHeight));
+            }
+
+            if ($height < $constraint->minHeight) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->minHeightMessage)
+                        ->setParameter('{{ height }}', $height)
+                        ->setParameter('{{ min_height }}', $constraint->minHeight)
+                        ->setCode(Image::TOO_LOW_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->minHeightMessage)
+                        ->setParameter('{{ height }}', $height)
+                        ->setParameter('{{ min_height }}', $constraint->minHeight)
+                        ->setCode(Image::TOO_LOW_ERROR)
+                        ->addViolation();
+                }
+
+                return;
+            }
+        }
+
+        if ($constraint->maxHeight) {
+            if (!ctype_digit((string) $constraint->maxHeight)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum height', $constraint->maxHeight));
+            }
+
+            if ($height > $constraint->maxHeight) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->maxHeightMessage)
+                        ->setParameter('{{ height }}', $height)
+                        ->setParameter('{{ max_height }}', $constraint->maxHeight)
+                        ->setCode(Image::TOO_HIGH_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->maxHeightMessage)
+                        ->setParameter('{{ height }}', $height)
+                        ->setParameter('{{ max_height }}', $constraint->maxHeight)
+                        ->setCode(Image::TOO_HIGH_ERROR)
+                        ->addViolation();
+                }
+            }
+        }
+
+        $ratio = round($width / $height, 2);
+
+        if (null !== $constraint->minRatio) {
+            if (!is_numeric((string) $constraint->minRatio)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio', $constraint->minRatio));
+            }
+
+            if ($ratio < $constraint->minRatio) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->minRatioMessage)
+                        ->setParameter('{{ ratio }}', $ratio)
+                        ->setParameter('{{ min_ratio }}', $constraint->minRatio)
+                        ->setCode(Image::RATIO_TOO_SMALL_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->minRatioMessage)
+                        ->setParameter('{{ ratio }}', $ratio)
+                        ->setParameter('{{ min_ratio }}', $constraint->minRatio)
+                        ->setCode(Image::RATIO_TOO_SMALL_ERROR)
+                        ->addViolation();
+                }
+            }
+        }
+
+        if (null !== $constraint->maxRatio) {
+            if (!is_numeric((string) $constraint->maxRatio)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio', $constraint->maxRatio));
+            }
+
+            if ($ratio > $constraint->maxRatio) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->maxRatioMessage)
+                        ->setParameter('{{ ratio }}', $ratio)
+                        ->setParameter('{{ max_ratio }}', $constraint->maxRatio)
+                        ->setCode(Image::RATIO_TOO_BIG_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->maxRatioMessage)
+                        ->setParameter('{{ ratio }}', $ratio)
+                        ->setParameter('{{ max_ratio }}', $constraint->maxRatio)
+                        ->setCode(Image::RATIO_TOO_BIG_ERROR)
+                        ->addViolation();
+                }
+            }
+        }
+
+        if (!$constraint->allowSquare && $width == $height) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->allowSquareMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->allowSquareMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (!$constraint->allowLandscape && $width > $height) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->allowLandscapeMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->allowLandscapeMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (!$constraint->allowPortrait && $width < $height) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->allowPortraitMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->allowPortraitMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ height }}', $height)
+                    ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php b/core/vendor/symfony/validator/Constraints/Ip.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php
rename to core/vendor/symfony/validator/Constraints/Ip.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php b/core/vendor/symfony/validator/Constraints/IpValidator.php
similarity index 83%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php
rename to core/vendor/symfony/validator/Constraints/IpValidator.php
index 2bbe7e4fc601db5c8aba707ca62e6e4a29b4c254..8ec8068e79d5806b040c8ebefc08698fec28de6b 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IpValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -95,9 +96,15 @@ public function validate($value, Constraint $constraint)
         }
 
         if (!filter_var($value, FILTER_VALIDATE_IP, $flag)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php b/core/vendor/symfony/validator/Constraints/IsFalse.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php
rename to core/vendor/symfony/validator/Constraints/IsFalse.php
index fc2e3e49cbd250d70e0cf49a7cd6e78531181c29..7b1b72bd5111017dbc6c9c4c6c2e7fd639eed98a 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php
+++ b/core/vendor/symfony/validator/Constraints/IsFalse.php
@@ -21,7 +21,7 @@
  *
  * @api
  */
-class False extends Constraint
+class IsFalse extends Constraint
 {
     public $message = 'This value should be false.';
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php b/core/vendor/symfony/validator/Constraints/IsFalseValidator.php
similarity index 63%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php
rename to core/vendor/symfony/validator/Constraints/IsFalseValidator.php
index a01f5bb37deda3508fe00ae6612bbd5a7598f58b..f5215588f21e7a2c7d0ba90536edbf15493003a7 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IsFalseValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -20,22 +21,26 @@
  *
  * @api
  */
-class TrueValidator extends ConstraintValidator
+class IsFalseValidator extends ConstraintValidator
 {
     /**
      * {@inheritdoc}
      */
     public function validate($value, Constraint $constraint)
     {
-        if (!$constraint instanceof True) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\True');
+        if (!$constraint instanceof IsFalse) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsFalse');
         }
 
-        if (null === $value) {
+        if (null === $value || false === $value || 0 === $value || '0' === $value) {
             return;
         }
 
-        if (true !== $value && 1 !== $value && '1' !== $value) {
+        if ($this->context instanceof ExecutionContextInterface) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->addViolation();
+        } else {
             $this->buildViolation($constraint->message)
                 ->setParameter('{{ value }}', $this->formatValue($value))
                 ->addViolation();
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php b/core/vendor/symfony/validator/Constraints/IsNull.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php
rename to core/vendor/symfony/validator/Constraints/IsNull.php
index 310455021bce6d868047c8b562cfb7691d0cafaa..3e7fef112c72c208dd99ccb9e84e8655d5419a74 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php
+++ b/core/vendor/symfony/validator/Constraints/IsNull.php
@@ -21,7 +21,7 @@
  *
  * @api
  */
-class Null extends Constraint
+class IsNull extends Constraint
 {
     public $message = 'This value should be null.';
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php b/core/vendor/symfony/validator/Constraints/IsNullValidator.php
similarity index 53%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php
rename to core/vendor/symfony/validator/Constraints/IsNullValidator.php
index 1e6c3a53897abba0148da27ef713293cbf110b20..162f6182fffccbb8006efcb6a91cb7833ed3dde7 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IsNullValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -20,21 +21,27 @@
  *
  * @api
  */
-class NullValidator extends ConstraintValidator
+class IsNullValidator extends ConstraintValidator
 {
     /**
      * {@inheritdoc}
      */
     public function validate($value, Constraint $constraint)
     {
-        if (!$constraint instanceof Null) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Null');
+        if (!$constraint instanceof IsNull) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsNull');
         }
 
         if (null !== $value) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php b/core/vendor/symfony/validator/Constraints/IsTrue.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php
rename to core/vendor/symfony/validator/Constraints/IsTrue.php
index 788e36a9ee2aade1295d4e0348c1d3b140b8ca73..c0be6b8272d6f396ae84b1f04c74967b7f90593f 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php
+++ b/core/vendor/symfony/validator/Constraints/IsTrue.php
@@ -21,7 +21,7 @@
  *
  * @api
  */
-class True extends Constraint
+class IsTrue extends Constraint
 {
     public $message = 'This value should be true.';
 }
diff --git a/core/vendor/symfony/validator/Constraints/IsTrueValidator.php b/core/vendor/symfony/validator/Constraints/IsTrueValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..206c63d9a7949986f6a330d9b2040de1fce0e1ae
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/IsTrueValidator.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @api
+ */
+class IsTrueValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof IsTrue) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\IsTrue');
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (true !== $value && 1 !== $value && '1' !== $value) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php b/core/vendor/symfony/validator/Constraints/Isbn.php
similarity index 89%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php
rename to core/vendor/symfony/validator/Constraints/Isbn.php
index 67d177f4e0439704f719b6a8f964014b80eee7c2..35cb82204e245d3a659160a073334d2da91ab4b5 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php
+++ b/core/vendor/symfony/validator/Constraints/Isbn.php
@@ -44,13 +44,13 @@ class Isbn extends Constraint
     public $message;
 
     /**
-     * @deprecated Deprecated since version 2.5, to be removed in 3.0. Use option "type" instead.
+     * @deprecated since version 2.5, to be removed in 3.0. Use option "type" instead.
      * @var bool
      */
     public $isbn10 = false;
 
     /**
-     * @deprecated Deprecated since version 2.5, to be removed in 3.0. Use option "type" instead.
+     * @deprecated since version 2.5, to be removed in 3.0. Use option "type" instead.
      * @var bool
      */
     public $isbn13 = false;
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php b/core/vendor/symfony/validator/Constraints/IsbnValidator.php
similarity index 73%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php
rename to core/vendor/symfony/validator/Constraints/IsbnValidator.php
index 598085713d2bf4d17bad4e83eb235798ff77df06..ccdf4e88d2e94ca8f46bb78b221a438d50c598f8 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IsbnValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -48,8 +49,10 @@ public function validate($value, Constraint $constraint)
 
         if (null === $constraint->type) {
             if ($constraint->isbn10 && !$constraint->isbn13) {
+                trigger_error('The "isbn10" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
                 $constraint->type = 'isbn10';
             } elseif ($constraint->isbn13 && !$constraint->isbn10) {
+                trigger_error('The "isbn13" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
                 $constraint->type = 'isbn13';
             }
         }
@@ -57,10 +60,17 @@ public function validate($value, Constraint $constraint)
         // Explicitly validate against ISBN-10
         if ('isbn10' === $constraint->type) {
             if (true !== ($code = $this->validateIsbn10($canonical))) {
-                $this->buildViolation($this->getMessage($constraint, $constraint->type))
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode($code)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($this->getMessage($constraint, $constraint->type))
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode($code)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($this->getMessage($constraint, $constraint->type))
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode($code)
+                        ->addViolation();
+                }
             }
 
             return;
@@ -69,10 +79,17 @@ public function validate($value, Constraint $constraint)
         // Explicitly validate against ISBN-13
         if ('isbn13' === $constraint->type) {
             if (true !== ($code = $this->validateIsbn13($canonical))) {
-                $this->buildViolation($this->getMessage($constraint, $constraint->type))
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode($code)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($this->getMessage($constraint, $constraint->type))
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode($code)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($this->getMessage($constraint, $constraint->type))
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode($code)
+                        ->addViolation();
+                }
             }
 
             return;
@@ -95,10 +112,17 @@ public function validate($value, Constraint $constraint)
         }
 
         if (true !== $code) {
-            $this->buildViolation($this->getMessage($constraint))
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode($code)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($this->getMessage($constraint))
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode($code)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($this->getMessage($constraint))
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode($code)
+                    ->addViolation();
+            }
         }
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php b/core/vendor/symfony/validator/Constraints/Issn.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php
rename to core/vendor/symfony/validator/Constraints/Issn.php
diff --git a/core/vendor/symfony/validator/Constraints/IssnValidator.php b/core/vendor/symfony/validator/Constraints/IssnValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..87bf83c65251e3d3b82e5935614f912393acd2c7
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/IssnValidator.php
@@ -0,0 +1,182 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validates whether the value is a valid ISSN.
+ *
+ * @author Antonio J. García Lagar <aj@garcialagar.es>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/Issn
+ */
+class IssnValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Issn) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Issn');
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
+            throw new UnexpectedTypeException($value, 'string');
+        }
+
+        $value = (string) $value;
+        $canonical = $value;
+
+        // 1234-567X
+        //     ^
+        if (isset($canonical{4}) && '-' === $canonical{4}) {
+            // remove hyphen
+            $canonical = substr($canonical, 0, 4).substr($canonical, 5);
+        } elseif ($constraint->requireHyphen) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::MISSING_HYPHEN_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::MISSING_HYPHEN_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        $length = strlen($canonical);
+
+        if ($length < 8) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::TOO_SHORT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::TOO_SHORT_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if ($length > 8) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::TOO_LONG_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::TOO_LONG_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // 1234567X
+        // ^^^^^^^ digits only
+        if (!ctype_digit(substr($canonical, 0, 7))) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // 1234567X
+        //        ^ digit, x or X
+        if (!ctype_digit($canonical{7}) && 'x' !== $canonical{7} && 'X' !== $canonical{7}) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // 1234567X
+        //        ^ case-sensitive?
+        if ($constraint->caseSensitive && 'x' === $canonical{7}) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CASE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::INVALID_CASE_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // Calculate a checksum. "X" equals 10.
+        $checkSum = 'X' === $canonical{7} || 'x' === $canonical{7}
+            ? 10
+            : $canonical{7};
+
+        for ($i = 0; $i < 7; ++$i) {
+            // Multiply the first digit by 8, the second by 7, etc.
+            $checkSum += (8 - $i) * $canonical{$i};
+        }
+
+        if (0 !== $checkSum % 11) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Issn::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php b/core/vendor/symfony/validator/Constraints/Language.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php
rename to core/vendor/symfony/validator/Constraints/Language.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php b/core/vendor/symfony/validator/Constraints/LanguageValidator.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php
rename to core/vendor/symfony/validator/Constraints/LanguageValidator.php
index be7ad28faf6aa17d5937d6e148370011a90b3b16..cc8581f819e0a38f141a9d0f31dae1b7854da184 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php
+++ b/core/vendor/symfony/validator/Constraints/LanguageValidator.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Validator\Constraints;
 
 use Symfony\Component\Intl\Intl;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -46,9 +47,15 @@ public function validate($value, Constraint $constraint)
         $languages = Intl::getLanguageBundle()->getLanguageNames();
 
         if (!isset($languages[$value])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php b/core/vendor/symfony/validator/Constraints/Length.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php
rename to core/vendor/symfony/validator/Constraints/Length.php
diff --git a/core/vendor/symfony/validator/Constraints/LengthValidator.php b/core/vendor/symfony/validator/Constraints/LengthValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7b19f340b10771e7bd0e52377452031a36bee
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/LengthValidator.php
@@ -0,0 +1,127 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LengthValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Length) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Length');
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
+            throw new UnexpectedTypeException($value, 'string');
+        }
+
+        $stringValue = (string) $value;
+        $invalidCharset = false;
+
+        if ('UTF8' === $charset = strtoupper($constraint->charset)) {
+            $charset = 'UTF-8';
+        }
+
+        if (function_exists('iconv_strlen')) {
+            $length = @iconv_strlen($stringValue, $constraint->charset);
+            $invalidCharset = false === $length;
+        } elseif (function_exists('mb_strlen')) {
+            if (mb_check_encoding($stringValue, $constraint->charset)) {
+                $length = mb_strlen($stringValue, $constraint->charset);
+            } else {
+                $invalidCharset = true;
+            }
+        } elseif ('UTF-8' !== $charset) {
+            $length = strlen($stringValue);
+        } elseif (!preg_match('//u', $stringValue)) {
+            $invalidCharset = true;
+        } elseif (function_exists('utf8_decode')) {
+            $length = strlen(utf8_decode($stringValue));
+        } else {
+            preg_replace('/./u', '', $stringValue, -1, $length);
+        }
+
+        if ($invalidCharset) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->charsetMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ charset }}', $constraint->charset)
+                    ->setInvalidValue($value)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->charsetMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ charset }}', $constraint->charset)
+                    ->setInvalidValue($value)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (null !== $constraint->max && $length > $constraint->max) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ limit }}', $constraint->max)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->max)
+                    ->setCode(Length::TOO_LONG_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ limit }}', $constraint->max)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->max)
+                    ->setCode(Length::TOO_LONG_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (null !== $constraint->min && $length < $constraint->min) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ limit }}', $constraint->min)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->min)
+                    ->setCode(Length::TOO_SHORT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                    ->setParameter('{{ limit }}', $constraint->min)
+                    ->setInvalidValue($value)
+                    ->setPlural((int) $constraint->min)
+                    ->setCode(Length::TOO_SHORT_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php b/core/vendor/symfony/validator/Constraints/LessThan.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php
rename to core/vendor/symfony/validator/Constraints/LessThan.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php b/core/vendor/symfony/validator/Constraints/LessThanOrEqual.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php
rename to core/vendor/symfony/validator/Constraints/LessThanOrEqual.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php b/core/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php
rename to core/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php b/core/vendor/symfony/validator/Constraints/LessThanValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php
rename to core/vendor/symfony/validator/Constraints/LessThanValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php b/core/vendor/symfony/validator/Constraints/Locale.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php
rename to core/vendor/symfony/validator/Constraints/Locale.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php b/core/vendor/symfony/validator/Constraints/LocaleValidator.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php
rename to core/vendor/symfony/validator/Constraints/LocaleValidator.php
index 748e5cf0c6420762304ab67e96f663bcce9fc81e..a5f69271e6e0b7bb7a6b21703e06de5c7f16cdf7 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php
+++ b/core/vendor/symfony/validator/Constraints/LocaleValidator.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Validator\Constraints;
 
 use Symfony\Component\Intl\Intl;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -46,9 +47,15 @@ public function validate($value, Constraint $constraint)
         $locales = Intl::getLocaleBundle()->getLocaleNames();
 
         if (!isset($locales[$value])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php b/core/vendor/symfony/validator/Constraints/Luhn.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php
rename to core/vendor/symfony/validator/Constraints/Luhn.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php b/core/vendor/symfony/validator/Constraints/LuhnValidator.php
similarity index 69%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php
rename to core/vendor/symfony/validator/Constraints/LuhnValidator.php
index d58bfbfe7d8784228df301268e70093e0cb66d1b..31d4497d6e3a41121aa7445aa129f7a9f4a43a52 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php
+++ b/core/vendor/symfony/validator/Constraints/LuhnValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -56,10 +57,17 @@ public function validate($value, Constraint $constraint)
         $value = (string) $value;
 
         if (!ctype_digit($value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Luhn::INVALID_CHARACTERS_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Luhn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Luhn::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
@@ -87,10 +95,17 @@ public function validate($value, Constraint $constraint)
         }
 
         if (0 === $checkSum || 0 !== $checkSum % 10) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Luhn::CHECKSUM_FAILED_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Luhn::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Luhn::CHECKSUM_FAILED_ERROR)
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php b/core/vendor/symfony/validator/Constraints/NotBlank.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php
rename to core/vendor/symfony/validator/Constraints/NotBlank.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php b/core/vendor/symfony/validator/Constraints/NotBlankValidator.php
similarity index 63%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php
rename to core/vendor/symfony/validator/Constraints/NotBlankValidator.php
index 9deab1503b0266217f89e4ba50d1570142f5183e..a435701cf2605dc2f01ece4c7db3d00ff4ec6fa5 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php
+++ b/core/vendor/symfony/validator/Constraints/NotBlankValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -32,9 +33,15 @@ public function validate($value, Constraint $constraint)
         }
 
         if (false === $value || (empty($value) && '0' != $value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php b/core/vendor/symfony/validator/Constraints/NotEqualTo.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php
rename to core/vendor/symfony/validator/Constraints/NotEqualTo.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php b/core/vendor/symfony/validator/Constraints/NotEqualToValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php
rename to core/vendor/symfony/validator/Constraints/NotEqualToValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php b/core/vendor/symfony/validator/Constraints/NotIdenticalTo.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php
rename to core/vendor/symfony/validator/Constraints/NotIdenticalTo.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php b/core/vendor/symfony/validator/Constraints/NotIdenticalToValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php
rename to core/vendor/symfony/validator/Constraints/NotIdenticalToValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php b/core/vendor/symfony/validator/Constraints/NotNull.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php
rename to core/vendor/symfony/validator/Constraints/NotNull.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php b/core/vendor/symfony/validator/Constraints/NotNullValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php
rename to core/vendor/symfony/validator/Constraints/NotNullValidator.php
diff --git a/core/vendor/symfony/validator/Constraints/Null.php b/core/vendor/symfony/validator/Constraints/Null.php
new file mode 100644
index 0000000000000000000000000000000000000000..934b8eedc61af51fcaa4c1b713feb5e34ddda170
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/Null.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\Null class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNull class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsNull instead.
+ */
+class Null extends IsNull
+{
+}
diff --git a/core/vendor/symfony/validator/Constraints/NullValidator.php b/core/vendor/symfony/validator/Constraints/NullValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..0900c8cd2d3e34d26df24a801a35265e1967d9b2
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/NullValidator.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\NullValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNullValidator class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsNullValidator instead.
+ */
+class NullValidator extends IsNullValidator
+{
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php b/core/vendor/symfony/validator/Constraints/Optional.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php
rename to core/vendor/symfony/validator/Constraints/Optional.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php b/core/vendor/symfony/validator/Constraints/Range.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php
rename to core/vendor/symfony/validator/Constraints/Range.php
diff --git a/core/vendor/symfony/validator/Constraints/RangeValidator.php b/core/vendor/symfony/validator/Constraints/RangeValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f5fddac2ade98fa25ef5250ee689eec4a29cbc6
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/RangeValidator.php
@@ -0,0 +1,104 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class RangeValidator extends ConstraintValidator
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Range) {
+            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Range');
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!is_numeric($value) && !$value instanceof \DateTime && !$value instanceof \DateTimeInterface) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->invalidMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setCode(Range::INVALID_VALUE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->invalidMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setCode(Range::INVALID_VALUE_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        $min = $constraint->min;
+        $max = $constraint->max;
+
+        // Convert strings to DateTimes if comparing another DateTime
+        // This allows to compare with any date/time value supported by
+        // the DateTime constructor:
+        // http://php.net/manual/en/datetime.formats.php
+        if ($value instanceof \DateTime || $value instanceof \DateTimeInterface) {
+            if (is_string($min)) {
+                $min = new \DateTime($min);
+            }
+
+            if (is_string($max)) {
+                $max = new \DateTime($max);
+            }
+        }
+
+        if (null !== $constraint->max && $value > $max) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->maxMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setParameter('{{ limit }}', $this->formatValue($max, self::PRETTY_DATE))
+                    ->setCode(Range::BEYOND_RANGE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->maxMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setParameter('{{ limit }}', $this->formatValue($max, self::PRETTY_DATE))
+                    ->setCode(Range::BEYOND_RANGE_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if (null !== $constraint->min && $value < $min) {
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->minMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setParameter('{{ limit }}', $this->formatValue($min, self::PRETTY_DATE))
+                    ->setCode(Range::BELOW_RANGE_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->minMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setParameter('{{ limit }}', $this->formatValue($min, self::PRETTY_DATE))
+                    ->setCode(Range::BELOW_RANGE_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php b/core/vendor/symfony/validator/Constraints/Regex.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php
rename to core/vendor/symfony/validator/Constraints/Regex.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php b/core/vendor/symfony/validator/Constraints/RegexValidator.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php
rename to core/vendor/symfony/validator/Constraints/RegexValidator.php
index 5916e85be9e6a0c7a1cd3bc8668b32674724be70..45ba9793ef53732cb0c74fc8dd4ffe291b894077 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php
+++ b/core/vendor/symfony/validator/Constraints/RegexValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -45,9 +46,15 @@ public function validate($value, Constraint $constraint)
         $value = (string) $value;
 
         if ($constraint->match xor preg_match($constraint->pattern, $value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php b/core/vendor/symfony/validator/Constraints/Required.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php
rename to core/vendor/symfony/validator/Constraints/Required.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php b/core/vendor/symfony/validator/Constraints/Time.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php
rename to core/vendor/symfony/validator/Constraints/Time.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php b/core/vendor/symfony/validator/Constraints/TimeValidator.php
similarity index 59%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php
rename to core/vendor/symfony/validator/Constraints/TimeValidator.php
index bfecf95b52fb9ae0757d34824fb84b00531141a7..1a173a13b46a70871de2149f64c275076e41c27b 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php
+++ b/core/vendor/symfony/validator/Constraints/TimeValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -60,19 +61,33 @@ public function validate($value, Constraint $constraint)
         $value = (string) $value;
 
         if (!preg_match(static::PATTERN, $value, $matches)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Time::INVALID_FORMAT_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Time::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Time::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            }
 
             return;
         }
 
         if (!self::checkTime($matches[1], $matches[2], $matches[3])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Time::INVALID_TIME_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Time::INVALID_TIME_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Time::INVALID_TIME_ERROR)
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php b/core/vendor/symfony/validator/Constraints/Traverse.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php
rename to core/vendor/symfony/validator/Constraints/Traverse.php
diff --git a/core/vendor/symfony/validator/Constraints/True.php b/core/vendor/symfony/validator/Constraints/True.php
new file mode 100644
index 0000000000000000000000000000000000000000..376f69ff3f95ef028d50a6ca9d2f2765c0773769
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/True.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\True class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrue class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsTrue instead.
+ */
+class True extends IsTrue
+{
+}
diff --git a/core/vendor/symfony/validator/Constraints/TrueValidator.php b/core/vendor/symfony/validator/Constraints/TrueValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..1cb252ae3f220afb95906976c6e63b0c86faee76
--- /dev/null
+++ b/core/vendor/symfony/validator/Constraints/TrueValidator.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+trigger_error('The '.__NAMESPACE__.'\TrueValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrueValidator class in the same namespace instead.', E_USER_DEPRECATED);
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.7, to be removed in 3.0. Use IsTrueValidator instead.
+ */
+class TrueValidator extends IsTrueValidator
+{
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php b/core/vendor/symfony/validator/Constraints/Type.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php
rename to core/vendor/symfony/validator/Constraints/Type.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php b/core/vendor/symfony/validator/Constraints/TypeValidator.php
similarity index 68%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php
rename to core/vendor/symfony/validator/Constraints/TypeValidator.php
index 66217d0c39fac030c466dd2821b76c3b5fa30eb8..30ad278de1b77c4b6fbeaa086eea65007899828f 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php
+++ b/core/vendor/symfony/validator/Constraints/TypeValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -48,9 +49,16 @@ public function validate($value, Constraint $constraint)
             return;
         }
 
-        $this->buildViolation($constraint->message)
-            ->setParameter('{{ value }}', $this->formatValue($value))
-            ->setParameter('{{ type }}', $constraint->type)
-            ->addViolation();
+        if ($this->context instanceof ExecutionContextInterface) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setParameter('{{ type }}', $constraint->type)
+                ->addViolation();
+        } else {
+            $this->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setParameter('{{ type }}', $constraint->type)
+                ->addViolation();
+        }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php b/core/vendor/symfony/validator/Constraints/Url.php
similarity index 87%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php
rename to core/vendor/symfony/validator/Constraints/Url.php
index e867ee1f0a9c4934b14aa1c376891b20f42e46c2..7b8ef3fb626cf157daae347b90393e21da557b2e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php
+++ b/core/vendor/symfony/validator/Constraints/Url.php
@@ -24,5 +24,7 @@
 class Url extends Constraint
 {
     public $message = 'This value is not a valid URL.';
+    public $dnsMessage = 'The host could not be resolved.';
     public $protocols = array('http', 'https');
+    public $checkDNS = false;
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php b/core/vendor/symfony/validator/Constraints/UrlValidator.php
similarity index 75%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php
rename to core/vendor/symfony/validator/Constraints/UrlValidator.php
index 3d184775acd5df206bdbde350aeba716c7d08e00..b38f8dafab3052a68c5b7c9f2f5edde4acac53cd 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php
+++ b/core/vendor/symfony/validator/Constraints/UrlValidator.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -59,9 +60,33 @@ public function validate($value, Constraint $constraint)
         $pattern = sprintf(static::PATTERN, implode('|', $constraint->protocols));
 
         if (!preg_match($pattern, $value)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        if ($constraint->checkDNS) {
+            $host = parse_url($value, PHP_URL_HOST);
+
+            if (!checkdnsrr($host, 'ANY')) {
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->dnsMessage)
+                       ->setParameter('{{ value }}', $this->formatValue($host))
+                       ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->dnsMessage)
+                       ->setParameter('{{ value }}', $this->formatValue($host))
+                       ->addViolation();
+                }
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php b/core/vendor/symfony/validator/Constraints/Uuid.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php
rename to core/vendor/symfony/validator/Constraints/Uuid.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php b/core/vendor/symfony/validator/Constraints/UuidValidator.php
similarity index 52%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php
rename to core/vendor/symfony/validator/Constraints/UuidValidator.php
index 0ae04e2694f37e5404b9977405e8d906be6a9787..08f9e27b736c88cd4a8d25ee2934ce78397fe374 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php
+++ b/core/vendor/symfony/validator/Constraints/UuidValidator.php
@@ -11,8 +11,10 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Constraints\Deprecated\UuidValidator as Deprecated;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
 
 /**
@@ -56,19 +58,19 @@ class UuidValidator extends ConstraintValidator
     const LOOSE_FIRST_HYPHEN_POSITION = 4;
 
     /**
-     * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0
+     * @deprecated since version 2.6, to be removed in 3.0
      */
     const STRICT_PATTERN = '/^[a-f0-9]{8}-[a-f0-9]{4}-[%s][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i';
 
     /**
-     * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0
+     * @deprecated since version 2.6, to be removed in 3.0
      */
     const LOOSE_PATTERN = '/^[a-f0-9]{4}(?:-?[a-f0-9]{4}){7}$/i';
 
     /**
-     * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0
+     * @deprecated since version 2.6, to be removed in 3.0
      */
-    const STRICT_UUID_LENGTH = self::STRICT_LENGTH;
+    const STRICT_UUID_LENGTH = 36;
 
     /**
      * {@inheritdoc}
@@ -113,10 +115,17 @@ private function validateLoose($value, Uuid $constraint)
         for ($i = 0; $i < $l; ++$i) {
             // Check length
             if (!isset($trimmed{$i})) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Uuid::TOO_SHORT_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::TOO_SHORT_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::TOO_SHORT_ERROR)
+                        ->addViolation();
+                }
 
                 return;
             }
@@ -126,10 +135,17 @@ private function validateLoose($value, Uuid $constraint)
             //     ^    ^    ^    ^    ^    ^    ^
             if ('-' === $trimmed{$i}) {
                 if ($i !== $h) {
-                    $this->buildViolation($constraint->message)
-                        ->setParameter('{{ value }}', $this->formatValue($value))
-                        ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
-                        ->addViolation();
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->message)
+                            ->setParameter('{{ value }}', $this->formatValue($value))
+                            ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                            ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->message)
+                            ->setParameter('{{ value }}', $this->formatValue($value))
+                            ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                            ->addViolation();
+                    }
 
                     return;
                 }
@@ -147,10 +163,17 @@ private function validateLoose($value, Uuid $constraint)
 
             // Check characters
             if (!ctype_xdigit($trimmed{$i})) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                        ->addViolation();
+                }
 
                 return;
             }
@@ -158,10 +181,17 @@ private function validateLoose($value, Uuid $constraint)
 
         // Check length again
         if (isset($trimmed{$i})) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Uuid::TOO_LONG_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_LONG_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_LONG_ERROR)
+                    ->addViolation();
+            }
         }
     }
 
@@ -180,10 +210,17 @@ private function validateStrict($value, Uuid $constraint)
         for ($i = 0; $i < self::STRICT_LENGTH; ++$i) {
             // Check length
             if (!isset($value{$i})) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Uuid::TOO_SHORT_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::TOO_SHORT_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::TOO_SHORT_ERROR)
+                        ->addViolation();
+                }
 
                 return;
             }
@@ -193,13 +230,23 @@ private function validateStrict($value, Uuid $constraint)
             //         ^    ^    ^    ^
             if ('-' === $value{$i}) {
                 if ($i !== $h) {
-                    $this->buildViolation($constraint->message)
-                         ->setParameter(
-                             '{{ value }}',
-                             $this->formatValue($value)
-                         )
-                         ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
-                         ->addViolation();
+                    if ($this->context instanceof ExecutionContextInterface) {
+                        $this->context->buildViolation($constraint->message)
+                             ->setParameter(
+                                 '{{ value }}',
+                                 $this->formatValue($value)
+                             )
+                             ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                             ->addViolation();
+                    } else {
+                        $this->buildViolation($constraint->message)
+                              ->setParameter(
+                                  '{{ value }}',
+                                  $this->formatValue($value)
+                              )
+                              ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                              ->addViolation();
+                    }
 
                     return;
                 }
@@ -215,20 +262,34 @@ private function validateStrict($value, Uuid $constraint)
 
             // Check characters
             if (!ctype_xdigit($value{$i})) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                        ->addViolation();
+                }
 
                 return;
             }
 
             // Missing hyphen
             if ($i === $h) {
-                $this->buildViolation($constraint->message)
-                    ->setParameter('{{ value }}', $this->formatValue($value))
-                    ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
-                    ->addViolation();
+                if ($this->context instanceof ExecutionContextInterface) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                        ->addViolation();
+                } else {
+                    $this->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                        ->addViolation();
+                }
 
                 return;
             }
@@ -236,18 +297,32 @@ private function validateStrict($value, Uuid $constraint)
 
         // Check length again
         if (isset($value{$i})) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Uuid::TOO_LONG_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_LONG_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_LONG_ERROR)
+                    ->addViolation();
+            }
         }
 
         // Check version
         if (!in_array($value{self::STRICT_VERSION_POSITION}, $constraint->versions)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Uuid::INVALID_VERSION_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_VERSION_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_VERSION_ERROR)
+                    ->addViolation();
+            }
         }
 
         // Check variant - first two bits must equal "10"
@@ -255,10 +330,17 @@ private function validateStrict($value, Uuid $constraint)
         // & 0b1100 (12)
         // = 0b1000 (8)
         if ((hexdec($value{self::STRICT_VARIANT_POSITION}) & 12) !== 8) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Uuid::INVALID_VARIANT_ERROR)
-                ->addViolation();
+            if ($this->context instanceof ExecutionContextInterface) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_VARIANT_ERROR)
+                    ->addViolation();
+            } else {
+                $this->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_VARIANT_ERROR)
+                    ->addViolation();
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php b/core/vendor/symfony/validator/Constraints/Valid.php
similarity index 70%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php
rename to core/vendor/symfony/validator/Constraints/Valid.php
index b0f518b8b82f84d201c7f073104f532cf415f108..cb520c93d4c556219cd079cd30a0557faa83c06b 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php
+++ b/core/vendor/symfony/validator/Constraints/Valid.php
@@ -27,7 +27,7 @@ class Valid extends Constraint
     public $traverse = true;
 
     /**
-     * @deprecated Deprecated as of version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in Symfony 3.0.
      */
     public $deep = true;
 
@@ -40,6 +40,10 @@ public function __construct($options = null)
             ));
         }
 
+        if (is_array($options) && array_key_exists('deep', $options)) {
+            trigger_error('The "deep" option for the Valid constraint is deprecated since version 2.5 and will be removed in 3.0. When traversing arrays, nested arrays are always traversed. When traversing nested objects, their traversal strategy is used.', E_USER_DEPRECATED);
+        }
+
         parent::__construct($options);
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php b/core/vendor/symfony/validator/Context/ExecutionContext.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php
rename to core/vendor/symfony/validator/Context/ExecutionContext.php
index f329615bd2f83f0fd71963941159a7fac50f7015..39f7d1506d6462cdbd4f79b1b72b556ccdacb1f8 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php
+++ b/core/vendor/symfony/validator/Context/ExecutionContext.php
@@ -14,13 +14,14 @@
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\ClassBasedInterface;
 use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Valid;
 use Symfony\Component\Validator\ConstraintViolation;
 use Symfony\Component\Validator\ConstraintViolationList;
-use Symfony\Component\Validator\Exception\BadMethodCallException;
 use Symfony\Component\Validator\Mapping\MetadataInterface;
 use Symfony\Component\Validator\Mapping\PropertyMetadataInterface;
 use Symfony\Component\Validator\Util\PropertyPath;
 use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
 use Symfony\Component\Validator\Violation\ConstraintViolationBuilder;
 
 /**
@@ -187,11 +188,17 @@ public function addViolation($message, array $parameters = array(), $invalidValu
         // API, as they are not present in the new interface anymore.
         // You should use buildViolation() instead.
         if (func_num_args() > 2) {
-            throw new BadMethodCallException(
-                'The parameters $invalidValue, $pluralization and $code are '.
-                'not supported anymore as of Symfony 2.5. Please use '.
-                'buildViolation() instead or enable the legacy mode.'
-            );
+            trigger_error('The parameters $invalidValue, $plural and $code in method '.__METHOD__.' are deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
+
+            $this
+                ->buildViolation($message, $parameters)
+                ->setInvalidValue($invalidValue)
+                ->setPlural($plural)
+                ->setCode($code)
+                ->addViolation()
+            ;
+
+            return;
         }
 
         $this->violations->add(new ConstraintViolation(
@@ -310,10 +317,26 @@ public function getPropertyPath($subPath = '')
      */
     public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null)
     {
-        throw new BadMethodCallException(
-            'addViolationAt() is not supported anymore as of Symfony 2.5. '.
-            'Please use buildViolation() instead or enable the legacy mode.'
-        );
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
+
+        if (func_num_args() > 2) {
+            $this
+                ->buildViolation($message, $parameters)
+                ->atPath($subPath)
+                ->setInvalidValue($invalidValue)
+                ->setPlural($plural)
+                ->setCode($code)
+                ->addViolation()
+            ;
+
+            return;
+        }
+
+        $this
+            ->buildViolation($message, $parameters)
+            ->atPath($subPath)
+            ->addViolation()
+        ;
     }
 
     /**
@@ -321,10 +344,37 @@ public function addViolationAt($subPath, $message, array $parameters = array(),
      */
     public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false)
     {
-        throw new BadMethodCallException(
-            'validate() is not supported anymore as of Symfony 2.5. '.
-            'Please use getValidator() instead or enable the legacy mode.'
-        );
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
+
+        if (is_array($value)) {
+            // The $traverse flag is ignored for arrays
+            $constraint = new Valid(array('traverse' => true, 'deep' => $deep));
+
+            return $this
+                ->getValidator()
+                ->inContext($this)
+                ->atPath($subPath)
+                ->validate($value, $constraint, $groups)
+            ;
+        }
+
+        if ($traverse && $value instanceof \Traversable) {
+            $constraint = new Valid(array('traverse' => true, 'deep' => $deep));
+
+            return $this
+                ->getValidator()
+                ->inContext($this)
+                ->atPath($subPath)
+                ->validate($value, $constraint, $groups)
+            ;
+        }
+
+        return $this
+            ->getValidator()
+            ->inContext($this)
+            ->atPath($subPath)
+            ->validate($value, null, $groups)
+        ;
     }
 
     /**
@@ -332,10 +382,14 @@ public function validate($value, $subPath = '', $groups = null, $traverse = fals
      */
     public function validateValue($value, $constraints, $subPath = '', $groups = null)
     {
-        throw new BadMethodCallException(
-            'validateValue() is not supported anymore as of Symfony 2.5. '.
-            'Please use getValidator() instead or enable the legacy mode.'
-        );
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
+
+        return $this
+            ->getValidator()
+            ->inContext($this)
+            ->atPath($subPath)
+            ->validate($value, $constraints, $groups)
+        ;
     }
 
     /**
@@ -343,11 +397,16 @@ public function validateValue($value, $constraints, $subPath = '', $groups = nul
      */
     public function getMetadataFactory()
     {
-        throw new BadMethodCallException(
-            'getMetadataFactory() is not supported anymore as of Symfony 2.5. '.
-            'Please use getValidator() in combination with getMetadataFor() '.
-            'or hasMetadataFor() instead or enable the legacy mode.'
-        );
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0. Use the new Symfony\Component\Validator\Context\ExecutionContext::getValidator method in combination with Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
+
+        $validator = $this->getValidator();
+
+        if ($validator instanceof LegacyValidatorInterface) {
+            return $validator->getMetadataFactory();
+        }
+
+        // The ValidatorInterface extends from the deprecated MetadataFactoryInterface, so return it when we don't have the factory instance itself
+        return $validator;
     }
 
     /**
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php b/core/vendor/symfony/validator/Context/ExecutionContextFactory.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php
rename to core/vendor/symfony/validator/Context/ExecutionContextFactory.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php b/core/vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php
rename to core/vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php b/core/vendor/symfony/validator/Context/ExecutionContextInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php
rename to core/vendor/symfony/validator/Context/ExecutionContextInterface.php
diff --git a/core/vendor/symfony/validator/Context/LegacyExecutionContext.php b/core/vendor/symfony/validator/Context/LegacyExecutionContext.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ee7a228c47d15a49ab2adc0299c0c2c65498977
--- /dev/null
+++ b/core/vendor/symfony/validator/Context/LegacyExecutionContext.php
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Context;
+
+trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContext class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
+use Symfony\Component\Translation\TranslatorInterface;
+use Symfony\Component\Validator\MetadataFactoryInterface;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+/**
+ * An execution context that is compatible with the legacy API (< 2.5).
+ *
+ * @since  2.5
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @deprecated since version 2.5, to be removed in 3.0.
+ */
+class LegacyExecutionContext extends ExecutionContext
+{
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+
+    /**
+     * Creates a new context.
+     *
+     * @see ExecutionContext::__construct()
+     *
+     * @internal Called by {@link LegacyExecutionContextFactory}. Should not be used
+     *           in user code.
+     */
+    public function __construct(ValidatorInterface $validator, $root, MetadataFactoryInterface $metadataFactory, TranslatorInterface $translator, $translationDomain = null)
+    {
+        parent::__construct(
+            $validator,
+            $root,
+            $translator,
+            $translationDomain
+        );
+
+        $this->metadataFactory = $metadataFactory;
+    }
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php b/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
similarity index 87%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php
rename to core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
index cf5cd07e9ef54beeaf2be6ef78f24c96b88f5e69..31fb4cbdde0ec918b1cd2352be214974951d22d9 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php
+++ b/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator\Context;
 
+trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContextFactory class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\Validator\ValidatorInterface;
@@ -18,11 +20,12 @@
 /**
  * Creates new {@link LegacyExecutionContext} instances.
  *
+ * Implemented for backward compatibility with Symfony < 2.5.
+ *
  * @since  2.5
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
- *             To be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  */
 class LegacyExecutionContextFactory implements ExecutionContextFactoryInterface
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php b/core/vendor/symfony/validator/DefaultTranslator.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php
rename to core/vendor/symfony/validator/DefaultTranslator.php
index 63fa09efd76f6efb65e1c80e4bdd54e0972d5280..37c9c170fcd5aea3305ec036b86e668ba753ce4f 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php
+++ b/core/vendor/symfony/validator/DefaultTranslator.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator;
 
+trigger_error('The class '.__NAMESPACE__.'\DefaultTranslator is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Translation\IdentityTranslator instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Exception\BadMethodCallException;
 use Symfony\Component\Validator\Exception\InvalidArgumentException;
@@ -43,6 +45,8 @@
  * {@link \Symfony\Component\Translation\Translator} and can be used in places
  * where translation is not required by default but should be optional.
  *
+ * @deprecated since version 2.7, to be removed in 3.0. Use Symfony\Component\Translation\IdentityTranslator instead.
+ *
  * @author Bernhard Schussek <bschussek@gmail.com>
  */
 class DefaultTranslator implements TranslatorInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php b/core/vendor/symfony/validator/Exception/BadMethodCallException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php
rename to core/vendor/symfony/validator/Exception/BadMethodCallException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php b/core/vendor/symfony/validator/Exception/ConstraintDefinitionException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php
rename to core/vendor/symfony/validator/Exception/ConstraintDefinitionException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php b/core/vendor/symfony/validator/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php
rename to core/vendor/symfony/validator/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php b/core/vendor/symfony/validator/Exception/GroupDefinitionException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php
rename to core/vendor/symfony/validator/Exception/GroupDefinitionException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php b/core/vendor/symfony/validator/Exception/InvalidArgumentException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php
rename to core/vendor/symfony/validator/Exception/InvalidArgumentException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php b/core/vendor/symfony/validator/Exception/InvalidOptionsException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php
rename to core/vendor/symfony/validator/Exception/InvalidOptionsException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php b/core/vendor/symfony/validator/Exception/MappingException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php
rename to core/vendor/symfony/validator/Exception/MappingException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php b/core/vendor/symfony/validator/Exception/MissingOptionsException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php
rename to core/vendor/symfony/validator/Exception/MissingOptionsException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php b/core/vendor/symfony/validator/Exception/NoSuchMetadataException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php
rename to core/vendor/symfony/validator/Exception/NoSuchMetadataException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php b/core/vendor/symfony/validator/Exception/OutOfBoundsException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php
rename to core/vendor/symfony/validator/Exception/OutOfBoundsException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php b/core/vendor/symfony/validator/Exception/RuntimeException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php
rename to core/vendor/symfony/validator/Exception/RuntimeException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php b/core/vendor/symfony/validator/Exception/UnexpectedTypeException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php
rename to core/vendor/symfony/validator/Exception/UnexpectedTypeException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php b/core/vendor/symfony/validator/Exception/UnsupportedMetadataException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php
rename to core/vendor/symfony/validator/Exception/UnsupportedMetadataException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php b/core/vendor/symfony/validator/Exception/ValidatorException.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php
rename to core/vendor/symfony/validator/Exception/ValidatorException.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php b/core/vendor/symfony/validator/ExecutionContext.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php
rename to core/vendor/symfony/validator/ExecutionContext.php
index 31911b8d712c6d122a70fd3739e3a009e7c1bf0c..d21dd780f1c064e9d40436491905136f0fac32c6 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php
+++ b/core/vendor/symfony/validator/ExecutionContext.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator;
 
+trigger_error('The '.__NAMESPACE__.'\ExecutionContext class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Context\ExecutionContext class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Translation\TranslatorInterface;
 
 /**
@@ -21,7 +23,7 @@
  * @author Fabien Potencier <fabien@symfony.com>
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Context\ExecutionContext} instead.
  */
 class ExecutionContext implements ExecutionContextInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php b/core/vendor/symfony/validator/ExecutionContextInterface.php
similarity index 95%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php
rename to core/vendor/symfony/validator/ExecutionContextInterface.php
index ebef4bdf8424685df7883af62fd2729cd9ba6f32..3fedfe15de02f51b1c1a421c413ff775b94e4838 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php
+++ b/core/vendor/symfony/validator/ExecutionContextInterface.php
@@ -83,7 +83,7 @@
  *
  * @api
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Context\ExecutionContextInterface} instead.
  */
 interface ExecutionContextInterface
@@ -99,9 +99,7 @@ interface ExecutionContextInterface
      *
      * @api
      *
-     * @deprecated The parameters $invalidValue, $pluralization and $code are
-     *             deprecated since version 2.5 and will be removed in
-     *             Symfony 3.0.
+     * @deprecated the parameters $invalidValue, $plural and $code are deprecated since version 2.5 and will be removed in 3.0.
      */
     public function addViolation($message, array $params = array(), $invalidValue = null, $plural = null, $code = null);
 
@@ -118,7 +116,7 @@ public function addViolation($message, array $params = array(), $invalidValue =
      *
      * @api
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link Context\ExecutionContextInterface::buildViolation()}
      *             instead.
      */
@@ -163,7 +161,7 @@ public function addViolationAt($subPath, $message, array $parameters = array(),
      * @param bool                 $deep     Whether to traverse the value recursively if
      *                                       it is a collection of collections.
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link Context\ExecutionContextInterface::getValidator()}
      *             instead.
      */
@@ -196,7 +194,7 @@ public function validate($value, $subPath = '', $groups = null, $traverse = fals
      *                                             groups here, the current group of the context
      *                                             will be used.
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link Context\ExecutionContextInterface::getValidator()}
      *             instead.
      */
@@ -257,7 +255,7 @@ public function getMetadata();
      *
      * @return MetadataFactoryInterface The metadata factory.
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link Context\ExecutionContextInterface::getValidator()}
      *             instead and call
      *             {@link Validator\ValidatorInterface::getMetadataFor()} or
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php b/core/vendor/symfony/validator/GlobalExecutionContextInterface.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php
rename to core/vendor/symfony/validator/GlobalExecutionContextInterface.php
index 06dbf3e4c5d618fd27a0157714e3d36e967127d0..5c646f294baee9332e9989cda7fe3db9d0cc2267 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php
+++ b/core/vendor/symfony/validator/GlobalExecutionContextInterface.php
@@ -27,7 +27,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Context\ExecutionContextInterface} instead.
  */
 interface GlobalExecutionContextInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php b/core/vendor/symfony/validator/GroupSequenceProviderInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php
rename to core/vendor/symfony/validator/GroupSequenceProviderInterface.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/LICENSE b/core/vendor/symfony/validator/LICENSE
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/LICENSE
rename to core/vendor/symfony/validator/LICENSE
diff --git a/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php b/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad5a980e4ca310d6ee0fda9e03fa04d50cb0155e
--- /dev/null
+++ b/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+trigger_error('The '.__NAMESPACE__.'\BlackholeMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory class instead.', E_USER_DEPRECATED);
+
+use Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory as MappingBlackHoleMetadataFactory;
+
+/**
+ * Alias of {@link Factory\BlackHoleMetadataFactory}.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since version 2.5, to be removed in 3.0.
+ *             Use {@link Factory\BlackHoleMetadataFactory} instead.
+ */
+class BlackholeMetadataFactory extends MappingBlackHoleMetadataFactory
+{
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php b/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
similarity index 77%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php
rename to core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
index 64929b09663abcc788bf7d73710b1424d4bb9fe8..5dbe9f406a148f4137c2637e6888a7c6208a7635 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php
+++ b/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
@@ -11,11 +11,13 @@
 
 namespace Symfony\Component\Validator\Mapping\Cache;
 
+trigger_error('The '.__NAMESPACE__.'\ApcCache class is deprecated since version 2.5 and will be removed in 3.0. Use DoctrineCache with the Doctrine\Common\Cache\ApcCache class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 
 /**
- * @deprecated Deprecated since version 2.5, to be removed in 3.0.
- *             Use DoctrineCache with Doctrine\Common\Cache\ApcCache instead.
+ * @deprecated since version 2.5, to be removed in 3.0.
+ *             Use DoctrineCache with \Doctrine\Common\Cache\ApcCache instead.
  */
 class ApcCache implements CacheInterface
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php b/core/vendor/symfony/validator/Mapping/Cache/CacheInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php
rename to core/vendor/symfony/validator/Mapping/Cache/CacheInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php b/core/vendor/symfony/validator/Mapping/Cache/DoctrineCache.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php
rename to core/vendor/symfony/validator/Mapping/Cache/DoctrineCache.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php b/core/vendor/symfony/validator/Mapping/CascadingStrategy.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php
rename to core/vendor/symfony/validator/Mapping/CascadingStrategy.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php b/core/vendor/symfony/validator/Mapping/ClassMetadata.php
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php
rename to core/vendor/symfony/validator/Mapping/ClassMetadata.php
index a234939f292db568ac27f08c2c06aa43d021d329..5991f3489e513cb6541b011fe98f2e1e20141a68 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/ClassMetadata.php
@@ -129,14 +129,16 @@ public function __construct($class)
     /**
      * {@inheritdoc}
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         if (null === $propagatedGroup && Constraint::DEFAULT_GROUP === $group
                 && ($this->hasGroupSequence() || $this->isGroupSequenceProvider())) {
             if ($this->hasGroupSequence()) {
-                $groups = $this->getGroupSequence();
+                $groups = $this->getGroupSequence()->groups;
             } else {
                 $groups = $value->getGroupSequence();
             }
@@ -371,10 +373,12 @@ public function mergeConstraints(ClassMetadata $source)
      *
      * @param MemberMetadata $metadata
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0.
+     * @deprecated since version 2.6, to be removed in 3.0.
      */
     protected function addMemberMetadata(MemberMetadata $metadata)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addPropertyMetadata() method instead.', E_USER_DEPRECATED);
+
         $this->addPropertyMetadata($metadata);
     }
 
@@ -385,10 +389,12 @@ protected function addMemberMetadata(MemberMetadata $metadata)
      *
      * @return bool
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link hasPropertyMetadata} instead.
+     * @deprecated since version 2.6, to be removed in 3.0. Use {@link hasPropertyMetadata} instead.
      */
     public function hasMemberMetadatas($property)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasPropertyMetadata() method instead.', E_USER_DEPRECATED);
+
         return $this->hasPropertyMetadata($property);
     }
 
@@ -399,10 +405,12 @@ public function hasMemberMetadatas($property)
      *
      * @return MemberMetadata[] An array of MemberMetadata
      *
-     * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link getPropertyMetadata} instead.
+     * @deprecated since version 2.6, to be removed in 3.0. Use {@link getPropertyMetadata} instead.
      */
     public function getMemberMetadatas($property)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getPropertyMetadata() method instead.', E_USER_DEPRECATED);
+
         return $this->getPropertyMetadata($property);
     }
 
@@ -471,7 +479,7 @@ public function setGroupSequence($groupSequence)
      */
     public function hasGroupSequence()
     {
-        return count($this->groupSequence) > 0;
+        return $this->groupSequence && count($this->groupSequence->groups) > 0;
     }
 
     /**
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php b/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
similarity index 67%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php
rename to core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
index 9b05edde8f3cce976068133d0f2e7b8ff36ab027..92cc85b2ef67d10f13bc63e70deb32177d986cad 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php
+++ b/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator\Mapping;
 
+trigger_error('The '.__NAMESPACE__.'\ClassMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
 
 /**
@@ -18,7 +20,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link LazyLoadingMetadataFactory} instead.
  */
 class ClassMetadataFactory extends LazyLoadingMetadataFactory
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php b/core/vendor/symfony/validator/Mapping/ClassMetadataInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php
rename to core/vendor/symfony/validator/Mapping/ClassMetadataInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php b/core/vendor/symfony/validator/Mapping/ElementMetadata.php
similarity index 56%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php
rename to core/vendor/symfony/validator/Mapping/ElementMetadata.php
index 1b971c91803c1368cfcc07e5194074b26e5a85c7..1783864e0067a80fbda93ea616826759117aa565 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/ElementMetadata.php
@@ -16,9 +16,15 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Extend {@link GenericMetadata} instead.
  */
 abstract class ElementMetadata extends GenericMetadata
 {
+    public function __construct()
+    {
+        if (!$this instanceof MemberMetadata && !$this instanceof ClassMetadata) {
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\GenericMetadata class instead.', E_USER_DEPRECATED);
+        }
+    }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php b/core/vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php
rename to core/vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php b/core/vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php
rename to core/vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php b/core/vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php
rename to core/vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php b/core/vendor/symfony/validator/Mapping/GenericMetadata.php
similarity index 98%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php
rename to core/vendor/symfony/validator/Mapping/GenericMetadata.php
index 904dcd768862f18d8f5e4a224301c10409168056..cc0e54d3619e8427ec5eb0954a06abf782ec1169 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/GenericMetadata.php
@@ -231,10 +231,11 @@ public function getTraversalStrategy()
      *
      * Should not be used.
      *
+     * Implemented for backward compatibility with Symfony < 2.5.
+     *
      * @throws BadMethodCallException
      *
-     * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
-     *             Will be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath)
     {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php b/core/vendor/symfony/validator/Mapping/GetterMetadata.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php
rename to core/vendor/symfony/validator/Mapping/GetterMetadata.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php b/core/vendor/symfony/validator/Mapping/Loader/AbstractLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/AbstractLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php b/core/vendor/symfony/validator/Mapping/Loader/AnnotationLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/AnnotationLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php b/core/vendor/symfony/validator/Mapping/Loader/FileLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/FileLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php b/core/vendor/symfony/validator/Mapping/Loader/FilesLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/FilesLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php b/core/vendor/symfony/validator/Mapping/Loader/LoaderChain.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php
rename to core/vendor/symfony/validator/Mapping/Loader/LoaderChain.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php b/core/vendor/symfony/validator/Mapping/Loader/LoaderInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php
rename to core/vendor/symfony/validator/Mapping/Loader/LoaderInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/core/vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/core/vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php b/core/vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php b/core/vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php b/core/vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php
rename to core/vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd b/core/vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd
rename to core/vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php b/core/vendor/symfony/validator/Mapping/MemberMetadata.php
similarity index 88%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php
rename to core/vendor/symfony/validator/Mapping/MemberMetadata.php
index a0bbe0dbf02751014d7a27ca42df535d4d5932a1..394fa2059fd8c79f56247e321ff85a86e870b5aa 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/MemberMetadata.php
@@ -78,10 +78,12 @@ public function __construct($class, $name, $property)
     /**
      * {@inheritdoc}
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
         $visitor->visit($this, $value, $group, $propertyPath);
 
         if ($this->isCascaded()) {
@@ -185,11 +187,13 @@ public function isPrivate($objectOrClassName)
      *
      * @return bool
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link getCascadingStrategy()} instead.
      */
     public function isCascaded()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getCascadingStrategy() method instead.', E_USER_DEPRECATED);
+
         return (bool) ($this->cascadingStrategy & CascadingStrategy::CASCADE);
     }
 
@@ -199,11 +203,13 @@ public function isCascaded()
      *
      * @return bool
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link getTraversalStrategy()} instead.
      */
     public function isCollectionCascaded()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
+
         return (bool) ($this->traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE));
     }
 
@@ -213,11 +219,13 @@ public function isCollectionCascaded()
      *
      * @return bool
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link getTraversalStrategy()} instead.
      */
     public function isCollectionCascadedDeeply()
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
+
         return !($this->traversalStrategy & TraversalStrategy::STOP_RECURSION);
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php b/core/vendor/symfony/validator/Mapping/MetadataInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php
rename to core/vendor/symfony/validator/Mapping/MetadataInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php b/core/vendor/symfony/validator/Mapping/PropertyMetadata.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php
rename to core/vendor/symfony/validator/Mapping/PropertyMetadata.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php b/core/vendor/symfony/validator/Mapping/PropertyMetadataInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php
rename to core/vendor/symfony/validator/Mapping/PropertyMetadataInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php b/core/vendor/symfony/validator/Mapping/TraversalStrategy.php
similarity index 92%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php
rename to core/vendor/symfony/validator/Mapping/TraversalStrategy.php
index 5122c475d0175785dfd3ff503f04b3a0dd16b918..450a3ecc0a0a882f64061a9930c6908507e06efe 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php
+++ b/core/vendor/symfony/validator/Mapping/TraversalStrategy.php
@@ -51,8 +51,8 @@ class TraversalStrategy
      * Specifies that nested instances of {@link \Traversable} should never be
      * iterated. Can be combined with {@link IMPLICIT} or {@link TRAVERSE}.
      *
-     * @deprecated This constant was added for backwards compatibility only.
-     *             It will be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0. This constant was added for backwards compatibility only.
+     *
      * @internal
      */
     const STOP_RECURSION = 8;
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php b/core/vendor/symfony/validator/MetadataFactoryInterface.php
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php
rename to core/vendor/symfony/validator/MetadataFactoryInterface.php
index 4c0cbad78b1ff605163850b1c962769eefacf11e..555bea9aa21e5f8ebd1b756f4e8b5bf0a9a11719 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php
+++ b/core/vendor/symfony/validator/MetadataFactoryInterface.php
@@ -16,7 +16,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Mapping\Factory\MetadataFactoryInterface} instead.
  */
 interface MetadataFactoryInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php b/core/vendor/symfony/validator/MetadataInterface.php
similarity index 95%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php
rename to core/vendor/symfony/validator/MetadataInterface.php
index 60abfeb42a9f00383bf0c3eaccd0b61961852515..2c8944903c6bf036fd56eaa6a3e2c6a575dcae46 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php
+++ b/core/vendor/symfony/validator/MetadataInterface.php
@@ -42,7 +42,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Mapping\MetadataInterface} instead.
  */
 interface MetadataInterface
@@ -58,7 +58,7 @@ interface MetadataInterface
      * @param string|string[]            $group        The validation group to validate in
      * @param string                     $propertyPath The current property path in the validation graph
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath);
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php b/core/vendor/symfony/validator/ObjectInitializerInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php
rename to core/vendor/symfony/validator/ObjectInitializerInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php b/core/vendor/symfony/validator/PropertyMetadataContainerInterface.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php
rename to core/vendor/symfony/validator/PropertyMetadataContainerInterface.php
index 91b286ab26e4be0a2d2265f37c92a534371c7815..5441be1c3d0631308f400713bda3e986922632e4 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php
+++ b/core/vendor/symfony/validator/PropertyMetadataContainerInterface.php
@@ -16,7 +16,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Mapping\ClassMetadataInterface} instead.
  */
 interface PropertyMetadataContainerInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php b/core/vendor/symfony/validator/PropertyMetadataInterface.php
similarity index 94%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php
rename to core/vendor/symfony/validator/PropertyMetadataInterface.php
index c18ae83a05e8168c41977346b0ebadc2225b9f66..20af8a993bcda206b7104c5eca7180a31b7df442 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php
+++ b/core/vendor/symfony/validator/PropertyMetadataInterface.php
@@ -24,7 +24,7 @@
  *
  * @see MetadataInterface
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Mapping\PropertyMetadataInterface} instead.
  */
 interface PropertyMetadataInterface extends MetadataInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/README.md b/core/vendor/symfony/validator/README.md
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/README.md
rename to core/vendor/symfony/validator/README.md
index 8c3dc4890b23f45529dc61bdefffb716e55316d2..9014ec67240eecc46fab6e380db4cda9f6c78880 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/README.md
+++ b/core/vendor/symfony/validator/README.md
@@ -81,7 +81,7 @@ class User
     }
 
     /**
-     * @Assert\True(message = "The user should have a Google Mail account")
+     * @Assert\IsTrue(message = "The user should have a Google Mail account")
      */
     public function isGmailUser()
     {
@@ -113,7 +113,7 @@ https://github.com/fabpot/Silex/blob/master/src/Silex/Provider/ValidatorServiceP
 
 Documentation:
 
-https://symfony.com/doc/2.6/book/validation.html
+https://symfony.com/doc/2.7/book/validation.html
 
 JSR-303 Specification:
 
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.af.xlf b/core/vendor/symfony/validator/Resources/translations/validators.af.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..177bb0038f5236ed6fa4756f10e46fd6624184d3
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.af.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Hierdie waarde moet vals wees.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Hierdie waarde moet waar wees.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Hierdie waarde moet van die soort {{type}} wees.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Hierdie waarde moet leeg wees.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Die waarde wat jy gekies het is nie 'n geldige keuse nie.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Jy moet ten minste {{ limit }} kies.|Jy moet ten minste {{ limit }} keuses kies.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Jy moet by die meeste {{ limit }} keuse kies.|Jy moet by die meeste {{ limit }} keuses kies.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Een of meer van die gegewe waardes is ongeldig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Die veld is nie verwag nie.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Hierdie veld ontbreek.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Hierdie waarde is nie 'n geldige datum nie.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Hierdie waarde is nie 'n geldige datum en tyd nie.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Hierdie waarde is nie 'n geldige e-pos adres nie.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Die lêer kon nie gevind word nie.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Die lêer kan nie gelees word nie.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die lêer is te groot ({{ size }} {{ suffix }}). Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Die MIME-tipe van die lêer is ongeldig ({{ type }}). Toegelaat MIME-tipes is {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Hierdie waarde moet {{ limit }} of minder wees.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Hierdie waarde is te lank. Dit moet {{ limit }} karakter of minder wees.|Hierdie waarde is te lank. Dit moet {{ limit }} karakters of minder wees.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Hierdie waarde moet {{ limit }} of meer wees.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Hierdie waarde is te kort. Dit moet {{ limit }} karakter of meer wees.|Hierdie waarde is te kort. Dit moet {{ limit }} karakters of meer wees.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Hierdie waarde moet nie leeg wees nie.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Hierdie waarde moet nie nul wees nie.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Hierdie waarde moet nul wees.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Hierdie waarde is nie geldig nie.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Hierdie waarde is nie 'n geldige tyd nie.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Hierdie waarde is nie 'n geldige URL nie.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Die twee waardes moet gelyk wees.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die lêer is te groot. Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Die lêer is te groot.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Die lêer kan nie opgelaai word nie.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Hierdie waarde moet 'n geldige nommer wees.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Hierdie lêer is nie 'n geldige beeld nie.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Hierdie is nie 'n geldige IP-adres nie.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Hierdie waarde is nie 'n geldige taal nie.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Hierdie waarde is nie 'n geldige land instelling nie.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Hierdie waarde is nie 'n geldige land nie.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Hierdie waarde word reeds gebruik.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Die grootte van die beeld kon nie opgespoor word nie.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Die beeld breedte is te groot ({{ width }}px). Toegelaat maksimum breedte is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Die beeld breedte is te klein ({{ width }}px). Minimum breedte verwag is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Die beeld hoogte is te groot ({{ height }}px). Toegelaat maksimum hoogte is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Die beeld hoogte is te klein ({{ height }}px). Minimum hoogte verwag is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Hierdie waarde moet die huidige wagwoord van die gebruiker wees.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Hierdie waarde moet presies {{ limit }} karakter wees.|Hierdie waarde moet presies {{ limit }} karakters wees.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Die lêer is slegs gedeeltelik opgelaai.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Geen lêer is opgelaai nie.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Geen tydelike lêer is ingestel in php.ini nie.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan nie tydelike lêer skryf op skyf nie.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>'n PHP-uitbreiding veroorsaak die oplaai van die lêer om te misluk.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Hierdie versameling moet {{ limit }} element of meer bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Hierdie versameling moet {{ limit }} element of minder bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Hierdie versameling moet presies {{ limit }} element bevat.|Hierdie versameling moet presies {{ limit }} elemente bevat.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ongeldige kredietkaart nommer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nie-ondersteunde tipe kaart of ongeldige kredietkaart nommer.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ar.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ar.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..4950e0ccd1183b3b715a167812dee1d86fcb1f03
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ar.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>هذه القيمة يجب أن تكون خاطئة.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>هذه القيمة يجب أن تكون حقيقية.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>هذه القيمة يجب ان تكون من نوع {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>هذه القيمة يجب ان تكون فارغة.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>القيمة المختارة ليست خيارا صحيحا.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيارات على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيارات على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>واحد أو أكثر من القيم المعطاه خاطئ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>لم يكن من المتوقع هذا المجال.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>هذا المجال مفقود.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>هذه القيمة ليست تاريخا صالحا.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>هذه القيمة ليست تاريخا و وقتا صالحا.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>هذه القيمة ليست عنوان بريد إلكتروني صحيح.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>لا يمكن العثور على الملف.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>الملف غير قابل للقراءة.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>الملف كبير جدا ({{ size }} {{ suffix }}).اقصى مساحه مسموح بها ({{ limit }} {{ suffix }}).</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>نوع الملف غير صحيح ({{ type }}). الانواع المسموح بها هى {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>هذه القيمة يجب ان تكون {{ limit }} او اقل.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حروف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>هذه القيمة يجب ان تكون {{ limit }} او اكثر.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حروف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>هذه القيمة يجب الا تكون فارغة.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>هذه القيمة يجب الا تكون فارغة.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>هذه القيمة يجب ان تكون فارغة.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>هذه القيمة غير صحيحة.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>هذه القيمة ليست وقت صحيح.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>هذه القيمة ليست رابط الكترونى صحيح.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>القيمتان يجب ان تكونا متساويتان.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>الملف كبير جدا. اقصى مساحه مسموح بها {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>الملف كبير جدا.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>لم استطع استقبال الملف.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>هذه القيمة يجب ان تكون رقم.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>هذا الملف ليس صورة صحيحة.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>هذه القيمة ليست عنوان رقمى صحيح.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>هذه القيمة ليست لغة صحيحة.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>هذه القيمة ليست موقع صحيح.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>هذه القيمة ليست بلدا صالحا.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>هذه القيمة مستخدمة بالفعل.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>لم استطع معرفة حجم الصورة.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>عرض الصورة كبير جدا ({{ width }}px). اقصى عرض مسموح به هو{{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>عرض الصورة صغير جدا ({{ width }}px). اقل عرض مسموح به هو{{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>طول الصورة كبير جدا ({{ height }}px). اقصى طول مسموح به هو{{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>طول الصورة صغير جدا ({{ height }}px). اقل طول مسموح به هو{{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>هذه القيمة يجب ان تكون كلمة سر المستخدم الحالية.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حروف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>تم استقبال جزء من الملف فقط.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>لم يتم ارسال اى ملف.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>لم يتم تهيئة حافظة مؤقتة فى ملف php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>لم استطع كتابة الملف المؤقت.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>احد اضافات PHP تسببت فى فشل استقبال الملف.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>رقم البطاقه غير صحيح.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>نوع البطاقه غير مدعوم او الرقم غير صحيح.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>الرقم IBAN (رقم الحساب المصرفي الدولي) الذي تم إدخاله غير صالح.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>هذه القيمة ليست ISBN-10 صالحة.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>هذه القيمة ليست ISBN-13 صالحة.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>هذه القيمة ليست ISBN-10 صالحة ولا ISBN-13 صالحة.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>هذه القيمة ليست ISSN صالحة.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>العُملة غير صحيحة.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>القيمة يجب ان تساوي {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>القيمة يجب ان تكون اعلي من {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>القيمة يجب ان تكون مساوية او اعلي من {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>القيمة يجب ان تطابق {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>القيمة يجب ان تكون اقل من {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>القيمة يجب ان تساوي او تقل عن {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>القيمة يجب ان لا تساوي {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>القيمة يجب ان لا تطابق {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>نسبة العرض على الارتفاع للصورة كبيرة جدا ({{ ratio }}). الحد الأقصى للنسبة المسموح به هو {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>نسبة العرض على الارتفاع للصورة صغيرة جدا ({{ ratio }}). الحد الأدنى للنسبة المسموح به هو {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>الصورة مربعة ({{ width }}x{{ height }}px). الصور المربعة غير مسموح بها.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>الصورة في وضع أفقي ({{ width }}x{{ height }}px). الصور في وضع أفقي غير مسموح بها.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>الصورة في وضع عمودي ({{ width }}x{{ height }}px). الصور في وضع عمودي غير مسموح بها.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ملف فارغ غير مسموح به.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>يتعذر الإتصال بالنطاق.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>هذه القيمة غير متطابقة مع صيغة التحويل {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.az.xlf b/core/vendor/symfony/validator/Resources/translations/validators.az.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..add868cd42b40e3fb3f3ca65089bb1e2c524af2b
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.az.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Bu dəyər false olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Bu dəyər true olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Bu dəyərin tipi {{ type }} olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Bu dəyər boş olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Seçdiyiniz dəyər düzgün bir seçim değil.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ən az {{ limit }} seçim qeyd edilməlidir.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ən çox {{ limit }} seçim qeyd edilməlidir.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Təqdim edilən dəyərlərdən bir və ya bir neçəsi yanlışdır.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Bu sahə gözlənilmirdi.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bu sahə əksikdir.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Bu dəyər düzgün bir tarix deyil.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Bu dəyər düzgün bir tarixsaat deyil.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Bu dəyər düzgün bir e-poçt adresi deyil.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fayl tapılmadı.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fayl oxunabilən deyil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl çox böyükdür ({{ size }} {{ suffix }}). İcazə verilən maksimum fayl ölçüsü {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Faylın mime tipi yanlışdr ({{ type }}). İcazə verilən mime tipləri {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Bu dəyər {{ limit }} və ya altında olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Bu dəyər çox uzundur. {{ limit }} və ya daha az simvol olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Bu dəyər {{ limit }} veya daha fazla olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Bu dəyər çox qısadır. {{ limit }} və ya daha çox simvol olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Bu dəyər boş olmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Bu dəyər boş olmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Bu dəyər boş olmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Bu dəyər doğru deyil.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Bu dəyər doğru bir saat deyil.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Bu dəyər doğru bir URL değil.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>İki dəyər eyni olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl çox böyükdür. İcazə verilən ən böyük fayl ölçüsü {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fayl çox böyükdür.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fayl yüklənəbilmir.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Bu dəyər rəqəm olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Bu fayl düzgün bir şəkil deyil.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Bu düzgün bir IP adresi deyil.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Bu dəyər düzgün bir dil deyil.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Bu dəyər düzgün bir dil deyil.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Bu dəyər düzgün bir ölkə deyil.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Bu dəyər hal-hazırda istifadədədir.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Şəklin ölçüsü hesablana bilmir.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Şəklin genişliyi çox böyükdür ({{ width }}px). İcazə verilən ən böyük genişlik {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Şəklin genişliyi çox kiçikdir ({{ width }}px). Ən az {{ min_width }}px olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Şəklin yüksəkliyi çox böyükdür ({{ height }}px). İcazə verilən ən böyük yüksəklik {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Şəklin yüksəkliyi çox kiçikdir ({{ height }}px). Ən az {{ min_height }}px olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Bu dəyər istifadəçinin hazırkı parolu olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Bu dəyər tam olaraq {{ limit }} simvol olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fayl qismən yükləndi.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Fayl yüklənmədi.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>php.ini'də müvəqqəti qovluq quraşdırılmayıb.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Müvəqqəti fayl diskə yazıla bilmir.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Bir PHP əlavəsi faylın yüklənməsinə mane oldu.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bu kolleksiyada {{ limit }} və ya daha çox element olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bu kolleksiyada {{ limit }} və ya daha az element olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bu kolleksiyada tam olaraq {{ limit }} element olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Yanlış kart nömrəsi.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Dəstəklənməyən kart tipi və ya yanlış kart nömrəsi.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.bg.xlf b/core/vendor/symfony/validator/Resources/translations/validators.bg.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..7c5da55bcf9da69c32a0ed8e38a4a29b3e32e403
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.bg.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Стойността трябва да бъде лъжа (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Стойността трябва да бъде истина (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Стойността трябва да бъде от тип {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Стойността трябва да бъде празна.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Избраната стойност е невалидна.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Трябва да изберете поне {{ limit }} опция.|Трябва да изберете поне {{ limit }} опции.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Трябва да изберете най-много {{ limit }} опция.|Трябва да изберете най-много {{ limit }} опции.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Една или повече от зададените стойности е невалидна.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Това поле не се е очаквало.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Това поле липсва.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Стойността не е валидна дата (date).</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Стойността не е валидна дата (datetime).</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Стойността не е валиден email адрес.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Файлът не беше открит.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Файлът не може да бъде прочетен.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файлът е твърде голям ({{ size }} {{ suffix }}). Максималният размер е {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Майм типа на файла е невалиден ({{ type }}). Разрешени майм типове са {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Стойността трябва да бъде {{ limit }} или по-малко.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Стойността е твърде дълга. Трябва да съдържа най-много {{ limit }} символ.|Стойността е твърде дълга. Трябва да съдържа най-много {{ limit }} символа.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Стойността трябва да бъде {{ limit }} или повече.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Стойността е твърде кратка. Трябва да съдържа поне {{ limit }} символ.|Стойността е твърде кратка. Трябва да съдържа поне {{ limit }} символа.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Стойността не трябва да бъде празна.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Стойността не трябва да бъде null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Стойността трябва да бъде null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Стойността не е валидна.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Стойността не е валидно време (time).</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Стойността не е валиден URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Двете стойности трябва да бъдат равни.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файлът е твърде голям. Разрешеният максимален размер е {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Файлът е твърде голям.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Файлът не може да бъде качен.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Стойността трябва да бъде валиден номер.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Файлът не е валидно изображение.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Това не е валиден IP адрес.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Стойността не е валиден език.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Стойността не е валидна локализация.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Стойността не е валидна държава.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Стойността вече е в употреба.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Размера на изображението не може да бъде определен.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Изображението е твърде широко ({{ width }}px). Широчината трябва да бъде максимум {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Изображението е с твърде малка широчина ({{ width }}px). Широчината трябва да бъде минимум {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Изображението е с твърде голяма височина ({{ height }}px). Височината трябва да бъде максимум {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Изображението е с твърде малка височина ({{ height }}px). Височина трябва да бъде минимум {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Стойността трябва да бъде текущата потребителска парола.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Стойността трябва да бъде точно {{ limit }} символ.|Стойността трябва да бъде точно {{ limit }} символа.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Файлът е качен частично.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Файлът не беше качен.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Не е посочена директория за временни файлове в php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Не може да запише временен файл на диска.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP разширение предизвика прекъсване на качването.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Колекцията трябва да съдържа поне {{ limit }} елемент.|Колекцията трябва да съдържа поне {{ limit }} елемента.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Колекцията трябва да съдържа най-много {{ limit }} елемент.|Колекцията трябва да съдържа най-много {{ limit }} елемента.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Колекцията трябва да съдържа точно {{ limit }} елемент.|Колекцията трябва да съдържа точно {{ limit }} елемента.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Невалиден номер на картата.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Неподдържан тип карта или невалиден номер на картата.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Невалиден Международен номер на банкова сметка (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Невалиден ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Невалиден ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Невалидна стойност както за ISBN-10, така и за ISBN-13 .</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Невалиден Международен стандартен сериен номер (ISSN).</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Невалидна валута.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде равна на {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде по-голяма от {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде по-голяма или равна на {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде идентична с {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде по-малка {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Стойността трябва да бъде по-малка или равна на {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Стойността не трябва да бъде равна на {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Стойността не трябва да бъде идентична с {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ca.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ca.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..85b6970fc31cf14b47c4a544d85521ad1d5275fb
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ca.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Aquest valor hauria de ser fals.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Aquest valor hauria de ser cert.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Aquest valor hauria de ser del tipus {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Aquest valor hauria d'estar buit.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>El valor seleccionat no és una opció vàlida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ha de seleccionar almenys {{ limit }} opció.|Ha de seleccionar almenys {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ha de seleccionar com a màxim {{ limit }} opció.|Ha de seleccionar com a màxim {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Un o més dels valors facilitats són incorrectes.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Aquest camp no s'esperava.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Aquest camp està desaparegut.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Aquest valor no és una data vàlida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Aquest valor no és una data i hora vàlida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Aquest valor no és una adreça d'email vàlida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>No s'ha pogut trobar l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>No es pot llegir l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>L'arxiu és massa gran ({{ size }} {{ suffix }}). La grandària màxima permesa és {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>El tipus mime de l'arxiu no és vàlid ({{ type }}). Els tipus mime vàlids són {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Aquest valor hauria de ser {{ limit }} o menys.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Aquest valor és massa llarg. Hauria de tenir {{ limit }} caràcter o menys.|Aquest valor és massa llarg. Hauria de tenir {{ limit }} caràcters o menys.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Aquest valor hauria de ser {{ limit }} o més.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Aquest valor és massa curt. Hauria de tenir {{ limit }} caràcters o més.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Aquest valor no hauria d'estar buit.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Aquest valor no hauria de ser null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Aquest valor hauria de ser null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Aquest valor no és vàlid.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Aquest valor no és una hora vàlida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Aquest valor no és una URL vàlida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Els dos valors haurien de ser iguals.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>L'arxiu és massa gran. El tamany màxim permés és {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>L'arxiu és massa gran.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No es pot pujar l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Aquest valor hauria de ser un nombre vàlid.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>L'arxiu no és una imatge vàlida.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Això no és una adreça IP vàlida.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Aquest valor no és un idioma vàlid.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Aquest valor no és una localització vàlida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Aquest valor no és un país vàlid.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Aquest valor ja s'ha utilitzat.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>No s'ha pogut determinar la grandària de la imatge.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>L'amplària de la imatge és massa gran ({{ width }}px). L'amplària màxima permesa són {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>L'amplària de la imatge és massa petita ({{ width }}px). L'amplària mínima requerida són {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>L'altura de la imatge és massa gran ({{ height }}px). L'altura màxima permesa són {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>L'altura de la imatge és massa petita ({{ height }}px). L'altura mínima requerida són {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Aquest valor hauria de ser la contrasenya actual de l'usuari.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Aquest valor hauria de tenir exactament {{ limit }} caràcter.|Aquest valor hauria de tenir exactament {{ limit }} caràcters.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>L'arxiu va ser només pujat parcialment.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Cap arxiu va ser pujat.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Cap carpeta temporal va ser configurada en php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>No es va poder escriure l'arxiu temporal en el disc.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Una extensió de PHP va fer que la pujada fallara.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Aquesta col·lecció ha de contenir {{ limit }} element o més.|Aquesta col·lecció ha de contenir {{ limit }} elements o més.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Aquesta col·lecció ha de contenir {{ limit }} element o menys.|Aquesta col·lecció ha de contenir {{ limit }} elements o menys.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Aquesta col·lecció ha de contenir exactament {{ limit }} element.|Aquesta col·lecció ha de contenir exactament {{ limit }} elements.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Número de targeta invàlid.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipus de targeta no suportada o número de targeta invàlid.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Això no és un nombre de compte bancari internacional (IBAN) vàlid.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Aquest valor no és un ISBN-10 vàlid.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Aquest valor no és un ISBN-13 vàlid.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Aquest valor no és ni un ISBN-10 vàlid ni un ISBN-13 vàlid.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Aquest valor no és un ISSN vàlid.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Aquest valor no és una divisa vàlida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser més gran a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser major o igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser idèntic a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser menor a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser menor o igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Aquest valor no hauria de ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Aquest valor no hauria de idèntic a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>La proporció de l'imatge és massa gran ({{ ratio }}). La màxima proporció permesa és {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>La proporció de l'imatge és massa petita ({{ ratio }}). La mínima proporció permesa és {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>L'imatge és quadrada({{ width }}x{{ height }}px). Les imatges quadrades no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>L'imatge està orientada horitzontalment ({{ width }}x{{ height }}px). Les imatges orientades horitzontalment no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>L'imatge està orientada verticalment ({{ width }}x{{ height }}px). Les imatges orientades verticalment no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>No està permès un fixter buit.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.cs.xlf b/core/vendor/symfony/validator/Resources/translations/validators.cs.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..2ae47b2bbffd8a57c24f5b33fa85fb14b7535824
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.cs.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Tato hodnota musí být nepravdivá (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Tato hodnota musí být pravdivá (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Tato hodnota musí být typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Tato hodnota musí být prázdná.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vybraná hodnota není platnou možností.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Musí být vybrána nejméně {{ limit }} možnost.|Musí být vybrány nejméně {{ limit }} možnosti.|Musí být vybráno nejméně {{ limit }} možností.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Musí být vybrána maximálně {{ limit }} možnost.|Musí být vybrány maximálně {{ limit }} možnosti.|Musí být vybráno maximálně {{ limit }} možností.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Některé z uvedených hodnot jsou neplatné.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Toto pole nebyla očekávána.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Toto pole chybí.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Tato hodnota není platné datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Tato hodnota není platné datum s časovým údajem.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Tato hodnota není platná e-mailová adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Soubor nebyl nalezen.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Soubor je nečitelný.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Soubor je příliš velký ({{ size }} {{ suffix }}). Maximální povolená velikost souboru je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Neplatný mime typ souboru ({{ type }}). Povolené mime typy souborů jsou {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Tato hodnota musí být {{ limit }} nebo méně.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znak.|Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znaky.|Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znaků.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Tato hodnota musí být {{ limit }} nebo více.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znak.|Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znaky.|Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znaků.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Tato hodnota nesmí být prázdná.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Tato hodnota nesmí být null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Tato hodnota musí být null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Tato hodnota není platná.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Tato hodnota není platný časový údaj.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Tato hodnota není platná URL adresa.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Tyto dvě hodnoty musí být stejné.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Soubor je příliš velký. Maximální povolená velikost souboru je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Soubor je příliš velký.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Soubor se nepodařilo nahrát.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Tato hodnota musí být číslo.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tento soubor není obrázek.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Toto není platná IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Tento jazyk neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Tato lokalizace neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Tato zemÄ› neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Tato hodnota je již používána.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nepodařily se zjistit rozměry obrázku.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Obrázek je příliš široký ({{ width }}px). Maximální povolená šířka obrázku je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Obrázek je příliš úzký ({{ width }}px). Minimální šířka musí být {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Obrázek je příliš vysoký ({{ height }}px). Maximální povolená výška obrázku je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Obrázek je příliš nízký ({{ height }}px). Minimální výška obrázku musí být {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Tato hodnota musí být aktuální heslo uživatele.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Tato hodnota musí mít přesně {{ limit }} znak.|Tato hodnota musí mít přesně {{ limit }} znaky.|Tato hodnota musí mít přesně {{ limit }} znaků.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Byla nahrána jen část souboru.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Žádný soubor nebyl nahrán.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>V php.ini není nastavena cesta k adresáři pro dočasné soubory.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Dočasný soubor se nepodařilo zapsat na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Rozšíření PHP zabránilo nahrání souboru.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Tato kolekce musí obsahovat minimálně {{ limit }} prvek.|Tato kolekce musí obsahovat minimálně {{ limit }} prvky.|Tato kolekce musí obsahovat minimálně {{ limit }} prvků.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Tato kolekce musí obsahovat maximálně {{ limit }} prvek.|Tato kolekce musí obsahovat maximálně {{ limit }} prvky.|Tato kolekce musí obsahovat maximálně {{ limit }} prvků.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Tato kolekce musí obsahovat přesně {{ limit }} prvek.|Tato kolekce musí obsahovat přesně {{ limit }} prvky.|Tato kolekce musí obsahovat přesně {{ limit }} prvků.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neplatné číslo karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nepodporovaný typ karty nebo neplatné číslo karty.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Toto je neplatný IBAN.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Tato hodnota není platné ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Tato hodnota není platné ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Tato hodnota není platné ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Tato hodnota není platné ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Tato měna neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musí být rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Tato hodnota musí být větší než {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musí být větší nebo rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tato hodnota musí být typu {{ compared_value_type }} a zároveň musí být rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Tato hodnota musí být menší než {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musí být menší nebo rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Tato hodnota nesmí být rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tato hodnota nesmí být typu {{ compared_value_type }} a zároveň nesmí být rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Poměr stran obrázku je příliš velký ({{ ratio }}). Maximální povolený poměr stran obrázku je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Poměr stran obrázku je příliš malý ({{ ratio }}). Minimální povolený poměr stran obrázku je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Strany obrázku jsou čtvercové ({{ width }}x{{ height }}px). Čtvercové obrázky nejsou povolené.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Obrázek je orientovaný na šířku ({{ width }}x{{ height }}px). Obrázky orientované na šířku nejsou povolené.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Obrázek je orientovaný na výšku ({{ width }}x{{ height }}px). Obrázky orientované na výšku nejsou povolené.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Soubor nesmí být prázdný.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.cy.xlf b/core/vendor/symfony/validator/Resources/translations/validators.cy.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..da7cb9aab2986d8133ef0a76cf47095ddb8c1563
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.cy.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Dylid bod y gwerth hwn yn ffug.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Dylid bod y gwerth hwn yn wir.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Dylid bod y gwerth hwn bod o fath {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Dylid bod y gwerth hwn yn wag.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Nid yw'r gwerth â ddewiswyd yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Rhaid dewis o leiaf {{ limit }} opsiwn.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Rhaid dewis dim mwy na {{ limit }} opsiwn.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Mae un neu fwy o'r gwerthoedd a roddwyd yn annilys.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nid oedd disgwyl y maes hwn.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Mae'r maes hwn ar goll.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Nid yw'r gwerth yn ddyddiad dilys.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Nid yw'r gwerth yn datetime dilys.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Nid yw'r gwerth yn gyfeiriad ebost dilys.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ni ddarganfyddwyd y ffeil.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ni ellir darllen y ffeil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Mae'r ffeil yn rhy fawr ({{ size }} {{ suffix }}). Yr uchafswm â ganiateir yw {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Nid yw math mime y ffeil yn ddilys ({{ type }}). Dyma'r mathau â ganiateir {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Dylai'r gwerth hwn fod yn {{ limit }} neu lai.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Mae'r gwerth hwn rhy hir. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu lai.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Dylai'r gwerth hwn fod yn {{ limit }} neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Mae'r gwerth hwn yn rhy fyr. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn wag.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Dylai'r gwerth fod yn null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Nid yw'r gwerth hwn yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Nid yw'r gwerth hwn yn amser dilys.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Nid yw'r gwerth hwn yn URL dilys.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Rhaid i'r ddau werth fod yn gyfystyr a'u gilydd.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Mae'r ffeil yn rhy fawr. Yr uchafswm â ganiateir yw {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Mae'r ffeil yn rhy fawr.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Methwyd ag uwchlwytho'r ffeil.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Dylai'r gwerth hwn fod yn rif dilys.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Nid yw'r ffeil hon yn ddelwedd dilys.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Nid yw hwn yn gyfeiriad IP dilys.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Nid yw'r gwerth hwn yn iaith ddilys.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Nid yw'r gwerth hwn yn locale dilys.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Nid yw'r gwerth hwn yn wlad dilys.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Mae'r gwerth hwn eisoes yn cael ei ddefnyddio.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Methwyd â darganfod maint y ddelwedd.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Mae lled y ddelwedd yn rhy fawr ({{ width }}px). Y lled mwyaf â ganiateir yw {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Mae lled y ddelwedd yn rhy fach ({{ width }}px). Y lled lleiaf â ganiateir yw {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Mae uchder y ddelwedd yn rhy fawr ({{ width }}px). Yr uchder mwyaf â ganiateir yw {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Mae uchder y ddelwedd yn rhy fach ({{ width }}px). Yr uchder lleiaf â ganiateir yw {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Dylaid bod y gwerth hwn yn gyfrinair presenol y defnyddiwr.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Dylai'r gwerth hwn fod yn union {{ limit }} nodyn cyfrifiadurol o hyd.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Dim ond rhan o'r ffeil ag uwchlwythwyd.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ni uwchlwythwyd unrhyw ffeil.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nid oes ffolder dros-dro wedi'i gosod yn php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Methwyd ag ysgrifennu'r ffeil dros-dro ar ddisg.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Methwyd ag uwchlwytho oherwydd ategyn PHP.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu lai.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Dylai'r casgliad hwn gynnwys union {{ limit }} elfen.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nid oedd rhif y cerdyn yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Unai ni dderbynir y math yna o gerdyn, neu nid yw rhif y cerdyn yn ddilys.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.da.xlf b/core/vendor/symfony/validator/Resources/translations/validators.da.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..14e479a59ad0773329f62149b1722324a90a8047
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.da.xlf
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Værdien skal være falsk.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Værdien skal være sand.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Værdien skal være af typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Værdien skal være blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Værdien skal være en af de givne muligheder.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du skal vælge mindst {{ limit }} muligheder.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan højest vælge {{ limit }} muligheder.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>En eller flere af de oplyste værdier er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Feltet blev ikke forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette felt er mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Værdien er ikke en gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Værdien er ikke en gyldig dato og tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Værdien er ikke en gyldig e-mail adresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunne ikke findes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen kan ikke læses.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor ({{ size }} {{ suffix }}). Tilladte maksimale størrelse {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mimetypen af filen er ugyldig ({{ type }}). Tilladte mimetyper er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Værdien skal være {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Værdien er for lang. Den skal have {{ limit }} bogstaver eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Værdien skal være {{ limit }} eller mere.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Værdien er for kort. Den skal have {{ limit }} tegn eller flere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Værdien må ikke være blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Værdien må ikke være tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Værdien skal være tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Værdien er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Værdien er ikke en gyldig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Værdien er ikke en gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De to værdier skal være ens.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor. Den maksimale størrelse er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunne ikke blive uploadet.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Værdien skal være et gyldigt tal.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Filen er ikke gyldigt billede.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dette er ikke en gyldig IP adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Værdien er ikke et gyldigt sprog.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Værdien er ikke en gyldig lokalitet.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Værdien er ikke et gyldigt land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Værdien er allerede i brug.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Størrelsen på billedet kunne ikke detekteres.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Billedbredden er for stor ({{ width }}px). Tilladt maksimumsbredde er {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Billedebredden er for lille ({{ width }}px). Forventet minimumshøjde er {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Billedhøjden er for stor ({{ height }}px). Tilladt maksimumshøjde er {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Billedhøjden er for lille ({{ height }}px). Forventet minimumshøjde er {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Værdien skal være brugerens nuværende password.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Værdien skal have præcis {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen var kun delvis uploadet.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil blev uploadet.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Ingen midlertidig mappe er konfigureret i php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikke skrive midlertidig fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP udvidelse forårsagede fejl i upload.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samling skal indeholde {{ limit }} element eller flere.|Denne samling skal indeholde {{ limit }} elementer eller flere.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samling skal indeholde {{ limit }} element eller mindre.|Denne samling skal indeholde {{ limit }} elementer eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samling skal indeholde præcis {{ limit }} element.|Denne samling skal indeholde præcis {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Ikke-understøttet korttype eller ugyldigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Det er ikke en gyldig International Bank Account Number (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Værdien er ikke en gyldig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Værdien er ikke en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Værdien er hverken en gyldig ISBN-10 eller en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Værdien er ikke en gyldig ISSN.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.de.xlf b/core/vendor/symfony/validator/Resources/translations/validators.de.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..c79cb940314c1d83a29293c9b505dcc252d6c6cf
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.de.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Dieser Wert sollte false sein.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Dieser Wert sollte true sein.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Dieser Wert sollte vom Typ {{ type }} sein.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Dieser Wert sollte leer sein.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Sie haben einen ungültigen Wert ausgewählt.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Sie dürfen höchstens {{ limit }} Möglichkeit wählen.|Sie dürfen höchstens {{ limit }} Möglichkeiten wählen.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Einer oder mehrere der angegebenen Werte sind ungültig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dieses Feld wurde nicht erwartet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dieses Feld fehlt.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Dieser Wert entspricht keiner gültigen Datumsangabe.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Dieser Wert ist keine gültige E-Mail-Adresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Die Datei wurde nicht gefunden.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Die Datei ist nicht lesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die Datei ist zu groß ({{ size }} {{ suffix }}). Die maximal zulässige Größe beträgt {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Der Dateityp ist ungültig ({{ type }}). Erlaubte Dateitypen sind {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Dieser Wert sollte kleiner oder gleich {{ limit }} sein.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Dieser Wert sollte größer oder gleich {{ limit }} sein.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Dieser Wert sollte nicht leer sein.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Dieser Wert sollte nicht null sein.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Dieser Wert sollte null sein.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Dieser Wert ist nicht gültig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Dieser Wert entspricht keiner gültigen Zeitangabe.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Dieser Wert ist keine gültige URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Die beiden Werte sollten identisch sein.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die Datei ist zu groß. Die maximal zulässige Größe beträgt {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Die Datei ist zu groß.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Die Datei konnte nicht hochgeladen werden.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Dieser Wert sollte eine gültige Zahl sein.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Diese Datei ist kein gültiges Bild.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dies ist keine gültige IP-Adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Dieser Wert entspricht keiner gültigen Sprache.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Dieser Wert entspricht keinem gültigen Gebietsschema.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Dieser Wert entspricht keinem gültigen Land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Dieser Wert wird bereits verwendet.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Die Größe des Bildes konnte nicht ermittelt werden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Die Bildbreite ist zu groß ({{ width }}px). Die maximal zulässige Breite beträgt {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Die Bildbreite ist zu gering ({{ width }}px). Die erwartete Mindestbreite beträgt {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Die Bildhöhe ist zu groß ({{ height }}px). Die maximal zulässige Höhe beträgt {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Die Bildhöhe ist zu gering ({{ height }}px). Die erwartete Mindesthöhe beträgt {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Dieser Wert sollte dem aktuellen Benutzerpasswort entsprechen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Dieser Wert sollte genau {{ limit }} Zeichen lang sein.|Dieser Wert sollte genau {{ limit }} Zeichen lang sein.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Die Datei wurde nur teilweise hochgeladen.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Es wurde keine Datei hochgeladen.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Es wurde kein temporärer Ordner in der php.ini konfiguriert.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kann die temporäre Datei nicht speichern.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Eine PHP-Erweiterung verhinderte den Upload.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Diese Sammlung sollte genau {{ limit }} Element beinhalten.|Diese Sammlung sollte genau {{ limit }} Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ungültige Kartennummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nicht unterstützer Kartentyp oder ungültige Kartennummer.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Dieser Wert ist keine gültige IBAN-Kontonummer.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Dieser Wert entspricht keiner gültigen ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Dieser Wert entspricht keiner gültigen ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Dieser Wert ist weder eine gültige ISBN-10 noch eine gültige ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Dieser Wert ist keine gültige ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Dieser Wert ist keine gültige Währung.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Dieser Wert sollte größer als {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte größer oder gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dieser Wert sollte identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Dieser Wert sollte kleiner als {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte kleiner oder gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte nicht {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dieser Wert sollte nicht identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Das Seitenverhältnis des Bildes ist zu groß ({{ ratio }}). Der erlaubte Maximalwert ist {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Das Seitenverhältnis des Bildes ist zu klein ({{ ratio }}). Der erwartete Minimalwert ist {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Das Bild ist quadratisch ({{ width }}x{{ height }}px). Quadratische Bilder sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Das Bild ist im Querformat ({{ width }}x{{ height }}px). Bilder im Querformat sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Das Bild ist im Hochformat ({{ width }}x{{ height }}px). Bilder im Hochformat sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Eine leere Datei ist nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Der Hostname konnte nicht aufgelöst werden.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Dieser Wert entspricht nicht dem erwarteten Zeichensatz {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.el.xlf b/core/vendor/symfony/validator/Resources/translations/validators.el.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..4fa0d422205007b99b5c2c1bd993ffad00647b50
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.el.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Αυτή η τιμή πρέπει να είναι ψευδής.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Αυτή η τιμή πρέπει να είναι αληθής.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Αυτή η τιμή πρέπει να είναι τύπου {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Αυτή η τιμή πρέπει να είναι κενή.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Η τιμή που επιλέχθηκε δεν αντιστοιχεί σε έγκυρη επιλογή.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Πρέπει να επιλέξετε τουλάχιστον {{ limit }} επιλογή.|Πρέπει να επιλέξετε τουλάχιστον {{ limit }} επιλογές.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Πρέπει να επιλέξετε το πολύ {{ limit }} επιλογή.|Πρέπει να επιλέξετε το πολύ {{ limit }} επιλογές.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Μια ή περισσότερες τιμές δεν είναι έγκυρες.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Αυτό το πεδίο δεν ήταν αναμενόμενο.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Λείπει αυτό το πεδίο.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Η τιμή δεν αντιστοιχεί σε έγκυρη ημερομηνία.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Η τιμή δεν αντιστοιχεί σε έγκυρη ημερομηνία και ώρα.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Η τιμή δεν αντιστοιχεί σε έγκυρο email.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Το αρχείο δε μπορεί να βρεθεί.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Το αρχείο δεν είναι αναγνώσιμο.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Το αρχείο είναι πολύ μεγάλο ({{ size }} {{ suffix }}). Το μέγιστο επιτρεπτό μέγεθος είναι {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Ο τύπος mime του αρχείου δεν είναι έγκυρος ({{ type }}). Οι έγκρυοι τύποι mime είναι {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Αυτή η τιμή θα έπρεπε να είναι {{ limit }} ή λιγότερο.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Αυτή η τιμή είναι πολύ μεγάλη. Θα έπρεπε να έχει {{ limit }} χαρακτήρα ή λιγότερο.|Αυτή η τιμή είναι πολύ μεγάλη. Θα έπρεπε να έχει {{ limit }} χαρακτήρες ή λιγότερο.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Αυτή η τιμή θα έπρεπε να είναι {{ limit }} ή περισσότερο.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Αυτή η τιμή είναι πολύ μικρή. Θα έπρεπε να έχει {{ limit }} χαρακτήρα ή περισσότερο.|Αυτή η τιμή είναι πολύ μικρή. Θα έπρεπε να έχει {{ limit }} χαρακτήρες ή περισσότερο.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Αυτή η τιμή δεν πρέπει να είναι κενή.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Αυτή η τιμή δεν πρέπει να είναι μηδενική.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Αυτή η τιμή πρέπει να είναι μηδενική.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Αυτή η τιμή δεν είναι έκγυρη.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Αυτή η τιμή δεν αντιστοιχεί σε έγκυρη ώρα.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Αυτή η τιμή δεν αντιστοιχεί σε έγκυρο URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Οι δύο τιμές θα πρέπει να είναι ίδιες.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Το αρχείο είναι πολύ μεγάλο. Το μέγιστο επιτρεπτό μέγεθος είναι {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Το αρχείο είναι πολύ μεγάλο.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Το αρχείο δε μπορεί να ανέβει.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι ένας έγκυρος αριθμός.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Το αρχείο δεν αποτελεί έγκυρη εικόνα.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Αυτό δεν είναι μια έκγυρη διεύθυνση IP.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Αυτή η τιμή δεν αντιστοιχεί σε μια έκγυρη γλώσσα.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Αυτή η τιμή δεν αντιστοιχεί σε έκγυρο κωδικό τοποθεσίας.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Αυτή η τιμή δεν αντιστοιχεί σε μια έκγυρη χώρα.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Αυτή η τιμή χρησιμοποιείται ήδη.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Το μέγεθος της εικόνας δεν ήταν δυνατό να ανιχνευθεί.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Το πλάτος της εικόνας είναι πολύ μεγάλο ({{ width }}px). Το μέγιστο επιτρεπτό πλάτος είναι {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Το πλάτος της εικόνας είναι πολύ μικρό ({{ width }}px). Το ελάχιστο επιτρεπτό πλάτος είναι {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Το ύψος της εικόνας είναι πολύ μεγάλο ({{ height }}px). Το μέγιστο επιτρεπτό ύψος είναι {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Το ύψος της εικόνας είναι πολύ μικρό ({{ height }}px). Το ελάχιστο επιτρεπτό ύψος είναι {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Αυτή η τιμή θα έπρεπε να είναι ο τρέχων κωδικός.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Αυτή η τιμή θα έπρεπε να έχει ακριβώς {{ limit }} χαρακτήρα.|Αυτή η τιμή θα έπρεπε να έχει ακριβώς {{ limit }} χαρακτήρες.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Το αρχείο δεν ανέβηκε ολόκληρο.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Δεν ανέβηκε κανένα αρχείο.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Κανένας προσωρινός φάκελος δεν έχει ρυθμιστεί στο php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Αδυναμία εγγραφής προσωρινού αρχείου στο δίσκο.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Μια επέκταση PHP προκάλεσε αδυναμία ανεβάσματος.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχείο ή περισσότερα.|Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχεία ή περισσότερα.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχείo ή λιγότερα.|Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχεία ή λιγότερα.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Αυτή η συλλογή θα πρέπει να περιέχει ακριβώς {{ limit }} στοιχείo.|Αυτή η συλλογή θα πρέπει να περιέχει ακριβώς {{ limit }} στοιχεία.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Μη έγκυρος αριθμός κάρτας.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Μη υποστηριζόμενος τύπος κάρτας ή μη έγκυρος αριθμός κάρτας.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Αυτό δεν αντιστοιχεί σε έκγυρο διεθνή αριθμό τραπεζικού λογαριασμού (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Αυτό δεν είναι έγκυρος κωδικός ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Αυτό δεν είναι έγκυρος κωδικός ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Αυτό δεν είναι ούτε έγκυρος κωδικός ISBN-10 ούτε έγκυρος κωδικός ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Αυτό δεν είναι έγκυρος κωδικός ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Αυτό δεν αντιστοιχεί σε έγκυρο νόμισμα.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι ίση με {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι μεγαλύτερη από {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι μεγαλύτερη ή ίση με {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι πανομοιότυπη με {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι μικρότερη από {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Αυτή η τιμή θα πρέπει να είναι μικρότερη ή ίση με {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Αυτή η τιμή δεν θα πρέπει να είναι ίση με {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Αυτή η τιμή δεν πρέπει να είναι πανομοιότυπη με {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.en.xlf b/core/vendor/symfony/validator/Resources/translations/validators.en.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..e666c793c98b404c6573e32a72a993a35baa8566
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.en.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>This value should be false.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>This value should be true.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>This value should be of type {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>This value should be blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>The value you selected is not a valid choice.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>One or more of the given values is invalid.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>This field was not expected.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>This field is missing.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>This value is not a valid date.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>This value is not a valid datetime.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>This value is not a valid email address.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>The file could not be found.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>The file is not readable.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>This value should be {{ limit }} or less.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>This value should be {{ limit }} or more.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>This value should not be blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>This value should not be null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>This value should be null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>This value is not valid.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>This value is not a valid time.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>This value is not a valid URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>The two values should be equal.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>The file is too large.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>The file could not be uploaded.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>This value should be a valid number.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>This file is not a valid image.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>This is not a valid IP address.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>This value is not a valid language.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>This value is not a valid locale.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>This value is not a valid country.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>This value is already used.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>The size of the image could not be detected.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>This value should be the user's current password.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>The file was only partially uploaded.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>No file was uploaded.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>No temporary folder was configured in php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Cannot write temporary file to disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>A PHP extension caused the upload to fail.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Invalid card number.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Unsupported card type or invalid card number.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>This is not a valid International Bank Account Number (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>This value is not a valid ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>This value is not a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>This value is not a valid ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>This value is not a valid currency.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>This value should be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>This value should be greater than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>This value should be greater than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>This value should be less than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>This value should be less than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>This value should not be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>An empty file is not allowed.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>The host could not be resolved.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>This value does not match the expected {{ charset }} charset.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.es.xlf b/core/vendor/symfony/validator/Resources/translations/validators.es.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..d874573a7afa0abc879f51886e668596eb2e0680
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.es.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor debería ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor debería ser verdadero.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor debería ser de tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor debería estar vacío.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>El valor seleccionado no es una opción válida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Debe seleccionar al menos {{ limit }} opción.|Debe seleccionar al menos {{ limit }} opciones.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Debe seleccionar como máximo {{ limit }} opción.|Debe seleccionar como máximo {{ limit }} opciones.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Uno o más de los valores indicados no son válidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo no se esperaba.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo está desaparecido.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor no es una fecha válida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor no es una fecha y hora válidas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor no es una dirección de email válida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>No se pudo encontrar el archivo.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>No se puede leer el archivo.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>El archivo es demasiado grande ({{ size }} {{ suffix }}). El tamaño máximo permitido es {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>El tipo mime del archivo no es válido ({{ type }}). Los tipos mime válidos son {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor debería ser {{ limit }} o menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor es demasiado largo. Debería tener {{ limit }} carácter o menos.|Este valor es demasiado largo. Debería tener {{ limit }} caracteres o menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor debería ser {{ limit }} o más.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor es demasiado corto. Debería tener {{ limit }} carácter o más.|Este valor es demasiado corto. Debería tener {{ limit }} caracteres o más.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor no debería estar vacío.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor no debería ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor debería ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor no es válido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor no es una hora válida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor no es una URL válida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Los dos valores deberían ser iguales.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>El archivo es demasiado grande. El tamaño máximo permitido es {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>El archivo es demasiado grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No se pudo subir el archivo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor debería ser un número válido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>El archivo no es una imagen válida.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Esto no es una dirección IP válida.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor no es un idioma válido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor no es una localización válida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor no es un país válido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor ya se ha utilizado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>No se pudo determinar el tamaño de la imagen.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>El ancho de la imagen es demasiado grande ({{ width }}px). El ancho máximo permitido es de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>El ancho de la imagen es demasiado pequeño ({{ width }}px). El ancho mínimo requerido es {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>La altura de la imagen es demasiado grande ({{ height }}px). La altura máxima permitida es de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>La altura de la imagen es demasiado pequeña ({{ height }}px). La altura mínima requerida es de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor debería ser la contraseña actual del usuario.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor debería tener exactamente {{ limit }} carácter.|Este valor debería tener exactamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>El archivo fue sólo subido parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ningún archivo fue subido.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Ninguna carpeta temporal fue configurada en php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>No se pudo escribir el archivo temporal en el disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Una extensión de PHP hizo que la subida fallara.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta colección debe contener {{ limit }} elemento o más.|Esta colección debe contener {{ limit }} elementos o más.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta colección debe contener {{ limit }} elemento o menos.|Esta colección debe contener {{ limit }} elementos o menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta colección debe contener exactamente {{ limit }} elemento.|Esta colección debe contener exactamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Número de tarjeta inválido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de tarjeta no soportado o número de tarjeta inválido.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Esto no es un International Bank Account Number (IBAN) válido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor no es un ISBN-10 válido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor no es un ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor no es ni un ISBN-10 válido ni un ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor no es un ISSN válido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este valor no es una divisa válida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor debería ser mayor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser mayor o igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor debería ser idéntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor debería ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser menor o igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser distinto de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor no debería ser idéntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>La proporción de la imagen es demasiado grande ({{ ratio }}). La máxima proporción permitida es {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>La proporción de la imagen es demasiado pequeña ({{ ratio }}). La mínima proporción permitida es {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>La imagen es cuadrada ({{ width }}x{{ height }}px). Las imágenes cuadradas no están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>La imagen está orientada horizontalmente ({{ width }}x{{ height }}px). Las imágenes orientadas horizontalmente no están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>La imagen está orientada verticalmente ({{ width }}x{{ height }}px). Las imágenes orientadas verticalmente no están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>No está permitido un archivo vacío.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>No se puede resolver el host.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>La codificación de caracteres para este valor debería ser {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.et.xlf b/core/vendor/symfony/validator/Resources/translations/validators.et.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..d047c8bb9ef82215709bcb8ad0dca42d01a36c88
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.et.xlf
@@ -0,0 +1,283 @@
+<?xml version='1.0'?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Väärtus peaks olema väär.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Väärtus peaks oleme tõene.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Väärtus peaks olema {{ type }}-tüüpi.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Väärtus peaks olema tühi.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Väärtus peaks olema üks etteantud valikutest.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Valima peaks vähemalt {{ limit }} valikut.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Valima peaks mitte rohkem kui  {{ limit }} valikut.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>One or more of the given values is invalid.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>See väli ei oodatud.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>See väli on puudu.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Väärtus pole korrektne kuupäev.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Väärtus pole korrektne kuupäev ja kellaeg.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Väärtus pole korrektne e-maili aadress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Faili ei leita.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fail ei ole loetav.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fail on liiga suur ({{ size }} {{ suffix }}). Suurim lubatud suurus on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Faili sisutüüp on vigane ({{ type }}). Lubatud sisutüübid on {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Väärtus peaks olema {{ limit }} või vähem.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Väärtus on liiga pikk. Pikkus peaks olema {{ limit }} tähemärki või vähem.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Väärtus peaks olema {{ limit }} või rohkem.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Väärtus on liiga lühike. Pikkus peaks  olema {{ limit }} tähemärki või rohkem.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Väärtus ei tohiks olla tühi.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Väärtus ei tohiks olla 'null'.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Väärtus peaks olema 'null'.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Väärtus on vigane.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Väärtus pole korrektne aeg.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Väärtus pole korrektne URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Väärtused peaksid olema võrdsed.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fail on liiga suur. Maksimaalne lubatud suurus on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fail on liiga suur.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Faili ei saa üles laadida.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Väärtus peaks olema korrektne number.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fail ei ole korrektne pilt.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>IP aadress pole korrektne.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Väärtus pole korrektne keel.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Väärtus pole korrektne asukohakeel.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Väärtus pole olemasolev riik.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Väärtust on juba kasutatud.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Pildi suurust polnud võimalik tuvastada.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Pilt on liiga lai ({{ width }}px). Suurim lubatud laius on {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Pilt on liiga kitsas ({{ width }}px). Vähim lubatud laius on {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Pilt on liiga pikk ({{ height }}px). Lubatud suurim pikkus on {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Pilt pole piisavalt pikk ({{ height }}px). Lubatud vähim pikkus on {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Väärtus peaks olema kasutaja kehtiv salasõna.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} characters.</source>
+                <target>Väärtus peaks olema täpselt {{ limit }} tähemärk pikk.|Väärtus peaks olema täpselt {{ limit }} tähemärki pikk.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fail ei laetud täielikult üles.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ühtegi faili ei laetud üles.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Ãœhtegi ajutist kausta polnud php.ini-s seadistatud.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ajutist faili ei saa kettale kirjutada.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP laiendi tõttu ebaõnnestus faili üleslaadimine.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} elements or more.</source>
+                <target>Kogumikus peaks olema vähemalt {{ limit }} element.|Kogumikus peaks olema vähemalt {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} elements or less.</source>
+                <target>Kogumikus peaks olema ülimalt {{ limit }} element.|Kogumikus peaks olema ülimalt {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} elements.</source>
+                <target>Kogumikus peaks olema täpselt {{ limit }} element.|Kogumikus peaks olema täpselt {{ limit }}|elementi.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Vigane kaardi number.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Kaardi tüüpi ei toetata või kaardi number on vigane.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Väärtus pole korrektne IBAN-number.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Väärtus pole korrektne ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Väärtus pole korrektne ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Väärtus pole korrektne ISBN-10 ega ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Väärtus pole korrektne ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Väärtus pole korrektne valuuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Väärtus peaks olema võrdne {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Väärtus peaks olema suurem kui {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Väärtus peaks olema suurem kui või võrduma {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Väärtus peaks olema identne väärtusega {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Väärtus peaks olema väiksem kui {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Väärtus peaks olema väiksem kui või võrduma {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Väärtus ei tohiks võrduda {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Väärtus ei tohiks olla identne väärtusega {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.eu.xlf b/core/vendor/symfony/validator/Resources/translations/validators.eu.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..b2edefd30398bedb9e8459d7bd529ec09a08ac02
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.eu.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Balio hau faltsua izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Balio hau egia izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Balio hau {{ type }} motakoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Balio hau hutsik egon beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Hautatu duzun balioa ez da aukera egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Gutxienez aukera {{ limit }} hautatu behar duzu.|Gutxienez {{ limit }} aukera hautatu behar dituzu.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Gehienez aukera {{ limit }} hautatu behar duzu.|Gehienez {{ limit }} aukera hautatu behar dituzu.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Emandako balioetatik gutxienez bat ez da egokia.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Eremu hau ez zen espero.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Eremu hau falta da.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Balio hau ez da data egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Balio hau ez da data-ordu egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Balio hau ez da posta elektroniko egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ezin izan da fitxategia aurkitu.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fitxategia ez da irakurgarria.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fitxategia handiegia da ({{ size }} {{ suffix }}). Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Fitxategiaren mime mota ez da egokia ({{ type }}). Hauek dira baimendutako mime motak: {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Balio hau gehienez {{ limit }} izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Balio hau luzeegia da. Gehienez karaktere {{ limit }} eduki beharko luke.|Balio hau luzeegia da. Gehienez {{ limit }} karaktere eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Balio hau gutxienez {{ limit }} izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Balio hau motzegia da. Karaktere {{ limit }} gutxienez eduki beharko luke.|Balio hau motzegia da. Gutxienez {{ limit }} karaktere eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Balio hau ez litzateke hutsik egon behar.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Balio hau ez litzateke nulua izan behar.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Balio hau nulua izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Balio hau ez da egokia.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Balio hau ez da ordu egoki bat.</target>
+           </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Balio hau ez da baliabideen kokatzaile uniforme (URL) egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Bi balioak berdinak izan beharko lirateke.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fitxategia handiegia da. Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fitxategia handiegia da.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ezin izan da fitxategia igo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Balio hau zenbaki egoki bat izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fitxategi hau ez da irudi egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Honako hau ez da IP helbide egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Balio hau ez da hizkuntza egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Balio hau ez da kokapen egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Balio hau ez da herrialde egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Balio hau jadanik erabilia izan da.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ezin izan da irudiaren tamaina detektatu.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Irudiaren zabalera handiegia da ({{ width }}px). Onartutako gehienezko zabalera {{ max_width }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Irudiaren zabalera txikiegia da ({{ width }}px). Onartutako gutxieneko zabalera {{ min_width }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Irudiaren altuera handiegia da ({{ height }}px). Onartutako gehienezko altuera {{ max_height }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Irudiaren altuera txikiegia da ({{ height }}px). Onartutako gutxieneko altuera {{ min_height }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Balio hau uneko erabiltzailearen pasahitza izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Balio honek zehazki karaktere {{ limit }} izan beharko luke.|Balio honek zehazki {{ limit }} karaktere izan beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fitxategiaren zati bat bakarrik igo da.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ez da fitxategirik igo.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Ez da aldi baterako karpetarik konfiguratu php.ini fitxategian.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ezin izan da aldi baterako fitxategia diskoan idatzi.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP luzapen batek igoeraren hutsa eragin du.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bilduma honek gutxienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gutxienez {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bilduma honek gehienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gehienez {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bilduma honek zehazki elementu {{ limit }} eduki beharko luke.|Bilduma honek zehazki {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Txartel zenbaki baliogabea.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Txartel mota onartezina edo txartel zenbaki baliogabea.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Hau ez da baliozko banku internazionaleko kontu zenbaki (IBAN) bat.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Balio hau ez da onartutako ISBN-10 bat.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Balio hau ez da onartutako ISBN-13 bat.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Balio hau ez da onartutako ISBN-10 edo ISBN-13 bat.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Balio hau ez da onartutako ISSN bat.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Balio hau ez da baliozko moneta bat.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berbera izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }} baino handiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berdina edota handiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }} baino txikiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berdina edota txikiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Balio hau ez litzateke {{ compared_value }}-(r)en berdina izan behar.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Balio hau ez litzateke {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan behar.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.fa.xlf b/core/vendor/symfony/validator/Resources/translations/validators.fa.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..98b4bd66f08e8f00137427cc03223d92fbf81ce8
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.fa.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target state="needs-review-translation">این مقدار باید نادرست(False) باشد.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>این مقدار باید درست(True) باشد.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>این مقدار باید از نوع {{ type }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>این فیلد باید خالی باشد.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>گزینه انتخابی معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>باید حداقل {{ limit }} گزینه انتخاب کنید.|باید حداقل {{ limit }} گزینه انتخاب کنید.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>حداکثر {{ limit }} گزینه می توانید انتخاب کنید.|حداکثر {{ limit }} گزینه می توانید انتخاب کنید.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>یک یا چند مقدار نامعتبر وجود دارد.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>The fields {{ fields }} were not expected.</source>
+                <target>فیلدهای {{ fields }} اضافی هستند.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>The fields {{ fields }} are missing.</source>
+                <target>فیلدهای {{ fields }} کم هستند.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>این مقدار یک تاریخ معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>این مقدار یک تاریخ و زمان معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>این یک رایانامه معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>فایل پیدا نشد.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>فایل قابلیت خواندن ندارد.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>فایل بیش از اندازه بزرگ است({{ size }} {{ suffix }}). حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>این نوع فایل مجاز نیست({{ type }}). نوع های مجاز {{ types }} هستند.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>این مقدار باید کوچکتر یا مساوی {{ limit }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.|بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>این مقدار باید برابر و یا بیشتر از {{ limit }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.|بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>این مقدار نباید تهی باشد.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>باید مقداری داشته باشد..</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>نباید مقداری داشته باشد.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>این مقدار معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>این مقدار یک زمان صحیح نیست.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>این یک URL معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>دو مقدار باید برابر باشند.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>فایل بیش از اندازه بزرگ است. حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>فایل بیش از اندازه بزرگ است.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>بارگذاری فایل با شکست مواجه شد.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>این مقدار باید یک عدد معتبر باشد.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>این فایل یک تصویر نیست.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>این مقدار یک IP معتبر نیست.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>این مقدار یک زبان صحیح نیست.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>این مقدار یک محل صحیح نیست.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>این مقدار یک کشور صحیح نیست.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>این مقدار قبلا مورد استفاده قرار گرفته است.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>اندازه تصویر قابل شناسایی نیست.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>طول تصویر بسیار بزرگ است ({{ width }}px). بشینه طول مجاز {{ max_width }}px است.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>طول تصویر بسیار کوچک است ({{ width }}px). کمینه طول موردنظر {{ min_width }}px است.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ارتفاع تصویر بسیار بزرگ است ({{ height }}px). بشینه ارتفاع مجاز {{ max_height }}px است.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ارتفاع تصویر بسیار کوچک است ({{ height }}px). کمینه ارتفاع موردنظر {{ min_height }}px است.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>این مقدار می بایست کلمه عبور کنونی کاربر باشد.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target> این مقدار می بایست دقیقا {{ limit }} کاراکتر داشته باشد.| این مقدار می بایست دقیقا {{ limit }} کاراکتر داشته باشد.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>فایل به صورت جزیی بارگذاری شده است.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>هیچ فایلی بارگذاری نشد.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>فولدر موقت در php.ini پیکربندی نشده است.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>فایل موقت را نمی توان در دیسک نوشت.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>اکستنشن PHP موجب شد که بارگذاری فایل با شکست مواجه شود.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>این مجموعه می بایست دارای حداقل {{ limit }} عنصر یا کمتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا کمتر باشد.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>این مجموعه می بایست به طور دقیق دارا {{ limit }} عنصر باشد.|این مجموعه می بایست به طور دقیق دارای {{ limit }} قلم باشد.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>شماره کارت نامعتبر است.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>نوع کارت پشتیبانی نمی شود یا شماره کارت نامعتبر است.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>این یک شماره حساب بین المللی بانک (IBAN) درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>این مقدار یک ISBN-10 درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>این مقدار یک ISBN-13 درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>این مقدار یک ISBN-10 درست یا ISBN-13 درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>این مقدار یک ISSN درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>این مقدار یک یکای پول درست نیست.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>این مقدار باید برابر با {{ compared_value }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>این مقدار باید از {{ compared_value }} بیشتر باشد.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>این مقدار باید بزرگتر یا مساوی با {{ compared_value }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>این مقدار باید با {{ compared_value_type }} {{ compared_value }} یکی باشد.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>این مقدار باید کمتر از {{ compared_value }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>این مقدار باید کمتر یا مساوی با {{ compared_value }} باشد.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>این مقدار نباید با {{ compared_value }} برابر باشد.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>این مقدار نباید {{ compared_value_type }} {{ compared_value }} یکی باشد.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.fi.xlf b/core/vendor/symfony/validator/Resources/translations/validators.fi.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..3f5a07e0921ae8eca05830a0c0cac384c912b609
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.fi.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Arvon tulee olla epätosi.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Arvon tulee olla tosi.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Arvon tulee olla tyyppiä {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Arvon tulee olla tyhjä.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Arvon tulee olla yksi annetuista vaihtoehdoista.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Sinun tulee valita vähintään {{ limit }} vaihtoehtoa.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Sinun tulee valitan enintään {{ limit }} vaihtoehtoa.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Yksi tai useampi annetuista arvoista on virheellinen.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Tässä kentässä ei odotettu.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Tämä kenttä puuttuu.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Annettu arvo ei ole kelvollinen päivämäärä.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Annettu arvo ei ole kelvollinen päivämäärä ja kellonaika.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Annettu arvo ei ole kelvollinen sähköpostiosoite.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Tiedostoa ei löydy.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Tiedostoa ei voida lukea.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Tiedostonkoko ({{ size }} {{ suffix }}) on liian iso. Suurin sallittu tiedostonkoko on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Tiedostotyyppi ({{ type }}) on virheellinen. Sallittuja tiedostotyyppejä ovat {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Arvon tulee olla {{ limit }} tai vähemmän.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Liian pitkä syöte. Syöte saa olla enintään {{ limit }} merkkiä.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Arvon tulee olla {{ limit }} tai enemmän.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Liian lyhyt syöte. Syötteen tulee olla vähintään {{ limit }} merkkiä.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Kenttä ei voi olla tyhjä.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Syöte ei voi olla null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Syötteen tulee olla null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Virheellinen arvo.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Annettu arvo ei ole kelvollinen kellonaika.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Annettu arvo ei ole kelvollinen URL-osoite.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Kahden annetun arvon tulee olla samat.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Annettu tiedosto on liian iso. Suurin sallittu tiedostokoko on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Tiedosto on liian iso.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Tiedoston siirto epäonnistui.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Tämän arvon tulee olla numero.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tämä tiedosto ei ole kelvollinen kuva.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Tämä ei ole kelvollinen IP-osoite.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Tämä arvo ei ole kelvollinen kieli.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Tämä arvo ei ole kelvollinen kieli- ja alueasetus (locale).</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Tämä arvo ei ole kelvollinen maa.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Tämä arvo on jo käytetty.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Kuvan kokoa ei voitu tunnistaa.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Kuva on liian leveä ({{ width }}px). Sallittu maksimileveys on {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Kuva on liian kapea ({{ width }}px). Leveyden tulisi olla vähintään {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Kuva on liian korkea ({{ width }}px). Sallittu maksimikorkeus on {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Kuva on liian matala ({{ height }}px). Korkeuden tulisi olla vähintään {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Tämän arvon tulisi olla käyttäjän tämänhetkinen salasana.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Tämän arvon tulisi olla tasan yhden merkin pituinen.|Tämän arvon tulisi olla tasan {{ limit }} merkkiä pitkä.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Tiedosto ladattiin vain osittain.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Tiedostoa ei ladattu.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Väliaikaishakemistoa ei ole asetettu php.ini -tiedostoon.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Väliaikaistiedostoa ei voitu kirjoittaa levylle.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP-laajennoksen vuoksi tiedoston lataus epäonnistui.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Tässä ryhmässä tulisi olla yksi tai useampi elementti.|Tässä ryhmässä tulisi olla vähintään {{ limit }} elementtiä.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Tässä ryhmässä tulisi olla enintään yksi elementti.|Tässä ryhmässä tulisi olla enintään {{ limit }} elementtiä.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Tässä ryhmässä tulisi olla tasan yksi elementti.|Tässä ryhmässä tulisi olla enintään {{ limit }} elementtiä.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Virheellinen korttinumero.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tätä korttityyppiä ei tueta tai korttinumero on virheellinen.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.fr.xlf b/core/vendor/symfony/validator/Resources/translations/validators.fr.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..b50ecbc63a1b5c019a0077ea7ae332df1cb12c25
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.fr.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Cette valeur doit être fausse.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Cette valeur doit être vraie.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Cette valeur doit être de type {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Cette valeur doit être vide.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Cette valeur doit être l'un des choix proposés.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Vous devez sélectionner au moins {{ limit }} choix.|Vous devez sélectionner au moins {{ limit }} choix.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Vous devez sélectionner au maximum {{ limit }} choix.|Vous devez sélectionner au maximum {{ limit }} choix.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Une ou plusieurs des valeurs soumises sont invalides.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ce champ n'a pas été prévu.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ce champ est manquant.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Cette valeur n'est pas une date valide.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Cette valeur n'est pas une date valide.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Cette valeur n'est pas une adresse email valide.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Le fichier n'a pas été trouvé.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Le fichier n'est pas lisible.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Le fichier est trop volumineux ({{ size }} {{ suffix }}). Sa taille ne doit pas dépasser {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Le type du fichier est invalide ({{ type }}). Les types autorisés sont {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Cette valeur doit être inférieure ou égale à {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Cette chaine est trop longue. Elle doit avoir au maximum {{ limit }} caractère.|Cette chaine est trop longue. Elle doit avoir au maximum {{ limit }} caractères.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Cette valeur doit être supérieure ou égale à {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Cette chaine est trop courte. Elle doit avoir au minimum {{ limit }} caractère.|Cette chaine est trop courte. Elle doit avoir au minimum {{ limit }} caractères.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Cette valeur ne doit pas être vide.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Cette valeur ne doit pas être nulle.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Cette valeur doit être nulle.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Cette valeur n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Cette valeur n'est pas une heure valide.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Cette valeur n'est pas une URL valide.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Les deux valeurs doivent être identiques.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Le fichier est trop volumineux. Sa taille ne doit pas dépasser {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Le fichier est trop volumineux.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Le téléchargement de ce fichier est impossible.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Cette valeur doit être un nombre.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ce fichier n'est pas une image valide.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Cette adresse IP n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Cette langue n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ce paramètre régional n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ce pays n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Cette valeur est déjà utilisée.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>La taille de l'image n'a pas pu être détectée.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>La largeur de l'image est trop grande ({{ width }}px). La largeur maximale autorisée est de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>La largeur de l'image est trop petite ({{ width }}px). La largeur minimale attendue est de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>La hauteur de l'image est trop grande ({{ height }}px). La hauteur maximale autorisée est de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>La hauteur de l'image est trop petite ({{ height }}px). La hauteur minimale attendue est de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Cette valeur doit être le mot de passe actuel de l'utilisateur.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Cette chaine doit avoir exactement {{ limit }} caractère.|Cette chaine doit avoir exactement {{ limit }} caractères.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Le fichier a été partiellement transféré.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Aucun fichier n'a été transféré.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Aucun répertoire temporaire n'a été configuré dans le php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Impossible d'écrire le fichier temporaire sur le disque.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Une extension PHP a empêché le transfert du fichier.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Cette collection doit contenir {{ limit }} élément ou plus.|Cette collection doit contenir {{ limit }} éléments ou plus.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Cette collection doit contenir {{ limit }} élément ou moins.|Cette collection doit contenir {{ limit }} éléments ou moins.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Cette collection doit contenir exactement {{ limit }} élément.|Cette collection doit contenir exactement {{ limit }} éléments.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Numéro de carte invalide.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Type de carte non supporté ou numéro invalide.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Le numéro IBAN (International Bank Account Number) saisi n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Cette valeur n'est pas un code ISBN-10 valide.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Cette valeur n'est pas un code ISBN-13 valide.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Cette valeur n'est ni un code ISBN-10, ni un code ISBN-13 valide.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Cette valeur n'est pas un code ISSN valide.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Cette valeur n'est pas une devise valide.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit être égale à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Cette valeur doit être supérieure à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit être supérieure ou égale à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Cette valeur doit être identique à {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Cette valeur doit être inférieure à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit être inférieure ou égale à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Cette valeur ne doit pas être égale à {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Cette valeur ne doit pas être identique à {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Le rapport largeur/hauteur de l'image est trop grand ({{ ratio }}). Le rapport maximal autorisé est {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Le rapport largeur/hauteur de l'image est trop petit ({{ ratio }}). Le rapport minimal attendu est {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>L'image est carrée ({{ width }}x{{ height }}px). Les images carrées ne sont pas autorisées.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>L'image est au format paysage ({{ width }}x{{ height }}px). Les images au format paysage ne sont pas autorisées.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>L'image est au format portrait ({{ width }}x{{ height }}px). Les images au format portrait ne sont pas autorisées.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Un fichier vide n'est pas autorisé.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Le nom de domaine n'a pas pu être résolu.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Cette valeur ne correspond pas au jeu de caractères {{ charset }} attendu.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.gl.xlf b/core/vendor/symfony/validator/Resources/translations/validators.gl.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..1d0cc13c865c118d5292760835f8c4605b6de022
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.gl.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor debería ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor debería ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor debería ser de tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor debería estar baleiro.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor seleccionado non é unha opción válida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Debe seleccionar polo menos {{ limit }} opción.|Debe seleccionar polo menos {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Debe seleccionar como máximo {{ limit }} opción.|Debe seleccionar como máximo {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Un ou máis dos valores indicados non son válidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo non era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo falta.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor non é unha data válida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor non é unha data e hora válidas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor non é unha dirección de correo electrónico válida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Non se puido atopar o arquivo.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo non se pode ler.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é demasiado grande ({{ size }} {{ suffix }}). O tamaño máximo permitido é {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo non é válido ({{ type }}). Os tipos mime válidos son {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor debería ser {{ limit }} ou menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor é demasiado longo. Debería ter {{ limit }} carácter ou menos.|Este valor é demasiado longo. Debería ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor debería ser {{ limit }} ou máis.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor é demasiado curto. Debería ter {{ limit }} carácter ou máis.|Este valor é demasiado corto. Debería ter {{ limit }} caracteres ou máis.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor non debería estar baleiro.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor non debería ser null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor debería ser null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor non é válido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor non é unha hora válida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor non é unha URL válida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dous valores deberían ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é demasiado grande. O tamaño máximo permitido é {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O arquivo é demasiado grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No se puido cargar o arquivo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor debería ser un número válido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>O arquivo non é unha imaxe válida.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Isto non é unha dirección IP válida.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor non é un idioma válido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor non é unha localización válida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor non é un país válido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor xa está a ser empregado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Non se puido determinar o tamaño da imaxe.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imaxe é demasiado grande ({{ width }}px). A largura máxima permitida son {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imaxe é demasiado pequena ({{ width }}px). A largura mínima requerida son {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imaxe é demasiado grande ({{ height }}px). A altura máxima permitida son {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imaxe é demasiado pequena ({{ height }}px). A altura mínima requerida son {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor debería ser a contrasinal actual do usuario.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor debería ter exactamente {{ limit }} carácter.|Este valor debería ter exactamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>O arquivo foi só subido parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Non se subiu ningún arquivo.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Ningunha carpeta temporal foi configurada en php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Non se puido escribir o arquivo temporal no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Unha extensión de PHP provocou que a subida fallara.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta colección debe conter {{ limit }} elemento ou máis.|Esta colección debe conter {{ limit }} elementos ou máis.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta colección debe conter {{ limit }} elemento ou menos.|Esta colección debe conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta colección debe conter exactamente {{ limit }} elemento.|Esta colección debe conter exactamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Número de tarxeta non válido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de tarxeta non soportado ou número de tarxeta non válido.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este valor non é un International Bank Account Number (IBAN) válido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor non é un ISBN-10 válido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor non é un ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor non é nin un ISBN-10 válido nin un ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor non é un ISSN válido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este valor non é unha moeda válida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor debería ser maior que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser maior ou igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor debería ser identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor debería ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor debería ser menor ou igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor non debería ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor non debería ser identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A proporción da imaxe é demasiado grande ({{ ratio }}). A proporción máxima permitida é {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A proporción da é demasiado pequena ({{ ratio }}). A proporción mínima permitida é {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imaxe é cadrada ({{ width }}x{{ height }}px). As imáxenes cadradas non están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imaxe está orientada horizontalmente ({{ width }}x{{ height }}px). As imáxenes orientadas horizontalmente non están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imaxe está orientada verticalmente ({{ width }}x{{ height }}px). As imáxenes orientadas verticalmente non están permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Non está permitido un arquivo baleiro.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Non se puido resolver o host.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>A codificación de caracteres para este valor debería ser {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.he.xlf b/core/vendor/symfony/validator/Resources/translations/validators.he.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..65105149005838dc0372d8feb943a055b0979ce9
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.he.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>הערך צריך להיות שקר.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>הערך צריך להיות אמת.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>הערך צריך להיות מסוג {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>הערך צריך להיות ריק.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>הערך שבחרת אינו חוקי.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>אתה צריך לבחור לפחות {{ limit }} אפשרויות.|אתה צריך לבחור לפחות {{ limit }} אפשרויות.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>אתה צריך לבחור לכל היותר {{ limit }} אפשרויות.|אתה צריך לבחור לכל היותר {{ limit }} אפשרויות.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>אחד או יותר מהערכים אינו חוקי.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>שדה זה לא היה צפוי</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>שדה זה חסר.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>הערך אינו תאריך חוקי.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>הערך אינו תאריך ושעה חוקיים.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>כתובת המייל אינה תקינה.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>הקובץ לא נמצא.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>לא ניתן לקרוא את הקובץ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>הקובץ גדול מדי ({{ size }} {{ suffix }}). הגודל המרבי המותר הוא {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>סוג MIME של הקובץ אינו חוקי ({{ type }}). מותרים סוגי MIME {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>הערך צריל להכיל {{ limit }} תווים לכל היותר.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>הערך ארוך מידי. הוא צריך להכיל {{ limit }} תווים לכל היותר.|הערך ארוך מידי. הוא צריך להכיל {{ limit }} תווים לכל היותר.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>הערך צריך להכיל {{ limit }} תווים לפחות.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.|הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>הערך לא אמור להיות ריק.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>הערך לא אמור להיות ריק.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>הערך צריך להיות ריק.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>הערך אינו חוקי.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>הערך אינו זמן תקין.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>זאת אינה כתובת אתר תקינה.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>שני הערכים צריכים להיות שווים.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>הקובץ גדול מדי. הגודל המרבי המותר הוא {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>הקובץ גדול מדי.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>לא ניתן לעלות את הקובץ.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>הערך צריך להיות מספר חוקי.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>הקובץ הזה אינו תמונה תקינה.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>זו אינה כתובת IP חוקית.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>הערך אינו שפה חוקית.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>הערך אינו אזור תקף.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>הערך אינו ארץ חוקית.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>הערך כבר בשימוש.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>לא ניתן לקבוע את גודל התמונה.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>רוחב התמונה גדול מדי ({{ width }}px). הרוחב המקסימלי הוא {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>רוחב התמונה קטן מדי ({{ width }}px). הרוחב המינימלי הוא {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>גובה התמונה גדול מדי ({{ height }}px). הגובה המקסימלי הוא {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>גובה התמונה קטן מדי ({{ height }}px). הגובה המינימלי הוא {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>הערך צריך להיות סיסמת המשתמש הנוכחי.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>הערך צריך להיות בדיוק {{ limit }} תווים.|הערך צריך להיות בדיוק {{ limit }} תווים.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>הקובץ הועלה באופן חלקי.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>הקובץ לא הועלה.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>לא הוגדרה תיקייה זמנית ב php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>לא ניתן לכתוב קובץ זמני לדיסק.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>סיומת PHP גרם להעלאה להיכשל.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>האוסף אמור להכיל {{ limit }} אלמנטים או יותר.|האוסף אמור להכיל {{ limit }} אלמנטים או יותר.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>האוסף אמור להכיל {{ limit }} אלמנטים או פחות.|האוסף אמור להכיל {{ limit }} אלמנטים או פחות.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>האוסף צריך להכיל בדיוק {{ limit }} אלמנטים.|האוסף צריך להכיל בדיוק {{ limit }} אלמנטים.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>מספר הכרטיס אינו חוקי.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>סוג הכרטיס אינו נתמך או לא חוקי.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>This is not a valid International Bank Account Number (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>This value is not a valid ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>This value is not a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>This value is not a valid ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>This value is not a valid currency.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>This value should be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>This value should be greater than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>This value should be greater than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>This value should be less than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>This value should be less than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>This value should not be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>An empty file is not allowed.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.hr.xlf b/core/vendor/symfony/validator/Resources/translations/validators.hr.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a11e825ccadad8bd6ff468d40f1bf2293111be3a
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.hr.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ova vrijednost treba biti netočna (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ova vrijednost treba biti točna (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ova vrijednost treba biti tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ova vrijednost treba biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ova vrijednost treba biti jedna od ponuđenih.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Izaberite barem {{ limit }} mogućnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Izaberite najviše {{ limit }} mogućnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna ili više danih vrijednosti nije ispravna.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ovo polje nije očekivalo.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ovo polje nedostaje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ova vrijednost nije ispravan datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ova vrijednost nije ispravan datum-vrijeme.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ova vrijednost nije ispravna e-mail adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Datoteka ne može biti pronađena.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Datoteka nije čitljiva.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke nije ispravan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ova vrijednost treba biti {{ limit }} ili manje.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ova vrijednost je predugačka. Treba imati {{ limit }} znakova ili manje.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ova vrijednost treba biti {{ limit }} ili više.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ova vrijednost je prekratka. Treba imati {{ limit }} znakova ili više.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ova vrijednost ne smije biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ova vrijednost ne smije biti null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ova vrijednost treba biti null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ova vrijednost nije ispravna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ova vrijednost nije ispravno vrijeme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ova vrijednost nije ispravan URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obje vrijednosti trebaju biti jednake.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ova datoteka je prevelika. Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ova datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ova datoteka ne može biti prenesena.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ova vrijednost treba biti ispravan broj.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ova datoteka nije ispravna slika.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Ovo nije ispravna IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ova vrijednost nije ispravan jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ova vrijednost nije ispravana regionalna oznaka.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ova vrijednost nije ispravna zemlja.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ova vrijednost je već iskorištena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Veličina slike se ne može odrediti.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Širina slike je prevelika ({{ width }}px). Najveća dozvoljena širina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premala ({{ width }}px). Najmanja dozvoljena Å¡irina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Visina slike je prevelika ({{ height }}px). Najveća dozvoljena visina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Visina slike je premala ({{ height }}px). Najmanja dozvoljena visina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ova vrijednost treba biti trenutna korisnička lozinka.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ova vrijednost treba imati točno {{ limit }} znakova.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je samo djelomično prenesena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Niti jedna datoteka nije prenesena.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>U php.ini datoteci nije konfiguriran privremeni folder.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ne mogu zapisati privremenu datoteku na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Prijenos datoteke nije uspio zbog PHP ekstenzije.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ova kolekcija treba sadržavati točno {{ limit }} element.|Ova kolekcija treba sadržavati točno {{ limit }} elementa.|Ova kolekcija treba sadržavati točno {{ limit }} elemenata.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neispravan broj kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Neispravan broj kartice ili tip kartice nije podržan.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ova vrijednost nije ispravan međunarodni broj bankovnog računa (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10 niti ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ova vrijednost nije ispravan ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ova vrijednost nije ispravna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti veća od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti veća ili jednaka od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebala biti manja ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost ne bi trebala biti {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost ne bi trebala biti {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.hu.xlf b/core/vendor/symfony/validator/Resources/translations/validators.hu.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a972c02e56b609620078dbc74e1fabd5c865b96e
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.hu.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ennek az értéknek hamisnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ennek az értéknek igaznak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ennek az értéknek {{ type }} típusúnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ennek az értéknek üresnek kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>A választott érték érvénytelen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Legalább {{ limit }} értéket kell kiválasztani.|Legalább {{ limit }} értéket kell kiválasztani.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Legfeljebb {{ limit }} értéket lehet kiválasztani.|Legfeljebb {{ limit }} értéket lehet kiválasztani.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>A megadott értékek közül legalább egy érvénytelen.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nem várt mező.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ez a mező hiányzik.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ez az érték nem egy érvényes dátum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ez az érték nem egy érvényes időpont.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ez az érték nem egy érvényes e-mail cím.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>A fájl nem található.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>A fájl nem olvasható.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>A fájl túl nagy ({{ size }} {{ suffix }}). A legnagyobb megengedett méret {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>A fájl MIME típusa érvénytelen ({{ type }}). Az engedélyezett MIME típusok: {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ez az érték legfeljebb {{ limit }} lehet.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ez az érték túl hosszú. Legfeljebb {{ limit }} karaktert tartalmazhat.|Ez az érték túl hosszú. Legfeljebb {{ limit }} karaktert tartalmazhat.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ez az érték legalább {{ limit }} kell, hogy legyen.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ez az érték túl rövid. Legalább {{ limit }} karaktert kell tartalmaznia.|Ez az érték túl rövid. Legalább {{ limit }} karaktert kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ez az érték nem lehet üres.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ez az érték nem lehet null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ennek az értéknek nullnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ez az érték nem érvényes.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ez az érték nem egy érvényes időpont.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ez az érték nem egy érvényes URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>A két értéknek azonosnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>A fájl túl nagy. A megengedett maximális méret: {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>A fájl túl nagy.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>A fájl nem tölthető fel.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ennek az értéknek érvényes számnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ez a fájl nem egy érvényes kép.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Ez az érték nem egy érvényes IP cím.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ez az érték nem egy érvényes nyelv.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ez az érték nem egy érvényes területi beállítás.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ez az érték nem egy érvényes ország.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ez az érték már használatban van.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>A kép méretét nem lehet megállapítani.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A kép szélessége túl nagy ({{ width }}px). A megengedett legnagyobb szélesség {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A kép szélessége túl kicsi ({{ width }}px). Az elvárt legkisebb szélesség {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A kép magassága túl nagy ({{ height }}px). A megengedett legnagyobb magasság {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A kép magassága túl kicsi ({{ height }}px). Az elvárt legkisebb magasság {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ez az érték a felhasználó jelenlegi jelszavával kell megegyezzen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ennek az értéknek pontosan {{ limit }} karaktert kell tartalmaznia.|Ennek az értéknek pontosan {{ limit }} karaktert kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>A fájl csak részben lett feltöltve.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nem lett fájl feltöltve.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nincs ideiglenes könyvtár beállítva a php.ini-ben.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Az ideiglenes fájl nem írható a lemezre.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Egy PHP bővítmény miatt a feltöltés nem sikerült.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ennek a gyűjteménynek legalább {{ limit }} elemet kell tartalmaznia.|Ennek a gyűjteménynek legalább {{ limit }} elemet kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ez a gyűjtemény legfeljebb {{ limit }} elemet tartalmazhat.|Ez a gyűjtemény legfeljebb {{ limit }} elemet tartalmazhat.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ennek a gyűjteménynek pontosan {{ limit }} elemet kell tartalmaznia.|Ennek a gyűjteménynek pontosan {{ limit }} elemet kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Érvénytelen kártyaszám.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nem támogatott kártyatípus vagy érvénytelen kártyaszám.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Érvénytelen nemzetközi bankszámlaszám (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ez az érték nem egy érvényes ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ez az érték nem egy érvényes ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ez az érték nem egy érvényes ISBN-10 vagy ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ez az érték nem egy érvényes ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ez az érték nem egy érvényes pénznem.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ez az érték legyen {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ez az érték nagyobb legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ez az érték nagyobb vagy egyenlő legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ez az érték ugyanolyan legyen, mint {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ez az érték kisebb legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ez az érték kisebb vagy egyenlő legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ez az érték ne legyen {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ez az érték ne legyen ugyanolyan, mint {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A képarány túl nagy ({{ ratio }}). A megengedett legnagyobb képarány {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A képarány túl kicsi ({{ ratio }}). A megengedett legkisebb képarány {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A kép négyzet alakú ({{ width }}x{{ height }}px). A négyzet alakú képek nem engedélyezettek.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A kép fekvő tájolású ({{ width }}x{{ height }}px). A fekvő tájolású képek nem engedélyezettek.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A kép álló tájolású ({{ width }}x{{ height }}px). Az álló tájolású képek nem engedélyezettek.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Üres fájl nem megengedett.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Az állomásnevet nem lehet feloldani.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ez az érték nem az elvárt {{ charset }} karakterkódolást használja.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.hy.xlf b/core/vendor/symfony/validator/Resources/translations/validators.hy.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..664c085ae71af7b1f744917cd7c855a72ac6cd8d
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.hy.xlf
@@ -0,0 +1,187 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Õ¯Õ¥Õ²Õ®.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Õ³Õ·Õ´Õ¡Ö€Õ«Õ¿.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« {{ type }} Õ¿Õ¥Õ½Õ¡Õ¯Õ«.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Õ¤Õ¡Õ¿Õ¡Ö€Õ¯.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ձեր ընտրած արժեքը անթույլատրելի է.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ô´Õ¸Ö‚Ö„ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¡Õ´Õ¥Õ¶Õ¡Ö„Õ«Õ¹Õ¨ {{ limit }} Õ¿Õ¡Ö€Õ¢Õ¥Ö€Õ¡Õ¯Õ¶Õ¥Ö€.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ô´Õ¸Ö‚Ö„ ÕºÕ¥Õ¿Ö„ Õ§ Õ¨Õ¶Õ¿Ö€Õ¥Ö„ Õ¸Õ¹ Õ¡Õ¾Õ¥Õ¬Õ« Ö„Õ¡Õ¶ {{ limit }} Õ¿Õ¡Ö€Õ¢Õ¥Ö€Õ¡Õ¯Õ¶Õ¥Ö€.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Õ„Õ¥Õ¯ Õ¯Õ¡Õ´ Õ¡Õ¾Õ¥Õ¬Õ« Õ¿Ö€Õ¾Õ¡Õ® Õ¡Ö€ÕªÕ¥Ö„Õ¶Õ¥Ö€Õ¨ Õ¡Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ¥Õ¶.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ô±ÕµÕ½ Õ¤Õ¡Õ·Õ¿Õ¨ Õ¹Õ« Õ½ÕºÕ¡Õ½Õ¾Õ¸Ö‚Õ´.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Այս դաշտը բացակայում է.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ Õ½Õ­Õ¡Õ¬ Õ¡Õ´Õ½Õ¡Õ©Õ«Õ¾ Õ§.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ô±Õ´Õ½Õ¡Õ©Õ¾Õ« Ö‡ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ« Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ¡Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ§.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ô·Õ¬-ÖƒÕ¸Õ½Õ¿Õ« Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ¡Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ§.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Õ–Õ¡ÕµÕ¬Õ¨ Õ¹Õ« Õ£Õ¿Õ¶Õ¾Õ¥Õ¬.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Õ–Õ¡ÕµÕ¬Õ¨ Õ¡Õ¶Õ¨Õ¶Õ©Õ¥Õ¼Õ¶Õ¥Õ¬Õ« Õ§.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ֆայլը չափազանց մեծ է ({{ size }} {{ suffix }}): Մաքսիմալ թույլատրելի չափսը՝ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-Õ¿Õ¥Õ½Õ¡Õ¯Õ¨ Õ¡Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ§({{ type }}): Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ« Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« MIME-Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¶ Õ¥Õ¶: {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡Õ´ ÖƒÕ¸Ö„Ö€.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Արժեքը չափազանց երկար է: Պետք է լինի {{ limit }} կամ ավել սիմվոլներ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿ Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡Õ´ Õ·Õ¡Õ¿.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Արժեքը չափազանց կարճ է: Պետք է լինի {{ limit }} կամ ավելի սիմվոլներ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ Õ¹ÕºÕ¥Õ¿Ö„ Õ§ Õ¤Õ¡Õ¿Õ¡Ö€Õ¯ Õ¬Õ«Õ¶Õ«.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ Õ¹ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ô±Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ¡Ö€ÕªÕ¥Ö„.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ« Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ¡Õ¶Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ§.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨  URL  Õ¹Õ§.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÔµÖ€Õ¯Õ¸Ö‚ Õ¡Ö€ÕªÕ¥Ö„Õ¶Õ¥Ö€Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¶Õ¸Ö‚ÕµÕ¶Õ¨ Õ¬Õ«Õ¶Õ¥Õ¶.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ֆայլը չափազանց մեծ է: Մաքսիմալ թույլատրելի չափսը {{ limit }} {{ suffix }} է.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ֆայլը չափազանց մեծ է.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Õ–Õ¡ÕµÕ¬Õ¨ Õ¹Õ« Õ¯Õ¡Ö€Õ¸Õ² Õ¢Õ¥Õ¼Õ¶Õ¾Õ¥Õ¬.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Õ©Õ«Õ¾.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Õ¥Ö€Õ¯Õ«Ö€.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>Õ–Õ¡ÕµÕ¬Õ¨ Õ¶Õ¯Õ¡Ö€Õ« Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Ö†Õ¸Ö€Õ´Õ¡Õ¿ Õ¹Õ§.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>Արժեքը թույլատրելի IP հասցե չէ.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>Ô±Ö€ÕªÕ¥Ö„Õ¨ Õ©Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬Õ« Õ¬Õ¥Õ¦Õ¸Ö‚ Õ¹Õ§.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid locale.</source>
+                <target>Արժեքը չի հանդիսանում թույլատրելի տեղայնացում.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ô±ÕµÕ¤ Õ¡Ö€ÕªÕ¥Ö„Õ¨ Õ¡Ö€Õ¤Õ¥Õ¶ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Նկարի չափսերը չստացվեց որոշել.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Նկարի լայնությունը չափազանց մեծ է({{ width }}px). Մաքսիմալ չափն է {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Նկարի լայնությունը չափազանց փոքր է ({{ width }}px). Մինիմալ չափն է {{ min_ width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Նկարի բարձրությունը չափազանց մեծ է ({{ height }}px). Մաքսիմալ չափն է {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Նկարի բարձրությունը չափազանց փոքր է ({{ height }}px). Մինիմալ չափն է {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ô±ÕµÕ½ Õ¡Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¬Õ«Õ¶Õ« Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¸Õ²Õ« Õ¶Õ¥Ö€Õ¯Õ¡ Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«Ö€Õ¨.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ô±ÕµÕ½ Õ¡Ö€ÕªÕ¥Ö„Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¸Ö‚Õ¶Õ¥Õ¶Õ¡ Õ³Õ«Õ·Õ¿ {{ limit }} Õ½Õ«Õ´Õ¾Õ¸Õ¬Õ¶Õ¥Ö€.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.id.xlf b/core/vendor/symfony/validator/Resources/translations/validators.id.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..742f4a163ebd6c5e8891091e6e93c149a4d3e4f0
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.id.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Nilai ini harus bernilai salah.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Nilai ini harus bernilai benar.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Nilai ini harus bertipe {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Nilai ini harus kosong.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Nilai yang dipilih tidak tepat.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Anda harus memilih paling tidak {{ limit }} pilihan.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Anda harus memilih paling banyak {{ limit }} pilihan.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Satu atau lebih nilai yang diberikan tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Bidang ini tidak diharapkan.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bidang ini hilang.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Nilai ini bukan merupakan tanggal yang sah.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Nilai ini bukan merupakan tanggal dan waktu yang sah.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Nilai ini bukan alamat email yang sah.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Berkas tidak ditemukan.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Berkas tidak bisa dibaca.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ukuran berkas terlalu besar ({{ size }} {{ suffix }}). Ukuran maksimum yang diizinkan adalah {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Jenis berkas ({{ type }}) tidak sah. Jenis berkas yang diijinkan adalah {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Nilai ini harus {{ limit }} atau kurang.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Nilai ini terlalu panjang. Seharusnya {{ limit }} karakter atau kurang.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Nilai ini harus {{ limit }} atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Nilai ini terlalu pendek. Seharusnya {{ limit }} karakter atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Nilai ini tidak boleh kosong.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Nilai ini tidak boleh 'null'.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Nilai ini harus 'null'.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Nilai ini tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Nilai ini bukan merupakan waktu yang sah.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Nilai ini bukan URL yang sah.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Isi keduanya harus sama.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ukuran berkas terlalu besar. Ukuran maksimum yang diijinkan adalah {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ukuran berkas terlalu besar.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Berkas tidak dapat diunggah.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Nilai ini harus angka yang sah.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Berkas ini tidak termasuk gambar.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Ini bukan alamat IP yang sah.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Nilai ini bukan bahasa yang sah.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Nilai ini bukan lokal yang sah.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Nilai ini bukan negara yang sah.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Nilai ini sudah digunakan.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ukuran dari gambar tidak bisa dideteksi.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Lebar gambar terlalu besar ({{ width }}px). Ukuran lebar maksimum adalah {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Lebar gambar terlalu kecil ({{ width }}px). Ukuran lebar minimum yang diharapkan adalah {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Tinggi gambar terlalu besar ({{ height }}px). Ukuran tinggi maksimum adalah {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Tinggi gambar terlalu kecil ({{ height }}px). Ukuran tinggi minimum yang diharapkan adalah {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Nilai ini harus kata sandi pengguna saat ini.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Nilai ini harus memiliki tepat {{ limit }} karakter.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Berkas hanya terunggah sebagian.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Tidak ada berkas terunggah.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Direktori sementara tidak dikonfiguasi pada php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Tidak dapat menuliskan berkas sementara ke dalam media penyimpanan.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Sebuah ekstensi PHP menyebabkan kegagalan unggah.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Kumpulan ini harus memiliki {{ limit }} elemen atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Kumpulan ini harus memiliki kurang dari {{ limit }} elemen.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Kumpulan ini harus memiliki tepat {{ limit }} elemen.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nomor kartu tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Jenis kartu tidak didukung atau nomor kartu tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ini bukan Nomor Rekening Bank Internasional (IBAN) yang sah.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Nilai ini bukan ISBN-10 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Nilai ini bukan ISBN-13 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Nilai ini bukan ISBN-10 maupun ISBN-13 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Nilai ini bukan ISSN yang sah.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Nilai ini bukan mata uang yang sah.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya lebih dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya lebih dari atau sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya identik dengan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya kurang dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya kurang dari atau sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya tidak sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya tidak identik dengan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.it.xlf b/core/vendor/symfony/validator/Resources/translations/validators.it.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..5a411eaa0ac96984d11a80e9245823102be8e29c
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.it.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Questo valore dovrebbe essere falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Questo valore dovrebbe essere vero.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Questo valore dovrebbe essere di tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Questo valore dovrebbe essere vuoto.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Questo valore dovrebbe essere una delle opzioni disponibili.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Si dovrebbe selezionare almeno {{ limit }} opzione.|Si dovrebbero selezionare almeno {{ limit }} opzioni.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Si dovrebbe selezionare al massimo {{ limit }} opzione.|Si dovrebbero selezionare al massimo {{ limit }} opzioni.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Uno o più valori inseriti non sono validi.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Questo campo non è stato previsto.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Questo campo è manca.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Questo valore non è una data valida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Questo valore non è una data e ora valida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Questo valore non è un indirizzo email valido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Non è stato possibile trovare il file.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Il file non è leggibile.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Il file è troppo grande ({{ size }} {{ suffix }}). La dimensione massima consentita è {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Il mime type del file non è valido ({{ type }}). I tipi permessi sono {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Questo valore dovrebbe essere {{ limit }} o inferiore.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Questo valore è troppo lungo. Dovrebbe essere al massimo di {{ limit }} carattere.|Questo valore è troppo lungo. Dovrebbe essere al massimo di {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Questo valore dovrebbe essere {{ limit }} o superiore.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Questo valore è troppo corto. Dovrebbe essere almeno di {{ limit }} carattere.|Questo valore è troppo corto. Dovrebbe essere almeno di {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Questo valore non dovrebbe essere vuoto.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Questo valore non dovrebbe essere nullo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Questo valore dovrebbe essere nullo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Questo valore non è valido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Questo valore non è un'ora valida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Questo valore non è un URL valido.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>I due valori dovrebbero essere uguali.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Il file è troppo grande. La dimensione massima è {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Il file è troppo grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Il file non può essere caricato.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Questo valore dovrebbe essere un numero.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Questo file non è una immagine valida.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Questo valore non è un indirizzo IP valido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Questo valore non è una lingua valida.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Questo valore non è una impostazione regionale valida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Questo valore non è una nazione valida.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Questo valore è già stato utilizzato.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>La dimensione dell'immagine non può essere determinata.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>La larghezza dell'immagine è troppo grande ({{ width }}px). La larghezza massima è di {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>La larghezza dell'immagine è troppo piccola ({{ width }}px). La larghezza minima è di {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>L'altezza dell'immagine è troppo grande ({{ height }}px). L'altezza massima è di {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>L'altezza dell'immagine è troppo piccola ({{ height }}px). L'altezza minima è di {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Questo valore dovrebbe essere la password attuale dell'utente.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Questo valore dovrebbe contenere esattamente {{ limit }} carattere.|Questo valore dovrebbe contenere esattamente {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Il file è stato caricato solo parzialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nessun file è stato caricato.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nessuna cartella temporanea è stata configurata nel php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Impossibile scrivere il file temporaneo sul disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Un'estensione PHP ha causato il fallimento del caricamento.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Questa collezione dovrebbe contenere almeno {{ limit }} elemento.|Questa collezione dovrebbe contenere almeno {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Questa collezione dovrebbe contenere massimo {{ limit }} elemento.|Questa collezione dovrebbe contenere massimo {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Questa collezione dovrebbe contenere esattamente {{ limit }} elemento.|Questa collezione dovrebbe contenere esattamente {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Numero di carta non valido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo di carta non supportato o numero non valido.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Questo valore non è un IBAN (International Bank Account Number) valido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Questo valore non è un codice ISBN-10 valido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Questo valore non è un codice ISBN-13 valido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Questo valore non è un codice ISBN-10 o ISBN-13 valido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Questo valore non è un codice ISSN valido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Questo valore non è una valuta valida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere maggiore di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere maggiore o uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere minore di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere minore o uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere diverso da {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere diverso da {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Il rapporto di aspetto dell'immagine è troppo grande ({{ ratio }}). Il rapporto massimo consentito è {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Il rapporto di aspetto dell'immagine è troppo piccolo ({{ ratio }}). Il rapporto minimo consentito è {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>L'immagine è quadrata ({{ width }}x{{ height }}px). Le immagini quadrate non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>L'immagine è orizzontale ({{ width }}x{{ height }}px). Le immagini orizzontali non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>L'immagine è verticale ({{ width }}x{{ height }}px). Le immagini verticali non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Un file vuoto non è consentito.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..63eecc0e19e79630b2c9374d802e91e14c9ea0a9
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>falseでなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>trueでなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>型は{{ type }}でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>空でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>有効な選択肢ではありません。</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>{{ limit }}個以上選択してください。</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>{{ limit }}個以内で選択してください。</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>無効な選択肢が含まれています。</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>このフィールドは予期されていませんでした。</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>このフィールドは、欠落しています。</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>有効な日付ではありません。</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>有効な日時ではありません。</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>有効なメールアドレスではありません。</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ファイルが見つかりません。</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ファイルを読み込めません。</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ファイルのサイズが大きすぎます({{ size }} {{ suffix }})。有効な最大サイズは{{ limit }} {{ suffix }}です。</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ファイルのMIMEタイプが無効です({{ type }})。有効なMIMEタイプは{{ types }}です。</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>{{ limit }}以下でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>値が長すぎます。{{ limit }}文字以内でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>{{ limit }}以上でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>値が短すぎます。{{ limit }}文字以上でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>空であってはなりません。</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>nullであってはなりません。</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>nullでなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>有効な値ではありません。</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>有効な時刻ではありません。</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>有効なURLではありません。</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>2つの値が同じでなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ファイルのサイズが大きすぎます。有効な最大サイズは{{ limit }} {{ suffix }}です。</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ファイルのサイズが大きすぎます。</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ファイルをアップロードできませんでした。</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>有効な数字ではありません。</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ファイルが画像ではありません。</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>有効なIPアドレスではありません。</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>有効な言語名ではありません。</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>有効なロケールではありません。</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>有効な国名ではありません。</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>既に使用されています。</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>画像のサイズが検出できません。</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>画像の幅が大きすぎます({{ width }}ピクセル)。{{ max_width }}ピクセルまでにしてください。</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>画像の幅が小さすぎます({{ width }}ピクセル)。{{ min_width }}ピクセル以上にしてください。</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>画像の高さが大きすぎます({{ height }}ピクセル)。{{ max_height }}ピクセルまでにしてください。</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>画像の高さが小さすぎます({{ height }}ピクセル)。{{ min_height }}ピクセル以上にしてください。</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user current password.</source>
+                <target>ユーザーの現在のパスワードでなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ちょうど{{ limit }}文字でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ファイルのアップロードは完全ではありません。</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ファイルがアップロードされていません。</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>php.iniで一時フォルダが設定されていません。</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>一時ファイルをディスクに書き込むことができません。</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP拡張によってアップロードに失敗しました。</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>{{ limit }}個以上の要素を含んでなければいけません。</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>要素は{{ limit }}個までです。</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>要素はちょうど{{ limit }}個でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>無効なカード番号です。</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>未対応のカード種類又は無効なカード番号です。</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>有効なIBANコードではありません。</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>有効なISBN-10コードではありません。</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>有効なISBN-13コードではありません。</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>有効なISBN-10コード又はISBN-13コードではありません。</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>有効なISSNコードではありません。</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>有効な貨幣ではありません。</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}と等しくなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>{{ compared_value }}より大きくなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}以上でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>{{ compared_value_type }}としての{{ compared_value }}と等しくなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>{{ compared_value }}未満でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}以下でなければなりません。</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}と等しくてはいけません。</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>{{ compared_value_type }}としての{{ compared_value }}と等しくてはいけません。</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>画像のアスペクト比が大きすぎます({{ ratio }})。{{ max_ratio }}までにしてください。</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>画像のアスペクト比が小さすぎます({{ ratio }})。{{ min_ratio }}以上にしてください。</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>画像が正方形になっています({{ width }}x{{ height }}ピクセル)。正方形の画像は許可されていません。</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>画像が横向きになっています({{ width }}x{{ height }}ピクセル)。横向きの画像は許可されていません。</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>画像が縦向きになっています({{ width }}x{{ height }}ピクセル)。縦向きの画像は許可されていません。</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>空のファイルは許可されていません。</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ホストを解決できませんでした。</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>この値は予期される文字コード({{ charset }})と異なります。</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.lb.xlf b/core/vendor/symfony/validator/Resources/translations/validators.lb.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..8281c7c249a053be61f362b334bd2a867424039d
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.lb.xlf
@@ -0,0 +1,303 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Dëse Wäert sollt falsch sinn.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Dëse Wäert sollt wouer sinn.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Dëse Wäert sollt vum Typ {{ type }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Dëse Wäert sollt eidel sinn.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Dëse Wäert sollt enger vun de Wielméiglechkeeten entspriechen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Dir sollt mindestens {{ limit }} Méiglechkeete wielen.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Dir sollt héchstens {{ limit }} Méiglechkeete wielen.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Een oder méi vun de Wäerter ass ongëlteg.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>The fields {{ fields }} were not expected.</source>
+                <target>D'Felder {{ fields }} goufen net erwaart.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>The fields {{ fields }} are missing.</source>
+                <target>D'Felder {{ fields }} feelen.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Dëse Wäert entsprécht kenger gëlteger Datumsangab.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Dëse Wäert entsprécht kenger gëlteger Datums- an Zäitangab.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Dëse Wäert ass keng gëlteg Email-Adress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>De Fichier gouf net fonnt.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>De Fichier ass net liesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>De Fichier ass ze grouss ({{ size }} {{ suffix }}). Déi zougeloosse Maximalgréisst bedréit {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Den Typ vum Fichier ass ongëlteg ({{ type }}). Erlaabten Type sinn {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Dëse Wäert soll méi kleng oder gläich {{ limit }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Dës Zeecheketten ass ze laang. Se sollt héchstens {{ limit }} Zeechen hunn.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Dëse Wäert sollt méi grouss oder gläich {{ limit }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Dës Zeecheketten ass ze kuerz. Se sollt mindestens {{ limit }} Zeechen hunn.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Dëse Wäert sollt net eidel sinn.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Dëst sollt keen Null-Wäert sinn.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Dëst sollt keen Null-Wäert sinn.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Dëse Wäert ass net gëlteg.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Dëse Wäert entsprécht kenger gëlteger Zäitangab.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Dëse Wäert ass keng gëlteg URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Béid Wäerter sollten identesch sinn.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>De fichier ass ze grouss. Déi maximal Gréisst dierf {{ limit }} {{ suffix }} net depasséieren.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>De Fichier ass ze grouss.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>De Fichier konnt net eropgeluede ginn.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Dëse Wäert sollt eng gëlteg Zuel sinn.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Dëse Fichier ass kee gëltegt Bild.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dëst ass keng gëlteg IP-Adress.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Dëse Wäert aentsprécht kenger gëlteger Sprooch.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Dëse Wäert entsprécht kengem gëltege Gebittsschema.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Dëse Wäert entsprécht kengem gëltege Land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Dëse Wäert gëtt scho benotzt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>D'Gréisst vum Bild konnt net detektéiert ginn.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>D'Breet vum Bild ass ze grouss ({{ width }}px). Déi erlaabte maximal Breet ass {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>D'Breet vum Bild ass ze kleng ({{ width }}px). Déi minimal Breet ass {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>D'Héicht vum Bild ass ze grouss ({{ height }}px). Déi erlaabte maximal Héicht ass {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>D'Héicht vum Bild ass ze kleng ({{ height }}px). Déi minimal Héicht ass {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Dëse Wäert sollt dem aktuelle Benotzerpasswuert entspriechen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Dëse Wäert sollt exactly {{ limit }} Buschtaf hunn.|Dëse Wäert sollt exakt {{ limit }} Buschtawen hunn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>De Fichier gouf just deelweis eropgelueden.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Et gouf kee Fichier eropgelueden.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Et gouf keen temporären Dossier an der php.ini konfiguréiert.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Den temporäre Fichier kann net gespäichert ginn.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Eng PHP-Erweiderung huet den Upload verhënnert.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Dës Sammlung sollt {{ limit }} oder méi Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Dës Sammlung sollt {{ limit }} oder manner Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Dës Sammlung sollt exakt {{ limit }} Element hunn.|Dës Sammlung sollt exakt {{ limit }} Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ongëlteg Kaartennummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Net ënnerstëtzte Kaartentyp oder ongëlteg Kaartennummer.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Dëst ass keng gëlteg IBAN-Kontonummer.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Dëse Wäert ass keng gëlteg ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Dëse Wäert ass keng gëlteg ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Dëse Wäert ass weder eng gëlteg ISBN-10 nach eng gëlteg ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Dëse Wäert ass keng gëlteg ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Dëse Wäert ass keng gëlteg Währung.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt méi grouss wéi {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt méi grouss wéi oder gläich {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt identesch si mat {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt méi kleng wéi {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt méi kleng wéi oder gläich {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt net {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dëse Wäert sollt net identesch si mat {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>D'Säiteverhältnis vum Bild ass ze grouss ({{ ratio }}). Den erlaabte Maximalwäert ass {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>D'Säiteverhältnis vum Bild ass ze kleng ({{ ratio }}). Den erwaarte Minimalwäert ass {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>D'Bild ass quadratesch ({{ width }}x{{ height }}px). Quadratesch Biller sinn net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>D'Bild ass am Queeschformat ({{ width }}x{{ height }}px). Biller am Queeschformat sinn net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>D'Bild ass am Héichformat ({{ width }}x{{ height }}px). Biller am Héichformat sinn net erlaabt.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.lt.xlf b/core/vendor/symfony/validator/Resources/translations/validators.lt.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a556c45f0c42f528a50f33b6742f2aebe7b50475
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.lt.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Reikšmė turi būti neigiama.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Reikšmė turi būti teigiama.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Šios reikšmės tipas turi būti {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ši reikšmė turi būti tuščia.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Neteisingas pasirinkimas.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Turite pasirinkti bent {{ limit }} variantą.|Turite pasirinkti bent {{ limit }} variantus.|Turite pasirinkti bent {{ limit }} variantų.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Turite pasirinkti ne daugiau kaip {{ limit }} variantą.|Turite pasirinkti ne daugiau kaip {{ limit }} variantus.|Turite pasirinkti ne daugiau kaip {{ limit }} variantų.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Viena ar daugiau įvestų reikšmių yra netinkamos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nebuvo tikimasi Å is laukas.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Šiame lauke yra dingęs.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ši reikšmė nėra data.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ši reikšmė nera data ir laikas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ši reikšmė nėra tinkamas el. pašto adresas.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Byla nerasta.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Negalima nuskaityti bylos.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Byla yra per didelÄ— ({{ size }} {{ suffix }}). Maksimalus dydis {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Netinkamas bylos tipas (mime type) ({{ type }}). Galimi bylų tipai {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Reikšmė turi būti {{ limit }} arba mažiau.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.|Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.|Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Reikšmė turi būti {{ limit }} arba daugiau.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.|Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.|Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ši reikšmė negali būti tuščia.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ši reikšmė negali būti null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ši reikšmė turi būti null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Netinkama reikšmė.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ši reikšmė nėra laikas.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ši reikšmė nėra tinkamas interneto adresas.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Abi reikšmės turi būti identiškos.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Byla yra per didelÄ—. Maksimalus dydis yra {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Byla per didelÄ—.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Byla negali būti įkelta.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ši reikšmė turi būti skaičius.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>Ši reikšmė nėra tinkama šalis.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>Byla nÄ—ra paveikslÄ—lis.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>Ši reikšmė nėra tinkamas IP adresas.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>Ši reikšmė nėra tinkama kalba.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid locale.</source>
+                <target>Ši reikšmė nėra tinkama lokalė.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ši reikšmė jau yra naudojama.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nepavyko nustatyti nuotraukos dydžio.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Nuotraukos plotis per didelis ({{ width }}px). Maksimalus leidžiamas plotis yra {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Nuotraukos plotis per mažas ({{ width }}px). Minimalus leidžiamas plotis yra {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Nuotraukos aukštis per didelis ({{ height }}px). Maksimalus leidžiamas aukštis yra {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Nuotraukos aukštis per mažas ({{ height }}px). Minimalus leidžiamas aukštis yra {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ši reikšmė turi sutapti su dabartiniu naudotojo slaptažodžiu.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ši reikšmė turi turėti lygiai {{ limit }} simbolį.|Ši reikšmė turi turėti lygiai {{ limit }} simbolius.|Ši reikšmė turi turėti lygiai {{ limit }} simbolių.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Failas buvo tik dalinai įkeltas.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nebuvo įkelta jokių failų.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>NÄ—ra sukonfiguruoto jokio laikino katalogo php.ini faile.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nepavyko išsaugoti laikino failo.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP plėtinys sutrukdė failo įkėlimą ir jis nepavyko.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Sąraše turi būti {{ limit }} arba daugiau įrašų.|Sąraše turi būti {{ limit }} arba daugiau įrašų.|Sąraše turi būti {{ limit }} arba daugiau įrašų.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Sąraše turi būti {{ limit }} arba mažiau įrašų.|Sąraše turi būti {{ limit }} arba mažiau įrašų.|Sąraše turi būti {{ limit }} arba mažiau įrašų.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Sąraše turi būti lygiai {{ limit }} įrašas.|Sąraše turi būti lygiai {{ limit }} įrašai.|Sąraše turi būti lygiai {{ limit }} įrašų.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Klaidingas kortelÄ—s numeris.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>KortelÄ—s tipas nepalaikomas arba klaidingas kortelÄ—s numeris.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ši reišmė neatitinka tarptautinio banko sąskaitos numerio formato (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ši reikšmė neatitinka ISBN-10 formato.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ši reikšmė neatitinka ISBN-13 formato.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ši reikšmė neatitinka nei ISBN-10, nei ISBN-13 formato.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ši reišmė neatitinka ISSN formato.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Netinkamas valiutos formatas.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti didesnė už {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti didesnė už arba lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti identiška {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti mažesnė už {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ši reikšmė turi būti mažesnė už arba lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ši reikšmė neturi būti lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ši reikšmė neturi būti identiška {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Nuotraukos santykis yra per didelis ({{ ratio }}). Didžiausias leistinas santykis yra {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Nuotraukos santykis yra per mažas ({{ ratio }}). Mažiausias leistinas santykis yra {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Nuotrauka yra kvadratinÄ— ({{ width }}x{{ height }}px). KvadratinÄ—s nuotraukos nÄ—ra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Nuotrauka orientuota į plotį ({{ width }}x{{ height }}px). Nuotraukos orientuotos į plotį nėra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Nuotrauka orientuota į aukštį ({{ width }}x{{ height }}px). Nuotraukos orientuotos į aukštį nėra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Failas negali būti tuščias.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.mn.xlf b/core/vendor/symfony/validator/Resources/translations/validators.mn.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..dfe7eebf6d53e63c7299a3041987f58616a1d665
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.mn.xlf
@@ -0,0 +1,151 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Энэ утга буруу байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Энэ утга үнэн байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Энэ утга  {{ type }} -н төрөл байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Энэ утга хоосон байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Сонгосон утга буруу байна.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Хамгийн багадаа {{ limit }} утга сонгогдсон байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Хамгийн ихдээ {{ limit }} утга сонгогдох боломжтой.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Өгөгдсөн нэг эсвэл нэгээс олон утга буруу байна.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Энэ талбар нь хүлээгдэж байсан юм.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Энэ талбар нь алга болсон байна.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Энэ утга буруу date төрөл байна .</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Энэ утга буруу цаг төрөл байна.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>И-майл хаяг буруу байна.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Файл олдсонгүй.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Файл уншигдахуйц биш байна.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл хэтэрхий том байна ({{ size }} {{ suffix }}). Зөвшөөрөгдөх дээд хэмжээ  {{ limit }} {{ suffix }} байна.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Файлын MIME-төрөл нь буруу байна ({{ type }}). Зөвшөөрөгдөх MIME-төрлүүд {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Энэ утга  {{ limit }} юмуу эсвэл бага байна.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Энэ утга хэтэрхий урт байна. {{ limit }} тэмдэгтийн урттай юмуу эсвэл бага байна.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Энэ утга {{ limit }} юмуу эсвэл их байна.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Энэ утга хэтэрхий богино байна. {{ limit }} тэмдэгт эсвэл их байна.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Энэ утга хоосон байж болохгүй.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Энэ утга null байж болохгүй.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Энэ утга null байна.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Энэ утга буруу байна.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Энэ утга буруу цаг төрөл байна.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Энэ утга буруу URL байна .</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Хоёр утгууд ижил байх ёстой.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл хэтэрхий том байна. Зөвшөөрөгдөх дээд хэмжээ нь {{ limit }} {{ suffix }} байна.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Файл хэтэрхий том байна.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Файл upload хийгдсэнгүй.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Энэ утга зөвхөн тоо байна.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>Энэ утга үнэн бодит улс биш байна.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>Файл зураг биш байна.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>IP хаяг зөв биш байна.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>Энэ утга үнэн зөв хэл биш байна .</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.nb.xlf b/core/vendor/symfony/validator/Resources/translations/validators.nb.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a8b790c7d8640cf06be7aed7198ac1560c3951ce
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.nb.xlf
@@ -0,0 +1,155 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Verdien skal være falsk.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Verdien skal være sann.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Verdien skal være av typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Verdien skal være blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Verdien skal være en av de gitte valg.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du skal velge minst {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan maks velge {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>En eller flere av de oppgitte verdier er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dette feltet ikke var forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette feltet mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Verdien er ikke en gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Verdien er ikke en gyldig dato og tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Verdien er ikke en gyldig e-mail adresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunne ikke finnes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen kan ikke leses.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor ({{ size }} {{ suffix }}). Tilatte maksimale størrelse {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mimetypen av filen er ugyldig ({{ type }}). Tilatte mimetyper er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Verdien skal være {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Verdien er for lang. Den skal ha {{ limit }} bokstaver eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Verdien skal være {{ limit }} eller mer.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Verdien er for kort. Den skal ha {{ limit }} tegn eller flere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Verdien må ikke være blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Verdien må ikke være tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Verdien skal være tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Verdien er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Verdien er ikke en gyldig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Verdien er ikke en gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De to verdier skal være ens.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor. Den maksimale størrelse er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunne ikke lastes opp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Denne verdi skal være et gyldig tall.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Denne filen er ikke et gyldig bilde.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dette er ikke en gyldig IP adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Denne verdi er ikke et gyldig språk.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Denne verdi er ikke en gyldig lokalitet.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Denne verdi er ikke et gyldig land.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.nl.xlf b/core/vendor/symfony/validator/Resources/translations/validators.nl.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..fe3346973e8b41ece05d6b37f9bf48811c124bd6
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.nl.xlf
@@ -0,0 +1,311 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Deze waarde mag niet waar zijn.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Deze waarde moet waar zijn.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Deze waarde moet van het type {{ type }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Deze waarde moet leeg zijn.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>De geselecteerde waarde is geen geldige optie.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Selecteer ten minste {{ limit }} optie.|Selecteer ten minste {{ limit }} opties.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Selecteer maximaal {{ limit }} optie.|Selecteer maximaal {{ limit }} opties.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Eén of meer van de ingegeven waarden zijn ongeldig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dit veld was niet verwacht.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dit veld ontbreekt.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Deze waarde is geen geldige datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Deze waarde is geen geldige datum en tijd.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Deze waarde is geen geldig e-mailadres.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Het bestand is niet gevonden.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Het bestand is niet leesbaar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Het bestand is te groot ({{ size }} {{ suffix }}). Toegestane maximum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Het mime type van het bestand is ongeldig ({{ type }}). Toegestane mime types zijn {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Deze waarde moet {{ limit }} of minder zijn.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Deze waarde is te lang. Hij mag maximaal {{ limit }} teken bevatten.|Deze waarde is te lang. Hij mag maximaal {{ limit }} tekens bevatten.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Deze waarde moet {{ limit }} of meer zijn.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Deze waarde is te kort. Hij moet tenminste {{ limit }} teken bevatten.|Deze waarde is te kort. Hij moet tenminste {{ limit }} tekens bevatten.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Deze waarde mag niet leeg zijn.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Deze waarde mag niet null zijn.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Deze waarde moet null zijn.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Deze waarde is ongeldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Deze waarde is geen geldige tijd.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Deze waarde is geen geldige URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De twee waarden moeten gelijk zijn.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Het bestand is te groot. Toegestane maximum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Het bestand is te groot.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Het bestand kon niet geüpload worden.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Deze waarde moet een geldig getal zijn.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Dit bestand is geen geldige afbeelding.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dit is geen geldig IP-adres.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Deze waarde representeert geen geldige taal.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Deze waarde representeert geen geldige lokalisering.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Deze waarde representeert geen geldig land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Deze waarde wordt al gebruikt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>De grootte van de afbeelding kon niet bepaald worden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>De afbeelding is te breed ({{ width }}px). De maximaal toegestane breedte is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>De afbeelding is niet breed genoeg ({{ width }}px). De minimaal verwachte breedte is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>De afbeelding is te hoog ({{ height }}px). De maximaal toegestane hoogte is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>De afbeelding is niet hoog genoeg ({{ height }}px). De minimaal verwachte hoogte is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Deze waarde moet het huidige wachtwoord van de gebruiker zijn.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Deze waarde moet exact {{ limit }} teken lang zijn.|Deze waarde moet exact {{ limit }} tekens lang zijn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Het bestand is niet geheel geüpload.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Er is geen bestand geüpload.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Er is geen tijdelijke map geconfigureerd in php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan het tijdelijke bestand niet wegschrijven op disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>De upload is mislukt vanwege een PHP-extensie.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Deze collectie moet {{ limit }} element of meer bevatten.|Deze collectie moet {{ limit }} elementen of meer bevatten.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Deze collectie moet {{ limit }} element of minder bevatten.|Deze collectie moet {{ limit }} elementen of minder bevatten.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Deze collectie moet exact {{ limit }} element bevatten.|Deze collectie moet exact {{ limit }} elementen bevatten.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ongeldig creditcardnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Niet-ondersteund type creditcard of ongeldig nummer.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Dit is geen geldig internationaal bankrekeningnummer (IBAN).</target>
+            </trans-unit>
+             <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Deze waarde is geen geldige ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Deze waarde is geen geldige ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Deze waarde is geen geldige ISBN-10 of ISBN-13 waarde.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Deze waarde is geen geldige ISSN waarde.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Deze waarde is geen geldige valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet gelijk zijn aan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Deze waarde moet groter zijn dan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet groter dan of gelijk aan {{ compared_value }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Deze waarde moet identiek zijn aan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Deze waarde moet minder zijn dan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet minder dan of gelijk aan {{ compared_value }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Deze waarde mag niet gelijk zijn aan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Deze waarde mag niet identiek zijn aan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>De afbeeldingsverhouding is te groot ({{ ratio }}). Maximale verhouding is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>De afbeeldingsverhouding is te klein ({{ ratio }}). Minimale verhouding is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>De afbeelding is vierkant ({{ width }}x{{ height }}px). Vierkante afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>De afbeelding is liggend ({{ width }}x{{ height }}px). Liggende afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>De afbeelding is staand ({{ width }}x{{ height }}px). Staande afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Lege bestanden zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Deze waarde is niet in de verwachte tekencodering {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.no.xlf b/core/vendor/symfony/validator/Resources/translations/validators.no.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..ea01c63ee4aa40dfa381f3bb27fb909de8202a2a
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.no.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Verdien skulle ha vore tom/nei.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Verdien skulla ha vore satt/ja.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Verdien må vere av typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Verdien skal vere blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Verdien du valgte er ikkje gyldig.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du må velge minst {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan maksimalt gjere {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ein eller fleire av dei opplyste verdiane er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dette feltet var ikke forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette feltet mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Verdien er ikkje ein gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Verdien er ikkje ein gyldig dato og tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Verdien er ikkje ei gyldig e-postadresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fila kunne ikkje finnes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fila kan ikkje lesast.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fila er for stor ({{ size }} {{ suffix }}). Tillatt maksimal størrelse er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime-typen av fila er ugyldig ({{ type }}). Tillatte mime-typar er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Verdien må vere {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Verdien er for lang. Den må vere {{ limit }} bokstavar eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Verdien må vere {{ limit }} eller meir.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Verdien er for kort. Den må ha {{ limit }} teikn eller fleire.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Verdien må ikkje vere blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Verdien må ikkje vere tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Verdien må vere tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Verdien er ikkje gyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Verdien er ikkje gyldig tidseining.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Verdien er ikkje ein gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Dei to verdiane må vere like.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fila er for stor. Den maksimale storleik er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fila er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fila kunne ikkje bli lasta opp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Verdien må vere eit gyldig tal.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fila er ikkje eit gyldig bilete.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Dette er ikkje ei gyldig IP-adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Verdien er ikkje eit gyldig språk.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Verdien er ikkje ein gyldig lokalitet (språk/region).</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Verdien er ikkje eit gyldig land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Verdien er allereie i bruk.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Storleiken på biletet kunne ikkje oppdagast.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Biletbreidda er for stor, ({{ width }} pikslar). Tillatt maksimumsbreidde er {{ max_width }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Biletbreidda er for liten, ({{ width }} pikslar). Forventa minimumsbreidde er {{ min_width }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Bilethøgda er for stor, ({{ height }} pikslar). Tillatt maksimumshøgde er {{ max_height }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Billethøgda er for låg, ({{ height }} pikslar). Forventa minimumshøgde er {{ min_height }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Verdien må vere brukaren sitt noverande passord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Verdien må vere nøyaktig {{ limit }} teikn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fila vart kun delvis opplasta.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Inga fil vart lasta opp.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Førebels mappe (tmp) er ikkje konfigurert i php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikkje skrive førebels fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ei PHP-udviding forårsaka feil under opplasting.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samlinga må innehalde {{ limit }} element eller meir.|Denne samlinga må innehalde {{ limit }} element eller meir.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samlinga må innehalde {{ limit }} element eller færre.|Denne samlinga må innehalde {{ limit }} element eller færre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samlinga må innehalde nøyaktig {{ limit }} element.|Denne samlinga må innehalde nøyaktig {{ limit }} element.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldig kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Korttypen er ikkje støtta eller ugyldig kortnummer.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.pl.xlf b/core/vendor/symfony/validator/Resources/translations/validators.pl.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..1d6875fb78f48a236d7e3ceb5b8413709f9627d4
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.pl.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ta wartość powinna być fałszem.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ta wartość powinna być prawdą.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ta wartość powinna być typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ta wartość powinna być pusta.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ta wartość powinna być jedną z podanych opcji.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Powinieneś wybrać co najmniej {{ limit }} opcję.|Powinieneś wybrać co najmniej {{ limit }} opcje.|Powinieneś wybrać co najmniej {{ limit }} opcji.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Powinieneś wybrać maksymalnie {{ limit }} opcję.|Powinieneś wybrać maksymalnie {{ limit }} opcje.|Powinieneś wybrać maksymalnie {{ limit }} opcji.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna lub więcej z podanych wartości jest nieprawidłowa.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>To pole nie spodziewano.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>To pole jest chybianie.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ta wartość nie jest prawidłową datą.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ta wartość nie jest prawidłową datą i czasem.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ta wartość nie jest prawidłowym adresem email.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Plik nie mógł zostać odnaleziony.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Nie można odczytać pliku.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Plik jest za duży ({{ size }} {{ suffix }}). Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Nieprawidłowy typ mime pliku ({{ type }}). Dozwolone typy mime to {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ta wartość powinna wynosić {{ limit }} lub mniej.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.|Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.|Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ta wartość powinna wynosić {{ limit }} lub więcej.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.|Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.|Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ta wartość nie powinna być pusta.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ta wartość nie powinna być nullem.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ta wartość powinna być nullem.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ta wartość jest nieprawidłowa.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ta wartość nie jest prawidłowym czasem.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ta wartość nie jest prawidłowym adresem URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obie wartości powinny być równe.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Plik jest za duży. Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Plik jest za duży.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Plik nie mógł być wgrany.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ta wartość powinna być prawidłową liczbą.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ten plik nie jest obrazem.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>To nie jest prawidłowy adres IP.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ta wartość nie jest prawidłowym językiem.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ta wartość nie jest prawidłową lokalizacją.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ta wartość nie jest prawidłową nazwą kraju.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ta wartość jest już wykorzystywana.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nie można wykryć rozmiaru obrazka.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Szerokość obrazka jest zbyt duża ({{ width }}px). Maksymalna dopuszczalna szerokość to {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Szerokość obrazka jest zbyt mała ({{ width }}px). Oczekiwana minimalna szerokość to {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Wysokość obrazka jest zbyt duża ({{ height }}px). Maksymalna dopuszczalna wysokość to {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Wysokość obrazka jest zbyt mała ({{ height }}px). Oczekiwana minimalna wysokość to {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ta wartość powinna być aktualnym hasłem użytkownika.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ta wartość powinna mieć dokładnie {{ limit }} znak.|Ta wartość powinna mieć dokładnie {{ limit }} znaki.|Ta wartość powinna mieć dokładnie {{ limit }} znaków.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Plik został wgrany tylko częściowo.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Żaden plik nie został wgrany.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nie skonfigurowano folderu tymczasowego w php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nie można zapisać pliku tymczasowego na dysku.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Rozszerzenie PHP spowodowało błąd podczas wgrywania.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ten zbiór powinien zawierać {{ limit }} lub więcej elementów.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ten zbiór powinien zawierać {{ limit }} lub mniej elementów.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ten zbiór powinien zawierać dokładnie {{ limit }} element.|Ten zbiór powinien zawierać dokładnie {{ limit }} elementy.|Ten zbiór powinien zawierać dokładnie {{ limit }} elementów.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nieprawidłowy numer karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nieobsługiwany rodzaj karty lub nieprawidłowy numer karty.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Nieprawidłowy międzynarodowy numer rachunku bankowego (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ta wartość nie jest prawidłowym numerem ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ta wartość nie jest prawidłowym numerem ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ta wartość nie jest prawidłowym numerem ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ta wartość nie jest prawidłowym numerem ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ta wartość nie jest prawidłową walutą.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ta wartość powinna być równa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ta wartość powinna być większa niż {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ta wartość powinna być większa bądź równa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta wartość powinna być identycznego typu {{ compared_value_type }} oraz wartości {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ta wartość powinna być mniejsza niż {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ta wartość powinna być mniejsza bądź równa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ta wartość nie powinna być równa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta wartość nie powinna być identycznego typu {{ compared_value_type }} oraz wartości {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Proporcje obrazu są zbyt duże ({{ ratio }}). Maksymalne proporcje to {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Proporcje obrazu są zbyt małe ({{ ratio }}). Minimalne proporcje to {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Obraz jest kwadratem ({{ width }}x{{ height }}px). Kwadratowe obrazy nie sÄ… akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Obraz jest panoramiczny ({{ width }}x{{ height }}px). Panoramiczne zdjęcia nie są akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Obraz jest portretowy ({{ width }}x{{ height }}px). Portretowe zdjęcia nie są akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Plik nie może być pusty.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Nazwa hosta nie została rozpoznana.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ta wartość nie pasuje do oczekiwanego zestawu znaków {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.pt.xlf b/core/vendor/symfony/validator/Resources/translations/validators.pt.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..d563c921cb90b87ec557809a09fe517e8882b6ec
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.pt.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deveria ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deveria ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deveria ser do tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deveria ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor selecionado não é uma opção válida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Você deveria selecionar {{ limit }} opção no mínimo.|Você deveria selecionar {{ limit }} opções no mínimo.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Você deve selecionar, no máximo {{ limit }} opção.|Você deve selecionar, no máximo {{ limit }} opções.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Um ou mais dos valores introduzidos não são válidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo não era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo está faltando.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor não é uma data válida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor não é uma data-hora válida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor não é um endereço de e-mail válido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>O arquivo não pôde ser encontrado.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo não pôde ser lido.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é muito grande ({{ size }} {{ suffix }}). O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo é inválido ({{ type }}). Os tipos mime permitidos são {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deveria ser {{ limit }} ou menor.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>O valor é muito longo. Deveria ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deveria ser {{ limit }} ou mais.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>O valor é muito curto. Deveria de ter {{ limit }} caractere ou mais.|O valor é muito curto. Deveria de ter {{ limit }} caracteres ou mais.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor não deveria ser branco/vazio.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor não deveria ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deveria ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor não é válido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor não é uma hora válida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor não é um URL válido.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dois valores deveriam ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é muito grande. O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O ficheiro é muito grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Não foi possível carregar o ficheiro.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deveria de ser um número válido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Este ficheiro não é uma imagem.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Este endereço de IP não é válido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor não é uma linguagem válida.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor não é um 'locale' válido.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor não é um País válido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor já está a ser usado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>O tamanho da imagem não foi detetado.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imagem ({{ width }}px) é muito grande. A largura máxima da imagem é: {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imagem ({{ width }}px) é muito pequena. A largura miníma da imagem é de: {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imagem ({{ height }}px) é muito grande. A altura máxima da imagem é de: {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imagem ({{ height }}px) é muito pequena. A altura miníma da imagem é de: {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deveria de ser a password atual do utilizador.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor tem de ter exatamente {{ limit }} carateres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Só foi enviado parte do ficheiro.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nenhum ficheiro foi enviado.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Não existe nenhum directório temporária configurado no ficheiro php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Não foi possível escrever ficheiros temporários no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Uma extensão PHP causou a falha no envio.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta coleção deve conter {{ limit }} elemento ou mais.|Esta coleção deve conter {{ limit }} elementos ou mais.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta coleção deve conter {{ limit }} elemento ou menos.|Esta coleção deve conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta coleção deve conter exatamente {{ limit }} elemento.|Esta coleção deve conter exatamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Número de cartão inválido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de cartão não suportado ou número de cartão inválido.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este não é um Número Internacional de Conta Bancária (IBAN) válido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor não é um ISBN-10 válido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor não é um ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor não é um ISBN-10 ou ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor não é um ISSN válido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este não é um valor monetário válido.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deve ser superior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual ou superior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deve ser inferior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual ou inferior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor não deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor não deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>O formato da imagem é muito grande ({{ ratio }}). O formato máximo é {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>O formato da imagem é muito pequeno ({{ ratio }}). O formato mínimo esperado é {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imagem é um quadrado ({{ width }}x{{ height }}px). Imagens quadradas não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imagem está orientada à paisagem ({{ width }}x{{ height }}px). Imagens orientadas à paisagem não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imagem está orientada ao retrato ({{ width }}x{{ height }}px). Imagens orientadas ao retrato não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ficheiro vazio não é permitido.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf b/core/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..bff91e363ff403f34ecfc581064ba033aa42374f
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deve ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deve ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deve ser do tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deve ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor selecionado não é uma opção válida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Você deve selecionar, no mínimo, {{ limit }} opção.|Você deve selecionar, no mínimo, {{ limit }} opções.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Você deve selecionar, no máximo, {{ limit }} opção.|Você deve selecionar, no máximo, {{ limit }} opções.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Um ou mais valores informados são inválidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo não era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo está ausente.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor não é uma data válida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor não é uma data e hora válida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor não é um endereço de e-mail válido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>O arquivo não foi encontrado.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo não pode ser lido.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é muito grande ({{ size }} {{ suffix }}). O tamanho máximo permitido é {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo é inválido ({{ type }}). Os tipos mime permitidos são {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deve ser {{ limit }} ou menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor é muito longo. Deve ter {{ limit }} caractere ou menos.|Este valor é muito longo. Deve ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deve ser {{ limit }} ou mais.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor é muito curto. Deve ter {{ limit }} caractere ou mais.|Este valor é muito curto. Deve ter {{ limit }} caracteres ou mais.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor não deve ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor não deve ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deve ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor não é válido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor não é uma hora válida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor não é uma URL válida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dois valores devem ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo é muito grande. O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O arquivo é muito grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>O arquivo não pode ser enviado.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deve ser um número válido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Este arquivo não é uma imagem válida.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Este não é um endereço de IP válido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor não é um idioma válido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor não é uma localidade válida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor não é um país válido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor já está sendo usado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>O tamanho da imagem não pode ser detectado.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imagem é muito grande ({{ width }}px). A largura máxima permitida é de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imagem é muito pequena ({{ width }}px). A largura mínima esperada é de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imagem é muito grande ({{ height }}px). A altura máxima permitida é de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imagem é muito pequena ({{ height }}px). A altura mínima esperada é de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deve ser a senha atual do usuário.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor deve ter exatamente {{ limit }} caractere.|Este valor deve ter exatamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>O arquivo foi enviado apenas parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nenhum arquivo foi enviado.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nenhum diretório temporário foi configurado no php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Não foi possível escrever o arquivo temporário no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Uma extensão PHP fez com que o envio falhasse.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta coleção deve conter {{ limit }} elemento ou mais.|Esta coleção deve conter {{ limit }} elementos ou mais.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta coleção deve conter {{ limit }} elemento ou menos.|Esta coleção deve conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta coleção deve conter exatamente {{ limit }} elemento.|Esta coleção deve conter exatamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Número de cartão inválido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de cartão não suportado ou número de cartão inválido.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este não é um Número Internacional de Conta Bancária (IBAN) válido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor não é um ISBN-10 válido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor não é um ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor não é um ISBN-10 e nem um ISBN-13 válido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor não é um ISSN válido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este não é um valor monetário válido.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deve ser maior que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser maior ou igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deve ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser menor ou igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor não deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor não deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A proporção da imagem é muito grande ({{ ratio }}). A proporção máxima permitida é {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A proporção da imagem é muito pequena ({{ ratio }}). A proporção mínima esperada é {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imagem está num formato quadrado ({{ width }}x{{ height }}px). Imagens com formato quadrado não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imagem está orientada à paisagem ({{ width }}x{{ height }}px). Imagens orientadas à paisagem não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imagem está orientada ao retrato ({{ width }}x{{ height }}px). Imagens orientadas ao retrato não são permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Arquivo vazio não é permitido.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>O host não pôde ser resolvido.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Este valor não corresponde ao charset {{ charset }} esperado.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ro.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ro.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..27346a9f17718e4f03999a2499bbd697d7bbe850
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ro.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Această valoare ar trebui să fie falsă (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Această valoare ar trebui să fie adevărată (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Această valoare ar trebui să fie de tipul {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Această valoare ar trebui sa fie goală.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Valoarea selectată nu este o opțiune validă.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Trebuie să selectați cel puțin {{ limit }} opțiune.|Trebuie să selectați cel puțin {{ limit }} opțiuni.|Trebuie să selectați cel puțin {{ limit }} de opțiuni</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Trebuie să selectați cel mult {{ limit }} opțiune.|Trebuie să selectați cel mult {{ limit }} opțiuni.|Trebuie să selectați cel mult {{ limit }} de opțiuni.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Una sau mai multe dintre valorile furnizate sunt invalide.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Acest câmp nu era de aşteptat.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Acest câmp este lipsă.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Această valoare nu reprezintă o dată validă.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Această valoare nu reprezintă o dată și oră validă.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Această valoare nu reprezintă o adresă de e-mail validă.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fișierul nu a putut fi găsit.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fișierul nu poate fi citit.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fișierul este prea mare ({{ size }} {{ suffix }}). Dimensiunea maximă permisă este {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Tipul fișierului este invalid ({{ type }}). Tipurile permise de fișiere sunt ({{ types }}).</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Această valoare ar trebui să fie cel mult {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} caracter.|Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} caractere.|Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Această valoare ar trebui să fie cel puțin {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} caracter.|Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} caractere.|Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Această valoare nu ar trebui să fie goală.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Această valoare nu ar trebui să fie nulă (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Această valoare ar trebui să fie nulă (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Această valoare nu este validă.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Această valoare nu reprezintă o oră validă.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Această valoare nu reprezintă un URL (link) valid.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Cele două valori ar trebui să fie egale.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fișierul este prea mare. Mărimea maximă permisă este {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fișierul este prea mare.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fișierul nu a putut fi încărcat.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Această valoare nu reprezintă un număr valid.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Acest fișier nu este o imagine validă.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Această valoare nu este o adresă IP validă.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Această valoare nu reprezintă o limbă corectă.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Această valoare nu reprezintă un dialect (o limbă) corect.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Această valoare nu este o țară validă.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Această valoare este folosită deja.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Mărimea imaginii nu a putut fi detectată.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Lățimea imaginii este prea mare ({{ width }}px). Lățimea maximă permisă este de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Lățimea imaginii este prea mică ({{ width }}px). Lățimea minimă permisă este de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Înălțimea imaginii este prea mare ({{ height }}px). Înălțimea maximă permisă este de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Înălțimea imaginii este prea mică ({{ height }}px). Înălțimea minimă permisă este de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Această valoare trebuie să fie parola curentă a utilizatorului.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Această valoare trebuie să conțină exact {{ limit }} caracter.|Această valoare trebuie să conțină exact {{ limit }} caractere.|Această valoare trebuie să conțină exact {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fișierul a fost încărcat parțial.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nu a fost încărcat nici un fișier.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Nu este configurat nici un director temporar in php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nu a fost posibilă scrierea fișierului temporar pe disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>O extensie PHP a prevenit încărcarea cu succes a fișierului.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Această colecție trebuie să conțină cel puțin {{ limit }} element.|Această colecție trebuie să conțină cel puțin {{ limit }} elemente.|Această colecție trebuie să conțină cel puțin {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Această colecție trebuie să conțină cel mult {{ limit }} element.|Această colecție trebuie să conțină cel mult {{ limit }} elemente.|Această colecție trebuie să conțină cel mult {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Această colecție trebuie să conțină {{ limit }} element.|Această colecție trebuie să conțină {{ limit }} elemente.|Această colecție trebuie să conțină {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Numărul card invalid.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipul sau numărul cardului nu sunt valide.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Acesta nu este un cod IBAN (International Bank Account Number) valid.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Această valoare nu este un cod ISBN-10 valid.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Această valoare nu este un cod ISBN-13 valid.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Această valoare nu este un cod ISBN-10 sau ISBN-13 valid.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Această valoare nu este un cod ISSN valid.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Această valoare nu este o monedă validă.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie egală cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie mai mare de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie mai mare sau egală cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Această valoare trebuie identică cu {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie mai mică de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie mai mică sau egală cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Această valoare nu trebuie să fie egală cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Această valoare nu trebuie să fie identică cu {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ru.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ru.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..d7a90c907ed08fdcda4315becec6abc7ca669c23
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ru.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Значение должно быть ложным.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Значение должно быть истинным.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Тип значения должен быть {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Значение должно быть пустым.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Выбранное Вами значение недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Вы должны выбрать хотя бы {{ limit }} вариант.|Вы должны выбрать хотя бы {{ limit }} варианта.|Вы должны выбрать хотя бы {{ limit }} вариантов.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Вы должны выбрать не более чем {{ limit }} вариант.|Вы должны выбрать не более чем {{ limit }} варианта.|Вы должны выбрать не более чем {{ limit }} вариантов.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Одно или несколько заданных значений недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Это поле не ожидалось.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Это поле отсутствует.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Значение не является правильной датой.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Значение даты и времени недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Значение адреса электронной почты недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Файл не может быть найден.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Файл не может быть прочитан.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл слишком большой ({{ size }} {{ suffix }}). Максимально допустимый размер {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-тип файла недопустим ({{ type }}). Допустимы MIME-типы файлов {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Значение должно быть {{ limit }} или меньше.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Значение слишком длинное. Должно быть равно {{ limit }} символу или меньше.|Значение слишком длинное. Должно быть равно {{ limit }} символам или меньше.|Значение слишком длинное. Должно быть равно {{ limit }} символам или меньше.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Значение должно быть {{ limit }} или больше.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Значение слишком короткое. Должно быть равно {{ limit }} символу или больше.|Значение слишком короткое. Должно быть равно {{ limit }} символам или больше.|Значение слишком короткое. Должно быть равно {{ limit }} символам или больше.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Значение не должно быть пустым.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Значение не должно быть null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Значение должно быть null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Значение недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Значение времени недопустимо.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Значение не является допустимым URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Оба значения должны быть одинаковыми.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл слишком большой. Максимально допустимый размер {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Файл слишком большой.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Файл не может быть загружен.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Значение должно быть числом.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>Значение не является допустимой страной.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>Файл не является допустимым форматом изображения.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>Значение не является допустимым IP адресом.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>Значение не является допустимым языком.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid locale.</source>
+                <target>Значение не является допустимой локалью.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Это значение уже используется.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Не удалось определить размер изображения.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ширина изображения слишком велика ({{ width }}px). Максимально допустимая ширина {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ширина изображения слишком мала ({{ width }}px). Минимально допустимая ширина {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Высота изображения слишком велика ({{ height }}px). Максимально допустимая высота {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Высота изображения слишком мала ({{ height }}px). Минимально допустимая высота {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Значение должно быть текущим паролем пользователя.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Значение должно быть равно {{ limit }} символу.|Значение должно быть равно {{ limit }} символам.|Значение должно быть равно {{ limit }} символам.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Файл был загружен только частично.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Файл не был загружен.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Не настроена временная директория в php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Невозможно записать временный файл на диск.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Расширение PHP вызвало ошибку при загрузке.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Эта коллекция должна содержать {{ limit }} элемент или больше.|Эта коллекция должна содержать {{ limit }} элемента или больше.|Эта коллекция должна содержать {{ limit }} элементов или больше.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Эта коллекция должна содержать {{ limit }} элемент или меньше.|Эта коллекция должна содержать {{ limit }} элемента или меньше.|Эта коллекция должна содержать {{ limit }} элементов или меньше.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Эта коллекция должна содержать ровно {{ limit }} элемент.|Эта коллекция должна содержать ровно {{ limit }} элемента.|Эта коллекция должна содержать ровно {{ limit }} элементов.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Неверный номер карты.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Неподдерживаемый тип или неверный номер карты.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Значение не является допустимым международным номером банковского счета (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Значение имеет неверный формат ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Значение имеет неверный формат ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Значение не соответствует форматам ISBN-10 и ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Значение не соответствует формату ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Некорректный формат валюты.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Значение должно быть равно {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Значение должно быть больше чем {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Значение должно быть больше или равно {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Значение должно быть идентичным {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Значение должно быть меньше чем {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Значение должно быть меньше или равно {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Значение не должно быть равно {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Значение не должно быть идентичным {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Соотношение сторон изображения слишком велико ({{ ratio }}). Максимальное соотношение сторон {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Соотношение сторон изображения слишком мало ({{ ratio }}). Минимальное соотношение сторон {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Изображение квадратное ({{ width }}x{{ height }}px). Квадратные изображения не разрешены.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Изображение в альбомной ориентации ({{ width }}x{{ height }}px). Изображения в альбомной ориентации не разрешены.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Изображение в портретной ориентации ({{ width }}x{{ height }}px). Изображения в портретной ориентации не разрешены.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Пустые файлы не разрешены.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Имя хоста не может быть разрешено.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Значение не совпадает с ожидаемой {{ charset }} кодировкой.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sk.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sk.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..46f3ec38452aa641c01baff8a1b420f782e82d95
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sk.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Táto hodnota by mala byť nastavená na false.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Táto hodnota by mala byť nastavená na true.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Táto hodnota by mala byť typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Táto hodnota by mala byť prázdna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Táto hodnota by mala byť jednou z poskytnutých možností.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Mali by ste vybrať minimálne {{ limit }} možnosť.|Mali by ste vybrať minimálne {{ limit }} možnosti.|Mali by ste vybrať minimálne {{ limit }} možností.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Mali by ste vybrať najviac {{ limit }} možnosť.|Mali by ste vybrať najviac {{ limit }} možnosti.|Mali by ste vybrať najviac {{ limit }} možností.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Niektoré z uvedených hodnôt sú neplatné.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Toto pole sa neočakáva.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Toto pole chýba.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Tato hodnota nemá platný formát dátumu.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Táto hodnota nemá platný formát dátumu a času.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Táto hodnota nie je platná emailová adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Súbor sa nenašiel.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Súbor nie je čitateľný.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Súbor je príliš veľký ({{ size }} {{ suffix }}). Maximálna povolená veľkosť je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Súbor typu ({{ type }}) nie je podporovaný. Podporované typy sú {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Táto hodnota by mala byť {{ limit }} alebo menej.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znak.|Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znaky.|Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Táto hodnota by mala byť viac ako {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Táto hodnota je príliš krátka. Musí obsahovať minimálne {{ limit }} znak.|Táto hodnota je príliš krátka. Musí obsahovať minimálne {{ limit }} znaky.|Táto hodnota je príliš krátka. Minimálny počet znakov je {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Táto hodnota by mala byť vyplnená.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Táto hodnota by nemala byť null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Táto hodnota by mala byť null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Táto hodnota nie je platná.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Tato hodnota nemá správny formát času.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Táto hodnota nie je platnou URL adresou.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Tieto dve hodnoty by mali byť rovnaké.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Súbor je príliš veľký. Maximálna povolená veľkosť je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Súbor je príliš veľký.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Súbor sa nepodarilo nahrať.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Táto hodnota by mala byť číslo.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tento súbor nie je obrázok.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Toto nie je platná IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Tento jazyk neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Táto lokalizácia neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Táto krajina neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Táto hodnota sa už používa.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nepodarilo sa zistiť rozmery obrázku.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Obrázok je príliš široký ({{ width }}px). Maximálna povolená šírka obrázku je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Obrázok je príliš úzky ({{ width }}px). Minimálna šírka obrázku by mala byť {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>>Obrázok je príliš vysoký ({{ height }}px). Maximálna povolená výška obrázku je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Obrázok je príliš nízky ({{ height }}px). Minimálna výška obrázku by mala byť {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Táto hodnota by mala byť aktuálne heslo používateľa.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Táto hodnota by mala mať presne {{ limit }} znak.|Táto hodnota by mala mať presne {{ limit }} znaky.|Táto hodnota by mala mať presne {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Bola nahraná len časť súboru.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Žiadny súbor nebol nahraný.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>V php.ini nie je nastavená cesta k adresáru pre dočasné súbory.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Dočasný súbor sa nepodarilo zapísať na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Rozšírenie PHP zabránilo nahraniu súboru.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Táto kolekcia by mala obsahovať aspoň {{ limit }} prvok alebo viac.|Táto kolekcia by mala obsahovať aspoň {{ limit }} prvky alebo viac.|Táto kolekcia by mala obsahovať aspoň {{ limit }} prvkov alebo viac.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Táto kolekcia by mala maximálne {{ limit }} prvok.|Táto kolekcia by mala obsahovať maximálne {{ limit }} prvky.|Táto kolekcia by mala obsahovať maximálne {{ limit }} prvkov.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Táto kolekcia by mala obsahovať presne {{ limit }} prvok.|Táto kolekcia by mala obsahovať presne {{ limit }} prvky.|Táto kolekcia by mala obsahovať presne {{ limit }} prvkov.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neplatné číslo karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nepodporovaný typ karty alebo neplatné číslo karty.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Toto je neplatný IBAN.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Táto hodnota je neplatné ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Táto hodnota je neplatné ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Táto hodnota nie je platné ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Táto hodnota nie je platné ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Táto hodnota nie je platná mena.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť väčšia ako {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť väčšia alebo rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť typu {{ compared_value_type }} a zároveň by mala byť rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť menšia ako {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť menšia alebo rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Táto hodnota by nemala byť rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Táto hodnota by nemala byť typu {{ compared_value_type }} a zároveň by nemala byť rovná {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Pomer strán obrázku je príliš veľký ({{ ratio }}). Maximálny povolený pomer strán obrázku je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Pomer strán obrázku je príliš malý ({{ ratio }}). Minimálny povolený pomer strán obrázku je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Strany obrázku sú štvorcové ({{ width }}x{{ height }}px). Štvorcové obrázky nie sú povolené.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Obrázok je orientovaný na šírku ({{ width }}x{{ height }}px). Obrázky orientované na šírku nie sú povolené.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Obrázok je orientovaný na výšku ({{ width }}x{{ height }}px). Obrázky orientované na výšku nie sú povolené.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Súbor nesmie byť prázdny.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sl.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sl.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..4f0e7c6364e37c8ed803ece6750ba6ce63da6047
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sl.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Vrednost bi morala biti nepravilna (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Vrednost bi morala biti pravilna (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Vrednost mora biti naslednjega tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Vrednost mora biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vrednost, ki ste jo izbrali, ni veljavna možnost.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Izbrati morate vsaj {{ limit }} možnost.|Izbrati morate vsaj {{ limit }} možnosti.|Izbrati morate vsaj {{ limit }} možnosti.|Izbrati morate vsaj {{ limit }} možnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Izberete lahko največ {{ limit }} možnost.|Izberete lahko največ {{ limit }} možnosti.|Izberete lahko največ {{ limit }} možnosti.|Izberete lahko največ {{ limit }} možnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ena ali več podanih vrednosti ni veljavnih.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>To polje ni bilo pričakovati.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>To polje manjka.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ta vrednost ni veljaven datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ta vrednost ni veljaven datum in čas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ta vrednost ni veljaven e-poštni naslov.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Datoteke ni mogoče najti.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Datoteke ni mogoče prebrati.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Največja dovoljena velikost je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke je neveljaven ({{ type }}). Dovoljeni mime tipi so {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ta vrednost bi morala biti {{ limit }} ali manj.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ta vrednost je predolga. Morala bi imeti {{ limit }} znak ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znaka ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znake ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znakov ali manj.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ta vrednost bi morala biti {{ limit }} ali več.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ta vrednost je prekratka. Morala bi imeti {{ limit }} znak ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znaka ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znake ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znakov ali več.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ta vrednost ne bi smela biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ta vrednost ne bi smela biti nedefinirana (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ta vrednost bi morala biti nedefinirana (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ta vrednost ni veljavna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ta vrednost ni veljaven čas.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ta vrednost ni veljaven URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ti dve vrednosti bi morali biti enaki.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika. Največja dovoljena velikost je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Datoteke ni bilo mogoče naložiti.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ta vrednost bi morala biti veljavna Å¡tevilka.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ta datoteka ni veljavna slika.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>To ni veljaven IP naslov.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ta vrednost ni veljaven jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ta vrednost ni veljavna lokalnost.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ta vrednost ni veljavna država.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ta vrednost je že uporabljena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Velikosti slike ni bilo mogoče zaznati.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Širina slike je preširoka ({{ width }}px). Največja dovoljena širina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Širina slike je premajhna ({{ width }}px). Najmanjša predvidena širina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Višina slike je prevelika ({{ height }}px). Največja dovoljena višina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Višina slike je premajhna ({{ height }}px). Najmanjša predvidena višina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ta vrednost bi morala biti trenutno uporabnikovo geslo.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ta vrednost bi morala imeti točno {{ limit }} znak.|Ta vrednost bi morala imeti točno {{ limit }} znaka.|Ta vrednost bi morala imeti točno {{ limit }} znake.|Ta vrednost bi morala imeti točno {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je bila le delno naložena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nobena datoteka ni bila naložena.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Začasna mapa ni nastavljena v php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Začasne datoteke ni bilo mogoče zapisati na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP razširitev je vzrok, da nalaganje ni uspelo.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ta zbirka bi morala vsebovati {{ limit }} element ali več.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali več.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali več.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali več.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ta zbirka bi morala vsebovati {{ limit }} element ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali manj.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ta zbirka bi morala vsebovati točno {{ limit }} element.|Ta zbirka bi morala vsebovati točno {{ limit }} elementa.|Ta zbirka bi morala vsebovati točno {{ limit }} elemente.|Ta zbirka bi morala vsebovati točno {{ limit }} elementov.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neveljavna Å¡tevilka kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nepodprti tip kartice ali neveljavna Å¡tevilka kartice.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>To ni veljavna mednarodna številka bančnega računa (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Neveljavna vrednost po ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Neveljavna vrednost po ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Neveljavna vrednost po ISBN-10 ali po ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Neveljavna vrednost ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ta vrednost ni veljavna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti večja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti večja ali enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti identična {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti manjša od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti manjša ali enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ta vrednost ne bi smela biti enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta vrednost ne bi smela biti identična {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Razmerje slike je preveliko ({{ ratio }}). Največje dovoljeno razmerje je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Razmerje slike je premajhno ({{ ratio }}). Najmanjše pričakovano razmerje je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Slika je kvadrat ({{ width }}x{{ height }}px). Kvadratne slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Slika je ležeče usmerjena ({{ width }}x{{ height }}px). Ležeče usmerjene slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Slika je pokončno usmerjena ({{ width }}x{{ height }}px). Pokončno usmerjene slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Prazna datoteka ni dovoljena.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Gostitelja ni bilo mogoče prepoznati.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ta vrednost se ne ujema s pričakovanim naborom znakov {{ charset }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sq.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sq.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..ffc8ccf2f9831daadd85ac8f5b954e7872fd9d22
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sq.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Kjo vlerë duhet të jetë e pavërtetë (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Kjo vlerë duhet të jetë e vërtetë (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Kjo vlerë duhet të jetë e llojit {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Kjo vlerë duhet të jetë e zbrazët.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vlera që keni zgjedhur nuk është alternativë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Duhet të zgjedhni së paku {{ limit }} alternativa.|Duhet të zgjedhni së paku {{ limit }} alternativa.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Duhet të zgjedhni më së shumti {{ limit }} alternativa.|Duhet të zgjedhni më së shumti {{ limit }} alternativa.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Një apo më shumë nga vlerat e dhëna nuk janë të sakta.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Kjo fushë nuk pritej.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Kjo fushë është zhdukur.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Kjo vlerë nuk është datë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Kjo vlerë nuk është datë-kohë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Kjo vlerë nuk është e-mail adresë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>File nuk mund të gjindej.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>File nuk është i lexueshëm.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>File është shumë i madh ({{ size }} {{ suffix }}). Madhësia më e madhe e lejuar është {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Lloji mime i files nuk është i vlefshëm ({{ type }}). Llojet mime të lejuara janë {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Kjo vlerë duhet të jetë {{ limit }} ose më pak.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Kjo vlerë është shumë e gjatë. Duhet t'i ketë {{ limit }} ose më pak karaktere.|Kjo vlerë është shumë e gjatë. Duhet t'i ketë {{ limit }} ose më pak karaktere.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Kjo vlerë duhet të jetë {{ limit }} ose më shumë.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Kjo vlerë është shumë e shkurtër. Duhet t'i ketë {{ limit }} ose më shumë karaktere.|Kjo vlerë është shumë e shkurtër. Duhet t'i ketë {{ limit }} ose më shumë karaktere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Kjo vlerë nuk duhet të jetë e zbrazët.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Kjo vlerë nuk duhet të jetë null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Kjo vlerë duhet të jetë null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Kjo vlerë nuk është e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Kjo vlerë nuk është kohë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Kjo vlerë nuk është URL e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Këto dy vlera duhet të jenë të barabarta.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ky file është shumë i madh. Madhësia maksimale e lejuar është {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ky file është shumë i madh.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ky file nuk mund të ngarkohet.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Kjo vlerë duhet të jetë numër i vlefshëm.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ky file nuk është imazh i vlefshëm.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Kjo vlerë nuk është IP adresë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Kjo vlerë nuk është gjuhë e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Kjo vlerë nuk është përcaktim rajonal i vlefshëm.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Kjo vlerë nuk është shtet i vlefshëm.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Kjo vlerë është tashmë në përdorim.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Madhësia e këtij imazhi nuk mund të zbulohet.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Gjerësia e imazhit është shumë e madhe ({{ width }}px). Gjerësia maksimale e lejuar është {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Gjerësia e imazhit është shumë e vogël ({{ width }}px). Gjerësia minimale e pritur është {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Gjatësia e imazhit është shumë e madhe ({{ height }}px). Gjatësia maksimale e lejuar është {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Gjatësia e imazhit është shumë e vogël ({{ height }}px). Gjatësia minimale e pritur është {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Kjo vlerë duhet të jetë fjalëkalimi aktual i përdoruesit.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Kjo vlerë duhet të ketë saktësisht {{ limit }} karaktere.|Kjo vlerë duhet të ketë saktësisht {{ limit }} karaktere.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ky file është ngarkuar pjesërisht.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nuk është ngarkuar ndonjë file.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Asnjë folder i përkohshëm nuk është konfiguruar në php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nuk mund të shkruhet file i përkohshëm në disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Një ekstenzion i PHP-së bëri të dështojë ngarkimi i files.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.|Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.|Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ky kolekcion duhet të përmbajë saktësisht {{ limit }} elemente.|Ky kolekcion duhet të përmbajë saktësisht {{ limit }} elemente.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Numër kartele i pavlefshëm.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Lloj kartele i pambështetur ose numër kartele i pavlefshëm.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..81f5210f6fb334b8ed5e156deffd2d14ba9ea960
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
@@ -0,0 +1,303 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Вредност треба да буде нетачна.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Вредност треба да буде тачна.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Вредност треба да буде типа {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Вредност треба да буде празна.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Вредност треба да буде једна од понуђених.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Изаберите бар {{ limit }} могућност.|Изаберите бар {{ limit }} могућности.|Изаберите бар {{ limit }} могућности.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Изаберите највише {{ limit }} могућност.|Изаберите највише {{ limit }} могућности.|Изаберите највише {{ limit }} могућности.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Једна или више вредности је невалидна.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ово поље не очекује.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ово поље недостаје.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Вредност није валидан датум.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Вредност није валидан датум-време.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Вредност није валидна адреса електронске поште.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Датотека не може бити пронађена.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Датотека није читљива.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Датотека је превелика ({{ size }} {{ suffix }}). Највећа дозвољена величина је {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Миме тип датотеке није валидан ({{ type }}). Дозвољени миме типови су {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Вредност треба да буде {{ limit }} или мање.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Вредност је предугачка. Треба да има {{ limit }} карактер или мање.|Вредност је предугачка. Треба да има {{ limit }} карактера или мање.|Вредност је предугачка. Треба да има {{ limit }} карактера или мање.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Вредност треба да буде {{ limit }} или више.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Вредност је прекратка. Треба да има {{ limit }} карактер или више.|Вредност је прекратка. Треба да има {{ limit }} карактера или више.|Вредност је прекратка. Треба да има {{ limit }} карактера или више.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Вредност не треба да буде празна.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Вредност не треба да буде null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Вредност треба да буде null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Вредност је невалидна.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Вредност није валидно време.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Вредност није валидан URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Обе вредности треба да буду једнаке.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Датотека је превелика. Највећа дозвољена величина је {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Датотека је превелика.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Датотека не може бити отпремљена.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Вредност треба да буде валидан број.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ова датотека није валидна слика.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Ово није валидна ИП адреса.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Вредност није валидан језик.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Вредност није валидан локал.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Вредност није валидна земља.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Вредност је већ искоришћена.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Величина слике не може бити одређена.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ширина слике је превелика ({{ width }}px). Најећа дозвољена ширина је {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ширина слике је премала ({{ width }}px). Најмања дозвољена ширина је {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Висина слике је превелика ({{ height }}px). Најећа дозвољена висина је {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Висина слике је премала ({{ height }}px). Најмања дозвољена висина је {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Вредност треба да буде тренутна корисничка лозинка.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Вредност треба да има тачно {{ limit }} карактер.|Вредност треба да има тачно {{ limit }} карактера.|Вредност треба да има тачно {{ limit }} карактера.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Датотека је само парцијално отпремљена.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Датотека није отпремљена.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Привремени директоријум није конфигурисан у php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Немогуће писање привремене датотеке на диск.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP екстензија је проузроковала неуспех отпремања датотеке.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ова колекција треба да садржи {{ limit }} или више елемената.|Ова колекција треба да садржи {{ limit }} или више елемената.|Ова колекција треба да садржи {{ limit }} или више елемената.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ова колекција треба да садржи {{ limit }} или мање елемената.|Ова колекција треба да садржи {{ limit }} или мање елемената.|Ова колекција треба да садржи {{ limit }} или мање елемената.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ова колекција треба да садржи тачно {{ limit }} елемент.|Ова колекција треба да садржи тачно {{ limit }} елемента.|Ова колекција треба да садржи тачно {{ limit }} елемената.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Невалидан број картице.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Невалидан број картице или тип картице није подржан.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ово није валидан међународни број банковног рачуна (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ово није валидан ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ово није валидан ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ово није валидан ISBN-10 или ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ово није валидан ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ово није валидна валута.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде већа од {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде већа или једнака {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде идентична са {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде мања од {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ова вредност треба да буде мања или једнака {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ова вредност не треба да буде једнака {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ова вредност не треба да буде идентична са {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Размера ове слике је превелика ({{ ratio }}). Максимална дозвољена размера је {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Размера ове слике је премала ({{ ratio }}). Минимална очекивана размера је {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Слика је квадратна ({{ width }}x{{ height }}px). Квадратне слике нису дозвољене.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Слика је оријентације пејзажа ({{ width }}x{{ height }}px). Пејзажна оријентација слика није дозвољена.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Слика је оријантације портрета ({{ width }}x{{ height }}px). Портретна оријентација слика није дозвољена.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..60c093aebf7950d2ff23913f53b0526a15047855
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
@@ -0,0 +1,303 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Vrednost treba da bude netačna.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Vrednost treba da bude tačna.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Vrednost treba da bude tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Vrednost treba da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vrednost treba da bude jedna od ponuđenih.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Izaberite bar {{ limit }} mogućnost.|Izaberite bar {{ limit }} mogućnosti.|Izaberite bar {{ limit }} mogućnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Izaberite najviše {{ limit }} mogućnost.|Izaberite najviše {{ limit }} mogućnosti.|Izaberite najviše {{ limit }} mogućnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna ili više vrednosti je nevalidna.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ovo polje ne očekuje.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ovo polje nedostaje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Vrednost nije validan datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Vrednost nije validan datum-vreme.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Vrednost nije validna adresa elektronske pošte.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Datoteka ne može biti pronađena.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Datoteka nije čitljiva.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke nije validan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Vrednost treba da bude {{ limit }} ili manje.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Vrednost je predugačka. Treba da ima {{ limit }} karakter ili manje.|Vrednost je predugačka. Treba da ima {{ limit }} karaktera ili manje.|Vrednost je predugačka. Treba da ima {{ limit }} karaktera ili manje.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Vrednost treba da bude {{ limit }} ili više.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Vrednost je prekratka. Treba da ima {{ limit }} karakter ili više.|Vrednost je prekratka. Treba da ima {{ limit }} karaktera ili više.|Vrednost je prekratka. Treba da ima {{ limit }} karaktera ili više.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Vrednost ne treba da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Vrednost ne treba da bude null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Vrednost treba da bude null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Vrednost je nevalidna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Vrednost nije validno vreme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Vrednost nije validan URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obe vrednosti treba da budu jednake.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika. Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Datoteka ne može biti otpremljena.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Vrednost treba da bude validan broj.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ova datoteka nije validna slika.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Ovo nije validna IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Vrednost nije validan jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Vrednost nije validan lokal.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Vrednost nije validna zemlja.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Vrednost je već iskorišćena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Veličina slike ne može biti određena.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Širina slike je prevelika ({{ width }}px). Najeća dozvoljena širina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premala ({{ width }}px). Najmanja dozvoljena Å¡irina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Visina slike je prevelika ({{ height }}px). Najeća dozvoljena visina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Visina slike je premala ({{ height }}px). Najmanja dozvoljena visina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Vrednost treba da bude trenutna korisnička lozinka.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Vrednost treba da ima tačno {{ limit }} karakter.|Vrednost treba da ima tačno {{ limit }} karaktera.|Vrednost treba da ima tačno {{ limit }} karaktera.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je samo parcijalno otpremljena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Datoteka nije otpremljena.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Privremeni direktorijum nije konfigurisan u php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nemoguće pisanje privremene datoteke na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ekstenzija je prouzrokovala neuspeh otpremanja datoteke.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ova kolekcija treba da sadrži tačno {{ limit }} element.|Ova kolekcija treba da sadrži tačno {{ limit }} elementa.|Ova kolekcija treba da sadrži tačno {{ limit }} elemenata.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nevalidan broj kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nevalidan broj kartice ili tip kartice nije podržan.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ovo nije validan međunarodni broj bankovnog računa (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ovo nije validan ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ovo nije validan ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ovo nije validan ISBN-10 ili ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ovo nije validan ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ovo nije validna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude veća od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude veća ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude identična sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ova vrednost treba da bude manja ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ova vrednost ne treba da bude jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrednost ne treba da bude identična sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Razmera ove slike je prevelika ({{ ratio }}). Maksimalna dozvoljena razmera je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Razmera ove slike je premala ({{ ratio }}). Minimalna očekivana razmera je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Slika je kvadratna ({{ width }}x{{ height }}px). Kvadratne slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Slika je orijentacije pejzaža ({{ width }}x{{ height }}px). Pejzažna orijentacija slika nije dozvoljena.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Slika je orijantacije portreta ({{ width }}x{{ height }}px). Portretna orijentacija slika nije dozvoljena.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.sv.xlf b/core/vendor/symfony/validator/Resources/translations/validators.sv.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..fbcb5f2b99f22baf58096b24f633857cd4a66763
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.sv.xlf
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Värdet ska vara falskt.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Värdet ska vara sant.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Värdet ska vara av typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Värdet ska vara tomt.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Värdet ska vara ett av de givna valen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du måste välja minst {{ limit }} val.|Du måste välja minst {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan som mest välja {{ limit }} val.|Du kan som mest välja {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ett eller fler av de angivna värdena är ogiltigt.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Det här fältet förväntades inte.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Det här fältet saknas.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Värdet är inte ett giltigt datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Värdet är inte ett giltigt datum med tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Värdet är inte en giltig epost-adress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunde inte hittas.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen är inte läsbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen är för stor ({{ size }} {{ suffix }}). Största tillåtna storlek är {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Filens MIME-typ ({{ type }}) är ogiltig. De tillåtna typerna är {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Värdet ska vara {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Värdet är för långt. Det ska ha {{ limit }} tecken eller färre.|Värdet är för långt. Det ska ha {{ limit }} tecken eller färre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Värdet ska vara {{ limit }} eller mer.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Värdet är för kort. Det ska ha {{ limit }} tecken eller mer.|Värdet är för kort. Det ska ha {{ limit }} tecken eller mer.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Värdet kan inte vara tomt.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Värdet kan inte vara null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Värdet ska vara null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Värdet är inte giltigt.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Värdet är inte en giltig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Värdet är inte en giltig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De två värdena måste vara lika.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen är för stor. Tillåten maximal storlek är {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen är för stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunde inte laddas upp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Värdet ska vara ett giltigt nummer.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Filen är ingen giltig bild.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Det här är inte en giltig IP-adress.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Värdet är inte ett giltigt språk.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Värdet är inte en giltig plats.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Värdet är inte ett giltigt land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Värdet används redan.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Det gick inte att fastställa storleken på bilden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Bildens bredd är för stor ({{ width }}px). Tillåten maximal bredd är {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Bildens bredd är för liten ({{ width }}px). Minsta förväntade bredd är {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Bildens höjd är för stor ({{ height }}px). Tillåten maximal bredd är {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Bildens höjd är för liten ({{ height }}px). Minsta förväntade höjd är {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Värdet ska vara användarens nuvarande lösenord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Värdet ska ha exakt {{ limit }} tecken.|Värdet ska ha exakt {{ limit }} tecken.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen laddades bara upp delvis.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil laddades upp.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Det finns ingen temporär mapp konfigurerad i php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan inte skriva temporär fil till disken.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP extension gjorde att uppladdningen misslyckades.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Den här samlingen ska innehålla {{ limit }} element eller mer.|Den här samlingen ska innehålla {{ limit }} element eller mer.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Den här samlingen ska innehålla {{ limit }} element eller mindre.|Den här samlingen ska innehålla {{ limit }} element eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Den här samlingen ska innehålla exakt {{ limit }} element.|Den här samlingen ska innehålla exakt {{ limit }} element.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ogiltigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Okänd korttyp eller ogiltigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Det här är inte en giltig International Bank Account Number (IBANK).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Värdet är inte en giltig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Värdet är inte en giltig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Värdet är varken en giltig ISBN-10 eller en giltig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Värdet är inte en giltig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Värdet är inte en giltig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Värdet ska vara detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Värdet ska vara större än {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Värdet ska bara större än eller detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Värdet ska vara identiskt till {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Värdet ska vara mindre än {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Värdet ska vara mindre än eller detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Värdet ska inte vara detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Värdet ska inte vara identiskt med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Förhållandet mellan bildens bredd och höjd är för stort ({{ ratio }}). Högsta tillåtna förhållande är {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Förhållandet mellan bildens bredd och höjd är för litet ({{ ratio }}). Minsta tillåtna förhållande är {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Bilden är kvadratisk ({{ width }}x{{ height }}px). Kvadratiska bilder tillåts inte.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Bilden är landskapsorienterad ({{ width }}x{{ height }}px). Landskapsorienterade bilder tillåts inte.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Bilden är porträttsorienterad ({{ width }}x{{ height }}px). Porträttsorienterade bilder tillåts inte.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>En tom fil är inte tillåten.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.th.xlf b/core/vendor/symfony/validator/Resources/translations/validators.th.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..0237a308acd5fbdf890fca625364e87e81edbc68
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.th.xlf
@@ -0,0 +1,303 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ค่านี้ควรจะเป็น false</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ค่านี้ควรจะเป็น true</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ค่านี้ควรจะเป็นชนิด {{ type }}</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ควรจะเป็นค่าว่าง</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>คุณเลือกค่าที่ไม่ตรงกับตัวเลือก</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>คุณต้องเลือกอย่างน้อย {{ limit }} ตัวเลือก</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>คุณเลือกได้มากที่สุด {{ limit }} ตัวเลือก</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>มีบางค่าที่ส่งมาไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ฟิลด์นี้ที่ไม่ได้คาดหวัง</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ฟิลด์นี้จะหายไป</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ค่าของวันที่ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ค่าของวันที่และเวลาไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ค่าของอีเมล์ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ไม่พบไฟล์</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ไฟล์ไม่อยู่ในสถานะที่สามารถอ่านได้</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ไฟล์ใหญ่เกิน ({{ size }} {{ suffix }}) อนุญาตให้ใหญ่ที่สุดได้ไม่เกิน {{ limit }} {{ suffix }}</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime type ของไฟล์ไม่ถูกต้อง ({{ type }}) Mime types ที่อนุญาตคือ {{ types }}</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ค่านี้ควรจะเป็น {{ limit }} หรือน้อยกว่านั้น</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ค่านี้ยาวเกินไป ควรจะมีแค่ {{ limit }} ตัวอักษรหรือน้อยกว่านั้น</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ค่านี้ควรจะมี {{ limit }} หรือมากกว่านั้น</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ค่านี้สั้นเกินไป ควรจะมี {{ limit }} ตัวอักษรหรือมากกว่านั้น</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ค่านี้ไม่ควรเป็นค่าว่าง</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ค่านี้ไม่ควรเป็นค่า null</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ค่านี้ควรเป็นค่า null</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ค่านี้ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ค่าของเวลาไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ค่าของ URL ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ค่าทั้งสองค่าควรจะเหมือนกัน</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ขนาดไฟล์ใหญ่เกินไป อนุญาตให้ไฟล์ขนาดใหญ่ได้ไม่เกิน {{ limit }} {{ suffix }}</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ขนาดไฟล์ใหญ่เกินไป</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ไม่สามารถอัปโหลดไฟล์ได้</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ค่าของตัวเลขไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ไฟล์นี้ไม่ใช่ไฟล์รูปภาพ</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>ค่าของ IP ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ค่าของภาษาไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ค่าของภูมิภาค (Locale) ไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ค่าของประเทศไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Tค่านี้ถูกใช้งานไปแล้ว</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ไม่สามารถตรวจสอบขนาดไฟล์ของภาพได้</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ความกว้างของภาพเกินขนาด ({{ width }}px) อนุญาตให้กว้างได้มากที่สุด {{ max_width }}px</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ความกว้างของภาพไม่ได้ขนาด ({{ width }}px) อนุญาตให้สั้นที่สุด {{ min_width }}px</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ความสูงของภาพเกินขนาด ({{ height }}px) อนุญาตให้สูงได้มากที่สุด {{ max_height }}px</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ความสูงของภาพไม่ได้ขนาด ({{ height }}px) อนุญาตให้สูงอย่างน้อยที่สุด {{ min_height }}px</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user current password.</source>
+                <target>ค่านี้ควรจะเป็นรหัสผ่านปัจจุบันของผู้ใช้</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ค่านี้ควรจะมีความยาว {{ limit }} ตัวอักษร</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>อัปโหลดไฟล์ได้เพียงบางส่วนเท่านั้น</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ไม่มีไฟล์ใดถูกอัปโหลด</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>ไม่พบไฟล์ temp ควรจะกำหนดใน php.ini</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ไม่สามารถเขียน temp ไฟล์ลงดิสก์ได้</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP extension เกี่ยวกับการอัปโหลดมีปัญหา</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>คอเล็กชั่นนี้ควรจะประกอบไปด้วยอ่างน้อย {{ limit }} สมาชิก</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>คอเล็กชั่นนี้ไม่ควรมีสมาชิกเกิน {{ limit }}</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>คอเล็กชั่นนี้ควรจะมีสมาชิก {{ limit }} เท่านั้น</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>หมายเลขบัตรไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ไม่รู้จักประเภทของบัตร หรือหมายเลขบัตรไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>นี่ไม่ถูกต้องตาม International Bank Account Number (IBAN)</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ค่านี้ไม่ถูกต้องตาม ISBN-10</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ค่านี้ไม่ถูกต้องตาม ISBN-13</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ค่านี้ไม่ถูกต้องตามทั้ง ISBN-10 และ ISBN-13</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ค่านี้ไม่ถุกต้องตาม ISSN</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ค่านี้ไม่ถูกต้องตามสกุลเงิน</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ค่านี้ไม่ตรงกับ {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ค่านี้ควรจะมากกว่า {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ค่านี้ควรจะมากกว่าหรือตรงกับ {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ค่านี้ควรจะเหมือนกันกับ {{ compared_value_type }} {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ค่านี้ควรจะน้อยกว่า {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ค่านี้ควรจะน้อยกว่าหรือเท่ากับ {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ค่านี้ไม่ควรเท่ากันกับ {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ค่านี้ไม่ควรเหมือนกันกับ {{ compared_value_type }} {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>สัดส่วนของภาพใหญ่เกิน ({{ ratio }}) สามารถมีขนาดใหญ่ที่สุดได้ {{ max_ratio }}</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>สัดส่วนของภาพเล็กเกิน ({{ ratio }}) สามารถมีขนาดเล็กที่สุดได้ {{ min_ratio }}</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>รูปภาพเป็นจุตรัส ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นสี่เหลี่ยมจตุรัส</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ภาพนี้เป็นแนวนอน ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นแนวนอน</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ภาพนี้เป็นแนวตั้ง ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นแนวตั้ง</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.tr.xlf b/core/vendor/symfony/validator/Resources/translations/validators.tr.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..a7906eaae25af8bcf6970ffa43993190d44de7d1
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.tr.xlf
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Bu değer olumsuz olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Bu değer olumlu olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Bu değerin tipi {{ type }} olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Bu değer boş olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Seçtiğiniz değer geçerli bir seçenek değil.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>En az {{ limit }} seçenek belirtmelisiniz.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>En çok {{ limit }} seçenek belirtmelisiniz.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Verilen değerlerden bir veya daha fazlası geçersiz.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Bu alan beklenen olmadı.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bu alan, eksik</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Bu değer doğru bir tarih biçimi değildir.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Bu değer doğru bir tarihsaat biçimi değildir.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Bu deÄŸer doÄŸru bir e-mail adresi deÄŸildir.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Dosya bulunamadı.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Dosya okunabilir deÄŸil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Dosya çok büyük ({{ size }} {{ suffix }}). İzin verilen en büyük dosya boyutu {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Dosyanın mime tipi geçersiz ({{ type }}). İzin verilen mime tipleri {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Bu değer {{ limit }} ve altında olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Bu değer çok uzun. {{ limit }} karakter veya daha az olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Bu değer {{ limit }} veya daha fazla olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Bu değer çok kısa. {{ limit }} karakter veya daha fazla olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Bu değer boş bırakılmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Bu değer boş bırakılmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Bu değer boş bırakılmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Bu değer geçerli değil.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Bu deÄŸer doÄŸru bir saat deÄŸil.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Bu deÄŸer doÄŸru bir URL deÄŸil.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>İki değer eşit olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Dosya çok büyük. İzin verilen en büyük dosya boyutu {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Dosya çok büyük.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Dosya yüklenemiyor.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Bu değer geçerli bir rakam olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Bu dosya geçerli bir resim değildir.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Bu geçerli bir IP adresi değildir.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Bu değer geçerli bir lisan değil.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Bu değer geçerli bir yer değildir.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Bu değer geçerli bir ülke değildir.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Bu değer şu anda kullanımda.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Resmin boyutu saptanamıyor.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Resmin genişliği çok büyük ({{ width }}px). İzin verilen en büyük genişlik {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Resmin genişliği çok küçük ({{ width }}px). En az {{ min_width }}px olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Resmin yüksekliği çok büyük ({{ height }}px). İzin verilen en büyük yükseklik {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Resmin yüksekliği çok küçük ({{ height }}px). En az {{ min_height }}px olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Bu değer kullanıcının şu anki şifresi olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Bu değer tam olarak {{ limit }} karakter olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Dosya sadece kısmen yüklendi.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Hiçbir dosya yüklenmedi.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>php.ini içerisinde geçici dizin tanımlanmadı.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Geçici dosya diske yazılamıyor.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Bir PHP eklentisi dosyanın yüklemesini başarısız kıldı.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bu derlem {{ limit }} veya daha çok eleman içermelidir.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bu derlem {{ limit }} veya daha az eleman içermelidir.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bu derlem {{ limit }} eleman içermelidir.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Geçersiz kart numarası.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Desteklenmeyen kart tipi veya geçersiz kart numarası.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.uk.xlf b/core/vendor/symfony/validator/Resources/translations/validators.uk.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..02ecd5a687c9383ec8e30b5b0c52e74014957cd3
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.uk.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Значення повинно бути Ні.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Значення повинно бути Так.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Тип значення повинен бути {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Значення повинно бути пустим.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Обране вами значення недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ви повинні обрати хоча б {{ limit }} варіант.|Ви повинні обрати хоча б {{ limit }} варіанти.|Ви повинні обрати хоча б {{ limit }} варіантів.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ви повинні обрати не більше ніж {{ limit }} варіантів.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Одне або кілька заданих значень є недопустимі.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Це поле не очікується.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Це поле не вистачає.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Дане значення не є вірною датою.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Дане значення дати та часу недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Значення адреси электронної пошти недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Файл не знайдено.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Файл не читається.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл занадто великий ({{ size }} {{ suffix }}). Дозволений максимальний розмір {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-тип файлу недопустимий ({{ type }}). Допустимі MIME-типи файлів {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Значення повинно бути {{ limit }} або менше.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Значення занадто довге. Повинно бути рівне {{ limit }} символу або менше.|Значення занадто довге. Повинно бути рівне {{ limit }} символам або менше.|Значення занадто довге. Повинно бути рівне {{ limit }} символам або менше.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Значення повинно бути {{ limit }} або більше.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Значення занадто коротке. Повинно бути рівне {{ limit }} символу або більше.|Значення занадто коротке. Повинно бути рівне {{ limit }} символам або більше.|Значення занадто коротке. Повинно бути рівне {{ limit }} символам або більше.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Значення не повинно бути пустим.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Значення не повинно бути null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Значення повинно бути null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Значення недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Значення часу недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Значення URL недопустиме.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Обидва занчення повинні бути одинаковими.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Файл занадто великий. Максимальний допустимий розмір {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Файл занадто великий.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Файл не можливо завантажити.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Значення має бути допустимим числом.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Цей файл не є допустимим форматом зображення.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Це некоректна IP адреса.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Це некоректна мова.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Це некоректна локалізація.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Це некоректна країна.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Це значення вже використовується.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Не вдалося визначити розмір зображення.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ширина зображення занадто велика ({{ width }}px). Максимально допустима ширина {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ширина зображення занадто мала ({{ width }}px). Мінімально допустима ширина {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Висота зображення занадто велика ({{ height }}px). Максимально допустима висота {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Висота зображення занадто мала ({{ height }}px). Мінімально допустима висота {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Значення має бути поточним паролем користувача.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Значення повиино бути рівним {{ limit }} символу.|Значення повиино бути рівним {{ limit }} символам.|Значення повиино бути рівним {{ limit }} символам.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Файл був завантажений лише частково.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Файл не був завантажений.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Не налаштована тимчасова директорія в php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Неможливо записати тимчасовий файл на диск.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Розширення PHP викликало помилку при завантаженні.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ця колекція повинна містити {{ limit }} елемент чи більше.|Ця колекція повинна містити {{ limit }} елемента чи більше.|Ця колекція повинна містити {{ limit }} елементів чи більше.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ця колекція повинна містити {{ limit }} елемент чи менше.|Ця колекція повинна містити {{ limit }} елемента чи менше.|Ця колекція повинна містити {{ limit }} елементов чи менше.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ця колекція повинна містити рівно {{ limit }} елемент.|Ця колекція повинна містити рівно {{ limit }} елемента.|Ця колекція повинна містити рівно {{ limit }} елементів.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Невірний номер карти.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Непідтримуваний тип карти або невірний номер карти.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Це не дійсний міжнародний номер банківського рахунку (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Значення не у форматі ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Значення не у форматі ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Значення не відповідає форматам ISBN-10 та ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Значення має невірний формат ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Значення має невірний формат валюти.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Значення повинно дорівнювати {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Значення має бути більше ніж {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Значення має бути більше або дорівнювати {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Значення має бути ідентичним {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Значення повинно бути менше ніж {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Значення повинно бути менше або дорівнювати {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Значення не повинно дорівнювати  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Значення не повинно бути ідентичним {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.vi.xlf b/core/vendor/symfony/validator/Resources/translations/validators.vi.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..e1833c79cb470a20f7df7d68802b5824da9d2932
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.vi.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Giá trị này phải là sai.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Giá trị này phải là đúng.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Giá trị này phải là kiểu  {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Giá trị này phải rỗng.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Giá trị bạn vừa chọn không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Bạn phải chọn ít nhất {{ limit }} lựa chọn.|Bạn phải chọn ít nhất {{ limit }} lựa chọn.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Bạn phải chọn nhiều nhất {{ limit }} lựa chọn.|Bạn phải chọn nhiều  nhất {{ limit }} lựa chọn.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Một hoặc nhiều giá trị được chọn không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Lĩnh vực này không được dự kiến.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Lĩnh vực này là mất tích.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Giá trị không phải là ngày hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Giá trị không phải là ngày tháng hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Giá trị này không phải là email hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Tập tin không tìm thấy.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Tập tin không thể đọc được.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Tập tin quá lớn ({{ size }} {{ suffix }}). Kích thước tối đa cho phép {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Kiểu mime của tập tin không hợp lệ ({{ type }}). Kiểu hợp lệ là {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Giá trị phải bằng hoặc nhỏ hơn {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Giá trị quá dài. Phải bằng hoặc ít hơn {{ limit }} kí tự.|Giá trị quá dài. Phải bằng hoặc ít hơn {{ limit }} kí tự.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Giá trị phải lớn hơn hoặc bằng {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Giá trị quá ngắn. Phải hơn hoặc bằng {{ limit }} kí tự.|Giá trị quá ngắn. Phải hơn hoặc bằng {{ limit }} kí tự.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Giá trị không được phép để trống.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Giá trị không được phép rỗng.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Giá trị phải rỗng.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Giá trị không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Giá trị không phải là thời gian hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Giá trị không phải là địa chỉ URL hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Hai giá trị phải bằng nhau.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Tập tin quá lớn. Kích thước tối đa cho phép là {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Tập tin quá lớn.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Tập tin không thể tải lên.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Giá trị phải là con số.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tập tin không phải là hình ảnh.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>Địa chỉ IP không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Giá trị không phải là ngôn ngữ hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Giá trị không phải là một bản địa địa phương hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Giá trị không phải là nước hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Giá trị đã được sử dụng.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Kích thước của hình ảnh không thể xác định.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Chiều rộng của hình quá lớn ({{ width }}px). Chiều rộng tối đa phải là {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Chiều rộng của hình quá thấp ({{ width }}px). Chiều rộng tối thiểu phải là {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Chiều cao của hình quá cao ({{ height }}px). Chiều cao tối đa phải là {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Chiều cao của hình quá thấp ({{ height }}px). Chiều cao tối thiểu phải là {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Giá trị này phải là mật khẩu hiện tại của người dùng.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Giá trị phải có chính xác {{ limit }} kí tự.|Giá trị phải có chính xác {{ limit }} kí tự.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Tập tin chỉ được tải lên một phần.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Tập tin không được tải lên.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>Thư mục tạm không được định nghĩa trong php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Không thể ghi tập tin tạm ra đĩa.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Một PHP extension đã phá hỏng quá trình tải lên của tập tin.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Danh sách phải chứa {{ limit }} hoặc nhiều hơn thành phần.|Danh sách phải chứa {{ limit }} hoặc nhiều hơn thành phần.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Danh sách phải chứa {{ limit }} hoặc ít hơn thành phần.|Danh sách phải chứa {{ limit }} hoặc ít hơn thành phần.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Danh sách phải chứa chính xác {{ limit }} thành phần.|Danh sách phải chứa chính xác {{ limit }} thành phần.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Số thẻ không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Thẻ không được hỗ trợ hoặc số thẻ không hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Giá trị không phải là International Bank Account Number (IBAN) hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Giá trị không phải là ISBN-10 hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Giá trị không phải là ISBN-13 hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Giá trị không phải là ISBN-10 hoặc ISBN-13 hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Giá trị không là ISSN hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Giá trị không phải là đơn vi tiền tệ hợp lệ.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Giá trị phải bằng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Giá trị phải lớn hơn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Giá trị phải lớn hơn hoặc bằng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Giá trị phải giống  {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Giá trị phải bé hơn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Giá trị không được phép nhỏ hơn hoặc bằng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Giá trị không được phép bằng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Giá trị không được phép giống như {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf b/core/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..6c95ef1a20ddaa28f33135bfc51c89614571bc66
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>该变量的值应为 false 。</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>该变量的值应为 true 。</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>该变量的类型应为 {{ type }} 。</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>该变量值应为空。</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>选定变量的值不是有效的选项。</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>您至少要选择 {{ limit }} 个选项。</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>您最多能选择 {{ limit }} 个选项。</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>一个或者多个给定的值无效。</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>此字段是多余的。</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>此字段缺失。</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>该值不是一个有效的日期(date)。</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>该值不是一个有效的日期时间(datetime)。</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>该值不是一个有效的邮件地址。</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>文件未找到。</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>文件不可读。</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>文件太大 ({{ size }} {{ suffix }})。文件大小不可以超过 {{ limit }} {{ suffix }} 。</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>无效的文件类型 ({{ type }}) 。允许的文件类型有 {{ types }} 。</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>这个变量的值应该小于或等于 {{ limit }}。</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>字符串太长,长度不可超过 {{ limit }} 个字符。</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>该变量的值应该大于或等于 {{ limit }}。</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>字符串太短,长度不可少于 {{ limit }} 个字符。</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>该变量不应为空。</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>该变量不应为 null 。</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>该变量应为空 null 。</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>该变量值无效 。</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>该值不是一个有效的时间。</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>该值不是一个有效的 URL 。</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>这两个变量的值应该相等。</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>文件太大,文件大小不可以超过 {{ limit }} {{ suffix }}。 </target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>文件太大。</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>无法上传此文件。</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>该值应该为有效的数字。</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>该值不是有效的国家名。</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>该文件不是有效的图片。</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>该值不是有效的IP地址。</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>该值不是有效的语言名。</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid locale.</source>
+                <target>该值不是有效的区域值(locale)。</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>该值已经被使用。</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>不能解析图片大小。</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>图片太宽 ({{ width }}px),最大宽度为 {{ max_width }}px 。</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>图片宽度不够 ({{ width }}px),最小宽度为 {{ min_width }}px 。</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>图片太高 ({{ height }}px),最大高度为 {{ max_height }}px 。</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>图片高度不够 ({{ height }}px),最小高度为 {{ min_height }}px 。</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>该变量的值应为用户当前的密码。</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>该变量应为 {{ limit }} 个字符。</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>该文件的上传不完整。</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>没有上传任何文件。</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>php.ini 里没有配置临时文件目录。</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>临时文件写入磁盘失败。</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>某个 PHP 扩展造成上传失败。</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>该集合最少应包含 {{ limit }} 个元素。</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>该集合最多包含 {{ limit }} 个元素。</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>该集合应包含 {{ limit }} 个元素 element 。</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>无效的信用卡号。</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>不支持的信用卡类型或无效的信用卡号。</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>该值不是有效的国际银行帐号(IBAN)。</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>该值不是有效的10位国际标准书号(ISBN-10)。</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>该值不是有效的13位国际标准书号(ISBN-13)。</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>该值不是有效的国际标准书号(ISBN-10 或 ISBN-13)。</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>该值不是有效的国际标准期刊号(ISSN)。</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>该值不是有效的货币名(currency)。</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>该值应等于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>该值应大于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>该值应大于或等于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>该值应与 {{ compared_value_type }} {{ compared_value }} 相同。</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>该值应小于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>该值应小于或等于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>该值不应先等于 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>该值不应与 {{ compared_value_type }} {{ compared_value }} 相同。</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>图片宽高比太大 ({{ ratio }})。允许的最大宽高比为 {{ max_ratio }}。</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>图片宽高比太小 ({{ ratio }})。允许的最大宽高比为 {{ min_ratio }}。</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>图片是方形的 ({{ width }}x{{ height }}px)。不允许使用方形的图片。</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>图片是横向的 ({{ width }}x{{ height }}px)。不允许使用横向的图片。</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>图片是纵向的 ({{ width }}x{{ height }}px)。不允许使用纵向的图片。</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>不允许使用空文件。</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>主机名无法解析。</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>该值不符合 {{ charset }} 编码。</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf b/core/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf
new file mode 100644
index 0000000000000000000000000000000000000000..d9d5f2f622b43fc5c155e0a08e781807f30e58e8
--- /dev/null
+++ b/core/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+    <file source-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>該變數的值應為 false 。</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>該變數的值應為 true 。</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>該變數的類型應為 {{ type }} 。</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>該變數應為空。</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>選定變數的值不是有效的選項。</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>您至少要選擇 {{ limit }} 個選項。</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>您最多能選擇 {{ limit }} 個選項。</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>一個或者多個給定的值無效。</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>此字段是沒有預料到。</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>此字段缺失。</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>該值不是一個有效的日期(date)。</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>該值不是一個有效的日期時間(datetime)。</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>該值不是一個有效的郵件地址。</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>找不到檔案。</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>無法讀取檔案。</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>檔案太大 ({{ size }} {{ suffix }})。檔案大小不可以超過 {{ limit }} {{ suffix }} 。</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>無效的檔案類型 ({{ type }}) 。允許的檔案類型有 {{ types }} 。</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>這個變數的值應該小於或等於 {{ limit }}。</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>字串太長,長度不可超過 {{ limit }} 個字元。</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>該變數的值應該大於或等於 {{ limit }}。</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>字串太短,長度不可少於 {{ limit }} 個字元。</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>該變數不應為空白。</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>該值不應為 null 。</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>該值應為 null 。</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>無效的數值 。</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>該值不是一個有效的時間。</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>該值不是一個有效的 URL 。</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>這兩個變數的值應該相等。</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>檔案太大,檔案大小不可以超過 {{ limit }} {{ suffix }}。 </target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>檔案太大。</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>無法上傳此檔案。</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>該值應該為有效的數字。</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This value is not a valid country.</source>
+                <target>該值不是有效的國家名。</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This file is not a valid image.</source>
+                <target>該檔案不是有效的圖片。</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This is not a valid IP address.</source>
+                <target>該值不是有效的IP地址。</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid language.</source>
+                <target>該值不是有效的語言名。</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid locale.</source>
+                <target>該值不是有效的區域值(locale)。</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>該值已經被使用。</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>不能解析圖片大小。</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>圖片太寬 ({{ width }}px),最大寬度為 {{ max_width }}px 。</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>圖片寬度不夠 ({{ width }}px),最小寬度為 {{ min_width }}px 。</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>圖片太高 ({{ height }}px),最大高度為 {{ max_height }}px 。</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>圖片高度不夠 ({{ height }}px),最小高度為 {{ min_height }}px 。</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>該變數的值應為用戶目前的密碼。</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>該變數應為 {{ limit }} 個字元。</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>該檔案的上傳不完整。</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>沒有上傳任何檔案。</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>php.ini 裡沒有配置臨時目錄。</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>暫存檔寫入磁碟失敗。</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>某個 PHP 擴展造成上傳失敗。</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>該集合最少應包含 {{ limit }} 個元素。</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>該集合最多包含 {{ limit }} 個元素。</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>該集合應包含 {{ limit }} 個元素 element 。</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>無效的信用卡號。</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>不支援的信用卡類型或無效的信用卡號。</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>該值不是有效的國際銀行帳號(IBAN)。</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>該值不是有效的10位國際標準書號(ISBN-10)。</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>該值不是有效的13位國際標準書號(ISBN-13)。</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>該值不是有效的國際標準書號(ISBN-10 或 ISBN-13)。</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>該值不是有效的國際標準期刊號(ISSN)。</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>該值不是有效的貨幣名(currency)。</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>該值應等於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>該值應大於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>該值應大於或等於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>該值應與 {{ compared_value_type }} {{ compared_value }} 相同。</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>該值應小於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>該值應小於或等於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>該值應不等於 {{ compared_value }} 。</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>該值不應與 {{ compared_value_type }} {{ compared_value }} 相同。</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore b/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php
deleted file mode 100644
index 51fb46738428f2a0687f98214663f9ec3c8187ef..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * ChoiceValidator validates that the value is one of the expected values.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Florian Eckerstorfer <florian@eckerstorfer.org>
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @api
- */
-class ChoiceValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof Choice) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Choice');
-        }
-
-        if (!is_array($constraint->choices) && !$constraint->callback) {
-            throw new ConstraintDefinitionException('Either "choices" or "callback" must be specified on constraint Choice');
-        }
-
-        if (null === $value) {
-            return;
-        }
-
-        if ($constraint->multiple && !is_array($value)) {
-            throw new UnexpectedTypeException($value, 'array');
-        }
-
-        if ($constraint->callback) {
-            if (!is_callable($choices = array($this->context->getClassName(), $constraint->callback))
-                && !is_callable($choices = $constraint->callback)
-            ) {
-                throw new ConstraintDefinitionException('The Choice constraint expects a valid callback');
-            }
-            $choices = call_user_func($choices);
-        } else {
-            $choices = $constraint->choices;
-        }
-
-        if ($constraint->multiple) {
-            foreach ($value as $_value) {
-                if (!in_array($_value, $choices, $constraint->strict)) {
-                    $this->buildViolation($constraint->multipleMessage)
-                        ->setParameter('{{ value }}', $this->formatValue($_value))
-                        ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
-                        ->setInvalidValue($_value)
-                        ->addViolation();
-
-                    return;
-                }
-            }
-
-            $count = count($value);
-
-            if ($constraint->min !== null && $count < $constraint->min) {
-                $this->buildViolation($constraint->minMessage)
-                    ->setParameter('{{ limit }}', $constraint->min)
-                    ->setPlural((int) $constraint->min)
-                    ->setCode(Choice::TOO_FEW_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-
-            if ($constraint->max !== null && $count > $constraint->max) {
-                $this->buildViolation($constraint->maxMessage)
-                    ->setParameter('{{ limit }}', $constraint->max)
-                    ->setPlural((int) $constraint->max)
-                    ->setCode(Choice::TOO_MANY_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-        } elseif (!in_array($value, $choices, $constraint->strict)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php
deleted file mode 100644
index d44f537071a3b77824c83059e29083ee0b1a1e3f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class CountValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (null === $value) {
-            return;
-        }
-
-        if (!is_array($value) && !$value instanceof \Countable) {
-            throw new UnexpectedTypeException($value, 'array or \Countable');
-        }
-
-        $count = count($value);
-
-        if (null !== $constraint->max && $count > $constraint->max) {
-            $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
-                ->setParameter('{{ count }}', $count)
-                ->setParameter('{{ limit }}', $constraint->max)
-                ->setInvalidValue($value)
-                ->setPlural((int) $constraint->max)
-                ->setCode(Count::TOO_MANY_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if (null !== $constraint->min && $count < $constraint->min) {
-            $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
-                ->setParameter('{{ count }}', $count)
-                ->setParameter('{{ limit }}', $constraint->min)
-                ->setInvalidValue($value)
-                ->setPlural((int) $constraint->min)
-                ->setCode(Count::TOO_FEW_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php
deleted file mode 100644
index b459c7873f7cbf6f5a575383add8abd9ddf5b917..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @api
- */
-class DateTimeValidator extends DateValidator
-{
-    const PATTERN = '/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/';
-
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof DateTime) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\DateTime');
-        }
-
-        if (null === $value || '' === $value || $value instanceof \DateTime) {
-            return;
-        }
-
-        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
-            throw new UnexpectedTypeException($value, 'string');
-        }
-
-        $value = (string) $value;
-
-        if (!preg_match(static::PATTERN, $value, $matches)) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(DateTime::INVALID_FORMAT_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if (!DateValidator::checkDate($matches[1], $matches[2], $matches[3])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(DateTime::INVALID_DATE_ERROR)
-                ->addViolation();
-        }
-
-        if (!TimeValidator::checkTime($matches[4], $matches[5], $matches[6])) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(DateTime::INVALID_TIME_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php
deleted file mode 100644
index 206780cefc73c1dbb24be1cb15c3c2a29adea29b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @api
- */
-class FalseValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof False) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\False');
-        }
-
-        if (null === $value || false === $value || 0 === $value || '0' === $value) {
-            return;
-        }
-
-        $this->buildViolation($constraint->message)
-            ->setParameter('{{ value }}', $this->formatValue($value))
-            ->addViolation();
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php
deleted file mode 100644
index 9d225a9bbdebbdeabe003f43fc7c9bf40a8046de..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\HttpFoundation\File\File as FileObject;
-use Symfony\Component\HttpFoundation\File\UploadedFile;
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @api
- */
-class FileValidator extends ConstraintValidator
-{
-    const KB_BYTES = 1000;
-    const MB_BYTES = 1000000;
-    const KIB_BYTES = 1024;
-    const MIB_BYTES = 1048576;
-
-    private static $suffices = array(
-        1 => 'bytes',
-        self::KB_BYTES => 'kB',
-        self::MB_BYTES => 'MB',
-        self::KIB_BYTES => 'KiB',
-        self::MIB_BYTES => 'MiB',
-    );
-
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof File) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\File');
-        }
-
-        if (null === $value || '' === $value) {
-            return;
-        }
-
-        if ($value instanceof UploadedFile && !$value->isValid()) {
-            switch ($value->getError()) {
-                case UPLOAD_ERR_INI_SIZE:
-                    $iniLimitSize = UploadedFile::getMaxFilesize();
-                    if ($constraint->maxSize && $constraint->maxSize < $iniLimitSize) {
-                        $limitInBytes = $constraint->maxSize;
-                        $binaryFormat = $constraint->binaryFormat;
-                    } else {
-                        $limitInBytes = $iniLimitSize;
-                        $binaryFormat = true;
-                    }
-
-                    list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes(0, $limitInBytes, $binaryFormat);
-                    $this->buildViolation($constraint->uploadIniSizeErrorMessage)
-                        ->setParameter('{{ limit }}', $limitAsString)
-                        ->setParameter('{{ suffix }}', $suffix)
-                        ->setCode(UPLOAD_ERR_INI_SIZE)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_FORM_SIZE:
-                    $this->buildViolation($constraint->uploadFormSizeErrorMessage)
-                        ->setCode(UPLOAD_ERR_FORM_SIZE)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_PARTIAL:
-                    $this->buildViolation($constraint->uploadPartialErrorMessage)
-                        ->setCode(UPLOAD_ERR_PARTIAL)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_NO_FILE:
-                    $this->buildViolation($constraint->uploadNoFileErrorMessage)
-                        ->setCode(UPLOAD_ERR_NO_FILE)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_NO_TMP_DIR:
-                    $this->buildViolation($constraint->uploadNoTmpDirErrorMessage)
-                        ->setCode(UPLOAD_ERR_NO_TMP_DIR)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_CANT_WRITE:
-                    $this->buildViolation($constraint->uploadCantWriteErrorMessage)
-                        ->setCode(UPLOAD_ERR_CANT_WRITE)
-                        ->addViolation();
-
-                    return;
-                case UPLOAD_ERR_EXTENSION:
-                    $this->buildViolation($constraint->uploadExtensionErrorMessage)
-                        ->setCode(UPLOAD_ERR_EXTENSION)
-                        ->addViolation();
-
-                    return;
-                default:
-                    $this->buildViolation($constraint->uploadErrorMessage)
-                        ->setCode($value->getError())
-                        ->addViolation();
-
-                    return;
-            }
-        }
-
-        if (!is_scalar($value) && !$value instanceof FileObject && !(is_object($value) && method_exists($value, '__toString'))) {
-            throw new UnexpectedTypeException($value, 'string');
-        }
-
-        $path = $value instanceof FileObject ? $value->getPathname() : (string) $value;
-
-        if (!is_file($path)) {
-            $this->buildViolation($constraint->notFoundMessage)
-                ->setParameter('{{ file }}', $this->formatValue($path))
-                ->setCode(File::NOT_FOUND_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if (!is_readable($path)) {
-            $this->buildViolation($constraint->notReadableMessage)
-                ->setParameter('{{ file }}', $this->formatValue($path))
-                ->setCode(File::NOT_READABLE_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        $sizeInBytes = filesize($path);
-
-        if (0 === $sizeInBytes) {
-            $this->buildViolation($constraint->disallowEmptyMessage)
-                ->setParameter('{{ file }}', $this->formatValue($path))
-                ->setCode(File::EMPTY_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if ($constraint->maxSize) {
-            $limitInBytes = $constraint->maxSize;
-
-            if ($sizeInBytes > $limitInBytes) {
-                list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes($sizeInBytes, $limitInBytes, $constraint->binaryFormat);
-                $this->buildViolation($constraint->maxSizeMessage)
-                    ->setParameter('{{ file }}', $this->formatValue($path))
-                    ->setParameter('{{ size }}', $sizeAsString)
-                    ->setParameter('{{ limit }}', $limitAsString)
-                    ->setParameter('{{ suffix }}', $suffix)
-                    ->setCode(File::TOO_LARGE_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-        }
-
-        if ($constraint->mimeTypes) {
-            if (!$value instanceof FileObject) {
-                $value = new FileObject($value);
-            }
-
-            $mimeTypes = (array) $constraint->mimeTypes;
-            $mime = $value->getMimeType();
-
-            foreach ($mimeTypes as $mimeType) {
-                if ($mimeType === $mime) {
-                    return;
-                }
-
-                if ($discrete = strstr($mimeType, '/*', true)) {
-                    if (strstr($mime, '/', true) === $discrete) {
-                        return;
-                    }
-                }
-            }
-
-            $this->buildViolation($constraint->mimeTypesMessage)
-                ->setParameter('{{ file }}', $this->formatValue($path))
-                ->setParameter('{{ type }}', $this->formatValue($mime))
-                ->setParameter('{{ types }}', $this->formatValues($mimeTypes))
-                ->setCode(File::INVALID_MIME_TYPE_ERROR)
-                ->addViolation();
-        }
-    }
-
-    private static function moreDecimalsThan($double, $numberOfDecimals)
-    {
-        return strlen((string) $double) > strlen(round($double, $numberOfDecimals));
-    }
-
-    /**
-     * Convert the limit to the smallest possible number
-     * (i.e. try "MB", then "kB", then "bytes")
-     */
-    private function factorizeSizes($size, $limit, $binaryFormat)
-    {
-        if ($binaryFormat) {
-            $coef = self::MIB_BYTES;
-            $coefFactor = self::KIB_BYTES;
-        } else {
-            $coef = self::MB_BYTES;
-            $coefFactor = self::KB_BYTES;
-        }
-
-        $limitAsString = (string) ($limit / $coef);
-
-        // Restrict the limit to 2 decimals (without rounding! we
-        // need the precise value)
-        while (self::moreDecimalsThan($limitAsString, 2)) {
-            $coef /= $coefFactor;
-            $limitAsString = (string) ($limit / $coef);
-        }
-
-        // Convert size to the same measure, but round to 2 decimals
-        $sizeAsString = (string) round($size / $coef, 2);
-
-        // If the size and limit produce the same string output
-        // (due to rounding), reduce the coefficient
-        while ($sizeAsString === $limitAsString) {
-            $coef /= $coefFactor;
-            $limitAsString = (string) ($limit / $coef);
-            $sizeAsString = (string) round($size / $coef, 2);
-        }
-
-        return array($sizeAsString, $limitAsString, self::$suffices[$coef]);
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php
deleted file mode 100644
index e183e27d446e459071f9069fddc9587a960f8500..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * Validates whether a value is a valid image file and is valid
- * against minWidth, maxWidth, minHeight and maxHeight constraints.
- *
- * @author Benjamin Dulau <benjamin.dulau@gmail.com>
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class ImageValidator extends FileValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof Image) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Image');
-        }
-
-        $violations = count($this->context->getViolations());
-
-        parent::validate($value, $constraint);
-
-        $failed = count($this->context->getViolations()) !== $violations;
-
-        if ($failed || null === $value || '' === $value) {
-            return;
-        }
-
-        if (null === $constraint->minWidth && null === $constraint->maxWidth
-            && null === $constraint->minHeight && null === $constraint->maxHeight
-            && null === $constraint->minRatio && null === $constraint->maxRatio
-            && $constraint->allowSquare && $constraint->allowLandscape && $constraint->allowPortrait) {
-            return;
-        }
-
-        $size = @getimagesize($value);
-
-        if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) {
-            $this->buildViolation($constraint->sizeNotDetectedMessage)
-                ->setCode(Image::SIZE_NOT_DETECTED_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        $width = $size[0];
-        $height = $size[1];
-
-        if ($constraint->minWidth) {
-            if (!ctype_digit((string) $constraint->minWidth)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum width', $constraint->minWidth));
-            }
-
-            if ($width < $constraint->minWidth) {
-                $this->buildViolation($constraint->minWidthMessage)
-                    ->setParameter('{{ width }}', $width)
-                    ->setParameter('{{ min_width }}', $constraint->minWidth)
-                    ->setCode(Image::TOO_NARROW_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-        }
-
-        if ($constraint->maxWidth) {
-            if (!ctype_digit((string) $constraint->maxWidth)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum width', $constraint->maxWidth));
-            }
-
-            if ($width > $constraint->maxWidth) {
-                $this->buildViolation($constraint->maxWidthMessage)
-                    ->setParameter('{{ width }}', $width)
-                    ->setParameter('{{ max_width }}', $constraint->maxWidth)
-                    ->setCode(Image::TOO_WIDE_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-        }
-
-        if ($constraint->minHeight) {
-            if (!ctype_digit((string) $constraint->minHeight)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height', $constraint->minHeight));
-            }
-
-            if ($height < $constraint->minHeight) {
-                $this->buildViolation($constraint->minHeightMessage)
-                    ->setParameter('{{ height }}', $height)
-                    ->setParameter('{{ min_height }}', $constraint->minHeight)
-                    ->setCode(Image::TOO_LOW_ERROR)
-                    ->addViolation();
-
-                return;
-            }
-        }
-
-        if ($constraint->maxHeight) {
-            if (!ctype_digit((string) $constraint->maxHeight)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum height', $constraint->maxHeight));
-            }
-
-            if ($height > $constraint->maxHeight) {
-                $this->buildViolation($constraint->maxHeightMessage)
-                    ->setParameter('{{ height }}', $height)
-                    ->setParameter('{{ max_height }}', $constraint->maxHeight)
-                    ->setCode(Image::TOO_HIGH_ERROR)
-                    ->addViolation();
-            }
-        }
-
-        $ratio = round($width / $height, 2);
-
-        if (null !== $constraint->minRatio) {
-            if (!is_numeric((string) $constraint->minRatio)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio', $constraint->minRatio));
-            }
-
-            if ($ratio < $constraint->minRatio) {
-                $this->buildViolation($constraint->minRatioMessage)
-                    ->setParameter('{{ ratio }}', $ratio)
-                    ->setParameter('{{ min_ratio }}', $constraint->minRatio)
-                    ->setCode(Image::RATIO_TOO_SMALL_ERROR)
-                    ->addViolation();
-            }
-        }
-
-        if (null !== $constraint->maxRatio) {
-            if (!is_numeric((string) $constraint->maxRatio)) {
-                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio', $constraint->maxRatio));
-            }
-
-            if ($ratio > $constraint->maxRatio) {
-                $this->buildViolation($constraint->maxRatioMessage)
-                    ->setParameter('{{ ratio }}', $ratio)
-                    ->setParameter('{{ max_ratio }}', $constraint->maxRatio)
-                    ->setCode(Image::RATIO_TOO_BIG_ERROR)
-                    ->addViolation();
-            }
-        }
-
-        if (!$constraint->allowSquare && $width == $height) {
-            $this->buildViolation($constraint->allowSquareMessage)
-                ->setParameter('{{ width }}', $width)
-                ->setParameter('{{ height }}', $height)
-                ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR)
-                ->addViolation();
-        }
-
-        if (!$constraint->allowLandscape && $width > $height) {
-            $this->buildViolation($constraint->allowLandscapeMessage)
-                ->setParameter('{{ width }}', $width)
-                ->setParameter('{{ height }}', $height)
-                ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR)
-                ->addViolation();
-        }
-
-        if (!$constraint->allowPortrait && $width < $height) {
-            $this->buildViolation($constraint->allowPortraitMessage)
-                ->setParameter('{{ width }}', $width)
-                ->setParameter('{{ height }}', $height)
-                ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php
deleted file mode 100644
index 1f17c38efe3b02ce16f6b8eb180c78fbcb47b33a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * Validates whether the value is a valid ISSN.
- *
- * @author Antonio J. García Lagar <aj@garcialagar.es>
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @see https://en.wikipedia.org/wiki/Issn
- */
-class IssnValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof Issn) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Issn');
-        }
-
-        if (null === $value || '' === $value) {
-            return;
-        }
-
-        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
-            throw new UnexpectedTypeException($value, 'string');
-        }
-
-        $value = (string) $value;
-        $canonical = $value;
-
-        // 1234-567X
-        //     ^
-        if (isset($canonical{4}) && '-' === $canonical{4}) {
-            // remove hyphen
-            $canonical = substr($canonical, 0, 4).substr($canonical, 5);
-        } elseif ($constraint->requireHyphen) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::MISSING_HYPHEN_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        $length = strlen($canonical);
-
-        if ($length < 8) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::TOO_SHORT_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if ($length > 8) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::TOO_LONG_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        // 1234567X
-        // ^^^^^^^ digits only
-        if (!ctype_digit(substr($canonical, 0, 7))) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::INVALID_CHARACTERS_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        // 1234567X
-        //        ^ digit, x or X
-        if (!ctype_digit($canonical{7}) && 'x' !== $canonical{7} && 'X' !== $canonical{7}) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::INVALID_CHARACTERS_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        // 1234567X
-        //        ^ case-sensitive?
-        if ($constraint->caseSensitive && 'x' === $canonical{7}) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::INVALID_CASE_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        // Calculate a checksum. "X" equals 10.
-        $checkSum = 'X' === $canonical{7} || 'x' === $canonical{7}
-            ? 10
-            : $canonical{7};
-
-        for ($i = 0; $i < 7; ++$i) {
-            // Multiply the first digit by 8, the second by 7, etc.
-            $checkSum += (8 - $i) * $canonical{$i};
-        }
-
-        if (0 !== $checkSum % 11) {
-            $this->buildViolation($constraint->message)
-                ->setParameter('{{ value }}', $this->formatValue($value))
-                ->setCode(Issn::CHECKSUM_FAILED_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php
deleted file mode 100644
index f82204779c7554a4c8ffaf6ab8cdd7e1344125c8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class LengthValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof Length) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Length');
-        }
-
-        if (null === $value || '' === $value) {
-            return;
-        }
-
-        if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
-            throw new UnexpectedTypeException($value, 'string');
-        }
-
-        $stringValue = (string) $value;
-        $invalidCharset = false;
-
-        if ('UTF8' === $charset = strtoupper($constraint->charset)) {
-            $charset = 'UTF-8';
-        }
-
-        if (function_exists('iconv_strlen')) {
-            $length = @iconv_strlen($stringValue, $constraint->charset);
-            $invalidCharset = false === $length;
-        } elseif (function_exists('mb_strlen')) {
-            if (mb_check_encoding($stringValue, $constraint->charset)) {
-                $length = mb_strlen($stringValue, $constraint->charset);
-            } else {
-                $invalidCharset = true;
-            }
-        } elseif ('UTF-8' !== $charset) {
-            $length = strlen($stringValue);
-        } elseif (!preg_match('//u', $stringValue)) {
-            $invalidCharset = true;
-        } elseif (function_exists('utf8_decode')) {
-            $length = strlen(utf8_decode($stringValue));
-        } else {
-            preg_replace('/./u', '', $stringValue, -1, $length);
-        }
-
-        if ($invalidCharset) {
-            $this->buildViolation($constraint->charsetMessage)
-                ->setParameter('{{ value }}', $this->formatValue($stringValue))
-                ->setParameter('{{ charset }}', $constraint->charset)
-                ->setInvalidValue($value)
-                ->addViolation();
-
-            return;
-        }
-
-        if (null !== $constraint->max && $length > $constraint->max) {
-            $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
-                ->setParameter('{{ value }}', $this->formatValue($stringValue))
-                ->setParameter('{{ limit }}', $constraint->max)
-                ->setInvalidValue($value)
-                ->setPlural((int) $constraint->max)
-                ->setCode(Length::TOO_LONG_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if (null !== $constraint->min && $length < $constraint->min) {
-            $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage)
-                ->setParameter('{{ value }}', $this->formatValue($stringValue))
-                ->setParameter('{{ limit }}', $constraint->min)
-                ->setInvalidValue($value)
-                ->setPlural((int) $constraint->min)
-                ->setCode(Length::TOO_SHORT_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php
deleted file mode 100644
index ebae112a3a6089bc5d87d9eab97bd3ae850d264d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class RangeValidator extends ConstraintValidator
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, Constraint $constraint)
-    {
-        if (!$constraint instanceof Range) {
-            throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Range');
-        }
-
-        if (null === $value) {
-            return;
-        }
-
-        if (!is_numeric($value) && !$value instanceof \DateTime && !$value instanceof \DateTimeInterface) {
-            $this->buildViolation($constraint->invalidMessage)
-                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
-                ->setCode(Range::INVALID_VALUE_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        $min = $constraint->min;
-        $max = $constraint->max;
-
-        // Convert strings to DateTimes if comparing another DateTime
-        // This allows to compare with any date/time value supported by
-        // the DateTime constructor:
-        // http://php.net/manual/en/datetime.formats.php
-        if ($value instanceof \DateTime || $value instanceof \DateTimeInterface) {
-            if (is_string($min)) {
-                $min = new \DateTime($min);
-            }
-
-            if (is_string($max)) {
-                $max = new \DateTime($max);
-            }
-        }
-
-        if (null !== $constraint->max && $value > $max) {
-            $this->buildViolation($constraint->maxMessage)
-                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
-                ->setParameter('{{ limit }}', $this->formatValue($max, self::PRETTY_DATE))
-                ->setCode(Range::BEYOND_RANGE_ERROR)
-                ->addViolation();
-
-            return;
-        }
-
-        if (null !== $constraint->min && $value < $min) {
-            $this->buildViolation($constraint->minMessage)
-                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
-                ->setParameter('{{ limit }}', $this->formatValue($min, self::PRETTY_DATE))
-                ->setCode(Range::BELOW_RANGE_ERROR)
-                ->addViolation();
-        }
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php
deleted file mode 100644
index de34b1fc2cae6d542e3e6ce24d247d6981dcacb1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Context;
-
-use Symfony\Component\Translation\TranslatorInterface;
-use Symfony\Component\Validator\Constraints\Valid;
-use Symfony\Component\Validator\MetadataFactoryInterface;
-use Symfony\Component\Validator\Validator\ValidatorInterface;
-
-/**
- * An execution context that is compatible with the legacy API (< 2.5).
- *
- * @since  2.5
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
- *             To be removed in Symfony 3.0.
- */
-class LegacyExecutionContext extends ExecutionContext
-{
-    /**
-     * @var MetadataFactoryInterface
-     */
-    private $metadataFactory;
-
-    /**
-     * Creates a new context.
-     *
-     * @see ExecutionContext::__construct()
-     *
-     * @internal Called by {@link LegacyExecutionContextFactory}. Should not be used
-     *           in user code.
-     */
-    public function __construct(ValidatorInterface $validator, $root, MetadataFactoryInterface $metadataFactory, TranslatorInterface $translator, $translationDomain = null)
-    {
-        parent::__construct(
-            $validator,
-            $root,
-            $translator,
-            $translationDomain
-        );
-
-        $this->metadataFactory = $metadataFactory;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function addViolation($message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null)
-    {
-        if (func_num_args() > 2) {
-            $this
-                ->buildViolation($message, $parameters)
-                ->setInvalidValue($invalidValue)
-                ->setPlural($plural)
-                ->setCode($code)
-                ->addViolation()
-            ;
-
-            return;
-        }
-
-        parent::addViolation($message, $parameters);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null)
-    {
-        if (func_num_args() > 2) {
-            $this
-                ->buildViolation($message, $parameters)
-                ->atPath($subPath)
-                ->setInvalidValue($invalidValue)
-                ->setPlural($plural)
-                ->setCode($code)
-                ->addViolation()
-            ;
-
-            return;
-        }
-
-        $this
-            ->buildViolation($message, $parameters)
-            ->atPath($subPath)
-            ->addViolation()
-        ;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false)
-    {
-        if (is_array($value)) {
-            // The $traverse flag is ignored for arrays
-            $constraint = new Valid(array('traverse' => true, 'deep' => $deep));
-
-            return $this
-                ->getValidator()
-                ->inContext($this)
-                ->atPath($subPath)
-                ->validate($value, $constraint, $groups)
-            ;
-        }
-
-        if ($traverse && $value instanceof \Traversable) {
-            $constraint = new Valid(array('traverse' => true, 'deep' => $deep));
-
-            return $this
-                ->getValidator()
-                ->inContext($this)
-                ->atPath($subPath)
-                ->validate($value, $constraint, $groups)
-            ;
-        }
-
-        return $this
-            ->getValidator()
-            ->inContext($this)
-            ->atPath($subPath)
-            ->validate($value, null, $groups)
-        ;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function validateValue($value, $constraints, $subPath = '', $groups = null)
-    {
-        return $this
-            ->getValidator()
-            ->inContext($this)
-            ->atPath($subPath)
-            ->validate($value, $constraints, $groups)
-        ;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getMetadataFactory()
-    {
-        return $this->metadataFactory;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php
deleted file mode 100644
index 7913e156254992224e5e05205966d5f0d099a66e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Mapping;
-
-/**
- * Alias of {@link Factory\BlackHoleMetadataFactory}.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
- *             Use {@link Factory\BlackHoleMetadataFactory} instead.
- */
-class BlackholeMetadataFactory extends \Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory
-{
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php
deleted file mode 100644
index d5a41fb0e5875599ce25c80a771ee4ff7cacc283..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyAllValidator2Dot4ApiTest extends AllValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php
deleted file mode 100644
index 649bfe1c72e7e4459c792fdc135793e3213b1651..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyAllValidatorLegacyApiTest extends AllValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php
deleted file mode 100644
index 0cfb1aaa5fdcc67e2275c21e649cf364a7ea2704..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyBlankValidator2Dot4ApiTest extends BlankValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php
deleted file mode 100644
index 00b8a7ae6d1ad500f0728ca2f5ccc1f9d29c5539..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyBlankValidatorLegacyApiTest extends BlankValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php
deleted file mode 100644
index efcb5ec56050c759354b95e1ac77d529458182e2..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCallbackValidator2Dot4ApiTest extends CallbackValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php
deleted file mode 100644
index 8f3ea2b87cc64f7d604e12afc499e72530c55315..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCallbackValidatorLegacyApiTest extends CallbackValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php
deleted file mode 100644
index 0f467dda49d581455f7f0de96fa515c9c70140d7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCardSchemeValidator2Dot4ApiTest extends CardSchemeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php
deleted file mode 100644
index e4b41846dda4965de24f09440db521016943ed54..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCardSchemeValidatorLegacyApiTest extends CardSchemeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php
deleted file mode 100644
index 71277f7bf39360ea2bd6a9f8b66bd1722b12964e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyChoiceValidator2Dot4ApiTest extends ChoiceValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php
deleted file mode 100644
index 9237df55138ff80d2da8dcb9f285e38a7da32c28..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyChoiceValidatorLegacyApiTest extends ChoiceValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php
deleted file mode 100644
index 38269148e37f299930ea363c1a14c2e1b55bc9c9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorArray2Dot4ApiTest extends CollectionValidatorArrayTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php
deleted file mode 100644
index 45ca1df3855526c8419578ae9d686f429db1c4b7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorArrayLegacyApiTest extends CollectionValidatorArrayTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php
deleted file mode 100644
index 22dbe46a666aefc46a4a2893a37722b09e3aa1f8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorArrayObject2Dot4ApiTest extends CollectionValidatorArrayObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php
deleted file mode 100644
index f28aed3b1247dc3a9dcc2e45b48afadf94a9fe95..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorArrayObjectLegacyApiTest extends CollectionValidatorArrayObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php
deleted file mode 100644
index 29ce241f98f5fec691f347f618344486afd7ba57..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest extends CollectionValidatorCustomArrayObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php
deleted file mode 100644
index b04053f24682d41b3179948fe01954d77d46ae31..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @group legacy
- */
-class LegacyCollectionValidatorCustomArrayObjectLegacyApiTest extends CollectionValidatorCustomArrayObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php
deleted file mode 100644
index 2ab8b199da3ebf966cebdb2581fe1a8055f45a6a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCountValidatorArray2Dot4ApiTest extends CountValidatorArrayTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php
deleted file mode 100644
index d36298811c85a3794777cb22abf717046822016e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCountValidatorArrayLegacyApiTest extends CountValidatorArrayTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php
deleted file mode 100644
index d0239bb3d978a12da86d582b28784fafeca23c4d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCountValidatorCountable2Dot4ApiTest extends CountValidatorCountableTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php
deleted file mode 100644
index 33b87957bff26bb4d69d162e9a0e206268f2b2c7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCountValidatorCountableLegacyApiTest extends CountValidatorCountableTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php
deleted file mode 100644
index 30685d442fd203722c936a2f5c1ea33bc8e881a5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCurrencyValidator2Dot4ApiTest extends CurrencyValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php
deleted file mode 100644
index 85cd5d0a6aaae7172ebcb600db74fb5d5fdc542d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyCurrencyValidatorLegacyApiTest extends CurrencyValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php
deleted file mode 100644
index 6c2f6a50c4654ac81fe3410c203bbff61646b2c0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyDateTimeValidator2Dot4ApiTest extends DateTimeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php
deleted file mode 100644
index be19302fcf358e5a0eab8ef81c967b9eb226ac68..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyDateTimeValidatorLegacyApiTest extends DateTimeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php
deleted file mode 100644
index aab7d431c53a5beefb360038734af38b40fd78d3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyDateValidator2Dot4ApiTest extends DateValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php
deleted file mode 100644
index 3235f42312e447351af6443a5df967e76a67aff7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyDateValidatorLegacyApiTest extends DateValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php
deleted file mode 100644
index 12ccb5e0fe829dd4386f32b7e57896ccdf3a6362..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyEmailValidator2Dot4ApiTest extends EmailValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php
deleted file mode 100644
index e5f101961ee9ac550d3c90f1ee04b14c5ed94160..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyEmailValidatorLegacyApiTest extends EmailValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php
deleted file mode 100644
index 1c7008a59c295ce2135ef91dfbce8c59e5e0aa2f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyEqualToValidator2Dot4ApiTest extends EqualToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php
deleted file mode 100644
index 3a72cfbf5030f1c89c9c2f5d4693c4c30ad5eef1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyEqualToValidatorLegacyApiTest extends EqualToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php
deleted file mode 100644
index 914e580137f5708204c280b602fede3f4f92d828..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyExpressionValidator2Dot4ApiTest extends ExpressionValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php
deleted file mode 100644
index 374bba085071ce401418d0be08ce3ccc0c6bd7f7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyExpressionValidatorLegacyApiTest extends ExpressionValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php
deleted file mode 100644
index 3d65f4e1793e0f02aea518324832a40f4cfe4224..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFalseValidator2Dot4ApiTest extends FalseValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php
deleted file mode 100644
index 5f7cb12bdb15dc4fb0977df3ae54170a75b7f249..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFalseValidatorLegacyApiTest extends FalseValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php
deleted file mode 100644
index 3035e4135e30f11a71434d8edbb7b1ffd3a28418..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFileValidatorObject2Dot4ApiTest extends FileValidatorObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php
deleted file mode 100644
index 97d5f5969003b88ecbef25c9424843c726976478..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFileValidatorObjectLegacyApiTest extends FileValidatorObjectTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php
deleted file mode 100644
index a1541444cad4da544394756f44d16096fb9de210..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFileValidatorPath2Dot4ApiTest extends FileValidatorPathTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php
deleted file mode 100644
index 2c298dffcfe080bf53a51fd3683c90e6ee0de2e4..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyFileValidatorPathLegacyApiTest extends FileValidatorPathTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php
deleted file mode 100644
index 5f4a17edb5f4ec2f2c361b4c121155aa1c1f8e6f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyGreaterThanOrEqualValidator2Dot4ApiTest extends GreaterThanOrEqualValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php
deleted file mode 100644
index 08822a53bdeaddec5fd0122e6133928df73cab33..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyGreaterThanOrEqualValidatorLegacyApiTest extends GreaterThanOrEqualValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php
deleted file mode 100644
index 799e5d821061b5c9d6c78ae51befe2c47070678b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyGreaterThanValidator2Dot4ApiTest extends GreaterThanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php
deleted file mode 100644
index 0808e9bd15a628ef2c91aab3391b2c790f23cace..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyGreaterThanValidatorLegacyApiTest extends GreaterThanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php
deleted file mode 100644
index 6dac309c171a73507198639df7b483b45ccd32f5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIbanValidator2Dot4ApiTest extends IbanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php
deleted file mode 100644
index 0ffc4b150658bad93a37892821080b574bc393af..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIbanValidatorLegacyApiTest extends IbanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php
deleted file mode 100644
index 99cd9862cd53912f24981e92548754117236495b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIdenticalToValidator2Dot4ApiTest extends IdenticalToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php
deleted file mode 100644
index aade84f65c2296abd99f4b7472b846cdfca49ae5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIdenticalToValidatorLegacyApiTest extends IdenticalToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php
deleted file mode 100644
index 1fee081eaccc1f26d13dbbea3314540af3a72546..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyImageValidator2Dot4ApiTest extends ImageValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php
deleted file mode 100644
index d36c1752f3e864ec2c3a9d74b5d47209e40a6944..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyImageValidatorLegacyApiTest extends ImageValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php
deleted file mode 100644
index 99933cf0c00752c6961c4d5f7130fa6fe39dc37b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIpValidator2Dot4ApiTest extends IpValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php
deleted file mode 100644
index 315f2f9ccf819b27a10e85adcdc659c7a0dd7409..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIpValidatorLegacyApiTest extends IpValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php
deleted file mode 100644
index 29455bdf70c0aeef5fa9f96a518af529edb06d16..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIsbnValidator2Dot4ApiTest extends IsbnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php
deleted file mode 100644
index 156827090bc0b3494e83da62fd2b664b1e8507fd..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIsbnValidatorLegacyApiTest extends IsbnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php
deleted file mode 100644
index 3713fb0d673b5f5eb5d61520b3ba37df0d410ed7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIssnValidator2Dot4ApiTest extends IssnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php
deleted file mode 100644
index 2ff310416d2a785ca1546288d7edc3f6627048e9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyIssnValidatorLegacyApiTest extends IssnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php
deleted file mode 100644
index f7120751fb33f0f543f3cbc6afb36aa6027680a8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLanguageValidator2Dot4ApiTest extends LanguageValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php
deleted file mode 100644
index a6471b3d3bdc3cc80af32b38f4ff0eb979e86b7d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLanguageValidatorLegacyApiTest extends LanguageValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php
deleted file mode 100644
index 686d376d9d53d0bbf17ef3ef24d2c37809ee4c64..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLengthValidator2Dot4ApiTest extends LengthValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php
deleted file mode 100644
index 655f3d6adb303e3c5f38b5e3234caed6f76734ec..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLengthValidatorLegacyApiTest extends LengthValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php
deleted file mode 100644
index f345ec362295eeb02fc4e986769744d204a4b5d6..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLessThanOrEqualValidator2Dot4ApiTest extends LessThanOrEqualValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php
deleted file mode 100644
index 2e07ab02cac0bae996c9f1611bd7b246371ce6f0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLessThanOrEqualValidatorLegacyApiTest extends LessThanOrEqualValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php
deleted file mode 100644
index 074450d4193b06a106466263024528a0b47b40c3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLessThanValidator2Dot4ApiTest extends LessThanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php
deleted file mode 100644
index 27592b0afc0b8ceea1a67a57345b3b3de6fcab4d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLessThanValidatorLegacyApiTest extends LessThanValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php
deleted file mode 100644
index 4d119bb9182e0b20afba366c1623b019d020829e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLocaleValidator2Dot4ApiTest extends LocaleValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php
deleted file mode 100644
index f55d42205fc281bc855390ebaebf74552e748856..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLocaleValidatorLegacyApiTest extends LocaleValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php
deleted file mode 100644
index 8207ca009c0aacfb2c5c32fc906c13a27f5b2ea4..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLuhnValidator2Dot4ApiTest extends LuhnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php
deleted file mode 100644
index 58555266e9eb9f790a870f4cc99763f90dc003a0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyLuhnValidatorLegacyApiTest extends LuhnValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php
deleted file mode 100644
index a6d0faa784c11a44798b751058e61e94364d14be..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotBlankValidator2Dot4ApiTest extends NotBlankValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php
deleted file mode 100644
index 0aaaa77c442ebca8ef241b5c8c0caea2e9afc4e9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotBlankValidatorLegacyApiTest extends NotBlankValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php
deleted file mode 100644
index e48450e52d8f75260a70b0690f0034073579cccf..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotEqualToValidator2Dot4ApiTest extends NotEqualToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php
deleted file mode 100644
index df88f96b540550f892f929bdd45fb93d512d7610..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotEqualToValidatorLegacyApiTest extends NotEqualToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php
deleted file mode 100644
index 2c00cf5d3ad01fab77d887a6fddfb9117f27fbb1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotIdenticalToValidator2Dot4ApiTest extends NotIdenticalToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php
deleted file mode 100644
index 25819a622fcb0504eb623279efedbfb9a04cd4de..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotIdenticalToValidatorLegacyApiTest extends NotIdenticalToValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php
deleted file mode 100644
index 39b0038750e0d4197bc38603018ae3c2c370bc09..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotNullValidator2Dot4ApiTest extends NotNullValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php
deleted file mode 100644
index 41a9e5407c00c3ab01a386f7e1210d86b5227966..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNotNullValidatorLegacyApiTest extends NotNullValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php
deleted file mode 100644
index 958e446aa78ac695efee9add6d64cd3285ec6f67..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNullValidator2Dot4ApiTest extends NullValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php
deleted file mode 100644
index 79536ced6ba122510425d14b34c17cf461f30fc2..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyNullValidatorLegacyApiTest extends NullValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php
deleted file mode 100644
index fe23ce8a6c363977e8c1fd3dbcc459ab527941ec..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyRangeValidator2Dot4ApiTest extends RangeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php
deleted file mode 100644
index 866a59adfeb05ce8dd4cbf67b487ed4421323cc3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyRangeValidatorLegacyApiTest extends RangeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php
deleted file mode 100644
index dbae24ee0c404d8e23985e91293cc186bae67bdf..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyRegexValidator2Dot4ApiTest extends RegexValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php
deleted file mode 100644
index ed1a4648c21d979f99384b1a0ec94386d99710c4..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyRegexValidatorLegacyApiTest extends RegexValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php
deleted file mode 100644
index d4a0678c99e9498dd97b8d6adba27b0961c9870c..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTimeValidator2Dot4ApiTest extends TimeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php
deleted file mode 100644
index 2458d873ac800353aec615234ec013c7306d6faa..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTimeValidatorLegacyApiTest extends TimeValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php
deleted file mode 100644
index 3d00252ebc49cc9c27b7b988ec31ff213652282a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTrueValidator2Dot4ApiTest extends TrueValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php
deleted file mode 100644
index 706c08373ce198ec9a756315b9e11467d0b22333..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTrueValidatorLegacyApiTest extends TrueValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php
deleted file mode 100644
index aed1d0a2ba74c3a1b4453b3f7682af76be0873a3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTypeValidator2Dot4ApiTest extends TypeValidatorTest
-{
-    /**
-     * PhpUnit calls data providers of test suites before launching the test
-     * suite. If this property is not replicated in every test class, only one
-     * file will ever be created and stored in TypeValidatorTest::$file. After
-     * the execution of the first TypeValidator test case, tearDownAfterClass()
-     * is called and closes the file. Hence the resource is not available
-     * anymore in the other TypeValidator test cases.
-     */
-    protected static $file;
-
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php
deleted file mode 100644
index 26eb39ffb12623f68d140f96afd7a068c4f71ec7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyTypeValidatorLegacyApiTest extends TypeValidatorTest
-{
-    protected static $file;
-
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php
deleted file mode 100644
index 287d7192c8bcf48feae604fd6b4b4764efcb7b40..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyUrlValidator2Dot4ApiTest extends UrlValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php
deleted file mode 100644
index 0830ddb40fa6fd7702c11311d07b79651f95cbc9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyUrlValidatorLegacyApiTest extends UrlValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php
deleted file mode 100644
index b5efc767705efe9b81e5de85802cdb613cde7ffe..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyUuidValidator2Dot4ApiTest extends UrlValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_4;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php
deleted file mode 100644
index 4a4e36298b7b18601ffd6351c3b56fecea0136bc..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since  2.5.3
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @group  legacy
- */
-class LegacyUuidValidatorLegacyApiTest extends UuidValidatorTest
-{
-    protected function getApiVersion()
-    {
-        return Validation::API_VERSION_2_5_BC;
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php
deleted file mode 100644
index ce3501f216116b5d06f38869b2e7bd453e8e0dfa..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Validator;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\Constraints\GroupSequence;
-use Symfony\Component\Validator\Constraints\Valid;
-use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
-
-/**
- * A validator that supports both the API of Symfony < 2.5 and Symfony 2.5+.
- *
- * This class is incompatible with PHP versions < 5.3.9, because it implements
- * two different interfaces specifying the same method validate():
- *
- *   - {@link \Symfony\Component\Validator\ValidatorInterface}
- *   - {@link \Symfony\Component\Validator\Validator\ValidatorInterface}
- *
- * In PHP versions prior to 5.3.9, either use {@link RecursiveValidator} or the
- * deprecated class {@link \Symfony\Component\Validator\Validator} instead.
- *
- * @since  2.5
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @see \Symfony\Component\Validator\ValidatorInterface
- * @see \Symfony\Component\Validator\Validator\ValidatorInterface
- *
- * @deprecated Implemented for backwards compatibility with Symfony < 2.5.
- *             To be removed in Symfony 3.0.
- */
-class LegacyValidator extends RecursiveValidator implements LegacyValidatorInterface
-{
-    public function validate($value, $groups = null, $traverse = false, $deep = false)
-    {
-        $numArgs = func_num_args();
-
-        // Use new signature if constraints are given in the second argument
-        if (self::testConstraints($groups) && ($numArgs < 3 || 3 === $numArgs && self::testGroups($traverse))) {
-            // Rename to avoid total confusion ;)
-            $constraints = $groups;
-            $groups = $traverse;
-
-            return parent::validate($value, $constraints, $groups);
-        }
-
-        $constraint = new Valid(array('traverse' => $traverse, 'deep' => $deep));
-
-        return parent::validate($value, $constraint, $groups);
-    }
-
-    public function validateValue($value, $constraints, $groups = null)
-    {
-        return parent::validate($value, $constraints, $groups);
-    }
-
-    public function getMetadataFactory()
-    {
-        return $this->metadataFactory;
-    }
-
-    private static function testConstraints($constraints)
-    {
-        return null === $constraints || $constraints instanceof Constraint || (is_array($constraints) && current($constraints) instanceof Constraint);
-    }
-
-    private static function testGroups($groups)
-    {
-        return null === $groups || is_string($groups) || $groups instanceof GroupSequence || (is_array($groups) && (is_string(current($groups)) || current($groups) instanceof GroupSequence));
-    }
-}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php b/core/vendor/symfony/validator/Tests/ConstraintTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php
rename to core/vendor/symfony/validator/Tests/ConstraintTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php b/core/vendor/symfony/validator/Tests/ConstraintViolationListTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php
rename to core/vendor/symfony/validator/Tests/ConstraintViolationListTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php b/core/vendor/symfony/validator/Tests/ConstraintViolationTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php
rename to core/vendor/symfony/validator/Tests/ConstraintViolationTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php b/core/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
rename to core/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
similarity index 64%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
index d55e46426814bf322fdafe3303c72e713cf1ac5d..55ddbfe9c8593a37273c6937bd6a69d43c30aa69 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
@@ -21,11 +21,10 @@
 use Symfony\Component\Validator\ExecutionContextInterface as LegacyExecutionContextInterface;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 use Symfony\Component\Validator\Mapping\PropertyMetadata;
-use Symfony\Component\Validator\Tests\Fixtures\StubGlobalExecutionContext;
 use Symfony\Component\Validator\Validation;
 
 /**
- * @since  2.5.3
+ * @since 2.5.3
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  */
@@ -42,19 +41,12 @@ abstract class AbstractConstraintValidatorTest extends \PHPUnit_Framework_TestCa
     protected $validator;
 
     protected $group;
-
     protected $metadata;
-
     protected $object;
-
     protected $value;
-
     protected $root;
-
     protected $propertyPath;
-
     protected $constraint;
-
     protected $defaultTimezone;
 
     protected function setUp()
@@ -72,11 +64,7 @@ protected function setUp()
 
         // Initialize the context with some constraint so that we can
         // successfully build a violation.
-        // The 2.4 API does not keep a reference to the current
-        // constraint yet. There the violation stores null.
-        $this->constraint = Validation::API_VERSION_2_4 === $this->getApiVersion()
-            ? null
-            : new NotNull();
+        $this->constraint = new NotNull();
 
         $this->context = $this->createContext();
         $this->validator = $this->createValidator();
@@ -113,22 +101,6 @@ protected function restoreDefaultTimezone()
     protected function createContext()
     {
         $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
-
-        if (Validation::API_VERSION_2_4 === $this->getApiVersion()) {
-            return $this->getMockBuilder('Symfony\Component\Validator\ExecutionContext')
-                ->setConstructorArgs(array(
-                    new StubGlobalExecutionContext($this->root),
-                    $translator,
-                    null,
-                    $this->metadata,
-                    $this->value,
-                    $this->group,
-                    $this->propertyPath,
-                ))
-                ->setMethods(array('validate', 'validateValue'))
-                ->getMock();
-        }
-
         $validator = $this->getMock('Symfony\Component\Validator\Validator\ValidatorInterface');
         $contextualValidator = $this->getMock('Symfony\Component\Validator\Validator\ContextualValidatorInterface');
 
@@ -140,6 +112,7 @@ protected function createContext()
                     $translator
                 );
                 break;
+            case Validation::API_VERSION_2_4:
             case Validation::API_VERSION_2_5_BC:
                 $context = new LegacyExecutionContext(
                     $validator,
@@ -174,8 +147,7 @@ protected function createContext()
      *
      * @return ConstraintViolation
      *
-     * @deprecated To be removed in Symfony 3.0. Use
-     *             {@link buildViolation()} instead.
+     * @deprecated to be removed in Symfony 3.0. Use {@link buildViolation()} instead.
      */
     protected function createViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null)
     {
@@ -195,17 +167,7 @@ protected function createViolation($message, array $parameters = array(), $prope
     protected function setGroup($group)
     {
         $this->group = $group;
-
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context = $this->createContext();
-                $this->validator->initialize($this->context);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $this->context->setGroup($group);
-                break;
-        }
+        $this->context->setGroup($group);
     }
 
     protected function setObject($object)
@@ -215,16 +177,7 @@ protected function setObject($object)
             ? new ClassMetadata(get_class($object))
             : null;
 
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context = $this->createContext();
-                $this->validator->initialize($this->context);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
-                break;
-        }
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
     }
 
     protected function setProperty($object, $property)
@@ -234,32 +187,13 @@ protected function setProperty($object, $property)
             ? new PropertyMetadata(get_class($object), $property)
             : null;
 
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context = $this->createContext();
-                $this->validator->initialize($this->context);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
-                break;
-        }
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
     }
 
     protected function setValue($value)
     {
         $this->value = $value;
-
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context = $this->createContext();
-                $this->validator->initialize($this->context);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
-                break;
-        }
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
     }
 
     protected function setRoot($root)
@@ -272,86 +206,45 @@ protected function setRoot($root)
     protected function setPropertyPath($propertyPath)
     {
         $this->propertyPath = $propertyPath;
-
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context = $this->createContext();
-                $this->validator->initialize($this->context);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
-                break;
-        }
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
     }
 
     protected function expectNoValidate()
     {
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context->expects($this->never())
-                    ->method('validate');
-                $this->context->expects($this->never())
-                    ->method('validateValue');
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $validator = $this->context->getValidator()->inContext($this->context);
-                $validator->expects($this->never())
-                    ->method('atPath');
-                $validator->expects($this->never())
-                    ->method('validate');
-                break;
-        }
+        $validator = $this->context->getValidator()->inContext($this->context);
+        $validator->expects($this->never())
+            ->method('atPath');
+        $validator->expects($this->never())
+            ->method('validate');
     }
 
     protected function expectValidateAt($i, $propertyPath, $value, $group)
     {
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context->expects($this->at($i))
-                    ->method('validate')
-                    ->with($value, $propertyPath, $group);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $validator = $this->context->getValidator()->inContext($this->context);
-                $validator->expects($this->at(2 * $i))
-                    ->method('atPath')
-                    ->with($propertyPath)
-                    ->will($this->returnValue($validator));
-                $validator->expects($this->at(2 * $i + 1))
-                    ->method('validate')
-                    ->with($value, $this->logicalOr(null, array()), $group);
-                break;
-        }
+        $validator = $this->context->getValidator()->inContext($this->context);
+        $validator->expects($this->at(2 * $i))
+            ->method('atPath')
+            ->with($propertyPath)
+            ->will($this->returnValue($validator));
+        $validator->expects($this->at(2 * $i + 1))
+            ->method('validate')
+            ->with($value, $this->logicalOr(null, array()), $group);
     }
 
     protected function expectValidateValueAt($i, $propertyPath, $value, $constraints, $group = null)
     {
-        switch ($this->getApiVersion()) {
-            case Validation::API_VERSION_2_4:
-                $this->context->expects($this->at($i))
-                    ->method('validateValue')
-                    ->with($value, $constraints, $propertyPath, $group);
-                break;
-            case Validation::API_VERSION_2_5:
-            case Validation::API_VERSION_2_5_BC:
-                $contextualValidator = $this->context->getValidator()->inContext($this->context);
-                $contextualValidator->expects($this->at(2 * $i))
-                    ->method('atPath')
-                    ->with($propertyPath)
-                    ->will($this->returnValue($contextualValidator));
-                $contextualValidator->expects($this->at(2 * $i + 1))
-                    ->method('validate')
-                    ->with($value, $constraints, $group);
-                break;
-        }
+        $contextualValidator = $this->context->getValidator()->inContext($this->context);
+        $contextualValidator->expects($this->at(2 * $i))
+            ->method('atPath')
+            ->with($propertyPath)
+            ->will($this->returnValue($contextualValidator));
+        $contextualValidator->expects($this->at(2 * $i + 1))
+            ->method('validate')
+            ->with($value, $constraints, $group);
     }
 
     protected function assertNoViolation()
     {
-        $this->assertCount(0, $this->context->getViolations());
+        $this->assertSame(0, $violationsCount = count($this->context->getViolations()), sprintf('0 violation expected. Got %u.', $violationsCount));
     }
 
     /**
@@ -367,6 +260,8 @@ protected function assertNoViolation()
      */
     protected function assertViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
+
         $this->buildViolation($message)
             ->setParameters($parameters)
             ->atPath($propertyPath)
@@ -384,6 +279,8 @@ protected function assertViolation($message, array $parameters = array(), $prope
      */
     protected function assertViolations(array $expected)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
+
         $violations = $this->context->getViolations();
 
         $this->assertCount(count($expected), $violations);
@@ -405,7 +302,10 @@ protected function buildViolation($message)
         return new ConstraintViolationAssertion($this->context, $message, $this->constraint);
     }
 
-    abstract protected function getApiVersion();
+    protected function getApiVersion()
+    {
+        return Validation::API_VERSION_2_5;
+    }
 
     abstract protected function createValidator();
 }
@@ -517,7 +417,7 @@ public function assertRaised()
 
         $violations = iterator_to_array($this->context->getViolations());
 
-        \PHPUnit_Framework_Assert::assertCount(count($expected), $violations);
+        \PHPUnit_Framework_Assert::assertSame($expectedCount = count($expected), $violationsCount = count($violations), sprintf('%u violation(s) expected. Got %u.', $expectedCount, $violationsCount));
 
         reset($violations);
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php b/core/vendor/symfony/validator/Tests/Constraints/AllTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/AllTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/BlankValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/BlankValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
similarity index 88%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
index 9bb12a25361b66416652fee10de5f89b21b9953e..b53f6c6995cc10bee902c1ee854129a77604538e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
@@ -58,7 +58,7 @@ protected function createValidator()
 
     public function testNullIsValid()
     {
-        $this->validator->validate(null, new Callback(array('foo')));
+        $this->validator->validate(null, new Callback());
 
         $this->assertNoViolation();
     }
@@ -186,8 +186,13 @@ public function testArrayCallableExplicitName()
     }
 
     // BC with Symfony < 2.4
-    public function testSingleMethodBc()
+    /**
+     * @group legacy
+     */
+    public function testLegacySingleMethodBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('validate'));
 
@@ -199,8 +204,13 @@ public function testSingleMethodBc()
     }
 
     // BC with Symfony < 2.4
-    public function testSingleMethodBcExplicitName()
+    /**
+     * @group legacy
+     */
+    public function testLegacySingleMethodBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('methods' => array('validate')));
 
@@ -212,8 +222,13 @@ public function testSingleMethodBcExplicitName()
     }
 
     // BC with Symfony < 2.4
-    public function testMultipleMethodsBc()
+    /**
+     * @group legacy
+     */
+    public function testLegacyMultipleMethodsBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('validate', 'validateStatic'));
 
@@ -227,8 +242,13 @@ public function testMultipleMethodsBc()
     }
 
     // BC with Symfony < 2.4
-    public function testMultipleMethodsBcExplicitName()
+    /**
+     * @group legacy
+     */
+    public function testLegacyMultipleMethodsBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             'methods' => array('validate', 'validateStatic'),
@@ -244,8 +264,13 @@ public function testMultipleMethodsBcExplicitName()
     }
 
     // BC with Symfony < 2.4
-    public function testSingleStaticMethodBc()
+    /**
+     * @group legacy
+     */
+    public function testLegacySingleStaticMethodBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             array(__CLASS__.'_Class', 'validateCallback'),
@@ -259,8 +284,13 @@ public function testSingleStaticMethodBc()
     }
 
     // BC with Symfony < 2.4
-    public function testSingleStaticMethodBcExplicitName()
+    /**
+     * @group legacy
+     */
+    public function testLegacySingleStaticMethodBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             'methods' => array(array(__CLASS__.'_Class', 'validateCallback')),
@@ -295,9 +325,12 @@ public function testExpectValidCallbacks()
 
     /**
      * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     * @group legacy
      */
-    public function testExpectEitherCallbackOrMethods()
+    public function testLegacyExpectEitherCallbackOrMethods()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
 
         $this->validator->validate($object, new Callback(array(
@@ -308,7 +341,7 @@ public function testExpectEitherCallbackOrMethods()
 
     public function testConstraintGetTargets()
     {
-        $constraint = new Callback(array('foo'));
+        $constraint = new Callback(array());
         $targets = array(Constraint::CLASS_CONSTRAINT, Constraint::PROPERTY_CONSTRAINT);
 
         $this->assertEquals($targets, $constraint->getTargets());
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php b/core/vendor/symfony/validator/Tests/Constraints/CollectionTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CollectionTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php b/core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php b/core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorArrayTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorArrayTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php b/core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php b/core/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php b/core/vendor/symfony/validator/Tests/Constraints/CountValidatorArrayTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CountValidatorArrayTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php b/core/vendor/symfony/validator/Tests/Constraints/CountValidatorCountableTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CountValidatorCountableTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/EqualToValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/ExpressionValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/ExpressionValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php b/core/vendor/symfony/validator/Tests/Constraints/FileTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/FileTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php b/core/vendor/symfony/validator/Tests/Constraints/FileValidatorObjectTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/FileValidatorObjectTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php b/core/vendor/symfony/validator/Tests/Constraints/FileValidatorPathTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/FileValidatorPathTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php
diff --git a/core/vendor/symfony/validator/Tests/Constraints/Fixtures/foo b/core/vendor/symfony/validator/Tests/Constraints/Fixtures/foo
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif b/core/vendor/symfony/validator/Tests/Constraints/Fixtures/test.gif
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif
rename to core/vendor/symfony/validator/Tests/Constraints/Fixtures/test.gif
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif b/core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_4by3.gif
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif
rename to core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_4by3.gif
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif b/core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_landscape.gif
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif
rename to core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_landscape.gif
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif b/core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_portrait.gif
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif
rename to core/vendor/symfony/validator/Tests/Constraints/Fixtures/test_portrait.gif
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/GreaterThanValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php b/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
similarity index 74%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
index 85b60b5eee3d5ad252159cb1a91502115f123086..30f024537289a3e509886e5101254b8ef0972f24 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
@@ -32,22 +32,37 @@ public function testCreateDoctrineStyle()
         $this->assertSame(array('Group 1', 'Group 2'), $sequence->groups);
     }
 
-    public function testIterate()
+    /**
+     * @group legacy
+     */
+    public function testLegacyIterate()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertSame(array('Group 1', 'Group 2'), iterator_to_array($sequence));
     }
 
-    public function testCount()
+    /**
+     * @group legacy
+     */
+    public function testLegacyCount()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertCount(2, $sequence);
     }
 
-    public function testArrayAccess()
+    /**
+     * @group legacy
+     */
+    public function testLegacyArrayAccess()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertSame('Group 1', $sequence[0]);
@@ -66,16 +81,24 @@ public function testArrayAccess()
 
     /**
      * @expectedException \Symfony\Component\Validator\Exception\OutOfBoundsException
+     * @group legacy
      */
-    public function testGetExpectsExistingKey()
+    public function testLegacyGetExpectsExistingKey()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $sequence[2];
     }
 
-    public function testUnsetIgnoresNonExistingKeys()
+    /**
+     * @group legacy
+     */
+    public function testLegacyUnsetIgnoresNonExistingKeys()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         // should not fail
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IbanValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IbanValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IdenticalToValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IsFalseValidatorTest.php
similarity index 71%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IsFalseValidatorTest.php
index 479888e53b200f5f03afed0729629e2eeaf75fcb..a63d8466ad81436e4573cf05a4ddb3c1ed22c0bc 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/IsFalseValidatorTest.php
@@ -11,11 +11,11 @@
 
 namespace Symfony\Component\Validator\Tests\Constraints;
 
-use Symfony\Component\Validator\Constraints\False;
-use Symfony\Component\Validator\Constraints\FalseValidator;
+use Symfony\Component\Validator\Constraints\IsFalse;
+use Symfony\Component\Validator\Constraints\IsFalseValidator;
 use Symfony\Component\Validator\Validation;
 
-class FalseValidatorTest extends AbstractConstraintValidatorTest
+class IsFalseValidatorTest extends AbstractConstraintValidatorTest
 {
     protected function getApiVersion()
     {
@@ -24,26 +24,26 @@ protected function getApiVersion()
 
     protected function createValidator()
     {
-        return new FalseValidator();
+        return new IsFalseValidator();
     }
 
     public function testNullIsValid()
     {
-        $this->validator->validate(null, new False());
+        $this->validator->validate(null, new IsFalse());
 
         $this->assertNoViolation();
     }
 
     public function testFalseIsValid()
     {
-        $this->validator->validate(false, new False());
+        $this->validator->validate(false, new IsFalse());
 
         $this->assertNoViolation();
     }
 
     public function testTrueIsInvalid()
     {
-        $constraint = new False(array(
+        $constraint = new IsFalse(array(
             'message' => 'myMessage',
         ));
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IsNullValidatorTest.php
similarity index 80%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IsNullValidatorTest.php
index 85df90a8ae09ce11d997ecd328d46caf9c0eda2d..885048b9bd6031fca7b0a4c935f3edba05567921 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/IsNullValidatorTest.php
@@ -11,11 +11,11 @@
 
 namespace Symfony\Component\Validator\Tests\Constraints;
 
-use Symfony\Component\Validator\Constraints\Null;
-use Symfony\Component\Validator\Constraints\NullValidator;
+use Symfony\Component\Validator\Constraints\IsNull;
+use Symfony\Component\Validator\Constraints\IsNullValidator;
 use Symfony\Component\Validator\Validation;
 
-class NullValidatorTest extends AbstractConstraintValidatorTest
+class IsNullValidatorTest extends AbstractConstraintValidatorTest
 {
     protected function getApiVersion()
     {
@@ -24,12 +24,12 @@ protected function getApiVersion()
 
     protected function createValidator()
     {
-        return new NullValidator();
+        return new IsNullValidator();
     }
 
     public function testNullIsValid()
     {
-        $this->validator->validate(null, new Null());
+        $this->validator->validate(null, new IsNull());
 
         $this->assertNoViolation();
     }
@@ -39,7 +39,7 @@ public function testNullIsValid()
      */
     public function testInvalidValues($value, $valueAsString)
     {
-        $constraint = new Null(array(
+        $constraint = new IsNull(array(
             'message' => 'myMessage',
         ));
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IsTrueValidatorTest.php
similarity index 72%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IsTrueValidatorTest.php
index 2cdc703183d013e5ea3bfed21290b3d3f8976dae..a4f0a4aaeba430d003535666b7cd7bca2eebf727 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/IsTrueValidatorTest.php
@@ -11,11 +11,11 @@
 
 namespace Symfony\Component\Validator\Tests\Constraints;
 
-use Symfony\Component\Validator\Constraints\True;
-use Symfony\Component\Validator\Constraints\TrueValidator;
+use Symfony\Component\Validator\Constraints\IsTrue;
+use Symfony\Component\Validator\Constraints\IsTrueValidator;
 use Symfony\Component\Validator\Validation;
 
-class TrueValidatorTest extends AbstractConstraintValidatorTest
+class IsTrueValidatorTest extends AbstractConstraintValidatorTest
 {
     protected function getApiVersion()
     {
@@ -24,26 +24,26 @@ protected function getApiVersion()
 
     protected function createValidator()
     {
-        return new TrueValidator();
+        return new IsTrueValidator();
     }
 
     public function testNullIsValid()
     {
-        $this->validator->validate(null, new True());
+        $this->validator->validate(null, new IsTrue());
 
         $this->assertNoViolation();
     }
 
     public function testTrueIsValid()
     {
-        $this->validator->validate(true, new True());
+        $this->validator->validate(true, new IsTrue());
 
         $this->assertNoViolation();
     }
 
     public function testFalseIsInvalid()
     {
-        $constraint = new True(array(
+        $constraint = new IsTrue(array(
             'message' => 'myMessage',
         ));
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LessThanOrEqualValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LessThanValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/NotBlankValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/NotBlankValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/NotEqualToValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/NotIdenticalToValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/NotNullValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/NotNullValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php b/core/vendor/symfony/validator/Tests/Constraints/RegexTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/RegexTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/TypeValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/TypeValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php b/core/vendor/symfony/validator/Tests/Constraints/ValidTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php
rename to core/vendor/symfony/validator/Tests/Constraints/ValidTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php b/core/vendor/symfony/validator/Tests/Fixtures/CallbackClass.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php
rename to core/vendor/symfony/validator/Tests/Fixtures/CallbackClass.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php b/core/vendor/symfony/validator/Tests/Fixtures/ClassConstraint.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ClassConstraint.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintA.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintA.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintAValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintAValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintB.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintB.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintC.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintC.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintWithValue.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintWithValue.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php b/core/vendor/symfony/validator/Tests/Fixtures/ConstraintWithValueAsDefault.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php
rename to core/vendor/symfony/validator/Tests/Fixtures/ConstraintWithValueAsDefault.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php b/core/vendor/symfony/validator/Tests/Fixtures/Countable.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php
rename to core/vendor/symfony/validator/Tests/Fixtures/Countable.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php b/core/vendor/symfony/validator/Tests/Fixtures/CustomArrayObject.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php
rename to core/vendor/symfony/validator/Tests/Fixtures/CustomArrayObject.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php b/core/vendor/symfony/validator/Tests/Fixtures/Entity.php
similarity index 98%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php
rename to core/vendor/symfony/validator/Tests/Fixtures/Entity.php
index 2230d304244752c4e30fdfec46396d0978c01f85..526ecc5f5c63524c1fbcdd3892ac29d4cfe34131 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php
+++ b/core/vendor/symfony/validator/Tests/Fixtures/Entity.php
@@ -64,7 +64,7 @@ public function getLastName()
     }
 
     /**
-     * @Assert\True
+     * @Assert\IsTrue
      */
     public function isValid()
     {
@@ -72,7 +72,7 @@ public function isValid()
     }
 
     /**
-     * @Assert\True
+     * @Assert\IsTrue
      */
     public function hasPermissions()
     {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php b/core/vendor/symfony/validator/Tests/Fixtures/EntityInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php
rename to core/vendor/symfony/validator/Tests/Fixtures/EntityInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php b/core/vendor/symfony/validator/Tests/Fixtures/EntityParent.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php
rename to core/vendor/symfony/validator/Tests/Fixtures/EntityParent.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php b/core/vendor/symfony/validator/Tests/Fixtures/FailingConstraint.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php
rename to core/vendor/symfony/validator/Tests/Fixtures/FailingConstraint.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php b/core/vendor/symfony/validator/Tests/Fixtures/FailingConstraintValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php
rename to core/vendor/symfony/validator/Tests/Fixtures/FailingConstraintValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php b/core/vendor/symfony/validator/Tests/Fixtures/FakeClassMetadata.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php
rename to core/vendor/symfony/validator/Tests/Fixtures/FakeClassMetadata.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php b/core/vendor/symfony/validator/Tests/Fixtures/FakeMetadataFactory.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php
rename to core/vendor/symfony/validator/Tests/Fixtures/FakeMetadataFactory.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php b/core/vendor/symfony/validator/Tests/Fixtures/FilesLoader.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php
rename to core/vendor/symfony/validator/Tests/Fixtures/FilesLoader.php
index 59d8ee8b3973a9bd0127e88b3b3c8b5af60be341..a4d6a6ab474a8c44c149bcd6fca0ac823a707fbe 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php
+++ b/core/vendor/symfony/validator/Tests/Fixtures/FilesLoader.php
@@ -27,7 +27,7 @@ public function __construct(array $paths, LoaderInterface $loader)
 
     protected function getFileLoaderInstance($file)
     {
-        $this->timesCalled++;
+        ++$this->timesCalled;
 
         return $this->loader;
     }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php b/core/vendor/symfony/validator/Tests/Fixtures/GroupSequenceProviderEntity.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php
rename to core/vendor/symfony/validator/Tests/Fixtures/GroupSequenceProviderEntity.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php b/core/vendor/symfony/validator/Tests/Fixtures/InvalidConstraint.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php
rename to core/vendor/symfony/validator/Tests/Fixtures/InvalidConstraint.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php b/core/vendor/symfony/validator/Tests/Fixtures/InvalidConstraintValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php
rename to core/vendor/symfony/validator/Tests/Fixtures/InvalidConstraintValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php b/core/vendor/symfony/validator/Tests/Fixtures/LegacyClassMetadata.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php
rename to core/vendor/symfony/validator/Tests/Fixtures/LegacyClassMetadata.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php b/core/vendor/symfony/validator/Tests/Fixtures/PropertyConstraint.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php
rename to core/vendor/symfony/validator/Tests/Fixtures/PropertyConstraint.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php b/core/vendor/symfony/validator/Tests/Fixtures/Reference.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php
rename to core/vendor/symfony/validator/Tests/Fixtures/Reference.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php b/core/vendor/symfony/validator/Tests/Fixtures/StubGlobalExecutionContext.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php
rename to core/vendor/symfony/validator/Tests/Fixtures/StubGlobalExecutionContext.php
index 6ae3663f04f524cade261d7c2ee191164a890239..84c5a80bf2d1693c7a63154a64ae8ed63b4080e1 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php
+++ b/core/vendor/symfony/validator/Tests/Fixtures/StubGlobalExecutionContext.php
@@ -20,14 +20,12 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated
+ * @deprecated since version 2.5, to be removed in 3.0
  */
 class StubGlobalExecutionContext implements GlobalExecutionContextInterface
 {
     private $violations;
-
     private $root;
-
     private $visitor;
 
     public function __construct($root = null, ValidationVisitorInterface $visitor = null)
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php b/core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php
rename to core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php b/core/vendor/symfony/validator/Tests/LegacyValidatorTest.php
similarity index 78%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php
rename to core/vendor/symfony/validator/Tests/LegacyValidatorTest.php
index 3cc36f5e23ad793b8485b9cef766a7f58ed44a1c..a38f1abb9bbc747f88049bd8a79dac25d87e952b 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/LegacyValidatorTest.php
@@ -11,19 +11,25 @@
 
 namespace Symfony\Component\Validator\Tests;
 
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Validator\Constraints\Valid;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
-use Symfony\Component\Validator\DefaultTranslator;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\Tests\Fixtures\Entity;
 use Symfony\Component\Validator\Tests\Validator\AbstractLegacyApiTest;
 use Symfony\Component\Validator\Validator as LegacyValidator;
 
-class ValidatorTest extends AbstractLegacyApiTest
+/**
+ * @group legacy
+ */
+class LegacyValidatorTest extends AbstractLegacyApiTest
 {
     protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array())
     {
-        return new LegacyValidator($metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator(), 'validators', $objectInitializers);
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        return new LegacyValidator($metadataFactory, new ConstraintValidatorFactory(), $translator, 'validators', $objectInitializers);
     }
 
     /**
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php b/core/vendor/symfony/validator/Tests/Mapping/Cache/DoctrineCacheTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Cache/DoctrineCacheTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php b/core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php b/core/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php b/core/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
similarity index 89%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
index ad98aa126a5e0347ea56918fd2e5ee4f8ff5c153..5a2beff29a109524d4229e5c2ecfb1adb5f10961 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
@@ -18,21 +18,11 @@
 use Symfony\Component\Validator\Constraints\Collection;
 use Symfony\Component\Validator\Constraints\NotNull;
 use Symfony\Component\Validator\Constraints\Range;
-use Symfony\Component\Validator\Constraints\True;
+use Symfony\Component\Validator\Constraints\IsTrue;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
 use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
 
-require_once __DIR__.'/../../../Constraints/All.php';
-require_once __DIR__.'/../../../Constraints/Callback.php';
-require_once __DIR__.'/../../../Constraints/Choice.php';
-require_once __DIR__.'/../../../Constraints/Collection.php';
-require_once __DIR__.'/../../../Constraints/GroupSequence.php';
-require_once __DIR__.'/../../../Constraints/GroupSequenceProvider.php';
-require_once __DIR__.'/../../../Constraints/NotNull.php';
-require_once __DIR__.'/../../../Constraints/Range.php';
-require_once __DIR__.'/../../Fixtures/ConstraintA.php';
-
 class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
 {
     public function testLoadClassMetadataReturnsTrueIfSuccessful()
@@ -78,8 +68,8 @@ public function testLoadClassMetadata()
             'choices' => array('A', 'B'),
         )));
         $expected->addGetterConstraint('lastName', new NotNull());
-        $expected->addGetterConstraint('valid', new True());
-        $expected->addGetterConstraint('permissions', new True());
+        $expected->addGetterConstraint('valid', new IsTrue());
+        $expected->addGetterConstraint('permissions', new IsTrue());
 
         // load reflection class so that the comparison passes
         $expected->getReflectionClass();
@@ -147,8 +137,8 @@ public function testLoadClassMetadataAndMerge()
             'choices' => array('A', 'B'),
         )));
         $expected->addGetterConstraint('lastName', new NotNull());
-        $expected->addGetterConstraint('valid', new True());
-        $expected->addGetterConstraint('permissions', new True());
+        $expected->addGetterConstraint('valid', new IsTrue());
+        $expected->addGetterConstraint('permissions', new IsTrue());
 
         // load reflection class so that the comparison passes
         $expected->getReflectionClass();
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/FilesLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/FilesLoaderTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/LoaderChainTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/LoaderChainTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
index 8ab2065ae5fa2e6deef59729b100e9eca468dda3..e6326b9a3154ddf3aea271c395161f9bec106fe0 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
@@ -18,7 +18,7 @@
 use Symfony\Component\Validator\Constraints\NotNull;
 use Symfony\Component\Validator\Constraints\Range;
 use Symfony\Component\Validator\Constraints\Regex;
-use Symfony\Component\Validator\Constraints\True;
+use Symfony\Component\Validator\Constraints\IsTrue;
 use Symfony\Component\Validator\Exception\MappingException;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader;
@@ -71,8 +71,8 @@ public function testLoadClassMetadata()
             'choices' => array('A', 'B'),
         )));
         $expected->addGetterConstraint('lastName', new NotNull());
-        $expected->addGetterConstraint('valid', new True());
-        $expected->addGetterConstraint('permissions', new True());
+        $expected->addGetterConstraint('valid', new IsTrue());
+        $expected->addGetterConstraint('permissions', new IsTrue());
 
         $this->assertEquals($expected, $metadata);
     }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
index 806a2b049be8cb11e92b6523f6c3bb396d95e339..407e36958e389d899578bb6985aadfd935757312 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
@@ -17,7 +17,7 @@
 use Symfony\Component\Validator\Constraints\Collection;
 use Symfony\Component\Validator\Constraints\NotNull;
 use Symfony\Component\Validator\Constraints\Range;
-use Symfony\Component\Validator\Constraints\True;
+use Symfony\Component\Validator\Constraints\IsTrue;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
 use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
@@ -102,8 +102,8 @@ public function testLoadClassMetadata()
             'choices' => array('A', 'B'),
         )));
         $expected->addGetterConstraint('lastName', new NotNull());
-        $expected->addGetterConstraint('valid', new True());
-        $expected->addGetterConstraint('permissions', new True());
+        $expected->addGetterConstraint('valid', new IsTrue());
+        $expected->addGetterConstraint('permissions', new IsTrue());
 
         $this->assertEquals($expected, $metadata);
     }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml b/core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml b/core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.xml
similarity index 97%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.xml
index 9b637e9a427fabd6fd6ada0aa208a32ba63e7606..689184ecf2d814b5bde7cda1c87def0967e238c8 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.xml
@@ -103,10 +103,10 @@
       <constraint name="NotNull" />
     </getter>
     <getter property="valid">
-      <constraint name="True" />
+      <constraint name="IsTrue" />
     </getter>
     <getter property="permissions">
-      <constraint name="True" />
+      <constraint name="IsTrue" />
     </getter>
   </class>
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml b/core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.yml
similarity index 97%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.yml
index e96c5e08663a1fea2bfcb7ae6968c01f38ca68ab..c39168c96cac033ddb23b8e04f935b8f8a52cc2e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/constraint-mapping.yml
@@ -54,9 +54,9 @@ Symfony\Component\Validator\Tests\Fixtures\Entity:
     lastName:
       - NotNull: ~
     valid:
-      - "True": ~
+      - "IsTrue": ~
     permissions:
-      - "True": ~
+      - "IsTrue": ~
 
 Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity:
   group_sequence_provider: true
diff --git a/core/vendor/symfony/validator/Tests/Mapping/Loader/empty-mapping.yml b/core/vendor/symfony/validator/Tests/Mapping/Loader/empty-mapping.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/symfony/validator/Tests/Mapping/Loader/nonvalid-mapping.yml b/core/vendor/symfony/validator/Tests/Mapping/Loader/nonvalid-mapping.yml
new file mode 100644
index 0000000000000000000000000000000000000000..257cc5642cb1a054f08cc83f2d943e56fd3ebe99
--- /dev/null
+++ b/core/vendor/symfony/validator/Tests/Mapping/Loader/nonvalid-mapping.yml
@@ -0,0 +1 @@
+foo
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml b/core/vendor/symfony/validator/Tests/Mapping/Loader/withdoctype.xml
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml
rename to core/vendor/symfony/validator/Tests/Mapping/Loader/withdoctype.xml
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
similarity index 86%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
index f91088de0b016116a060f8f9fe4621d2f6ae2a21..a4473bc68a0364b0eb578174500b5393706cc36a 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
@@ -35,8 +35,13 @@ protected function tearDown()
         $this->metadata = null;
     }
 
-    public function testAddValidSetsMemberToCascaded()
+    /**
+     * @group legacy
+     */
+    public function testLegacyAddValidSetsMemberToCascaded()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $result = $this->metadata->addConstraint(new Valid());
 
         $this->assertEquals(array(), $this->metadata->getConstraints());
@@ -44,8 +49,13 @@ public function testAddValidSetsMemberToCascaded()
         $this->assertTrue($this->metadata->isCascaded());
     }
 
-    public function testAddOtherConstraintDoesNotSetMemberToCascaded()
+    /**
+     * @group legacy
+     */
+    public function testLegacyAddOtherConstraintDoesNotSetMemberToCascaded()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $result = $this->metadata->addConstraint($constraint = new ConstraintA());
 
         $this->assertEquals(array($constraint), $this->metadata->getConstraints());
@@ -72,16 +82,19 @@ public function testSerialize()
 
     public function testSerializeCollectionCascaded()
     {
-        $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => false)));
+        $this->metadata->addConstraint(new Valid(array('traverse' => true)));
 
         $metadata = unserialize(serialize($this->metadata));
 
         $this->assertEquals($this->metadata, $metadata);
     }
 
-    public function testSerializeCollectionCascadedDeeply()
+    /**
+     * @group legacy
+     */
+    public function testLegacySerializeCollectionCascadedDeeply()
     {
-        $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => true)));
+        $this->metadata->addConstraint(new Valid(array('traverse' => true)));
 
         $metadata = unserialize(serialize($this->metadata));
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php
rename to core/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php b/core/vendor/symfony/validator/Tests/Util/PropertyPathTest.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php
rename to core/vendor/symfony/validator/Tests/Util/PropertyPathTest.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php b/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
similarity index 91%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php
rename to core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
index 684731feec544d91a8dc6a330f2f002d113f0a07..4a041afbff0d54dd665059d5bf4d904efcc2a7bc 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
@@ -155,12 +155,12 @@ public function testValidateInSeparateContext()
             $test->assertCount(1, $violations);
             $test->assertSame('Message value', $violations[0]->getMessage());
             $test->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-            $test->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+            $test->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
             $test->assertSame('', $violations[0]->getPropertyPath());
             // The root is different as we're in a new context
             $test->assertSame($entity->reference, $violations[0]->getRoot());
             $test->assertSame($entity->reference, $violations[0]->getInvalidValue());
-            $test->assertNull($violations[0]->getMessagePluralization());
+            $test->assertNull($violations[0]->getPlural());
             $test->assertNull($violations[0]->getCode());
 
             // Verify that this method is called
@@ -252,11 +252,11 @@ public function testValidateInContext()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('subpath', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -316,11 +316,11 @@ public function testValidateArrayInContext()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('subpath[key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -355,11 +355,11 @@ public function testTraverseTraversableByDefault()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('[key]', $violations[0]->getPropertyPath());
         $this->assertSame($traversable, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -506,65 +506,6 @@ public function testReferenceTraversalDisabledOnReferenceEnabledOnClass()
         $this->assertCount(0, $violations);
     }
 
-    public function testReferenceTraversalRecursionEnabledOnReferenceTraversalEnabledOnClass()
-    {
-        $entity = new Entity();
-        $entity->reference = new \ArrayIterator(array(
-            2 => new \ArrayIterator(array('key' => new Reference())),
-        ));
-
-        $callback = function ($value, ExecutionContextInterface $context) {
-            $context->addViolation('Message');
-        };
-
-        $traversableMetadata = new ClassMetadata('ArrayIterator');
-        $traversableMetadata->addConstraint(new Traverse(true));
-
-        $this->metadataFactory->addMetadata($traversableMetadata);
-        $this->referenceMetadata->addConstraint(new Callback(array(
-            'callback' => $callback,
-            'groups' => 'Group',
-        )));
-        $this->metadata->addPropertyConstraint('reference', new Valid(array(
-            'deep' => true,
-        )));
-
-        $violations = $this->validate($entity, new Valid(), 'Group');
-
-        /** @var ConstraintViolationInterface[] $violations */
-        $this->assertCount(1, $violations);
-    }
-
-    public function testReferenceTraversalRecursionDisabledOnReferenceTraversalEnabledOnClass()
-    {
-        $test = $this;
-        $entity = new Entity();
-        $entity->reference = new \ArrayIterator(array(
-            2 => new \ArrayIterator(array('key' => new Reference())),
-        ));
-
-        $callback = function ($value, ExecutionContextInterface $context) use ($test) {
-            $test->fail('Should not be called');
-        };
-
-        $traversableMetadata = new ClassMetadata('ArrayIterator');
-        $traversableMetadata->addConstraint(new Traverse(true));
-
-        $this->metadataFactory->addMetadata($traversableMetadata);
-        $this->referenceMetadata->addConstraint(new Callback(array(
-            'callback' => $callback,
-            'groups' => 'Group',
-        )));
-        $this->metadata->addPropertyConstraint('reference', new Valid(array(
-            'deep' => false,
-        )));
-
-        $violations = $this->validate($entity, new Valid(), 'Group');
-
-        /** @var ConstraintViolationInterface[] $violations */
-        $this->assertCount(0, $violations);
-    }
-
     public function testAddCustomizedViolation()
     {
         $entity = new Entity();
@@ -586,11 +527,11 @@ public function testAddCustomizedViolation()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Invalid value', $violations[0]->getInvalidValue());
-        $this->assertSame(2, $violations[0]->getMessagePluralization());
+        $this->assertSame(2, $violations[0]->getPlural());
         $this->assertSame(42, $violations[0]->getCode());
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php b/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
similarity index 97%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php
rename to core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
index a4c1fe815075913f42e5760da77a37b37814c120..77ec10212a37f2be2b12d47aaad6fdcb8b2c20ea 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
@@ -166,11 +166,11 @@ public function testValidateInContext()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('subpath', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -224,11 +224,11 @@ public function testValidateArrayInContext()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('subpath[key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -254,11 +254,11 @@ public function testAddCustomizedViolation()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Invalid value', $violations[0]->getInvalidValue());
-        $this->assertSame(2, $violations[0]->getMessagePluralization());
+        $this->assertSame(2, $violations[0]->getPlural());
         $this->assertSame('Code', $violations[0]->getCode());
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php b/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php
rename to core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
index b1c4edba43a5c8f08ebab688df49e530e0b1ecdf..d8833dedcfb4eb1fdb5fa2765a0fb473cef0062a 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
@@ -96,11 +96,11 @@ public function testValidate()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('', $violations[0]->getPropertyPath());
         $this->assertSame('Bernhard', $violations[0]->getRoot());
         $this->assertSame('Bernhard', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -133,11 +133,11 @@ public function testClassConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -173,11 +173,11 @@ public function testPropertyConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('firstName', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Bernhard', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -213,11 +213,11 @@ public function testGetterConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('lastName', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Schussek', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -251,11 +251,11 @@ public function testArray()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('[key]', $violations[0]->getPropertyPath());
         $this->assertSame($array, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -289,11 +289,11 @@ public function testRecursiveArray()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('[2][key]', $violations[0]->getPropertyPath());
         $this->assertSame($array, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -327,11 +327,11 @@ public function testTraversable()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('[key]', $violations[0]->getPropertyPath());
         $this->assertSame($traversable, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -367,11 +367,11 @@ public function testRecursiveTraversable()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('[2][key]', $violations[0]->getPropertyPath());
         $this->assertSame($traversable, $violations[0]->getRoot());
         $this->assertSame($entity, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -406,11 +406,11 @@ public function testReferenceClassConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference, $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -448,11 +448,11 @@ public function testReferencePropertyConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference.value', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Foobar', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -490,11 +490,11 @@ public function testReferenceGetterConstraint()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference.privateValue', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Bamboo', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -555,11 +555,11 @@ public function testArrayReference()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference[key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference['key'], $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -595,11 +595,11 @@ public function testRecursiveArrayReference()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference[2][key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference[2]['key'], $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -700,11 +700,11 @@ public function testTraversableReference()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference[key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference['key'], $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -766,7 +766,7 @@ public function testEnableRecursiveTraversableTraversal()
         };
 
         $this->metadata->addPropertyConstraint('reference', new Valid(array(
-            'deep' => true,
+            'traverse' => true,
         )));
         $this->referenceMetadata->addConstraint(new Callback(array(
             'callback' => $callback,
@@ -779,11 +779,11 @@ public function testEnableRecursiveTraversableTraversal()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('reference[2][key]', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame($entity->reference[2]['key'], $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -828,11 +828,11 @@ public function testValidateProperty()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('firstName', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Bernhard', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -910,11 +910,11 @@ public function testValidatePropertyValue()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('firstName', $violations[0]->getPropertyPath());
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Bernhard', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
@@ -961,11 +961,11 @@ public function testValidatePropertyValueWithClassName()
         $this->assertCount(1, $violations);
         $this->assertSame('Message value', $violations[0]->getMessage());
         $this->assertSame('Message %param%', $violations[0]->getMessageTemplate());
-        $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters());
+        $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters());
         $this->assertSame('', $violations[0]->getPropertyPath());
         $this->assertSame('Bernhard', $violations[0]->getRoot());
         $this->assertSame('Bernhard', $violations[0]->getInvalidValue());
-        $this->assertNull($violations[0]->getMessagePluralization());
+        $this->assertNull($violations[0]->getPlural());
         $this->assertNull($violations[0]->getCode());
     }
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php b/core/vendor/symfony/validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
similarity index 78%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
rename to core/vendor/symfony/validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
index 624abd4ae1dfd712d00a0407c1d0931bd28e239a..fd1287fe71822b90eeb8da9c6db74a2856904c10 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
@@ -11,9 +11,9 @@
 
 namespace Symfony\Component\Validator\Tests\Validator;
 
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
 use Symfony\Component\Validator\Context\LegacyExecutionContextFactory;
-use Symfony\Component\Validator\DefaultTranslator;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\Validator\LegacyValidator;
 
@@ -22,18 +22,12 @@
  */
 class LegacyValidator2Dot5ApiTest extends Abstract2Dot5ApiTest
 {
-    protected function setUp()
-    {
-        if (PHP_VERSION_ID < 50309) {
-            $this->markTestSkipped('Not supported prior to PHP 5.3.9');
-        }
-
-        parent::setUp();
-    }
-
     protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array())
     {
-        $contextFactory = new LegacyExecutionContextFactory($metadataFactory, new DefaultTranslator());
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        $contextFactory = new LegacyExecutionContextFactory($metadataFactory, $translator);
         $validatorFactory = new ConstraintValidatorFactory();
 
         return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers);
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php b/core/vendor/symfony/validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
similarity index 78%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
rename to core/vendor/symfony/validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
index 965a769f9426a171f72b00bc2fdd5e9db010b221..0b51a1146e6cb3e521f237f76731a2862e13f7b7 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
@@ -11,9 +11,9 @@
 
 namespace Symfony\Component\Validator\Tests\Validator;
 
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
 use Symfony\Component\Validator\Context\LegacyExecutionContextFactory;
-use Symfony\Component\Validator\DefaultTranslator;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\Validator\LegacyValidator;
 
@@ -22,18 +22,12 @@
  */
 class LegacyValidatorLegacyApiTest extends AbstractLegacyApiTest
 {
-    protected function setUp()
-    {
-        if (PHP_VERSION_ID < 50309) {
-            $this->markTestSkipped('Not supported prior to PHP 5.3.9');
-        }
-
-        parent::setUp();
-    }
-
     protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array())
     {
-        $contextFactory = new LegacyExecutionContextFactory($metadataFactory, new DefaultTranslator());
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        $contextFactory = new LegacyExecutionContextFactory($metadataFactory, $translator);
         $validatorFactory = new ConstraintValidatorFactory();
 
         return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers);
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php b/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
similarity index 81%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
rename to core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
index 6235fda9022fc606beed77e1ff8b33649997837c..05961269a5552969f27e132309c2f35dea63b1b8 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
@@ -11,9 +11,9 @@
 
 namespace Symfony\Component\Validator\Tests\Validator;
 
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
 use Symfony\Component\Validator\Context\ExecutionContextFactory;
-use Symfony\Component\Validator\DefaultTranslator;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\Validator\RecursiveValidator;
 
@@ -21,7 +21,10 @@ class RecursiveValidator2Dot5ApiTest extends Abstract2Dot5ApiTest
 {
     protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array())
     {
-        $contextFactory = new ExecutionContextFactory(new DefaultTranslator());
+        $translator = new IdentityTranslator();
+        $translator->setLocale('en');
+
+        $contextFactory = new ExecutionContextFactory($translator);
         $validatorFactory = new ConstraintValidatorFactory();
 
         return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers);
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php b/core/vendor/symfony/validator/Tests/ValidatorBuilderTest.php
similarity index 67%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php
rename to core/vendor/symfony/validator/Tests/ValidatorBuilderTest.php
index e2585d79900daf771886fa063d539f9379fd84ee..88e8b3b82689df86ff0dffe2b841b7185f83408e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php
+++ b/core/vendor/symfony/validator/Tests/ValidatorBuilderTest.php
@@ -110,51 +110,8 @@ public function testSetTranslationDomain()
         $this->assertSame($this->builder, $this->builder->setTranslationDomain('TRANS_DOMAIN'));
     }
 
-    /**
-     * @group legacy
-     */
-    public function testLegacyDefaultApiVersion()
-    {
-        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
-
-        if (PHP_VERSION_ID < 50309) {
-            // Old implementation on PHP < 5.3.9
-            $this->assertInstanceOf('Symfony\Component\Validator\Validator', $this->builder->getValidator());
-        } else {
-            // Legacy compatible implementation on PHP >= 5.3.9
-            $this->assertInstanceOf('Symfony\Component\Validator\Validator\LegacyValidator', $this->builder->getValidator());
-        }
-    }
-
-    /**
-     * @group legacy
-     */
-    public function testLegacySetApiVersion24()
+    public function testGetValidator()
     {
-        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
-
-        $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_4));
-        $this->assertInstanceOf('Symfony\Component\Validator\Validator', $this->builder->getValidator());
-    }
-
-    public function testSetApiVersion25()
-    {
-        $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_5));
         $this->assertInstanceOf('Symfony\Component\Validator\Validator\RecursiveValidator', $this->builder->getValidator());
     }
-
-    /**
-     * @group legacy
-     */
-    public function testLegacySetApiVersion24And25()
-    {
-        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
-
-        if (PHP_VERSION_ID < 50309) {
-            $this->markTestSkipped('Not supported prior to PHP 5.3.9');
-        }
-
-        $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_5_BC));
-        $this->assertInstanceOf('Symfony\Component\Validator\Validator\LegacyValidator', $this->builder->getValidator());
-    }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php b/core/vendor/symfony/validator/Util/PropertyPath.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php
rename to core/vendor/symfony/validator/Util/PropertyPath.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validation.php b/core/vendor/symfony/validator/Validation.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validation.php
rename to core/vendor/symfony/validator/Validation.php
index b304dbb935bb9b97cb39092009b8602590529581..a03d21584bc9d8b63ae29b51c7acedee55dd79da 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validation.php
+++ b/core/vendor/symfony/validator/Validation.php
@@ -20,6 +20,7 @@ final class Validation
 {
     /**
      * The Validator API provided by Symfony 2.4 and older.
+     * @deprecated use API_VERSION_2_5_BC instead.
      */
     const API_VERSION_2_4 = 1;
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php b/core/vendor/symfony/validator/ValidationVisitor.php
similarity index 97%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php
rename to core/vendor/symfony/validator/ValidationVisitor.php
index 3af82496a1c07c8f4ede1605c23d9e08dc0dfbdf..c7e06554b8cb5ac82df9d71f857fb74963b87385 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php
+++ b/core/vendor/symfony/validator/ValidationVisitor.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator;
 
+trigger_error('The '.__NAMESPACE__.'\ValidationVisitor class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Exception\NoSuchMetadataException;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -21,7 +23,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  */
 class ValidationVisitor implements ValidationVisitorInterface, GlobalExecutionContextInterface
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php b/core/vendor/symfony/validator/ValidationVisitorInterface.php
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php
rename to core/vendor/symfony/validator/ValidationVisitorInterface.php
index 483a1b5960ddd2eb2459429ae9369c3a0bc1c8d2..0ab7b7366776c39a1c67b2a59cc51b5473289845 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php
+++ b/core/vendor/symfony/validator/ValidationVisitorInterface.php
@@ -34,7 +34,7 @@
  *
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  */
 interface ValidationVisitorInterface
 {
@@ -64,8 +64,6 @@ interface ValidationVisitorInterface
      *
      * @throws Exception\NoSuchMetadataException If no metadata can be found for
      *                                           the given value.
-     *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
      */
     public function validate($value, $group, $propertyPath, $traverse = false, $deep = false);
 
@@ -79,8 +77,6 @@ public function validate($value, $group, $propertyPath, $traverse = false, $deep
      * @param mixed             $value        The value to validate.
      * @param string            $group        The validation group to validate.
      * @param string            $propertyPath The current property path in the validation graph.
-     *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
      */
     public function visit(MetadataInterface $metadata, $value, $group, $propertyPath);
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php b/core/vendor/symfony/validator/Validator.php
similarity index 96%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php
rename to core/vendor/symfony/validator/Validator.php
index 6edbb7ac566a5937b5de2d40d9f2bcd110c1e37a..8243f17acbf6bcce45a95802ddd8930abbd963f5 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php
+++ b/core/vendor/symfony/validator/Validator.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator;
 
+trigger_error('The '.__NAMESPACE__.'\Validator class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Validator\RecursiveValidator class instead.', E_USER_DEPRECATED);
+
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Constraints\Valid;
 use Symfony\Component\Validator\Exception\ValidatorException;
@@ -21,7 +23,7 @@
  * @author Fabien Potencier <fabien@symfony.com>
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link Validator\RecursiveValidator} instead.
  */
 class Validator implements ValidatorInterface, Mapping\Factory\MetadataFactoryInterface
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php b/core/vendor/symfony/validator/Validator/ContextualValidatorInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php
rename to core/vendor/symfony/validator/Validator/ContextualValidatorInterface.php
diff --git a/core/vendor/symfony/validator/Validator/LegacyValidator.php b/core/vendor/symfony/validator/Validator/LegacyValidator.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c5a10c355591d7dbb589e0fcce2bf7b58568bf2
--- /dev/null
+++ b/core/vendor/symfony/validator/Validator/LegacyValidator.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+trigger_error('The '.__NAMESPACE__.'\LegacyValidator class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
+/**
+ * A validator that supports both the API of Symfony < 2.5 and Symfony 2.5+.
+ *
+ * @since  2.5
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see \Symfony\Component\Validator\ValidatorInterface
+ * @see \Symfony\Component\Validator\Validator\ValidatorInterface
+ *
+ * @deprecated since version 2.5, to be removed in 3.0.
+ */
+class LegacyValidator extends RecursiveValidator
+{
+}
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php b/core/vendor/symfony/validator/Validator/RecursiveContextualValidator.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php
rename to core/vendor/symfony/validator/Validator/RecursiveContextualValidator.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php b/core/vendor/symfony/validator/Validator/RecursiveValidator.php
similarity index 62%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php
rename to core/vendor/symfony/validator/Validator/RecursiveValidator.php
index ddf0850c1cf2a449a85f4d6f260445544f02c344..c825bfa6f48b8f5cbda33e82f067af0765eb357c 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php
+++ b/core/vendor/symfony/validator/Validator/RecursiveValidator.php
@@ -11,11 +11,15 @@
 
 namespace Symfony\Component\Validator\Validator;
 
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\Constraints\Valid;
 use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
 use Symfony\Component\Validator\Context\ExecutionContextFactoryInterface;
 use Symfony\Component\Validator\Context\ExecutionContextInterface;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 use Symfony\Component\Validator\ObjectInitializerInterface;
+use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
 
 /**
  * Recursive implementation of {@link ValidatorInterface}.
@@ -23,7 +27,7 @@
  * @since  2.5
  * @author Bernhard Schussek <bschussek@gmail.com>
  */
-class RecursiveValidator implements ValidatorInterface
+class RecursiveValidator implements ValidatorInterface, LegacyValidatorInterface
 {
     /**
      * @var ExecutionContextFactoryInterface
@@ -110,8 +114,21 @@ public function hasMetadataFor($object)
     /**
      * {@inheritdoc}
      */
-    public function validate($value, $constraints = null, $groups = null)
+    public function validate($value, $groups = null, $traverse = false, $deep = false)
     {
+        $numArgs = func_num_args();
+
+        // Use new signature if constraints are given in the second argument
+        if (self::testConstraints($groups) && ($numArgs < 3 || 3 === $numArgs && self::testGroups($traverse))) {
+            // Rename to avoid total confusion ;)
+            $constraints = $groups;
+            $groups = $traverse;
+        } else {
+            trigger_error('The Symfony\Component\Validator\ValidatorInterface::validate method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
+
+            $constraints = new Valid(array('traverse' => $traverse, 'deep' => $deep));
+        }
+
         return $this->startContext($value)
             ->validate($value, $constraints, $groups)
             ->getViolations();
@@ -137,4 +154,34 @@ public function validatePropertyValue($objectOrClass, $propertyName, $value, $gr
             ->validatePropertyValue($objectOrClass, $propertyName, $value, $groups)
             ->getViolations();
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validateValue($value, $constraints, $groups = null)
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
+
+        return $this->validate($value, $constraints, $groups);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getMetadataFactory()
+    {
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
+
+        return $this->metadataFactory;
+    }
+
+    private static function testConstraints($constraints)
+    {
+        return null === $constraints || $constraints instanceof Constraint || (is_array($constraints) && current($constraints) instanceof Constraint);
+    }
+
+    private static function testGroups($groups)
+    {
+        return null === $groups || is_string($groups) || $groups instanceof GroupSequence || (is_array($groups) && (is_string(current($groups)) || current($groups) instanceof GroupSequence));
+    }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php b/core/vendor/symfony/validator/Validator/ValidatorInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php
rename to core/vendor/symfony/validator/Validator/ValidatorInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php b/core/vendor/symfony/validator/ValidatorBuilder.php
similarity index 82%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php
rename to core/vendor/symfony/validator/ValidatorBuilder.php
index 1d65478e20812d86433389e2a3b1316f4722812a..dd772cf3832547ca644d2e3a913dac965afcf9ad 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php
+++ b/core/vendor/symfony/validator/ValidatorBuilder.php
@@ -16,13 +16,12 @@
 use Doctrine\Common\Annotations\Reader;
 use Doctrine\Common\Cache\ArrayCache;
 use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+use Symfony\Component\Translation\IdentityTranslator;
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Context\ExecutionContextFactory;
-use Symfony\Component\Validator\Context\LegacyExecutionContextFactory;
 use Symfony\Component\Validator\Exception\InvalidArgumentException;
 use Symfony\Component\Validator\Exception\ValidatorException;
 use Symfony\Component\Validator\Mapping\Cache\CacheInterface;
-use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
 use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
 use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
 use Symfony\Component\Validator\Mapping\Loader\LoaderChain;
@@ -31,9 +30,7 @@
 use Symfony\Component\Validator\Mapping\Loader\XmlFilesLoader;
 use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
 use Symfony\Component\Validator\Mapping\Loader\YamlFilesLoader;
-use Symfony\Component\Validator\Validator\LegacyValidator;
 use Symfony\Component\Validator\Validator\RecursiveValidator;
-use Symfony\Component\Validator\Validator as ValidatorV24;
 
 /**
  * The default implementation of {@link ValidatorBuilderInterface}.
@@ -97,11 +94,6 @@ class ValidatorBuilder implements ValidatorBuilderInterface
      */
     private $propertyAccessor;
 
-    /**
-     * @var int|null
-     */
-    private $apiVersion;
-
     /**
      * {@inheritdoc}
      */
@@ -302,9 +294,14 @@ public function setTranslationDomain($translationDomain)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             The validator will function without a property accessor.
      */
     public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor)
     {
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. The validator will function without a property accessor.', E_USER_DEPRECATED);
+
         if (null !== $this->validatorFactory) {
             throw new ValidatorException('You cannot set a property accessor after setting a custom validator factory. Configure your validator factory instead.');
         }
@@ -316,27 +313,17 @@ public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated since version 2.7, to be removed in 3.0.
      */
     public function setApiVersion($apiVersion)
     {
-        if (!in_array($apiVersion, array(Validation::API_VERSION_2_4, Validation::API_VERSION_2_5, Validation::API_VERSION_2_5_BC))) {
-            throw new InvalidArgumentException(sprintf(
-                'The requested API version is invalid: "%s"',
-                $apiVersion
-            ));
-        }
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
 
-        if (PHP_VERSION_ID < 50309 && $apiVersion === Validation::API_VERSION_2_5_BC) {
-            throw new InvalidArgumentException(sprintf(
-                'The Validator API that is compatible with both Symfony 2.4 '.
-                'and Symfony 2.5 can only be used on PHP 5.3.9 and higher. '.
-                'Your current PHP version is %s.',
-                PHP_VERSION
-            ));
+        if (!in_array($apiVersion, array(Validation::API_VERSION_2_4, Validation::API_VERSION_2_5, Validation::API_VERSION_2_5_BC))) {
+            throw new InvalidArgumentException(sprintf('The requested API version is invalid: "%s"', $apiVersion));
         }
 
-        $this->apiVersion = $apiVersion;
-
         return $this;
     }
 
@@ -346,13 +333,6 @@ public function setApiVersion($apiVersion)
     public function getValidator()
     {
         $metadataFactory = $this->metadataFactory;
-        $apiVersion = $this->apiVersion;
-
-        if (null === $apiVersion) {
-            $apiVersion = PHP_VERSION_ID < 50309
-                ? Validation::API_VERSION_2_4
-                : Validation::API_VERSION_2_5_BC;
-        }
 
         if (!$metadataFactory) {
             $loaders = array();
@@ -385,28 +365,23 @@ public function getValidator()
                 $loader = $loaders[0];
             }
 
-            if (Validation::API_VERSION_2_5 === $apiVersion) {
-                $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->metadataCache);
-            } else {
-                $metadataFactory = new ClassMetadataFactory($loader, $this->metadataCache);
-            }
+            $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->metadataCache);
         }
 
         $validatorFactory = $this->validatorFactory ?: new ConstraintValidatorFactory($this->propertyAccessor);
-        $translator = $this->translator ?: new DefaultTranslator();
-
-        if (Validation::API_VERSION_2_4 === $apiVersion) {
-            return new ValidatorV24($metadataFactory, $validatorFactory, $translator, $this->translationDomain, $this->initializers);
-        }
-
-        if (Validation::API_VERSION_2_5 === $apiVersion) {
-            $contextFactory = new ExecutionContextFactory($translator, $this->translationDomain);
-
-            return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers);
+        $translator = $this->translator;
+
+        if (null === $translator) {
+            $translator = new IdentityTranslator();
+            // Force the locale to be 'en' when no translator is provided rather than relying on the Intl default locale
+            // This avoids depending on Intl or the stub implementation being available. It also ensures that Symfony
+            // validation messages are pluralized properly even when the default locale gets changed because they are in
+            // English.
+            $translator->setLocale('en');
         }
 
-        $contextFactory = new LegacyExecutionContextFactory($metadataFactory, $translator, $this->translationDomain);
+        $contextFactory = new ExecutionContextFactory($translator, $this->translationDomain);
 
-        return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers);
+        return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers);
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php b/core/vendor/symfony/validator/ValidatorBuilderInterface.php
similarity index 97%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php
rename to core/vendor/symfony/validator/ValidatorBuilderInterface.php
index 2fd0f9c58bf94e7338abbab8a89fb39414b6e036..cc0007770578b1ea544de4d65b708c782088734e 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php
+++ b/core/vendor/symfony/validator/ValidatorBuilderInterface.php
@@ -167,7 +167,7 @@ public function setTranslationDomain($translationDomain);
      *
      * @return ValidatorBuilderInterface The builder object
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      */
     public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor);
 
@@ -178,9 +178,10 @@ public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor)
      *
      * @return ValidatorBuilderInterface The builder object
      *
-     * @see Validation::API_VERSION_2_4
      * @see Validation::API_VERSION_2_5
      * @see Validation::API_VERSION_2_5_BC
+     *
+     * @deprecated since version 2.7, to be removed in 3.0.
      */
     public function setApiVersion($apiVersion);
 
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php b/core/vendor/symfony/validator/ValidatorInterface.php
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php
rename to core/vendor/symfony/validator/ValidatorInterface.php
index 0d7733295874ddb8debe5373a791ecfebacb039f..3682b15be6116a8daf9f7380d8062a538682defb 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php
+++ b/core/vendor/symfony/validator/ValidatorInterface.php
@@ -18,7 +18,7 @@
  *
  * @api
  *
- * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+ * @deprecated since version 2.5, to be removed in 3.0.
  *             Use {@link \Symfony\Component\Validator\Validator\ValidatorInterface} instead.
  */
 interface ValidatorInterface
@@ -93,8 +93,9 @@ public function validatePropertyValue($containingValue, $property, $value, $grou
      *
      * @api
      *
-     * @deprecated Renamed to {@link Validator\ValidatorInterface::validate()}
-     *             in Symfony 2.5. Will be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
+     *             Renamed to {@link Validator\ValidatorInterface::validate()}
+     *             in Symfony 2.5.
      */
     public function validateValue($value, $constraints, $groups = null);
 
@@ -105,7 +106,7 @@ public function validateValue($value, $constraints, $groups = null);
      *
      * @api
      *
-     * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
+     * @deprecated since version 2.5, to be removed in 3.0.
      *             Use {@link Validator\ValidatorInterface::getMetadataFor()} or
      *             {@link Validator\ValidatorInterface::hasMetadataFor()}
      *             instead.
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php b/core/vendor/symfony/validator/Violation/ConstraintViolationBuilder.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php
rename to core/vendor/symfony/validator/Violation/ConstraintViolationBuilder.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php b/core/vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php
rename to core/vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php b/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
similarity index 93%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php
rename to core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
index 5519f42de9ecddb1b7a250ed3239f593bac3bcb9..0ce6da90608e3fc2a7f8063617efe8caef0ff3a9 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php
+++ b/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Validator\Violation;
 
+trigger_error('The '.__NAMESPACE__.'\LegacyConstraintViolationBuilder class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+
 use Symfony\Component\Validator\ExecutionContextInterface;
 
 /**
@@ -21,7 +23,7 @@
  * @internal You should not instantiate or use this class. Code against
  *           {@link ConstraintViolationBuilderInterface} instead.
  *
- * @deprecated This class will be removed in Symfony 3.0.
+ * @deprecated since version 2.5.5, to be removed in 3.0.
  */
 class LegacyConstraintViolationBuilder implements ConstraintViolationBuilderInterface
 {
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/composer.json b/core/vendor/symfony/validator/composer.json
similarity index 86%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/composer.json
rename to core/vendor/symfony/validator/composer.json
index ac8c81279f221c163a54b88f8de85e6e80c6d377..b89fe1b134515c17d274841f2a195fdc540b11cf 100644
--- a/core/vendor/symfony/validator/Symfony/Component/Validator/composer.json
+++ b/core/vendor/symfony/validator/composer.json
@@ -16,12 +16,11 @@
         }
     ],
     "require": {
-        "php": ">=5.3.3",
-        "symfony/translation": "~2.0,>=2.0.5"
+        "php": ">=5.3.9",
+        "symfony/translation": "~2.4"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7",
-        "doctrine/common": "~2.3",
         "symfony/http-foundation": "~2.1",
         "symfony/intl": "~2.3",
         "symfony/yaml": "~2.0,>=2.0.5",
@@ -44,13 +43,12 @@
         "symfony/expression-language": "For using the 2.4 Expression validator"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\Validator\\": "" }
+        "psr-4": { "Symfony\\Component\\Validator\\": "" }
     },
-    "target-dir": "Symfony/Component/Validator",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist b/core/vendor/symfony/validator/phpunit.xml.dist
similarity index 100%
rename from core/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist
rename to core/vendor/symfony/validator/phpunit.xml.dist
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/CHANGELOG.md b/core/vendor/symfony/yaml/CHANGELOG.md
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/CHANGELOG.md
rename to core/vendor/symfony/yaml/CHANGELOG.md
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php b/core/vendor/symfony/yaml/Dumper.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php
rename to core/vendor/symfony/yaml/Dumper.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php b/core/vendor/symfony/yaml/Escaper.php
similarity index 87%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
rename to core/vendor/symfony/yaml/Escaper.php
index f4987652aa5d656eb879d4c66fd6d62291dde4cc..ac325a2c2f259b5ae23ddee69b36707ace88f2aa 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
+++ b/core/vendor/symfony/yaml/Escaper.php
@@ -33,11 +33,11 @@ class Escaper
                                      "\x18",  "\x19",  "\x1a",  "\x1b",  "\x1c",  "\x1d",  "\x1e",  "\x1f",
                                      "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",);
     private static $escaped = array('\\\\', '\\"', '\\\\', '\\"',
-                                     "\\0",   "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a",
-                                     "\\b",   "\\t",   "\\n",   "\\v",   "\\f",   "\\r",   "\\x0e", "\\x0f",
-                                     "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17",
-                                     "\\x18", "\\x19", "\\x1a", "\\e",   "\\x1c", "\\x1d", "\\x1e", "\\x1f",
-                                     "\\N", "\\_", "\\L", "\\P",);
+                                     '\\0',   '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
+                                     '\\b',   '\\t',   '\\n',   '\\v',   '\\f',   '\\r',   '\\x0e', '\\x0f',
+                                     '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
+                                     '\\x18', '\\x19', '\\x1a', '\\e',   '\\x1c', '\\x1d', '\\x1e', '\\x1f',
+                                     '\\N', '\\_', '\\L', '\\P',);
 
     /**
      * Determines if a PHP value would require double quoting in YAML.
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.php b/core/vendor/symfony/yaml/Exception/DumpException.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.php
rename to core/vendor/symfony/yaml/Exception/DumpException.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.php b/core/vendor/symfony/yaml/Exception/ExceptionInterface.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.php
rename to core/vendor/symfony/yaml/Exception/ExceptionInterface.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php b/core/vendor/symfony/yaml/Exception/ParseException.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php
rename to core/vendor/symfony/yaml/Exception/ParseException.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.php b/core/vendor/symfony/yaml/Exception/RuntimeException.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.php
rename to core/vendor/symfony/yaml/Exception/RuntimeException.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php b/core/vendor/symfony/yaml/Inline.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
rename to core/vendor/symfony/yaml/Inline.php
diff --git a/core/vendor/symfony/yaml/LICENSE b/core/vendor/symfony/yaml/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..43028bc600f26ec5599ab339d83cd70f70dfcdab
--- /dev/null
+++ b/core/vendor/symfony/yaml/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2015 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php b/core/vendor/symfony/yaml/Parser.php
similarity index 99%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
rename to core/vendor/symfony/yaml/Parser.php
index 065e650b4c0905928f8de6cca5cb32ca2f5352ae..d72c7639c8337ef663dfc8472e35f82ea0f3d168 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
+++ b/core/vendor/symfony/yaml/Parser.php
@@ -93,7 +93,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
                 // array
                 if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                     $c = $this->getRealCurrentLineNb() + 1;
-                    $parser = new Parser($c);
+                    $parser = new self($c);
                     $parser->refs = &$this->refs;
                     $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                 } else {
@@ -102,7 +102,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
                     ) {
                         // this is a compact notation element, add to next block and parse
                         $c = $this->getRealCurrentLineNb();
-                        $parser = new Parser($c);
+                        $parser = new self($c);
                         $parser->refs = &$this->refs;
 
                         $block = $values['value'];
@@ -159,7 +159,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
                             $value = $this->getNextEmbedBlock();
                         }
                         $c = $this->getRealCurrentLineNb() + 1;
-                        $parser = new Parser($c);
+                        $parser = new self($c);
                         $parser->refs = &$this->refs;
                         $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap);
 
@@ -210,7 +210,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
                         }
                     } else {
                         $c = $this->getRealCurrentLineNb() + 1;
-                        $parser = new Parser($c);
+                        $parser = new self($c);
                         $parser->refs = &$this->refs;
                         $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                         // Spec: Keys MUST be unique; first one wins.
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/README.md b/core/vendor/symfony/yaml/README.md
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/README.md
rename to core/vendor/symfony/yaml/README.md
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore b/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php b/core/vendor/symfony/yaml/Tests/DumperTest.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php
rename to core/vendor/symfony/yaml/Tests/DumperTest.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsAnchorAlias.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsAnchorAlias.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsBasicTests.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsBasicTests.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsBlockMapping.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsBlockMapping.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsDocumentSeparator.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsDocumentSeparator.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsErrorTests.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsErrorTests.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsFlowCollections.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsFlowCollections.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsFoldedScalars.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsFoldedScalars.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsNullsAndEmpties.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsNullsAndEmpties.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsTypeTransfers.yml b/core/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsTypeTransfers.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/embededPhp.yml b/core/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/embededPhp.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/escapedCharacters.yml b/core/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/escapedCharacters.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/index.yml b/core/vendor/symfony/yaml/Tests/Fixtures/index.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/index.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/index.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfCompact.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfCompact.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfMergeKey.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfMergeKey.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfObjects.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfObjects.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfQuotes.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfQuotes.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfTests.yml b/core/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfTests.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/unindentedCollections.yml b/core/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/unindentedCollections.yml
rename to core/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php b/core/vendor/symfony/yaml/Tests/InlineTest.php
similarity index 99%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
rename to core/vendor/symfony/yaml/Tests/InlineTest.php
index bbff1760383ac75c3651751825848239f899ced9..320eb5072132bc349a1a70fd0edb2f88937a6f91 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
+++ b/core/vendor/symfony/yaml/Tests/InlineTest.php
@@ -222,8 +222,8 @@ public function getTestsForParse()
             array('{ foo  : bar, bar : foo,  false  :   false,  null  :   null,  integer :  12  }', array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
             array('{foo: \'bar\', bar: \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
             array('{\'foo\': \'bar\', "bar": \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
-            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', array('foo\'' => 'bar', "bar\"" => 'foo: bar')),
-            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', array('foo: ' => 'bar', "bar: " => 'foo: bar')),
+            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', array('foo\'' => 'bar', 'bar"' => 'foo: bar')),
+            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', array('foo: ' => 'bar', 'bar: ' => 'foo: bar')),
 
             // nested sequences and mappings
             array('[foo, [bar, foo]]', array('foo', array('bar', 'foo'))),
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php b/core/vendor/symfony/yaml/Tests/ParseExceptionTest.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php
rename to core/vendor/symfony/yaml/Tests/ParseExceptionTest.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php b/core/vendor/symfony/yaml/Tests/ParserTest.php
similarity index 100%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
rename to core/vendor/symfony/yaml/Tests/ParserTest.php
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/YamlTest.php b/core/vendor/symfony/yaml/Tests/YamlTest.php
similarity index 84%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/YamlTest.php
rename to core/vendor/symfony/yaml/Tests/YamlTest.php
index 633978d63bd5021ffd834e644724ec4d8896fb9a..a7261562d539c3b89e514f69c55f2d95518b8159 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/YamlTest.php
+++ b/core/vendor/symfony/yaml/Tests/YamlTest.php
@@ -21,6 +21,14 @@ public function testParseAndDump()
         $yml = Yaml::dump($data);
         $parsed = Yaml::parse($yml);
         $this->assertEquals($data, $parsed);
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testLegacyParseFromFile()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
 
         $filename = __DIR__.'/Fixtures/index.yml';
         $contents = file_get_contents($filename);
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Unescaper.php b/core/vendor/symfony/yaml/Unescaper.php
similarity index 92%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Unescaper.php
rename to core/vendor/symfony/yaml/Unescaper.php
index ffddd95c7bc77340cb778dc6ce2fb646825a0f4b..93206f923352f21470e20966bf348be1995d8753 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Unescaper.php
+++ b/core/vendor/symfony/yaml/Unescaper.php
@@ -19,13 +19,18 @@
  */
 class Unescaper
 {
-    // Parser and Inline assume UTF-8 encoding, so escaped Unicode characters
-    // must be converted to that encoding.
-    // @deprecated since 2.5, to be removed in 3.0
+    /**
+     * Parser and Inline assume UTF-8 encoding, so escaped Unicode characters
+     * must be converted to that encoding.
+     *
+     * @deprecated since version 2.5, to be removed in 3.0
+     * @internal
+     */
     const ENCODING = 'UTF-8';
 
-    // Regex fragment that matches an escaped character in a double quoted
-    // string.
+    /**
+     * Regex fragment that matches an escaped character in a double quoted string.
+     */
     const REGEX_ESCAPED_CHARACTER = "\\\\([0abt\tnvfre \\\"\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})";
 
     /**
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php b/core/vendor/symfony/yaml/Yaml.php
similarity index 83%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php
rename to core/vendor/symfony/yaml/Yaml.php
index 419226a2dd8a27d9f2049523f62a9c4912d558dc..e17698a07c74f9a64bcaa96c669b3c9d641eca09 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php
+++ b/core/vendor/symfony/yaml/Yaml.php
@@ -30,7 +30,7 @@ class Yaml
      *
      *  Usage:
      *  <code>
-     *   $array = Yaml::parse('config.yml');
+     *   $array = Yaml::parse(file_get_contents('config.yml'));
      *   print_r($array);
      *  </code>
      *
@@ -41,18 +41,23 @@ class Yaml
      * @param string $input                  Path to a YAML file or a string containing YAML
      * @param bool   $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
      * @param bool   $objectSupport          True if object support is enabled, false otherwise
+     * @param bool   $objectForMap           True if maps should return a stdClass instead of array()
      *
      * @return array The YAML converted to a PHP array
      *
      * @throws ParseException If the YAML is not valid
      *
+     * @deprecated The ability to pass file names to the Yaml::parse method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.
+     *
      * @api
      */
-    public static function parse($input, $exceptionOnInvalidType = false, $objectSupport = false)
+    public static function parse($input, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false)
     {
         // if input is a file, process it
         $file = '';
         if (strpos($input, "\n") === false && is_file($input)) {
+            trigger_error('The ability to pass file names to the '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.', E_USER_DEPRECATED);
+
             if (false === is_readable($input)) {
                 throw new ParseException(sprintf('Unable to parse "%s" as the file is not readable.', $input));
             }
@@ -64,7 +69,7 @@ public static function parse($input, $exceptionOnInvalidType = false, $objectSup
         $yaml = new Parser();
 
         try {
-            return $yaml->parse($input, $exceptionOnInvalidType, $objectSupport);
+            return $yaml->parse($input, $exceptionOnInvalidType, $objectSupport, $objectForMap);
         } catch (ParseException $e) {
             if ($file) {
                 $e->setParsedFile($file);
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json b/core/vendor/symfony/yaml/composer.json
similarity index 67%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
rename to core/vendor/symfony/yaml/composer.json
index b38eec29e9ac2e8ce2dc292aaec5156a00050112..b07b439c96ec4ad14290816e133b8b0bc478c270 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
+++ b/core/vendor/symfony/yaml/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Yaml Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,23 +12,22 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.9"
     },
     "require-dev": {
         "symfony/phpunit-bridge": "~2.7"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Component\\Yaml\\": "" }
+        "psr-4": { "Symfony\\Component\\Yaml\\": "" }
     },
-    "target-dir": "Symfony/Component/Yaml",
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist b/core/vendor/symfony/yaml/phpunit.xml.dist
similarity index 99%
rename from core/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist
rename to core/vendor/symfony/yaml/phpunit.xml.dist
index 8f7741fe393e6d2ffe5940ccb0e71a88b330b7c9..418b2c6c9ad5af438aff68e0000b473b5a369189 100644
--- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist
+++ b/core/vendor/symfony/yaml/phpunit.xml.dist
@@ -9,6 +9,7 @@
     <php>
         <ini name="error_reporting" value="-1" />
     </php>
+
     <testsuites>
         <testsuite name="Symfony Yaml Component Test Suite">
             <directory>./Tests/</directory>