diff --git a/composer.json b/composer.json
index 9db4826..50551f2 100644
--- a/composer.json
+++ b/composer.json
@@ -5,6 +5,7 @@
   "license": "GPL-2.0+",
   "require": {
     "symfony/class-loader": "2.2.0",
+    "symfony/css-selector": "2.2.0",
     "symfony/dependency-injection": "2.2.0",
     "symfony/event-dispatcher": "2.2.0",
     "symfony/http-foundation": "2.2.0",
diff --git a/composer.lock b/composer.lock
index 4d0f549..cb806f2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,5 +1,5 @@
 {
-    "hash": "6b1bf50f976af5d14628f38478885c0f",
+    "hash": "38d1ab23c2b13e64a2adb05b28535aa6",
     "packages": [
         {
             "name": "doctrine/common",
@@ -817,7 +817,7 @@
                 "database",
                 "routing"
             ],
-            "time": "2013-01-21 20:33:16"
+            "time": "2013-02-22 13:50:34"
         },
         {
             "name": "symfony/class-loader",
@@ -870,6 +870,53 @@
             "time": "2013-03-01 06:43:14"
         },
         {
+            "name": "symfony/css-selector",
+            "version": "v2.2.0",
+            "target-dir": "Symfony/Component/CssSelector",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/CssSelector.git",
+                "reference": "v2.2.0-RC3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/v2.2.0-RC3",
+                "reference": "v2.2.0-RC3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\CssSelector\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony CssSelector Component",
+            "homepage": "http://symfony.com",
+            "time": "2013-01-17 15:25:59"
+        },
+        {
             "name": "symfony/dependency-injection",
             "version": "v2.2.0",
             "target-dir": "Symfony/Component/DependencyInjection",
@@ -1468,5 +1515,11 @@
         "kriswallsmith/assetic": 15,
         "symfony-cmf/routing": 20,
         "easyrdf/easyrdf": 10
-    }
+    },
+    "platform": [
+
+    ],
+    "platform-dev": [
+
+    ]
 }
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index a5c34b3..42849ea 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -17,6 +17,7 @@
 use DOMXPath;
 use SimpleXMLElement;
 use Drupal\Core\Datetime\DrupalDateTime;
+use Symfony\Component\CssSelector\CssSelector;
 
 /**
  * Test case for typical Drupal tests.
@@ -1839,6 +1840,22 @@ protected function xpath($xpath, array $arguments = array()) {
   }
 
   /**
+   * Performs a CSS selection based search on the contents of the internal
+   * browser. The search is relative to the root element (HTML tag normally) of
+   * the page.
+   *
+   * @param $selector string
+   *   CSS selector to use in the search.
+   *
+   * @return \SimpleXMLElement
+   *   The return value of the xpath search performed after converting the css
+   *   selector to an XPath selector.
+   */
+  protected function cssSelect($selector) {
+    return $this->xpath(CssSelector::toXPath($selector));
+  }
+
+  /**
    * Get all option elements, including nested options, in a select.
    *
    * @param $element
diff --git a/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php b/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
index d3c77da..6ddee46 100644
--- a/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
+++ b/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
@@ -42,23 +42,13 @@ protected function setUp() {
   public function testTourFunctionality() {
     // Navigate to tour-test-1 and verify the tour_test_1 tip is found with appropriate classes.
     $this->drupalGet('tour-test-1');
-    $elements = $this->xpath('//li[@data-id=:data_id and @class=:classes and ./h2[contains(., :text)]]', array(
-      ':classes' => 'tip-module-tour-test tip-type-text tip-tour-test-1 even last',
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li.tip-module-tour-test.tip-type-text.tip-tour-test-1.even.last[data-id=tour-test-1] h2:contains('The first tip')");
     $this->assertEqual(count($elements), 1, 'Found English variant of tip 1.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-2',
-      ':text' => 'The quick brown fox',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 2.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'La pioggia cade in spagna',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('La pioggia cade in spagna')");
     $this->assertNotEqual(count($elements), 1, 'Did not find Italian variant of tip 1.');
 
     // Ensure that plugin's work.
@@ -66,16 +56,10 @@ public function testTourFunctionality() {
 
     // Navigate to tour-test-2/subpath and verify the tour_test_2 tip is found.
     $this->drupalGet('tour-test-2/subpath');
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-2',
-      ':text' => 'The quick brown fox',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertEqual(count($elements), 1, 'Found English variant of tip 2.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('The first tip')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 1.');
 
     // Enable Italian language and navigate to it/tour-test1 and verify italian
@@ -83,16 +67,10 @@ public function testTourFunctionality() {
     language_save(new Language(array('langcode' => 'it')));
     $this->drupalGet('it/tour-test-1');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'La pioggia cade in spagna',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('La pioggia cade in spagna')");
     $this->assertEqual(count($elements), 1, 'Found Italian variant of tip 1.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 1.');
 
     language_save(new Language(array('langcode' => 'en')));
@@ -130,18 +108,12 @@ public function testTourFunctionality() {
 
     // Navigate to tour-test-1 and verify the new tip is found.
     $this->drupalGet('tour-test-1');
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-code-test-1',
-      ':text' => 'The rain in spain',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-code-test-1] h2:contains('The rain in spain')");
     $this->assertEqual(count($elements), 1, 'Found the required tip markup for tip 4');
 
     // Verify that the weight sorting works by ensuring the lower weight item
     // (tip 4) has the 'End tour' button.
-    $elements = $this->xpath('//li[@data-id=:data_id and @data-text=:text]', array(
-      ':data_id' => 'tour-code-test-1',
-      ':text' => 'End tour',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-code-test-1][data-text='End tour']");
     $this->assertEqual(count($elements), 1, 'Found code tip was weighted last and had "End tour".');
 
     // Test hook_tour_alter().
diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php
index f77afa1..a7a0986 100644
--- a/core/vendor/autoload.php
+++ b/core/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInit7f0efddf867398398517e0ca6863b8f1::getLoader();
+return ComposerAutoloaderInitbac0e7aaffbd2d1f6390ac2b4cb07f28::getLoader();
diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php
index 060e183..5b2870f 100644
--- a/core/vendor/composer/autoload_classmap.php
+++ b/core/vendor/composer/autoload_classmap.php
@@ -3,350 +3,350 @@
 // autoload_classmap.php generated by Composer
 
 $vendorDir = dirname(__DIR__);
-$baseDir = dirname($vendorDir);
+$baseDir = dirname(dirname($vendorDir));
 
 return array(
-    'File_Iterator' => $baseDir . '/vendor/phpunit/php-file-iterator/File/Iterator.php',
-    'File_Iterator_Facade' => $baseDir . '/vendor/phpunit/php-file-iterator/File/Iterator/Facade.php',
-    'File_Iterator_Factory' => $baseDir . '/vendor/phpunit/php-file-iterator/File/Iterator/Factory.php',
-    'PHPUnit_Extensions_GroupTestSuite' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
-    'PHPUnit_Extensions_PhptTestCase' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
-    'PHPUnit_Extensions_PhptTestCase_Logger' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
-    'PHPUnit_Extensions_PhptTestSuite' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
-    'PHPUnit_Extensions_RepeatedTest' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
-    'PHPUnit_Extensions_TestDecorator' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
-    'PHPUnit_Extensions_TicketListener' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
-    'PHPUnit_Framework_Assert' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Assert.php',
-    'PHPUnit_Framework_AssertionFailedError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
-    'PHPUnit_Framework_Comparator' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
-    'PHPUnit_Framework_ComparatorFactory' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
-    'PHPUnit_Framework_Comparator_Array' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
-    'PHPUnit_Framework_Comparator_DOMDocument' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
-    'PHPUnit_Framework_Comparator_Double' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
-    'PHPUnit_Framework_Comparator_Exception' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
-    'PHPUnit_Framework_Comparator_MockObject' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
-    'PHPUnit_Framework_Comparator_Numeric' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
-    'PHPUnit_Framework_Comparator_Object' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
-    'PHPUnit_Framework_Comparator_Resource' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
-    'PHPUnit_Framework_Comparator_Scalar' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
-    'PHPUnit_Framework_Comparator_SplObjectStorage' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
-    'PHPUnit_Framework_Comparator_Type' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
-    'PHPUnit_Framework_ComparisonFailure' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
-    'PHPUnit_Framework_Constraint' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
-    'PHPUnit_Framework_Constraint_And' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
-    'PHPUnit_Framework_Constraint_ArrayHasKey' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
-    'PHPUnit_Framework_Constraint_Attribute' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
-    'PHPUnit_Framework_Constraint_Callback' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
-    'PHPUnit_Framework_Constraint_ClassHasAttribute' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
-    'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
-    'PHPUnit_Framework_Constraint_Composite' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
-    'PHPUnit_Framework_Constraint_Count' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
-    'PHPUnit_Framework_Constraint_Exception' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
-    'PHPUnit_Framework_Constraint_ExceptionCode' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
-    'PHPUnit_Framework_Constraint_ExceptionMessage' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
-    'PHPUnit_Framework_Constraint_FileExists' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
-    'PHPUnit_Framework_Constraint_GreaterThan' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
-    'PHPUnit_Framework_Constraint_IsAnything' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
-    'PHPUnit_Framework_Constraint_IsEmpty' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
-    'PHPUnit_Framework_Constraint_IsEqual' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
-    'PHPUnit_Framework_Constraint_IsFalse' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
-    'PHPUnit_Framework_Constraint_IsIdentical' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
-    'PHPUnit_Framework_Constraint_IsInstanceOf' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
-    'PHPUnit_Framework_Constraint_IsNull' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
-    'PHPUnit_Framework_Constraint_IsTrue' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
-    'PHPUnit_Framework_Constraint_IsType' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
-    'PHPUnit_Framework_Constraint_JsonMatches' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
-    'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
-    'PHPUnit_Framework_Constraint_LessThan' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
-    'PHPUnit_Framework_Constraint_Not' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
-    'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
-    'PHPUnit_Framework_Constraint_Or' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
-    'PHPUnit_Framework_Constraint_PCREMatch' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
-    'PHPUnit_Framework_Constraint_SameSize' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
-    'PHPUnit_Framework_Constraint_StringContains' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
-    'PHPUnit_Framework_Constraint_StringEndsWith' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
-    'PHPUnit_Framework_Constraint_StringMatches' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
-    'PHPUnit_Framework_Constraint_StringStartsWith' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
-    'PHPUnit_Framework_Constraint_TraversableContains' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
-    'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
-    'PHPUnit_Framework_Constraint_Xor' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
-    'PHPUnit_Framework_Error' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Error.php',
-    'PHPUnit_Framework_Error_Deprecated' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
-    'PHPUnit_Framework_Error_Notice' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
-    'PHPUnit_Framework_Error_Warning' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
-    'PHPUnit_Framework_Exception' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Exception.php',
-    'PHPUnit_Framework_ExpectationFailedException' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
-    'PHPUnit_Framework_IncompleteTest' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
-    'PHPUnit_Framework_IncompleteTestError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
-    'PHPUnit_Framework_MockObject_Builder_Identity' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
-    'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
-    'PHPUnit_Framework_MockObject_Builder_Match' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
-    'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
-    'PHPUnit_Framework_MockObject_Builder_Namespace' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
-    'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
-    'PHPUnit_Framework_MockObject_Builder_Stub' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
-    'PHPUnit_Framework_MockObject_Generator' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
-    'PHPUnit_Framework_MockObject_Invocation' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
-    'PHPUnit_Framework_MockObject_InvocationMocker' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
-    'PHPUnit_Framework_MockObject_Invocation_Object' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
-    'PHPUnit_Framework_MockObject_Invocation_Static' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
-    'PHPUnit_Framework_MockObject_Invokable' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
-    'PHPUnit_Framework_MockObject_Matcher' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
-    'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
-    'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
-    'PHPUnit_Framework_MockObject_Matcher_Invocation' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
-    'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
-    'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
-    'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
-    'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
-    'PHPUnit_Framework_MockObject_Matcher_MethodName' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
-    'PHPUnit_Framework_MockObject_Matcher_Parameters' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
-    'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
-    'PHPUnit_Framework_MockObject_MockBuilder' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
-    'PHPUnit_Framework_MockObject_MockObject' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
-    'PHPUnit_Framework_MockObject_Stub' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
-    'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
-    'PHPUnit_Framework_MockObject_Stub_Exception' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
-    'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
-    'PHPUnit_Framework_MockObject_Stub_Return' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
-    'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
-    'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
-    'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
-    'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
-    'PHPUnit_Framework_MockObject_Verifiable' => $baseDir . '/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
-    'PHPUnit_Framework_OutputError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
-    'PHPUnit_Framework_SelfDescribing' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
-    'PHPUnit_Framework_SkippedTest' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
-    'PHPUnit_Framework_SkippedTestError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
-    'PHPUnit_Framework_SkippedTestSuiteError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
-    'PHPUnit_Framework_SyntheticError' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
-    'PHPUnit_Framework_Test' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Test.php',
-    'PHPUnit_Framework_TestCase' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
-    'PHPUnit_Framework_TestFailure' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
-    'PHPUnit_Framework_TestListener' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
-    'PHPUnit_Framework_TestResult' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
-    'PHPUnit_Framework_TestSuite' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
-    'PHPUnit_Framework_TestSuite_DataProvider' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
-    'PHPUnit_Framework_Warning' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Framework/Warning.php',
-    'PHPUnit_Runner_BaseTestRunner' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
-    'PHPUnit_Runner_StandardTestSuiteLoader' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
-    'PHPUnit_Runner_TestSuiteLoader' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
-    'PHPUnit_Runner_Version' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Runner/Version.php',
-    'PHPUnit_TextUI_Command' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/TextUI/Command.php',
-    'PHPUnit_TextUI_ResultPrinter' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
-    'PHPUnit_TextUI_TestRunner' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
-    'PHPUnit_Util_Class' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Class.php',
-    'PHPUnit_Util_Configuration' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Configuration.php',
-    'PHPUnit_Util_DeprecatedFeature' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
-    'PHPUnit_Util_DeprecatedFeature_Logger' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
-    'PHPUnit_Util_Diff' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Diff.php',
-    'PHPUnit_Util_ErrorHandler' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
-    'PHPUnit_Util_Fileloader' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
-    'PHPUnit_Util_Filesystem' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
-    'PHPUnit_Util_Filter' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Filter.php',
-    'PHPUnit_Util_Getopt' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Getopt.php',
-    'PHPUnit_Util_GlobalState' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
-    'PHPUnit_Util_InvalidArgumentHelper' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
-    'PHPUnit_Util_Log_JSON' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
-    'PHPUnit_Util_Log_JUnit' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
-    'PHPUnit_Util_Log_TAP' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
-    'PHPUnit_Util_PHP' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/PHP.php',
-    'PHPUnit_Util_PHP_Default' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
-    'PHPUnit_Util_PHP_Windows' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
-    'PHPUnit_Util_Printer' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Printer.php',
-    'PHPUnit_Util_String' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/String.php',
-    'PHPUnit_Util_Test' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Test.php',
-    'PHPUnit_Util_TestDox_NamePrettifier' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
-    'PHPUnit_Util_TestDox_ResultPrinter' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
-    'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
-    'PHPUnit_Util_TestDox_ResultPrinter_Text' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
-    'PHPUnit_Util_TestSuiteIterator' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
-    'PHPUnit_Util_Type' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/Type.php',
-    'PHPUnit_Util_XML' => $baseDir . '/vendor/phpunit/phpunit/PHPUnit/Util/XML.php',
-    'PHP_CodeCoverage' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php',
-    'PHP_CodeCoverage_Driver' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
-    'PHP_CodeCoverage_Driver_Xdebug' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
-    'PHP_CodeCoverage_Exception' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
-    'PHP_CodeCoverage_Filter' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
-    'PHP_CodeCoverage_Report_Clover' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
-    'PHP_CodeCoverage_Report_Factory' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
-    'PHP_CodeCoverage_Report_HTML' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
-    'PHP_CodeCoverage_Report_HTML_Renderer' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
-    'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
-    'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
-    'PHP_CodeCoverage_Report_HTML_Renderer_File' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
-    'PHP_CodeCoverage_Report_Node' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
-    'PHP_CodeCoverage_Report_Node_Directory' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
-    'PHP_CodeCoverage_Report_Node_File' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
-    'PHP_CodeCoverage_Report_Node_Iterator' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
-    'PHP_CodeCoverage_Report_PHP' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
-    'PHP_CodeCoverage_Report_Text' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
-    'PHP_CodeCoverage_Util' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
-    'PHP_CodeCoverage_Util_InvalidArgumentHelper' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
-    'PHP_CodeCoverage_Version' => $baseDir . '/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
-    'PHP_Timer' => $baseDir . '/vendor/phpunit/php-timer/PHP/Timer.php',
-    'PHP_Token' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_TokenWithScope' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_TokenWithScopeAndVisibility' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ABSTRACT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_AMPERSAND' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_AND_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ARRAY' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ARRAY_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_AS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_AT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BACKTICK' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BAD_CHARACTER' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BOOLEAN_AND' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BOOLEAN_OR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BOOL_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_BREAK' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CALLABLE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CARET' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CASE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CATCH' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CHARACTER' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLASS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLASS_C' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLONE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLOSE_BRACKET' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLOSE_CURLY' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLOSE_SQUARE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CLOSE_TAG' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_COLON' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_COMMA' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_COMMENT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CONCAT_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CONST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CONSTANT_ENCAPSED_STRING' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CONTINUE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_CURLY_OPEN' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DEC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DECLARE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DEFAULT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DIR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DIV' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DIV_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DNUMBER' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DO' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOC_COMMENT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOLLAR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOUBLE_ARROW' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOUBLE_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOUBLE_COLON' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_DOUBLE_QUOTES' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ECHO' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ELSE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ELSEIF' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EMPTY' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENCAPSED_AND_WHITESPACE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDDECLARE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDFOR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDFOREACH' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDIF' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDSWITCH' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ENDWHILE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_END_HEREDOC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EVAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EXCLAMATION_MARK' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EXIT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_EXTENDS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FILE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FINAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FOR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FOREACH' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FUNCTION' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_FUNC_C' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_GLOBAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_GOTO' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_GT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_HALT_COMPILER' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IF' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IMPLEMENTS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INCLUDE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INCLUDE_ONCE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INLINE_HTML' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INSTANCEOF' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INSTEADOF' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INTERFACE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_INT_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_ISSET' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_GREATER_OR_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_IDENTICAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_NOT_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_NOT_IDENTICAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_IS_SMALLER_OR_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_Includes' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LINE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LIST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LNUMBER' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LOGICAL_AND' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LOGICAL_OR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LOGICAL_XOR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_LT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_METHOD_C' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_MINUS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_MINUS_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_MOD_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_MULT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_MUL_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_NAMESPACE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_NEW' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_NS_C' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_NS_SEPARATOR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_NUM_STRING' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OBJECT_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OBJECT_OPERATOR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OPEN_BRACKET' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OPEN_CURLY' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OPEN_SQUARE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OPEN_TAG' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OPEN_TAG_WITH_ECHO' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_OR_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PERCENT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PIPE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PLUS' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PLUS_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PRINT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PRIVATE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PROTECTED' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_PUBLIC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_QUESTION_MARK' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_REQUIRE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_REQUIRE_ONCE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_RETURN' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SEMICOLON' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SL_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SR_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_START_HEREDOC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_STATIC' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_STRING' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_STRING_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_STRING_VARNAME' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_SWITCH' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_Stream' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token/Stream.php',
-    'PHP_Token_Stream_CachingFactory' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
-    'PHP_Token_THROW' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_TILDE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_TRAIT' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_TRAIT_C' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_TRY' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_UNSET' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_UNSET_CAST' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_USE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_VAR' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_VARIABLE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_WHILE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_WHITESPACE' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'PHP_Token_XOR_EQUAL' => $baseDir . '/vendor/phpunit/php-token-stream/PHP/Token.php',
-    'SessionHandlerInterface' => $baseDir . '/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
-    'Text_Template' => $baseDir . '/vendor/phpunit/php-text-template/Text/Template.php',
+    'File_Iterator' => $baseDir . '/core/vendor/phpunit/php-file-iterator/File/Iterator.php',
+    'File_Iterator_Facade' => $baseDir . '/core/vendor/phpunit/php-file-iterator/File/Iterator/Facade.php',
+    'File_Iterator_Factory' => $baseDir . '/core/vendor/phpunit/php-file-iterator/File/Iterator/Factory.php',
+    'PHPUnit_Extensions_GroupTestSuite' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
+    'PHPUnit_Extensions_PhptTestCase' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
+    'PHPUnit_Extensions_PhptTestCase_Logger' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
+    'PHPUnit_Extensions_PhptTestSuite' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
+    'PHPUnit_Extensions_RepeatedTest' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
+    'PHPUnit_Extensions_TestDecorator' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
+    'PHPUnit_Extensions_TicketListener' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
+    'PHPUnit_Framework_Assert' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Assert.php',
+    'PHPUnit_Framework_AssertionFailedError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
+    'PHPUnit_Framework_Comparator' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
+    'PHPUnit_Framework_ComparatorFactory' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
+    'PHPUnit_Framework_Comparator_Array' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
+    'PHPUnit_Framework_Comparator_DOMDocument' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
+    'PHPUnit_Framework_Comparator_Double' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
+    'PHPUnit_Framework_Comparator_Exception' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
+    'PHPUnit_Framework_Comparator_MockObject' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
+    'PHPUnit_Framework_Comparator_Numeric' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
+    'PHPUnit_Framework_Comparator_Object' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
+    'PHPUnit_Framework_Comparator_Resource' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
+    'PHPUnit_Framework_Comparator_Scalar' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
+    'PHPUnit_Framework_Comparator_SplObjectStorage' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
+    'PHPUnit_Framework_Comparator_Type' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
+    'PHPUnit_Framework_ComparisonFailure' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
+    'PHPUnit_Framework_Constraint' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
+    'PHPUnit_Framework_Constraint_And' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
+    'PHPUnit_Framework_Constraint_ArrayHasKey' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
+    'PHPUnit_Framework_Constraint_Attribute' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
+    'PHPUnit_Framework_Constraint_Callback' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
+    'PHPUnit_Framework_Constraint_ClassHasAttribute' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
+    'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
+    'PHPUnit_Framework_Constraint_Composite' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
+    'PHPUnit_Framework_Constraint_Count' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
+    'PHPUnit_Framework_Constraint_Exception' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
+    'PHPUnit_Framework_Constraint_ExceptionCode' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
+    'PHPUnit_Framework_Constraint_ExceptionMessage' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
+    'PHPUnit_Framework_Constraint_FileExists' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
+    'PHPUnit_Framework_Constraint_GreaterThan' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
+    'PHPUnit_Framework_Constraint_IsAnything' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
+    'PHPUnit_Framework_Constraint_IsEmpty' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
+    'PHPUnit_Framework_Constraint_IsEqual' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
+    'PHPUnit_Framework_Constraint_IsFalse' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
+    'PHPUnit_Framework_Constraint_IsIdentical' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
+    'PHPUnit_Framework_Constraint_IsInstanceOf' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
+    'PHPUnit_Framework_Constraint_IsNull' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
+    'PHPUnit_Framework_Constraint_IsTrue' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
+    'PHPUnit_Framework_Constraint_IsType' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
+    'PHPUnit_Framework_Constraint_JsonMatches' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
+    'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
+    'PHPUnit_Framework_Constraint_LessThan' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
+    'PHPUnit_Framework_Constraint_Not' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
+    'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
+    'PHPUnit_Framework_Constraint_Or' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
+    'PHPUnit_Framework_Constraint_PCREMatch' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
+    'PHPUnit_Framework_Constraint_SameSize' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
+    'PHPUnit_Framework_Constraint_StringContains' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
+    'PHPUnit_Framework_Constraint_StringEndsWith' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
+    'PHPUnit_Framework_Constraint_StringMatches' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
+    'PHPUnit_Framework_Constraint_StringStartsWith' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
+    'PHPUnit_Framework_Constraint_TraversableContains' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
+    'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
+    'PHPUnit_Framework_Constraint_Xor' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
+    'PHPUnit_Framework_Error' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Error.php',
+    'PHPUnit_Framework_Error_Deprecated' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
+    'PHPUnit_Framework_Error_Notice' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
+    'PHPUnit_Framework_Error_Warning' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
+    'PHPUnit_Framework_Exception' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Exception.php',
+    'PHPUnit_Framework_ExpectationFailedException' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
+    'PHPUnit_Framework_IncompleteTest' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
+    'PHPUnit_Framework_IncompleteTestError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
+    'PHPUnit_Framework_MockObject_Builder_Identity' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
+    'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
+    'PHPUnit_Framework_MockObject_Builder_Match' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
+    'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
+    'PHPUnit_Framework_MockObject_Builder_Namespace' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
+    'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
+    'PHPUnit_Framework_MockObject_Builder_Stub' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
+    'PHPUnit_Framework_MockObject_Generator' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
+    'PHPUnit_Framework_MockObject_Invocation' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
+    'PHPUnit_Framework_MockObject_InvocationMocker' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
+    'PHPUnit_Framework_MockObject_Invocation_Object' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
+    'PHPUnit_Framework_MockObject_Invocation_Static' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
+    'PHPUnit_Framework_MockObject_Invokable' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
+    'PHPUnit_Framework_MockObject_Matcher' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
+    'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
+    'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
+    'PHPUnit_Framework_MockObject_Matcher_Invocation' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
+    'PHPUnit_Framework_MockObject_Matcher_MethodName' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
+    'PHPUnit_Framework_MockObject_Matcher_Parameters' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
+    'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
+    'PHPUnit_Framework_MockObject_MockBuilder' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
+    'PHPUnit_Framework_MockObject_MockObject' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
+    'PHPUnit_Framework_MockObject_Stub' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
+    'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
+    'PHPUnit_Framework_MockObject_Stub_Exception' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
+    'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
+    'PHPUnit_Framework_MockObject_Stub_Return' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
+    'PHPUnit_Framework_MockObject_Verifiable' => $baseDir . '/core/vendor/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
+    'PHPUnit_Framework_OutputError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
+    'PHPUnit_Framework_SelfDescribing' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
+    'PHPUnit_Framework_SkippedTest' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
+    'PHPUnit_Framework_SkippedTestError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
+    'PHPUnit_Framework_SkippedTestSuiteError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
+    'PHPUnit_Framework_SyntheticError' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
+    'PHPUnit_Framework_Test' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Test.php',
+    'PHPUnit_Framework_TestCase' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
+    'PHPUnit_Framework_TestFailure' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
+    'PHPUnit_Framework_TestListener' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
+    'PHPUnit_Framework_TestResult' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
+    'PHPUnit_Framework_TestSuite' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
+    'PHPUnit_Framework_TestSuite_DataProvider' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
+    'PHPUnit_Framework_Warning' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Framework/Warning.php',
+    'PHPUnit_Runner_BaseTestRunner' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
+    'PHPUnit_Runner_StandardTestSuiteLoader' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
+    'PHPUnit_Runner_TestSuiteLoader' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
+    'PHPUnit_Runner_Version' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Runner/Version.php',
+    'PHPUnit_TextUI_Command' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/TextUI/Command.php',
+    'PHPUnit_TextUI_ResultPrinter' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
+    'PHPUnit_TextUI_TestRunner' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
+    'PHPUnit_Util_Class' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Class.php',
+    'PHPUnit_Util_Configuration' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Configuration.php',
+    'PHPUnit_Util_DeprecatedFeature' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
+    'PHPUnit_Util_DeprecatedFeature_Logger' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
+    'PHPUnit_Util_Diff' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Diff.php',
+    'PHPUnit_Util_ErrorHandler' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
+    'PHPUnit_Util_Fileloader' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
+    'PHPUnit_Util_Filesystem' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
+    'PHPUnit_Util_Filter' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Filter.php',
+    'PHPUnit_Util_Getopt' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Getopt.php',
+    'PHPUnit_Util_GlobalState' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
+    'PHPUnit_Util_InvalidArgumentHelper' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
+    'PHPUnit_Util_Log_JSON' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
+    'PHPUnit_Util_Log_JUnit' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
+    'PHPUnit_Util_Log_TAP' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
+    'PHPUnit_Util_PHP' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/PHP.php',
+    'PHPUnit_Util_PHP_Default' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
+    'PHPUnit_Util_PHP_Windows' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
+    'PHPUnit_Util_Printer' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Printer.php',
+    'PHPUnit_Util_String' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/String.php',
+    'PHPUnit_Util_Test' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Test.php',
+    'PHPUnit_Util_TestDox_NamePrettifier' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
+    'PHPUnit_Util_TestDox_ResultPrinter' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
+    'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
+    'PHPUnit_Util_TestDox_ResultPrinter_Text' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
+    'PHPUnit_Util_TestSuiteIterator' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
+    'PHPUnit_Util_Type' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/Type.php',
+    'PHPUnit_Util_XML' => $baseDir . '/core/vendor/phpunit/phpunit/PHPUnit/Util/XML.php',
+    'PHP_CodeCoverage' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php',
+    'PHP_CodeCoverage_Driver' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
+    'PHP_CodeCoverage_Driver_Xdebug' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
+    'PHP_CodeCoverage_Exception' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
+    'PHP_CodeCoverage_Filter' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
+    'PHP_CodeCoverage_Report_Clover' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
+    'PHP_CodeCoverage_Report_Factory' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
+    'PHP_CodeCoverage_Report_HTML' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_File' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
+    'PHP_CodeCoverage_Report_Node' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
+    'PHP_CodeCoverage_Report_Node_Directory' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
+    'PHP_CodeCoverage_Report_Node_File' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
+    'PHP_CodeCoverage_Report_Node_Iterator' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
+    'PHP_CodeCoverage_Report_PHP' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
+    'PHP_CodeCoverage_Report_Text' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
+    'PHP_CodeCoverage_Util' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
+    'PHP_CodeCoverage_Util_InvalidArgumentHelper' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
+    'PHP_CodeCoverage_Version' => $baseDir . '/core/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
+    'PHP_Timer' => $baseDir . '/core/vendor/phpunit/php-timer/PHP/Timer.php',
+    'PHP_Token' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_TokenWithScope' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_TokenWithScopeAndVisibility' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ABSTRACT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AMPERSAND' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AND_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ARRAY' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ARRAY_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BACKTICK' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BAD_CHARACTER' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOLEAN_AND' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOLEAN_OR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOL_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BREAK' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CALLABLE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CARET' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CASE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CATCH' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CHARACTER' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLASS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLASS_C' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLONE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_BRACKET' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_CURLY' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_SQUARE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_TAG' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COLON' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COMMA' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COMMENT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONCAT_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONSTANT_ENCAPSED_STRING' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONTINUE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CURLY_OPEN' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DEC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DECLARE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DEFAULT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIV' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIV_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DNUMBER' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DO' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOC_COMMENT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOLLAR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_ARROW' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_COLON' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_QUOTES' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ECHO' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ELSE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ELSEIF' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EMPTY' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENCAPSED_AND_WHITESPACE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDDECLARE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDFOR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDFOREACH' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDIF' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDSWITCH' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDWHILE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_END_HEREDOC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EVAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXCLAMATION_MARK' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXIT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXTENDS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FILE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FINAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FOR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FOREACH' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FUNCTION' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FUNC_C' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GLOBAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GOTO' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_HALT_COMPILER' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IF' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IMPLEMENTS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INCLUDE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INCLUDE_ONCE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INLINE_HTML' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INSTANCEOF' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INSTEADOF' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INTERFACE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INT_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ISSET' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_GREATER_OR_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_IDENTICAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_NOT_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_NOT_IDENTICAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_SMALLER_OR_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_Includes' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LINE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LIST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LNUMBER' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_AND' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_OR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_XOR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_METHOD_C' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MINUS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MINUS_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MOD_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MULT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MUL_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NAMESPACE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NEW' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NS_C' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NS_SEPARATOR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NUM_STRING' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OBJECT_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OBJECT_OPERATOR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_BRACKET' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_CURLY' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_SQUARE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_TAG' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_TAG_WITH_ECHO' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OR_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PERCENT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PIPE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PLUS' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PLUS_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PRINT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PRIVATE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PROTECTED' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PUBLIC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_QUESTION_MARK' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_REQUIRE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_REQUIRE_ONCE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_RETURN' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SEMICOLON' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SL_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SR_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_START_HEREDOC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STATIC' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING_VARNAME' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SWITCH' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_Stream' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token/Stream.php',
+    'PHP_Token_Stream_CachingFactory' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
+    'PHP_Token_THROW' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TILDE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRAIT' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRAIT_C' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRY' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_UNSET' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_UNSET_CAST' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_USE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_VAR' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_VARIABLE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_WHILE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_WHITESPACE' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_XOR_EQUAL' => $baseDir . '/core/vendor/phpunit/php-token-stream/PHP/Token.php',
+    'SessionHandlerInterface' => $baseDir . '/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
+    'Text_Template' => $baseDir . '/core/vendor/phpunit/php-text-template/Text/Template.php',
 );
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 3d8eaaf..415c483 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -3,7 +3,7 @@
 // autoload_namespaces.php generated by Composer
 
 $vendorDir = dirname(__DIR__);
-$baseDir = dirname($vendorDir);
+$baseDir = dirname(dirname($vendorDir));
 
 return array(
     'Drupal\\Driver' => $baseDir . '/../drivers/lib/',
@@ -20,6 +20,7 @@
     'Symfony\\Component\\HttpFoundation\\' => $vendorDir . '/symfony/http-foundation/',
     'Symfony\\Component\\EventDispatcher\\' => $vendorDir . '/symfony/event-dispatcher/',
     'Symfony\\Component\\DependencyInjection\\' => $vendorDir . '/symfony/dependency-injection/',
+    'Symfony\\Component\\CssSelector\\' => $vendorDir . '/symfony/css-selector/',
     'Symfony\\Component\\ClassLoader\\' => $vendorDir . '/symfony/class-loader/',
     'Symfony\\Cmf\\Component\\Routing' => $vendorDir . '/symfony-cmf/routing/',
     'Psr\\Log\\' => $vendorDir . '/psr/log/',
diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php
index 56de95f..a29a4a9 100644
--- a/core/vendor/composer/autoload_real.php
+++ b/core/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php generated by Composer
 
-class ComposerAutoloaderInit7f0efddf867398398517e0ca6863b8f1
+class ComposerAutoloaderInitbac0e7aaffbd2d1f6390ac2b4cb07f28
 {
     private static $loader;
 
@@ -19,12 +19,12 @@ public static function getLoader()
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit7f0efddf867398398517e0ca6863b8f1', 'loadClassLoader'));
+        spl_autoload_register(array('ComposerAutoloaderInitbac0e7aaffbd2d1f6390ac2b4cb07f28', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit7f0efddf867398398517e0ca6863b8f1', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInitbac0e7aaffbd2d1f6390ac2b4cb07f28', 'loadClassLoader'));
 
         $vendorDir = dirname(__DIR__);
-        $baseDir = dirname($vendorDir);
+        $baseDir = dirname(dirname($vendorDir));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         array_push($includePaths, get_include_path());
diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php
index 533f1c8..3916e92 100644
--- a/core/vendor/composer/include_paths.php
+++ b/core/vendor/composer/include_paths.php
@@ -3,7 +3,7 @@
 // include_paths.php generated by Composer
 
 $vendorDir = dirname(__DIR__);
-$baseDir = dirname($vendorDir);
+$baseDir = dirname(dirname($vendorDir));
 
 return array(
     $vendorDir . '/phpunit/php-text-template/',
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index c66ffb3..c48e22b 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1509,5 +1509,54 @@
             "http",
             "http client"
         ]
+    },
+    {
+        "name": "symfony/css-selector",
+        "version": "v2.2.0",
+        "version_normalized": "2.2.0.0",
+        "target-dir": "Symfony/Component/CssSelector",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "v2.2.0-RC3"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/v2.2.0-RC3",
+            "reference": "v2.2.0-RC3",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2013-01-17 15:25:59",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.2-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\CssSelector\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony CssSelector Component",
+        "homepage": "http://symfony.com"
     }
 ]
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore
new file mode 100644
index 0000000..44de97a
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/.gitignore
@@ -0,0 +1,4 @@
+vendor/
+composer.lock
+phpunit.xml
+
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CHANGELOG.md b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CHANGELOG.md
new file mode 100644
index 0000000..be10abe
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CHANGELOG.md
@@ -0,0 +1,7 @@
+CHANGELOG
+=========
+
+2.1.0
+-----
+
+ * none
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
new file mode 100644
index 0000000..f624fff
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
@@ -0,0 +1,322 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector;
+
+use Symfony\Component\CssSelector\Exception\ParseException;
+
+/**
+ * CssSelector is the main entry point of the component and can convert CSS
+ * selectors to XPath expressions.
+ *
+ * $xpath = CssSelector::toXpath('h1.foo');
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class CssSelector
+{
+    /**
+     * Translates a CSS expression to its XPath equivalent.
+     * Optionally, a prefix can be added to the resulting XPath
+     * expression with the $prefix parameter.
+     *
+     * @param mixed  $cssExpr The CSS expression.
+     * @param string $prefix  An optional prefix for the XPath expression.
+     *
+     * @return string
+     *
+     * @throws ParseException When got None for xpath expression
+     *
+     * @api
+     */
+    public static function toXPath($cssExpr, $prefix = 'descendant-or-self::')
+    {
+        if (is_string($cssExpr)) {
+            if (!$cssExpr) {
+                return $prefix.'*';
+            }
+
+            if (preg_match('#^\w+\s*$#u', $cssExpr, $match)) {
+                return $prefix.trim($match[0]);
+            }
+
+            if (preg_match('~^(\w*)#(\w+)\s*$~u', $cssExpr, $match)) {
+                return sprintf("%s%s[@id = '%s']", $prefix, $match[1] ? $match[1] : '*', $match[2]);
+            }
+
+            if (preg_match('#^(\w*)\.(\w+)\s*$#u', $cssExpr, $match)) {
+                return sprintf("%s%s[contains(concat(' ', normalize-space(@class), ' '), ' %s ')]", $prefix, $match[1] ? $match[1] : '*', $match[2]);
+            }
+
+            $parser = new self();
+            $cssExpr = $parser->parse($cssExpr);
+        }
+
+        $expr = $cssExpr->toXpath();
+
+        // @codeCoverageIgnoreStart
+        if (!$expr) {
+            throw new ParseException(sprintf('Got None for xpath expression from %s.', $cssExpr));
+        }
+        // @codeCoverageIgnoreEnd
+
+        if ($prefix) {
+            $expr->addPrefix($prefix);
+        }
+
+        return (string) $expr;
+    }
+
+    /**
+     * Parses an expression and returns the Node object that represents
+     * the parsed expression.
+     *
+     * @param string $string The expression to parse
+     *
+     * @return Node\NodeInterface
+     *
+     * @throws \Exception When tokenizer throws it while parsing
+     */
+    public function parse($string)
+    {
+        $tokenizer = new Tokenizer();
+
+        $stream = new TokenStream($tokenizer->tokenize($string), $string);
+
+        try {
+            return $this->parseSelectorGroup($stream);
+        } catch (\Exception $e) {
+            $class = get_class($e);
+
+            throw new $class(sprintf('%s at %s -> %s', $e->getMessage(), implode($stream->getUsed(), ''), $stream->peek()), 0, $e);
+        }
+    }
+
+    /**
+     * Parses a selector group contained in $stream and returns
+     * the Node object that represents the expression.
+     *
+     * @param TokenStream $stream The stream to parse.
+     *
+     * @return Node\NodeInterface
+     */
+    private function parseSelectorGroup($stream)
+    {
+        $result = array();
+        while (true) {
+            $result[] = $this->parseSelector($stream);
+            if ($stream->peek() == ',') {
+                $stream->next();
+            } else {
+                break;
+            }
+        }
+
+        if (count($result) == 1) {
+            return $result[0];
+        }
+
+        return new Node\OrNode($result);
+    }
+
+    /**
+     * Parses a selector contained in $stream and returns the Node
+     * object that represents it.
+     *
+     * @param TokenStream $stream The stream containing the selector.
+     *
+     * @return Node\NodeInterface
+     *
+     * @throws ParseException When expected selector but got something else
+     */
+    private function parseSelector($stream)
+    {
+        $result = $this->parseSimpleSelector($stream);
+
+        while (true) {
+            $peek = $stream->peek();
+            if (',' == $peek || null === $peek) {
+                return $result;
+            } elseif (in_array($peek, array('+', '>', '~'))) {
+                // A combinator
+                $combinator = (string) $stream->next();
+
+                // Ignore optional whitespace after a combinator
+                while (' ' == $stream->peek()) {
+                    $stream->next();
+                }
+            } else {
+                $combinator = ' ';
+            }
+            $consumed = count($stream->getUsed());
+            $nextSelector = $this->parseSimpleSelector($stream);
+            if ($consumed == count($stream->getUsed())) {
+                throw new ParseException(sprintf("Expected selector, got '%s'", $stream->peek()));
+            }
+
+            $result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Parses a simple selector (the current token) from $stream and returns
+     * the resulting Node object.
+     *
+     * @param TokenStream $stream The stream containing the selector.
+     *
+     * @return Node\NodeInterface
+     *
+     * @throws ParseException When expected symbol but got something else
+     */
+    private function parseSimpleSelector($stream)
+    {
+        $peek = $stream->peek();
+        if ('*' != $peek && !$peek->isType('Symbol')) {
+            $element = $namespace = '*';
+        } else {
+            $next = $stream->next();
+            if ('*' != $next && !$next->isType('Symbol')) {
+                throw new ParseException(sprintf("Expected symbol, got '%s'", $next));
+            }
+
+            if ($stream->peek() == '|') {
+                $namespace = $next;
+                $stream->next();
+                $element = $stream->next();
+                if ('*' != $element && !$next->isType('Symbol')) {
+                    throw new ParseException(sprintf("Expected symbol, got '%s'", $next));
+                }
+            } else {
+                $namespace = '*';
+                $element = $next;
+            }
+        }
+
+        $result = new Node\ElementNode($namespace, $element);
+        $hasHash = false;
+        while (true) {
+            $peek = $stream->peek();
+            if ('#' == $peek) {
+                if ($hasHash) {
+                    /* You can't have two hashes
+                        (FIXME: is there some more general rule I'm missing?) */
+                    // @codeCoverageIgnoreStart
+                    break;
+                    // @codeCoverageIgnoreEnd
+                }
+                $stream->next();
+                $result = new Node\HashNode($result, $stream->next());
+                $hasHash = true;
+
+                continue;
+            } elseif ('.' == $peek) {
+                $stream->next();
+                $result = new Node\ClassNode($result, $stream->next());
+
+                continue;
+            } elseif ('[' == $peek) {
+                $stream->next();
+                $result = $this->parseAttrib($result, $stream);
+                $next = $stream->next();
+                if (']' != $next) {
+                    throw new ParseException(sprintf("] expected, got '%s'", $next));
+                }
+
+                continue;
+            } elseif (':' == $peek || '::' == $peek) {
+                $type = $stream->next();
+                $ident = $stream->next();
+                if (!$ident || !$ident->isType('Symbol')) {
+                    throw new ParseException(sprintf("Expected symbol, got '%s'", $ident));
+                }
+
+                if ($stream->peek() == '(') {
+                    $stream->next();
+                    $peek = $stream->peek();
+                    if ($peek->isType('String')) {
+                        $selector = $stream->next();
+                    } elseif ($peek->isType('Symbol') && is_int($peek)) {
+                        $selector = intval($stream->next());
+                    } else {
+                        // FIXME: parseSimpleSelector, or selector, or...?
+                        $selector = $this->parseSimpleSelector($stream);
+                    }
+                    $next = $stream->next();
+                    if (')' != $next) {
+                        throw new ParseException(sprintf("Expected ')', got '%s' and '%s'", $next, $selector));
+                    }
+
+                    $result = new Node\FunctionNode($result, $type, $ident, $selector);
+                } else {
+                    $result = new Node\PseudoNode($result, $type, $ident);
+                }
+
+                continue;
+            } else {
+                if (' ' == $peek) {
+                    $stream->next();
+                }
+
+                break;
+            }
+            // FIXME: not sure what "negation" is
+        }
+
+        return $result;
+    }
+
+    /**
+     * Parses an attribute from a selector contained in $stream and returns
+     * the resulting AttribNode object.
+     *
+     * @param Node\NodeInterface $selector The selector object whose attribute
+     *                                      is to be parsed.
+     * @param TokenStream $stream The container token stream.
+     *
+     * @return Node\AttribNode
+     *
+     * @throws ParseException When encountered unexpected selector
+     */
+    private function parseAttrib($selector, $stream)
+    {
+        $attrib = $stream->next();
+        if ($stream->peek() == '|') {
+            $namespace = $attrib;
+            $stream->next();
+            $attrib = $stream->next();
+        } else {
+            $namespace = '*';
+        }
+
+        if ($stream->peek() == ']') {
+            return new Node\AttribNode($selector, $namespace, $attrib, 'exists', null);
+        }
+
+        $op = $stream->next();
+        if (!in_array($op, array('^=', '$=', '*=', '=', '~=', '|=', '!='))) {
+            throw new ParseException(sprintf("Operator expected, got '%s'", $op));
+        }
+
+        $value = $stream->next();
+        if (!$value->isType('Symbol') && !$value->isType('String')) {
+            throw new ParseException(sprintf("Expected string or symbol, got '%s'", $value));
+        }
+
+        return new Node\AttribNode($selector, $namespace, $attrib, $op, $value);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ParseException.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ParseException.php
new file mode 100644
index 0000000..38206c2
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ParseException.php
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Exception;
+
+/**
+ * ParseException is thrown when a CSS selector syntax is not valid.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ParseException extends \Exception
+{
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/LICENSE b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/LICENSE
new file mode 100644
index 0000000..88a57f8
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2013 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/css-selector/Symfony/Component/CssSelector/Node/AttribNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttribNode.php
new file mode 100644
index 0000000..b89606e
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttribNode.php
@@ -0,0 +1,131 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+use Symfony\Component\CssSelector\XPathExpr;
+use Symfony\Component\CssSelector\Exception\ParseException;
+
+/**
+ * AttribNode represents a "selector[namespace|attrib operator value]" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class AttribNode implements NodeInterface
+{
+    protected $selector;
+    protected $namespace;
+    protected $attrib;
+    protected $operator;
+    protected $value;
+
+    /**
+     * Constructor.
+     *
+     * @param NodeInterface $selector  The XPath selector
+     * @param string        $namespace The namespace
+     * @param string        $attrib    The attribute
+     * @param string        $operator  The operator
+     * @param string        $value     The value
+     */
+    public function __construct($selector, $namespace, $attrib, $operator, $value)
+    {
+        $this->selector = $selector;
+        $this->namespace = $namespace;
+        $this->attrib = $attrib;
+        $this->operator = $operator;
+        $this->value = $value;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        if ($this->operator == 'exists') {
+            return sprintf('%s[%s[%s]]', __CLASS__, $this->selector, $this->formatAttrib());
+        }
+
+        return sprintf('%s[%s[%s %s %s]]', __CLASS__, $this->selector, $this->formatAttrib(), $this->operator, $this->value);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function toXpath()
+    {
+        $path = $this->selector->toXpath();
+        $attrib = $this->xpathAttrib();
+        $value = $this->value;
+        if ($this->operator == 'exists') {
+            $path->addCondition($attrib);
+        } elseif ($this->operator == '=') {
+            $path->addCondition(sprintf('%s = %s', $attrib, XPathExpr::xpathLiteral($value)));
+        } elseif ($this->operator == '!=') {
+            // FIXME: this seems like a weird hack...
+            if ($value) {
+                $path->addCondition(sprintf('not(%s) or %s != %s', $attrib, $attrib, XPathExpr::xpathLiteral($value)));
+            } else {
+                $path->addCondition(sprintf('%s != %s', $attrib, XPathExpr::xpathLiteral($value)));
+            }
+            // path.addCondition('%s != %s' % (attrib, xpathLiteral(value)))
+        } elseif ($this->operator == '~=') {
+            $path->addCondition(sprintf("contains(concat(' ', normalize-space(%s), ' '), %s)", $attrib, XPathExpr::xpathLiteral(' '.$value.' ')));
+        } elseif ($this->operator == '|=') {
+            // Weird, but true...
+            $path->addCondition(sprintf('%s = %s or starts-with(%s, %s)', $attrib, XPathExpr::xpathLiteral($value), $attrib, XPathExpr::xpathLiteral($value.'-')));
+        } elseif ($this->operator == '^=') {
+            $path->addCondition(sprintf('starts-with(%s, %s)', $attrib, XPathExpr::xpathLiteral($value)));
+        } elseif ($this->operator == '$=') {
+            // Oddly there is a starts-with in XPath 1.0, but not ends-with
+            $path->addCondition(sprintf('substring(%s, string-length(%s)-%s) = %s', $attrib, $attrib, strlen($value) - 1, XPathExpr::xpathLiteral($value)));
+        } elseif ($this->operator == '*=') {
+            // FIXME: case sensitive?
+            $path->addCondition(sprintf('contains(%s, %s)', $attrib, XPathExpr::xpathLiteral($value)));
+        } else {
+            throw new ParseException(sprintf('Unknown operator: %s', $this->operator));
+        }
+
+        return $path;
+    }
+
+    /**
+     * Returns the XPath Attribute
+     *
+     * @return string The XPath attribute
+     */
+    protected function xpathAttrib()
+    {
+        // FIXME: if attrib is *?
+        if ($this->namespace == '*') {
+            return '@'.$this->attrib;
+        }
+
+        return sprintf('@%s:%s', $this->namespace, $this->attrib);
+    }
+
+    /**
+     * Returns a formatted attribute
+     *
+     * @return string The formatted attribute
+     */
+    protected function formatAttrib()
+    {
+        if ($this->namespace == '*') {
+            return $this->attrib;
+        }
+
+        return sprintf('%s|%s', $this->namespace, $this->attrib);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ClassNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ClassNode.php
new file mode 100644
index 0000000..014aa80
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ClassNode.php
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+use Symfony\Component\CssSelector\XPathExpr;
+
+/**
+ * ClassNode represents a "selector.className" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ClassNode implements NodeInterface
+{
+    protected $selector;
+    protected $className;
+
+    /**
+     * The constructor.
+     *
+     * @param NodeInterface $selector  The XPath Selector
+     * @param string        $className The class name
+     */
+    public function __construct($selector, $className)
+    {
+        $this->selector = $selector;
+        $this->className = $className;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s[%s.%s]', __CLASS__, $this->selector, $this->className);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function toXpath()
+    {
+        $selXpath = $this->selector->toXpath();
+        $selXpath->addCondition(sprintf("contains(concat(' ', normalize-space(@class), ' '), %s)", XPathExpr::xpathLiteral(' '.$this->className.' ')));
+
+        return $selXpath;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php
new file mode 100644
index 0000000..13e3927
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/CombinedSelectorNode.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\CssSelector\Node;
+
+use Symfony\Component\CssSelector\Exception\ParseException;
+
+/**
+ * CombinedSelectorNode represents a combinator node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class CombinedSelectorNode implements NodeInterface
+{
+    protected static $methodMapping = array(
+        ' ' => 'descendant',
+        '>' => 'child',
+        '+' => 'direct_adjacent',
+        '~' => 'indirect_adjacent',
+    );
+
+    protected $selector;
+    protected $combinator;
+    protected $subselector;
+
+    /**
+     * The constructor.
+     *
+     * @param NodeInterface $selector    The XPath selector
+     * @param string        $combinator  The combinator
+     * @param NodeInterface $subselector The sub XPath selector
+     */
+    public function __construct($selector, $combinator, $subselector)
+    {
+        $this->selector = $selector;
+        $this->combinator = $combinator;
+        $this->subselector = $subselector;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        $comb = $this->combinator == ' ' ? '<followed>' : $this->combinator;
+
+        return sprintf('%s[%s %s %s]', __CLASS__, $this->selector, $comb, $this->subselector);
+    }
+
+    /**
+     * {@inheritDoc}
+     * @throws ParseException When unknown combinator is found
+     */
+    public function toXpath()
+    {
+        if (!isset(self::$methodMapping[$this->combinator])) {
+            throw new ParseException(sprintf('Unknown combinator: %s', $this->combinator));
+        }
+
+        $method = '_xpath_'.self::$methodMapping[$this->combinator];
+        $path = $this->selector->toXpath();
+
+        return $this->$method($path, $this->subselector);
+    }
+
+    /**
+     * Joins a NodeInterface into the XPath of this object.
+     *
+     * @param XPathExpr     $xpath The XPath expression for this object
+     * @param NodeInterface $sub   The NodeInterface object to add
+     *
+     * @return XPathExpr An XPath instance
+     */
+    protected function _xpath_descendant($xpath, $sub)
+    {
+        // when sub is a descendant in any way of xpath
+        $xpath->join('/descendant::', $sub->toXpath());
+
+        return $xpath;
+    }
+
+    /**
+     * Joins a NodeInterface as a child of this object.
+     *
+     * @param XPathExpr     $xpath The parent XPath expression
+     * @param NodeInterface $sub   The NodeInterface object to add
+     *
+     * @return XPathExpr An XPath instance
+     */
+    protected function _xpath_child($xpath, $sub)
+    {
+        // when sub is an immediate child of xpath
+        $xpath->join('/', $sub->toXpath());
+
+        return $xpath;
+    }
+
+    /**
+     * Joins an XPath expression as an adjacent of another.
+     *
+     * @param XPathExpr     $xpath The parent XPath expression
+     * @param NodeInterface $sub   The adjacent XPath expression
+     *
+     * @return XPathExpr An XPath instance
+     */
+    protected function _xpath_direct_adjacent($xpath, $sub)
+    {
+        // when sub immediately follows xpath
+        $xpath->join('/following-sibling::', $sub->toXpath());
+        $xpath->addNameTest();
+        $xpath->addCondition('position() = 1');
+
+        return $xpath;
+    }
+
+    /**
+     * Joins an XPath expression as an indirect adjacent of another.
+     *
+     * @param XPathExpr     $xpath The parent XPath expression
+     * @param NodeInterface $sub   The indirect adjacent NodeInterface object
+     *
+     * @return XPathExpr An XPath instance
+     */
+    protected function _xpath_indirect_adjacent($xpath, $sub)
+    {
+        // when sub comes somewhere after xpath as a sibling
+        $xpath->join('/following-sibling::', $sub->toXpath());
+
+        return $xpath;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ElementNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ElementNode.php
new file mode 100644
index 0000000..5cc7d4b
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/ElementNode.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\CssSelector\Node;
+
+use Symfony\Component\CssSelector\XPathExpr;
+
+/**
+ * ElementNode represents a "namespace|element" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ElementNode implements NodeInterface
+{
+    protected $namespace;
+    protected $element;
+
+    /**
+     * Constructor.
+     *
+     * @param string $namespace Namespace
+     * @param string $element   Element
+     */
+    public function __construct($namespace, $element)
+    {
+        $this->namespace = $namespace;
+        $this->element = $element;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s[%s]', __CLASS__, $this->formatElement());
+    }
+
+    /**
+     * Formats the element into a string.
+     *
+     * @return string Element as an XPath string
+     */
+    public function formatElement()
+    {
+        if ($this->namespace == '*') {
+            return $this->element;
+        }
+
+        return sprintf('%s|%s', $this->namespace, $this->element);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function toXpath()
+    {
+        if ($this->namespace == '*') {
+            $el = strtolower($this->element);
+        } else {
+            // FIXME: Should we lowercase here?
+            $el = sprintf('%s:%s', $this->namespace, $this->element);
+        }
+
+        return new XPathExpr(null, null, $el);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/FunctionNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/FunctionNode.php
new file mode 100644
index 0000000..8736c27
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/FunctionNode.php
@@ -0,0 +1,290 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+use Symfony\Component\CssSelector\Exception\ParseException;
+use Symfony\Component\CssSelector\XPathExpr;
+
+/**
+ * FunctionNode represents a "selector:name(expr)" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class FunctionNode implements NodeInterface
+{
+    protected static $unsupported = array('target', 'lang', 'enabled', 'disabled');
+
+    protected $selector;
+    protected $type;
+    protected $name;
+    protected $expr;
+
+    /**
+     * Constructor.
+     *
+     * @param NodeInterface $selector The XPath expression
+     * @param string        $type
+     * @param string        $name
+     * @param XPathExpr     $expr
+     */
+    public function __construct($selector, $type, $name, $expr)
+    {
+        $this->selector = $selector;
+        $this->type = $type;
+        $this->name = $name;
+        $this->expr = $expr;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s[%s%s%s(%s)]', __CLASS__, $this->selector, $this->type, $this->name, $this->expr);
+    }
+
+    /**
+     * {@inheritDoc}
+     * @throws ParseException When unsupported or unknown pseudo-class is found
+     */
+    public function toXpath()
+    {
+        $selPath = $this->selector->toXpath();
+        if (in_array($this->name, self::$unsupported)) {
+            throw new ParseException(sprintf('The pseudo-class %s is not supported', $this->name));
+        }
+        $method = '_xpath_'.str_replace('-', '_', $this->name);
+        if (!method_exists($this, $method)) {
+            throw new ParseException(sprintf('The pseudo-class %s is unknown', $this->name));
+        }
+
+        return $this->$method($selPath, $this->expr);
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param mixed     $expr
+     * @param Boolean   $last
+     * @param Boolean   $addNameTest
+     *
+     * @return XPathExpr
+     */
+    protected function _xpath_nth_child($xpath, $expr, $last = false, $addNameTest = true)
+    {
+        list($a, $b) = $this->parseSeries($expr);
+        if (!$a && !$b && !$last) {
+            // a=0 means nothing is returned...
+            $xpath->addCondition('false() and position() = 0');
+
+            return $xpath;
+        }
+
+        if ($addNameTest) {
+            $xpath->addNameTest();
+        }
+
+        $xpath->addStarPrefix();
+        if ($a == 0) {
+            if ($last) {
+                $b = sprintf('last() - %s', $b);
+            }
+            $xpath->addCondition(sprintf('position() = %s', $b));
+
+            return $xpath;
+        }
+
+        if ($last) {
+            // FIXME: I'm not sure if this is right
+            $a = -$a;
+            $b = -$b;
+        }
+
+        if ($b > 0) {
+            $bNeg = -$b;
+        } else {
+            $bNeg = sprintf('+%s', -$b);
+        }
+
+        if ($a != 1) {
+            $expr = array(sprintf('(position() %s) mod %s = 0', $bNeg, $a));
+        } else {
+            $expr = array();
+        }
+
+        if ($b >= 0) {
+            $expr[] = sprintf('position() >= %s', $b);
+        } elseif ($b < 0 && $last) {
+            $expr[] = sprintf('position() < (last() %s)', $b);
+        }
+        $expr = implode($expr, ' and ');
+
+        if ($expr) {
+            $xpath->addCondition($expr);
+        }
+
+        return $xpath;
+        /* FIXME: handle an+b, odd, even
+             an+b means every-a, plus b, e.g., 2n+1 means odd
+             0n+b means b
+             n+0 means a=1, i.e., all elements
+             an means every a elements, i.e., 2n means even
+             -n means -1n
+             -1n+6 means elements 6 and previous */
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param XPathExpr $expr
+     *
+     * @return XPathExpr
+     */
+    protected function _xpath_nth_last_child($xpath, $expr)
+    {
+        return $this->_xpath_nth_child($xpath, $expr, true);
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param XPathExpr $expr
+     *
+     * @return XPathExpr
+     *
+     * @throws ParseException
+     */
+    protected function _xpath_nth_of_type($xpath, $expr)
+    {
+        if ($xpath->getElement() == '*') {
+            throw new ParseException('*:nth-of-type() is not implemented');
+        }
+
+        return $this->_xpath_nth_child($xpath, $expr, false, false);
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param XPathExpr $expr
+     *
+     * @return XPathExpr
+     */
+    protected function _xpath_nth_last_of_type($xpath, $expr)
+    {
+        return $this->_xpath_nth_child($xpath, $expr, true, false);
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param XPathExpr $expr
+     *
+     * @return XPathExpr
+     */
+    protected function _xpath_contains($xpath, $expr)
+    {
+        // text content, minus tags, must contain expr
+        if ($expr instanceof ElementNode) {
+            $expr = $expr->formatElement();
+        }
+
+        // FIXME: lower-case is only available with XPath 2
+        //$xpath->addCondition(sprintf('contains(lower-case(string(.)), %s)', XPathExpr::xpathLiteral(strtolower($expr))));
+        $xpath->addCondition(sprintf('contains(string(.), %s)', XPathExpr::xpathLiteral($expr)));
+
+        // FIXME: Currently case insensitive matching doesn't seem to be happening
+        return $xpath;
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath
+     * @param XPathExpr $expr
+     *
+     * @return XPathExpr
+     */
+    protected function _xpath_not($xpath, $expr)
+    {
+        // everything for which not expr applies
+        $expr = $expr->toXpath();
+        $cond = $expr->getCondition();
+        // FIXME: should I do something about element_path?
+        $xpath->addCondition(sprintf('not(%s)', $cond));
+
+        return $xpath;
+    }
+
+    /**
+     * Parses things like '1n+2', or 'an+b' generally, returning (a, b)
+     *
+     * @param mixed $s
+     *
+     * @return array
+     */
+    protected function parseSeries($s)
+    {
+        if ($s instanceof ElementNode) {
+            $s = $s->formatElement();
+        }
+
+        if (!$s || '*' == $s) {
+            // Happens when there's nothing, which the CSS parser thinks of as *
+            return array(0, 0);
+        }
+
+        if ('odd' == $s) {
+            return array(2, 1);
+        }
+
+        if ('even' == $s) {
+            return array(2, 0);
+        }
+
+        if ('n' == $s) {
+            return array(1, 0);
+        }
+
+        if (false === strpos($s, 'n')) {
+            // Just a b
+            return array(0, intval((string) $s));
+        }
+
+        list($a, $b) = explode('n', $s);
+        if (!$a) {
+            $a = 1;
+        } elseif ('-' == $a || '+' == $a) {
+            $a = intval($a.'1');
+        } else {
+            $a = intval($a);
+        }
+
+        if (!$b) {
+            $b = 0;
+        } elseif ('-' == $b || '+' == $b) {
+            $b = intval($b.'1');
+        } else {
+            $b = intval($b);
+        }
+
+        return array($a, $b);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/HashNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/HashNode.php
new file mode 100644
index 0000000..87a6590
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/HashNode.php
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+use Symfony\Component\CssSelector\XPathExpr;
+
+/**
+ * HashNode represents a "selector#id" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class HashNode implements NodeInterface
+{
+    protected $selector;
+    protected $id;
+
+    /**
+     * Constructor.
+     *
+     * @param NodeInterface $selector The NodeInterface object
+     * @param string        $id       The ID
+     */
+    public function __construct($selector, $id)
+    {
+        $this->selector = $selector;
+        $this->id = $id;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s[%s#%s]', __CLASS__, $this->selector, $this->id);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function toXpath()
+    {
+        $path = $this->selector->toXpath();
+        $path->addCondition(sprintf('@id = %s', XPathExpr::xpathLiteral($this->id)));
+
+        return $path;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NodeInterface.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NodeInterface.php
new file mode 100644
index 0000000..113b1b7
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NodeInterface.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+/**
+ * ClassNode represents a "selector.className" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface NodeInterface
+{
+    /**
+     * Returns a string representation of the object.
+     *
+     * @return string The string representation
+     */
+    public function __toString();
+
+    /**
+     * @return XPathExpr The XPath expression
+     *
+     * @throws ParseException When unknown operator is found
+     */
+    public function toXpath();
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/OrNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/OrNode.php
new file mode 100644
index 0000000..374a577
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/OrNode.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\CssSelector\Node;
+
+use Symfony\Component\CssSelector\XPathExprOr;
+
+/**
+ * OrNode represents a "Or" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class OrNode implements NodeInterface
+{
+    /**
+     * @var NodeInterface[]
+     */
+    protected $items;
+
+    /**
+     * Constructor.
+     *
+     * @param NodeInterface[] $items An array of NodeInterface objects
+     */
+    public function __construct($items)
+    {
+        $this->items = $items;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s(%s)', __CLASS__, $this->items);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function toXpath()
+    {
+        $paths = array();
+        foreach ($this->items as $item) {
+            $paths[] = $item->toXpath();
+        }
+
+        return new XPathExprOr($paths);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/PseudoNode.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/PseudoNode.php
new file mode 100644
index 0000000..2aa4c65
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/PseudoNode.php
@@ -0,0 +1,231 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Node;
+
+use Symfony\Component\CssSelector\Exception\ParseException;
+use Symfony\Component\CssSelector\XPathExpr;
+
+/**
+ * PseudoNode represents a "selector:ident" node.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class PseudoNode implements NodeInterface
+{
+    protected static $unsupported = array(
+        'indeterminate', 'first-line', 'first-letter',
+        'selection', 'before', 'after', 'link', 'visited',
+        'active', 'focus', 'hover',
+    );
+
+    protected $element;
+    protected $type;
+    protected $ident;
+
+    /**
+     * Constructor.
+     *
+     * @param NodeInterface $element The NodeInterface element
+     * @param string        $type    Node type
+     * @param string        $ident   The ident
+     *
+     * @throws ParseException When incorrect PseudoNode type is given
+     */
+    public function __construct($element, $type, $ident)
+    {
+        $this->element = $element;
+
+        if (!in_array($type, array(':', '::'))) {
+            throw new ParseException(sprintf('The PseudoNode type can only be : or :: (%s given).', $type));
+        }
+
+        $this->type = $type;
+        $this->ident = $ident;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function __toString()
+    {
+        return sprintf('%s[%s%s%s]', __CLASS__, $this->element, $this->type, $this->ident);
+    }
+
+    /**
+     * {@inheritDoc}
+     * @throws ParseException When unsupported or unknown pseudo-class is found
+     */
+    public function toXpath()
+    {
+        $elXpath = $this->element->toXpath();
+
+        if (in_array($this->ident, self::$unsupported)) {
+            throw new ParseException(sprintf('The pseudo-class %s is unsupported', $this->ident));
+        }
+        $method = 'xpath_'.str_replace('-', '_', $this->ident);
+        if (!method_exists($this, $method)) {
+            throw new ParseException(sprintf('The pseudo-class %s is unknown', $this->ident));
+        }
+
+        return $this->$method($elXpath);
+    }
+
+    /**
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified XPath expression
+     */
+    protected function xpath_checked($xpath)
+    {
+        // FIXME: is this really all the elements?
+        $xpath->addCondition("(@selected or @checked) and (name(.) = 'input' or name(.) = 'option')");
+
+        return $xpath;
+    }
+
+    /**
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified XPath expression
+     *
+     * @throws ParseException If this element is the root element
+     */
+    protected function xpath_root($xpath)
+    {
+        // if this element is the root element
+        throw new ParseException();
+    }
+
+    /**
+     * Marks this XPath expression as the first child.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     */
+    protected function xpath_first_child($xpath)
+    {
+        $xpath->addStarPrefix();
+        $xpath->addNameTest();
+        $xpath->addCondition('position() = 1');
+
+        return $xpath;
+    }
+
+    /**
+     * Sets the XPath  to be the last child.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     */
+    protected function xpath_last_child($xpath)
+    {
+        $xpath->addStarPrefix();
+        $xpath->addNameTest();
+        $xpath->addCondition('position() = last()');
+
+        return $xpath;
+    }
+
+    /**
+     * Sets the XPath expression to be the first of type.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     *
+     * @throws ParseException
+     */
+    protected function xpath_first_of_type($xpath)
+    {
+        if ($xpath->getElement() == '*') {
+            throw new ParseException('*:first-of-type is not implemented');
+        }
+        $xpath->addStarPrefix();
+        $xpath->addCondition('position() = 1');
+
+        return $xpath;
+    }
+
+    /**
+     * Sets the XPath expression to be the last of type.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     *
+     * @throws ParseException Because *:last-of-type is not implemented
+     */
+    protected function xpath_last_of_type($xpath)
+    {
+        if ($xpath->getElement() == '*') {
+            throw new ParseException('*:last-of-type is not implemented');
+        }
+        $xpath->addStarPrefix();
+        $xpath->addCondition('position() = last()');
+
+        return $xpath;
+    }
+
+    /**
+     * Sets the XPath expression to be the only child.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     */
+    protected function xpath_only_child($xpath)
+    {
+        $xpath->addNameTest();
+        $xpath->addStarPrefix();
+        $xpath->addCondition('last() = 1');
+
+        return $xpath;
+    }
+
+    /**
+     * Sets the XPath expression to be only of type.
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     *
+     * @throws ParseException Because *:only-of-type is not implemented
+     */
+    protected function xpath_only_of_type($xpath)
+    {
+        if ($xpath->getElement() == '*') {
+            throw new ParseException('*:only-of-type is not implemented');
+        }
+        $xpath->addCondition('last() = 1');
+
+        return $xpath;
+    }
+
+    /**
+     * undocumented function
+     *
+     * @param XPathExpr $xpath The XPath expression
+     *
+     * @return XPathExpr The modified expression
+     */
+    protected function xpath_empty($xpath)
+    {
+        $xpath->addCondition('not(*) and not(normalize-space())');
+
+        return $xpath;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
new file mode 100644
index 0000000..2424bea
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
@@ -0,0 +1,25 @@
+CssSelector Component
+=====================
+
+CssSelector converts CSS selectors to XPath expressions.
+
+The component only goal is to convert CSS selectors to their XPath
+equivalents:
+
+    use Symfony\Component\CssSelector\CssSelector;
+
+    print CssSelector::toXPath('div.item > h4 > a');
+
+Resources
+---------
+
+This component is a port of the Python lxml library, which is copyright Infrae
+and distributed under the BSD license.
+
+Current code is a port of https://github.com/SimonSapin/cssselect@fd2e70
+
+You can run the unit tests with the following command:
+
+    $ cd path/to/Symfony/Component/CssSelector/
+    $ composer.phar install --dev
+    $ phpunit
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php
new file mode 100644
index 0000000..0d9ca85
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.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\CssSelector\Tests;
+
+use Symfony\Component\CssSelector\CssSelector;
+
+class CssSelectorTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCsstoXPath()
+    {
+        $this->assertEquals('descendant-or-self::*', CssSelector::toXPath(''));
+        $this->assertEquals('descendant-or-self::h1', CssSelector::toXPath('h1'));
+        $this->assertEquals("descendant-or-self::h1[@id = 'foo']", CssSelector::toXPath('h1#foo'));
+        $this->assertEquals("descendant-or-self::h1[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]", CssSelector::toXPath('h1.foo'));
+
+        $this->assertEquals('descendant-or-self::foo:h1', CssSelector::toXPath('foo|h1'));
+    }
+
+    /**
+     * @dataProvider getCssSelectors
+     */
+    public function testParse($css, $xpath)
+    {
+        $parser = new CssSelector();
+
+        $this->assertEquals($xpath, (string) $parser->parse($css)->toXPath(), '->parse() parses an input string and returns a node');
+    }
+
+    public function testParseExceptions()
+    {
+        $parser = new CssSelector();
+
+        try {
+            $parser->parse('h1:');
+            $this->fail('->parse() throws an Exception if the css selector is not valid');
+        } catch (\Exception $e) {
+            $this->assertInstanceOf('\Symfony\Component\CssSelector\Exception\ParseException', $e, '->parse() throws an Exception if the css selector is not valid');
+            $this->assertEquals("Expected symbol, got '' at h1: -> ", $e->getMessage(), '->parse() throws an Exception if the css selector is not valid');
+        }
+    }
+
+    public function getCssSelectors()
+    {
+        return array(
+            array('h1', "h1"),
+            array('foo|h1', "foo:h1"),
+            array('h1, h2, h3', "h1 | h2 | h3"),
+            array('h1:nth-child(3n+1)', "*/*[name() = 'h1' and ((position() -1) mod 3 = 0 and position() >= 1)]"),
+            array('h1 > p', "h1/p"),
+            array('h1#foo', "h1[@id = 'foo']"),
+            array('h1.foo', "h1[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
+            array('h1[class*="foo bar"]', "h1[contains(@class, 'foo bar')]"),
+            array('h1[foo|class*="foo bar"]', "h1[contains(@foo:class, 'foo bar')]"),
+            array('h1[class]', "h1[@class]"),
+            array('h1 .foo', "h1/descendant::*[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
+            array('h1 #foo', "h1/descendant::*[@id = 'foo']"),
+            array('h1 [class*=foo]', "h1/descendant::*[contains(@class, 'foo')]"),
+            array('div>.foo', "div/*[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
+            array('div > .foo', "div/*[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
+        );
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttribNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttribNodeTest.php
new file mode 100644
index 0000000..2f19fe2
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttribNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\AttribNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class AttribNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        $element = new ElementNode('*', 'h1');
+
+        $operators = array(
+            '^=' => "h1[starts-with(@class, 'foo')]",
+            '$=' => "h1[substring(@class, string-length(@class)-2) = 'foo']",
+            '*=' => "h1[contains(@class, 'foo')]",
+            '='  => "h1[@class = 'foo']",
+            '~=' => "h1[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]",
+            '|=' => "h1[@class = 'foo' or starts-with(@class, 'foo-')]",
+            '!=' => "h1[not(@class) or @class != 'foo']",
+        );
+
+        // h1[class??foo]
+        foreach ($operators as $op => $xpath) {
+            $attrib = new AttribNode($element, '*', 'class', $op, 'foo');
+            $this->assertEquals($xpath, (string) $attrib->toXpath(), '->toXpath() returns the xpath representation of the node');
+        }
+
+        // h1[class]
+        $attrib = new AttribNode($element, '*', 'class', 'exists', 'foo');
+        $this->assertEquals('h1[@class]', (string) $attrib->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ClassNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ClassNodeTest.php
new file mode 100644
index 0000000..c0a96f1
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ClassNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\ClassNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class ClassNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        // h1.foo
+        $element = new ElementNode('*', 'h1');
+        $class = new ClassNode($element, 'foo');
+
+        $this->assertEquals("h1[contains(concat(' ', normalize-space(@class), ' '), ' foo ')]", (string) $class->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/CombinedSelectorNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/CombinedSelectorNodeTest.php
new file mode 100644
index 0000000..28f4e28
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/CombinedSelectorNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\CombinedSelectorNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class CombinedSelectorNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        $combinators = array(
+            ' ' => "h1/descendant::p",
+            '>' => "h1/p",
+            '+' => "h1/following-sibling::*[name() = 'p' and (position() = 1)]",
+            '~' => "h1/following-sibling::p",
+        );
+
+        // h1 ?? p
+        $element1 = new ElementNode('*', 'h1');
+        $element2 = new ElementNode('*', 'p');
+        foreach ($combinators as $combinator => $xpath) {
+            $combinator = new CombinedSelectorNode($element1, $combinator, $element2);
+            $this->assertEquals($xpath, (string) $combinator->toXpath(), '->toXpath() returns the xpath representation of the node');
+        }
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ElementNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ElementNodeTest.php
new file mode 100644
index 0000000..5d23e3f
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/ElementNodeTest.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class ElementNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        // h1
+        $element = new ElementNode('*', 'h1');
+
+        $this->assertEquals('h1', (string) $element->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // foo|h1
+        $element = new ElementNode('foo', 'h1');
+
+        $this->assertEquals('foo:h1', (string) $element->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/FunctionNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/FunctionNodeTest.php
new file mode 100644
index 0000000..9654402
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/FunctionNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\FunctionNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+use Symfony\Component\CssSelector\Token;
+
+class FunctionNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        $element = new ElementNode('*', 'h1');
+
+        // h1:contains("foo")
+        $function = new FunctionNode($element, ':', 'contains', 'foo');
+        $this->assertEquals("h1[contains(string(.), 'foo')]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(1)
+        $function = new FunctionNode($element, ':', 'nth-child', 1);
+        $this->assertEquals("*/*[name() = 'h1' and (position() = 1)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child()
+        $function = new FunctionNode($element, ':', 'nth-child', '');
+        $this->assertEquals("h1[false() and position() = 0]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(odd)
+        $element2 = new ElementNode('*', new Token('Symbol', 'odd', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and ((position() -1) mod 2 = 0 and position() >= 1)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(even)
+        $element2 = new ElementNode('*', new Token('Symbol', 'even', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and ((position() +0) mod 2 = 0 and position() >= 0)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(n)
+        $element2 = new ElementNode('*', new Token('Symbol', 'n', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and (position() >= 0)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(3n+1)
+        $element2 = new ElementNode('*', new Token('Symbol', '3n+1', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and ((position() -1) mod 3 = 0 and position() >= 1)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(n+1)
+        $element2 = new ElementNode('*', new Token('Symbol', 'n+1', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and (position() >= 1)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(1)
+        $element2 = new ElementNode('*', new Token('Symbol', '2', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and (position() = 2)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(2n)
+        $element2 = new ElementNode('*', new Token('Symbol', '2n', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and ((position() +0) mod 2 = 0 and position() >= 0)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-child(-n)
+        $element2 = new ElementNode('*', new Token('Symbol', '-n', -1));
+        $function = new FunctionNode($element, ':', 'nth-child', $element2);
+        $this->assertEquals("*/*[name() = 'h1' and ((position() +0) mod -1 = 0 and position() >= 0)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-last-child(2)
+        $function = new FunctionNode($element, ':', 'nth-last-child', 2);
+        $this->assertEquals("*/*[name() = 'h1' and (position() = last() - 2)]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-of-type(2)
+        $function = new FunctionNode($element, ':', 'nth-of-type', 2);
+        $this->assertEquals("*/h1[position() = 2]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:nth-last-of-type(2)
+        $function = new FunctionNode($element, ':', 'nth-last-of-type', 2);
+        $this->assertEquals("*/h1[position() = last() - 2]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        /*
+        // h1:not(p)
+        $element2 = new ElementNode('*', 'p');
+        $function = new FunctionNode($element, ':', 'not', $element2);
+
+        $this->assertEquals("h1[not()]", (string) $function->toXpath(), '->toXpath() returns the xpath representation of the node');
+        */
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/HashNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/HashNodeTest.php
new file mode 100644
index 0000000..d919747
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/HashNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\HashNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class HashNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        // h1#foo
+        $element = new ElementNode('*', 'h1');
+        $hash = new HashNode($element, 'foo');
+
+        $this->assertEquals("h1[@id = 'foo']", (string) $hash->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/OrNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/OrNodeTest.php
new file mode 100644
index 0000000..9b9e6e3
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/OrNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\OrNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class OrNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        // h1, h2, h3
+        $element1 = new ElementNode('*', 'h1');
+        $element2 = new ElementNode('*', 'h2');
+        $element3 = new ElementNode('*', 'h3');
+        $or = new OrNode(array($element1, $element2, $element3));
+
+        $this->assertEquals("h1 | h2 | h3", (string) $or->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+
+    public function testIssueMissingPrefix()
+    {
+        // h1, h2, h3
+        $element1 = new ElementNode('*', 'h1');
+        $element2 = new ElementNode('*', 'h2');
+        $element3 = new ElementNode('*', 'h3');
+        $or = new OrNode(array($element1, $element2, $element3));
+
+        $xPath = $or->toXPath();
+        $xPath->addPrefix('descendant-or-self::');
+
+        $this->assertEquals("descendant-or-self::h1 | descendant-or-self::h2 | descendant-or-self::h3", (string) $xPath);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/PseudoNodeTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/PseudoNodeTest.php
new file mode 100644
index 0000000..8bd0cec
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/PseudoNodeTest.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\CssSelector\Tests\Node;
+
+use Symfony\Component\CssSelector\Node\PseudoNode;
+use Symfony\Component\CssSelector\Node\ElementNode;
+
+class PseudoNodeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testToXpath()
+    {
+        $element = new ElementNode('*', 'h1');
+
+        // h1:checked
+        $pseudo = new PseudoNode($element, ':', 'checked');
+        $this->assertEquals("h1[(@selected or @checked) and (name(.) = 'input' or name(.) = 'option')]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:first-child
+        $pseudo = new PseudoNode($element, ':', 'first-child');
+        $this->assertEquals("*/*[name() = 'h1' and (position() = 1)]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:last-child
+        $pseudo = new PseudoNode($element, ':', 'last-child');
+        $this->assertEquals("*/*[name() = 'h1' and (position() = last())]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:first-of-type
+        $pseudo = new PseudoNode($element, ':', 'first-of-type');
+        $this->assertEquals("*/h1[position() = 1]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:last-of-type
+        $pseudo = new PseudoNode($element, ':', 'last-of-type');
+        $this->assertEquals("*/h1[position() = last()]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:only-child
+        $pseudo = new PseudoNode($element, ':', 'only-child');
+        $this->assertEquals("*/*[name() = 'h1' and (last() = 1)]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:only-of-type
+        $pseudo = new PseudoNode($element, ':', 'only-of-type');
+        $this->assertEquals("h1[last() = 1]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+
+        // h1:empty
+        $pseudo = new PseudoNode($element, ':', 'empty');
+        $this->assertEquals("h1[not(*) and not(normalize-space())]", (string) $pseudo->toXpath(), '->toXpath() returns the xpath representation of the node');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/TokenizerTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/TokenizerTest.php
new file mode 100644
index 0000000..e0e00d8
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/TokenizerTest.php
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Tests;
+
+use Symfony\Component\CssSelector\Tokenizer;
+
+class TokenizerTest extends \PHPUnit_Framework_TestCase
+{
+    protected $tokenizer;
+
+    protected function setUp()
+    {
+        $this->tokenizer = new Tokenizer();
+    }
+
+    /**
+     * @dataProvider getCssSelectors
+     */
+    public function testTokenize($css)
+    {
+        $this->assertEquals($css, $this->tokensToString($this->tokenizer->tokenize($css)), '->tokenize() lexes an input string and returns an array of tokens');
+    }
+
+    public function testTokenizeWithQuotedStrings()
+    {
+        $this->assertEquals('foo[class=foo bar  ]', $this->tokensToString($this->tokenizer->tokenize('foo[class="foo bar"]')), '->tokenize() lexes an input string and returns an array of tokens');
+        $this->assertEquals("foo[class=foo Abar     ]", $this->tokensToString($this->tokenizer->tokenize('foo[class="foo \\65 bar"]')), '->tokenize() lexes an input string and returns an array of tokens');
+        $this->assertEquals("img[alt=  ]", $this->tokensToString($this->tokenizer->tokenize('img[alt=""]')), '->tokenize() lexes an input string and returns an array of tokens');
+    }
+
+    /**
+     * @expectedException \Symfony\Component\CssSelector\Exception\ParseException
+     */
+    public function testTokenizeInvalidString()
+    {
+        $this->tokensToString($this->tokenizer->tokenize('/invalid'));
+    }
+
+    public function getCssSelectors()
+    {
+        return array(
+            array('h1'),
+            array('h1:nth-child(3n+1)'),
+            array('h1 > p'),
+            array('h1#foo'),
+            array('h1.foo'),
+            array('h1[class*=foo]'),
+            array('h1 .foo'),
+            array('h1 #foo'),
+            array('h1 [class*=foo]'),
+        );
+    }
+
+    protected function tokensToString($tokens)
+    {
+        $str = '';
+        foreach ($tokens as $token) {
+            $str .= str_repeat(' ', $token->getPosition() - strlen($str)).$token;
+        }
+
+        return $str;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPathExprTest.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPathExprTest.php
new file mode 100644
index 0000000..df6e5a0
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPathExprTest.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector\Tests;
+
+use Symfony\Component\CssSelector\XPathExpr;
+
+class XPathExprTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getXPathLiteralValues
+     */
+    public function testXpathLiteral($value, $literal)
+    {
+        $this->assertEquals($literal, XPathExpr::xpathLiteral($value));
+    }
+
+    public function getXPathLiteralValues()
+    {
+        return array(
+            array('foo', "'foo'"),
+            array("foo's bar", '"foo\'s bar"'),
+            array("foo's \"middle\" bar", 'concat(\'foo\', "\'", \'s "middle" bar\')'),
+            array("foo's 'middle' \"bar\"", 'concat(\'foo\', "\'", \'s \', "\'", \'middle\', "\'", \' "bar"\')'),
+        );
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Token.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Token.php
new file mode 100644
index 0000000..6748a44
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Token.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\CssSelector;
+
+/**
+ * Token represents a CSS Selector token.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Token
+{
+    private $type;
+    private $value;
+    private $position;
+
+    /**
+     * Constructor.
+     *
+     * @param string  $type     The type of this token.
+     * @param mixed   $value    The value of this token.
+     * @param integer $position The order of this token.
+     */
+    public function __construct($type, $value, $position)
+    {
+        $this->type = $type;
+        $this->value = $value;
+        $this->position = $position;
+    }
+
+    /**
+     * Gets a string representation of this token.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return (string) $this->value;
+    }
+
+    /**
+     * Answers whether this token's type equals to $type.
+     *
+     * @param string $type The type to test against this token's one.
+     *
+     * @return Boolean
+     */
+    public function isType($type)
+    {
+        return $this->type == $type;
+    }
+
+    /**
+     * Gets the position of this token.
+     *
+     * @return integer
+     */
+    public function getPosition()
+    {
+        return $this->position;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/TokenStream.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/TokenStream.php
new file mode 100644
index 0000000..cf04702
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/TokenStream.php
@@ -0,0 +1,105 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector;
+
+/**
+ * TokenStream represents a stream of CSS Selector tokens.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class TokenStream
+{
+    private $used;
+    private $tokens;
+    private $source;
+    private $peeked;
+    private $peeking;
+
+    /**
+     * Constructor.
+     *
+     * @param array $tokens The tokens that make the stream.
+     * @param mixed $source The source of the stream.
+     */
+    public function __construct($tokens, $source = null)
+    {
+        $this->used = array();
+        $this->tokens = $tokens;
+        $this->source = $source;
+        $this->peeked = null;
+        $this->peeking = false;
+    }
+
+    /**
+     * Gets the tokens that have already been visited in this stream.
+     *
+     * @return array
+     */
+    public function getUsed()
+    {
+        return $this->used;
+    }
+
+    /**
+     * Gets the next token in the stream or null if there is none.
+     * Note that if this stream was set to be peeking its behavior
+     * will be restored to not peeking after this operation.
+     *
+     * @return mixed
+     */
+    public function next()
+    {
+        if ($this->peeking) {
+            $this->peeking = false;
+            $this->used[] = $this->peeked;
+
+            return $this->peeked;
+        }
+
+        if (!count($this->tokens)) {
+            return null;
+        }
+
+        $next = array_shift($this->tokens);
+        $this->used[] = $next;
+
+        return $next;
+    }
+
+    /**
+     * Peeks for the next token in this stream. This means that the next token
+     * will be returned but it won't be considered as used (visited) until the
+     * next() method is invoked.
+     * If there are no remaining tokens null will be returned.
+     *
+     * @see next()
+     *
+     * @return mixed
+     */
+    public function peek()
+    {
+        if (!$this->peeking) {
+            if (!count($this->tokens)) {
+                return null;
+            }
+
+            $this->peeked = array_shift($this->tokens);
+
+            $this->peeking = true;
+        }
+
+        return $this->peeked;
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tokenizer.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tokenizer.php
new file mode 100644
index 0000000..34e8ac5
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tokenizer.php
@@ -0,0 +1,201 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector;
+
+use Symfony\Component\CssSelector\Exception\ParseException;
+
+/**
+ * Tokenizer lexes a CSS Selector to tokens.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Tokenizer
+{
+    /**
+     * Takes a CSS selector and returns an array holding the Tokens
+     * it contains.
+     *
+     * @param string $s The selector to lex.
+     *
+     * @return array Token[]
+     */
+    public function tokenize($s)
+    {
+        if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+            $mbEncoding = mb_internal_encoding();
+            mb_internal_encoding('ASCII');
+        }
+
+        $tokens = array();
+        $pos = 0;
+        $s = preg_replace('#/\*.*?\*/#s', '', $s);
+
+        while (true) {
+            if (preg_match('#\s+#A', $s, $match, 0, $pos)) {
+                $precedingWhitespacePos = $pos;
+                $pos += strlen($match[0]);
+            } else {
+                $precedingWhitespacePos = 0;
+            }
+
+            if ($pos >= strlen($s)) {
+                if (isset($mbEncoding)) {
+                    mb_internal_encoding($mbEncoding);
+                }
+
+                return $tokens;
+            }
+
+            if (preg_match('#[+-]?\d*n(?:[+-]\d+)?#A', $s, $match, 0, $pos) && 'n' !== $match[0]) {
+                $sym = substr($s, $pos, strlen($match[0]));
+                $tokens[] = new Token('Symbol', $sym, $pos);
+                $pos += strlen($match[0]);
+
+                continue;
+            }
+
+            $c = $s[$pos];
+            $c2 = substr($s, $pos, 2);
+            if (in_array($c2, array('~=', '|=', '^=', '$=', '*=', '::', '!='))) {
+                $tokens[] = new Token('Token', $c2, $pos);
+                $pos += 2;
+
+                continue;
+            }
+
+            if (in_array($c, array('>', '+', '~', ',', '.', '*', '=', '[', ']', '(', ')', '|', ':', '#'))) {
+                if (in_array($c, array('.', '#', '[')) && $precedingWhitespacePos > 0) {
+                    $tokens[] = new Token('Token', ' ', $precedingWhitespacePos);
+                }
+                $tokens[] = new Token('Token', $c, $pos);
+                ++$pos;
+
+                continue;
+            }
+
+            if ('"' === $c || "'" === $c) {
+                // Quoted string
+                $oldPos = $pos;
+                list($sym, $pos) = $this->tokenizeEscapedString($s, $pos);
+
+                $tokens[] = new Token('String', $sym, $oldPos);
+
+                continue;
+            }
+
+            $oldPos = $pos;
+            list($sym, $pos) = $this->tokenizeSymbol($s, $pos);
+
+            $tokens[] = new Token('Symbol', $sym, $oldPos);
+
+            continue;
+        }
+    }
+
+    /**
+     * Tokenizes a quoted string (i.e. 'A string quoted with \' characters'),
+     * and returns an array holding the unquoted string contained by $s and
+     * the new position from which tokenizing should take over.
+     *
+     * @param string  $s   The selector string containing the quoted string.
+     * @param integer $pos The starting position for the quoted string.
+     *
+     * @return array
+     *
+     * @throws ParseException When expected closing is not found
+     */
+    private function tokenizeEscapedString($s, $pos)
+    {
+        $quote = $s[$pos];
+
+        $pos = $pos + 1;
+        $start = $pos;
+        while (true) {
+            $next = strpos($s, $quote, $pos);
+            if (false === $next) {
+                throw new ParseException(sprintf('Expected closing %s for string in: %s', $quote, substr($s, $start)));
+            }
+
+            $result = substr($s, $start, $next - $start);
+            if (strlen($result) > 0 && '\\' === $result[strlen($result) - 1]) {
+                // next quote character is escaped
+                $pos = $next + 1;
+                continue;
+            }
+
+            if (false !== strpos($result, '\\')) {
+                $result = $this->unescapeStringLiteral($result);
+            }
+
+            return array($result, $next + 1);
+        }
+    }
+
+    /**
+     * Unescapes a string literal and returns the unescaped string.
+     *
+     * @param string $literal The string literal to unescape.
+     *
+     * @return string
+     *
+     * @throws ParseException When invalid escape sequence is found
+     */
+    private function unescapeStringLiteral($literal)
+    {
+        return preg_replace_callback('#(\\\\(?:[A-Fa-f0-9]{1,6}(?:\r\n|\s)?|[^A-Fa-f0-9]))#', function ($matches) use ($literal) {
+            if ($matches[0][0] == '\\' && strlen($matches[0]) > 1) {
+                $matches[0] = substr($matches[0], 1);
+                if (in_array($matches[0][0], array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f'))) {
+                    return chr(trim($matches[0]));
+                }
+            } else {
+                throw new ParseException(sprintf('Invalid escape sequence %s in string %s', $matches[0], $literal));
+            }
+        }, $literal);
+    }
+
+    /**
+     * Lexes selector $s and returns an array holding the name of the symbol
+     * contained in it and the new position from which tokenizing should take
+     * over.
+     *
+     * @param string  $s   The selector string.
+     * @param integer $pos The position in $s at which the symbol starts.
+     *
+     * @return array
+     *
+     * @throws ParseException When Unexpected symbol is found
+     */
+    private function tokenizeSymbol($s, $pos)
+    {
+        $start = $pos;
+
+        if (!preg_match('#[^\w\-]#', $s, $match, PREG_OFFSET_CAPTURE, $pos)) {
+            // Goes to end of s
+            return array(substr($s, $start), strlen($s));
+        }
+
+        $matchStart = $match[0][1];
+
+        if ($matchStart == $pos) {
+            throw new ParseException(sprintf('Unexpected symbol: %s at %s', $s[$pos], $pos));
+        }
+
+        $result = substr($s, $start, $matchStart - $start);
+        $pos = $matchStart;
+
+        return array($result, $pos);
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExpr.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExpr.php
new file mode 100644
index 0000000..507b8ac
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExpr.php
@@ -0,0 +1,254 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\CssSelector;
+
+/**
+ * XPathExpr represents an XPath expression.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class XPathExpr
+{
+    private $prefix;
+    private $path;
+    private $element;
+    private $condition;
+    private $starPrefix;
+
+    /**
+     * Constructor.
+     *
+     * @param string  $prefix     Prefix for the XPath expression.
+     * @param string  $path       Actual path of the expression.
+     * @param string  $element    The element in the expression.
+     * @param string  $condition  A condition for the expression.
+     * @param Boolean $starPrefix Indicates whether to use a star prefix.
+     */
+    public function __construct($prefix = null, $path = null, $element = '*', $condition = null, $starPrefix = false)
+    {
+        $this->prefix = $prefix;
+        $this->path = $path;
+        $this->element = $element;
+        $this->condition = $condition;
+        $this->starPrefix = $starPrefix;
+    }
+
+    /**
+     * Gets the prefix of this XPath expression.
+     *
+     * @return string
+     */
+    public function getPrefix()
+    {
+        return $this->prefix;
+    }
+
+    /**
+     * Gets the path of this XPath expression.
+     *
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * Answers whether this XPath expression has a star prefix.
+     *
+     * @return Boolean
+     */
+    public function hasStarPrefix()
+    {
+        return $this->starPrefix;
+    }
+
+    /**
+     * Gets the element of this XPath expression.
+     *
+     * @return string
+     */
+    public function getElement()
+    {
+        return $this->element;
+    }
+
+    /**
+     * Gets the condition of this XPath expression.
+     *
+     * @return string
+     */
+    public function getCondition()
+    {
+        return $this->condition;
+    }
+
+    /**
+     * Gets a string representation for this XPath expression.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        $path = '';
+        if (null !== $this->prefix) {
+            $path .= $this->prefix;
+        }
+
+        if (null !== $this->path) {
+            $path .= $this->path;
+        }
+
+        $path .= $this->element;
+
+        if ($this->condition) {
+            $path .= sprintf('[%s]', $this->condition);
+        }
+
+        return $path;
+    }
+
+    /**
+     * Adds a condition to this XPath expression.
+     * Any pre-existent condition will be ANDed to it.
+     *
+     * @param string $condition The condition to add.
+     */
+    public function addCondition($condition)
+    {
+        if ($this->condition) {
+            $this->condition = sprintf('%s and (%s)', $this->condition, $condition);
+        } else {
+            $this->condition = $condition;
+        }
+    }
+
+    /**
+     * Adds a prefix to this XPath expression.
+     * It will be prepended to any pre-existent prefixes.
+     *
+     * @param string $prefix The prefix to add.
+     */
+    public function addPrefix($prefix)
+    {
+        if ($this->prefix) {
+            $this->prefix = $prefix.$this->prefix;
+        } else {
+            $this->prefix = $prefix;
+        }
+    }
+
+    /**
+     * Adds a condition to this XPath expression using the name of the element
+     * as the desired value.
+     * This method resets the element to '*'.
+     */
+    public function addNameTest()
+    {
+        if ($this->element == '*') {
+            // We weren't doing a test anyway
+            return;
+        }
+
+        $this->addCondition(sprintf('name() = %s', XPathExpr::xpathLiteral($this->element)));
+        $this->element = '*';
+    }
+
+    /**
+     * Adds a star prefix to this XPath expression.
+     * This method will prepend a '*' to the path and set the star prefix flag
+     * to true.
+     */
+    public function addStarPrefix()
+    {
+        /*
+        Adds a /* prefix if there is no prefix.  This is when you need
+        to keep context's constrained to a single parent.
+        */
+        if ($this->path) {
+            $this->path .= '*/';
+        } else {
+            $this->path = '*/';
+        }
+
+        $this->starPrefix = true;
+    }
+
+    /**
+     * Joins this XPath expression with $other (another XPath expression) using
+     * $combiner to join them.
+     *
+     * @param string    $combiner The combiner string.
+     * @param XPathExpr $other    The other XPath expression to combine with
+     *                            this one.
+     */
+    public function join($combiner, $other)
+    {
+        $prefix = (string) $this;
+
+        $prefix .= $combiner;
+        $path = $other->getPrefix().$other->getPath();
+
+        /* We don't need a star prefix if we are joining to this other
+             prefix; so we'll get rid of it */
+        if ($other->hasStarPrefix() && '*/' == $path) {
+            $path = '';
+        }
+        $this->prefix = $prefix;
+        $this->path = $path;
+        $this->element = $other->getElement();
+        $this->condition = $other->GetCondition();
+    }
+
+    /**
+     * Gets an XPath literal for $s.
+     *
+     * @param mixed $s Can either be a Node\ElementNode or a string.
+     *
+     * @return string
+     */
+    public static function xpathLiteral($s)
+    {
+        if ($s instanceof Node\ElementNode) {
+            // This is probably a symbol that looks like an expression...
+            $s = $s->formatElement();
+        } else {
+            $s = (string) $s;
+        }
+
+        if (false === strpos($s, "'")) {
+            return sprintf("'%s'", $s);
+        }
+
+        if (false === strpos($s, '"')) {
+            return sprintf('"%s"', $s);
+        }
+
+        $string = $s;
+        $parts = array();
+        while (true) {
+            if (false !== $pos = strpos($string, "'")) {
+                $parts[] = sprintf("'%s'", substr($string, 0, $pos));
+                $parts[] = "\"'\"";
+                $string = substr($string, $pos + 1);
+            } else {
+                $parts[] = "'$string'";
+                break;
+            }
+        }
+
+        return sprintf('concat(%s)', implode($parts, ', '));
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExprOr.php b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExprOr.php
new file mode 100644
index 0000000..f516367
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExprOr.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\CssSelector;
+
+/**
+ * XPathExprOr represents XPath |'d expressions.
+ *
+ * Note that unfortunately it isn't the union, it's the sum, so duplicate elements will appear.
+ *
+ * This component is a port of the Python lxml library,
+ * which is copyright Infrae and distributed under the BSD license.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class XPathExprOr extends XPathExpr
+{
+    /**
+     * Constructor.
+     *
+     * @param array  $items  The items in the expression.
+     * @param string $prefix Optional prefix for the expression.
+     */
+    public function __construct($items, $prefix = null)
+    {
+        $this->items = $items;
+        $this->prefix = $prefix;
+    }
+
+    /**
+     * Gets a string representation of this |'d expression.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        $prefix = $this->getPrefix();
+
+        $tmp = array();
+        foreach ($this->items as $i) {
+            $tmp[] = sprintf('%s%s', $prefix, $i);
+        }
+
+        return implode($tmp, ' | ');
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
new file mode 100644
index 0000000..54661fb
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
@@ -0,0 +1,31 @@
+{
+    "name": "symfony/css-selector",
+    "type": "library",
+    "description": "Symfony CssSelector 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"
+    },
+    "autoload": {
+        "psr-0": { "Symfony\\Component\\CssSelector\\": "" }
+    },
+    "target-dir": "Symfony/Component/CssSelector",
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.2-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
new file mode 100644
index 0000000..a19dc00
--- /dev/null
+++ b/core/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="vendor/autoload.php"
+>
+    <testsuites>
+        <testsuite name="Symfony CssSelector Component Test Suite">
+            <directory>./Tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./</directory>
+            <exclude>
+                <directory>./Resources</directory>
+                <directory>./Tests</directory>
+                <directory>./vendor</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
