diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php b/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php index c5f3739cf363..f922e1f1515e 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php @@ -112,7 +112,8 @@ private function generateMatchMethod(): string $code = <<context; \$requestMethod = \$canonicalMethod = \$context->getMethod(); {$fetchHost} @@ -148,8 +149,8 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' !== $pathinfo) { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + } elseif ('/' !== $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { return $this->redirect($pathinfo, $ret['_route']) + $ret; } @@ -161,13 +162,13 @@ public function match($pathinfo) throw new ResourceNotFoundException(); } - private function doMatch(string $rawPathinfo, array &$allow = array(), array &$allowSchemes = array()): array + private function doMatch(string $pathinfo, array &$allow = array(), array &$allowSchemes = array()): array EOF .$code."\n return array();\n }"; } - return " public function match(\$rawPathinfo)\n".$code."\n throw \$allow ? new MethodNotAllowedException(array_keys(\$allow)) : new ResourceNotFoundException();\n }"; + return " public function match(\$pathinfo)\n".$code."\n throw \$allow ? new MethodNotAllowedException(array_keys(\$allow)) : new ResourceNotFoundException();\n }"; } /** @@ -304,7 +305,7 @@ private function compileStaticRoutes(array $staticRoutes, bool $matchHost): stri EOF; } - return sprintf(" switch (\$trimmedPathinfo = '/' !== \$pathinfo && '/' === \$pathinfo[-1] ? substr(\$pathinfo, 0, -1) : \$pathinfo) {\n%s }\n\n", $this->indent($code)); + return sprintf(" switch (\$trimmedPathinfo) {\n%s }\n\n", $this->indent($code)); } /** @@ -408,8 +409,9 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo if ($hasTrailingSlash = '/' !== $regex && '/' === $regex[-1]) { $regex = substr($regex, 0, -1); } + $hasTrailingVar = (bool) preg_match('#\{\w+\}/?$#', $route->getPath()); - $tree->addRoute($regex, array($name, $regex, $state->vars, $route, $hasTrailingSlash)); + $tree->addRoute($regex, array($name, $regex, $state->vars, $route, $hasTrailingSlash, $hasTrailingVar)); } $code .= $this->compileStaticPrefixCollection($tree, $state); @@ -418,7 +420,7 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo $code .= "\n .')'"; $state->regex .= ')'; } - $rx = ")(?:/?)$}{$modifiers}"; + $rx = ")/?$}{$modifiers}"; $code .= "\n .'{$rx}',"; $state->regex .= $rx; $state->markTail = 0; @@ -438,7 +440,7 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo \$routes = array( {$this->indent($state->default, 4)} ); - list(\$ret, \$vars, \$requiredMethods, \$requiredSchemes, \$hasTrailingSlash) = \$routes[\$m]; + list(\$ret, \$vars, \$requiredMethods, \$requiredSchemes, \$hasTrailingSlash, \$hasTrailingVar) = \$routes[\$m]; {$this->compileSwitchDefault(true, $matchHost)} EOF; } @@ -493,11 +495,11 @@ private function compileStaticPrefixCollection(StaticPrefixCollection $tree, \st continue; } - list($name, $regex, $vars, $route, $hasTrailingSlash) = $route; + list($name, $regex, $vars, $route, $hasTrailingSlash, $hasTrailingVar) = $route; $compiledRoute = $route->compile(); if ($compiledRoute->getRegex() === $prevRegex) { - $state->switch = substr_replace($state->switch, $this->compileRoute($route, $name, false, $hasTrailingSlash)."\n", -19, 0); + $state->switch = substr_replace($state->switch, $this->compileRoute($route, $name, false, $hasTrailingSlash, $hasTrailingVar)."\n", -19, 0); continue; } @@ -516,20 +518,21 @@ private function compileStaticPrefixCollection(StaticPrefixCollection $tree, \st unset($defaults['_canonical_route']); } $state->default .= sprintf( - "%s => array(%s, %s, %s, %s, %s),\n", + "%s => array(%s, %s, %s, %s, %s, %s),\n", $state->mark, self::export(array('_route' => $name) + $defaults), self::export($vars), self::export(array_flip($route->getMethods()) ?: null), self::export(array_flip($route->getSchemes()) ?: null), - self::export($hasTrailingSlash) + self::export($hasTrailingSlash), + self::export($hasTrailingVar) ); } else { $prevRegex = $compiledRoute->getRegex(); $state->switch .= <<mark}: -{$this->compileRoute($route, $name, false, $hasTrailingSlash, $vars)} +{$this->compileRoute($route, $name, false, $hasTrailingSlash, $hasTrailingVar, $vars)} break; EOF; @@ -544,67 +547,84 @@ private function compileStaticPrefixCollection(StaticPrefixCollection $tree, \st */ private function compileSwitchDefault(bool $hasVars, bool $matchHost): string { - $code = sprintf(" - if ('/' !== \$pathinfo) {%s - if (\$hasTrailingSlash !== ('/' === \$pathinfo[-1])) {%s - break; + if ($this->supportsRedirections) { + $code = <<<'EOF' + + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } - }\n", - $hasVars ? " - if ('/' === \$pathinfo[-1]) { - if (preg_match(\$regex, substr(\$pathinfo, 0, -1), \$n) && \$m === (int) \$n['MARK']) { - \$matches = \$n; - } else { - \$hasTrailingSlash = true; - } - }\n" : '', - $this->supportsRedirections ? " - if ((!\$requiredMethods || isset(\$requiredMethods['GET'])) && 'GET' === \$canonicalMethod) { - return \$allow = \$allowSchemes = array(); - }" : '' +EOF; + } else { + $code = ''; + } + + $code .= $hasVars ? ' + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + break; + }' : ' + break;'; + + $code = sprintf(<<<'EOF' + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) {%s + } + +EOF + , + $code ); if ($hasVars) { - $code .= << \$v) { - if (isset(\$matches[1 + \$i])) { - \$ret[\$v] = \$matches[1 + \$i]; +EOF + .$code.<<<'EOF' + + foreach ($vars as $i => $v) { + if (isset($matches[1 + $i])) { + $ret[$v] = $matches[1 + $i]; } } EOF; } elseif ($matchHost) { - $code .= <<mergeDefaults(\$hostMatches, \$ret); + if ('#' === $requiredHost[0] && $hostMatches) { + $hostMatches['_route'] = $ret['_route']; + $ret = $this->mergeDefaults($hostMatches, $ret); } } EOF; } - $code .= <<getScheme()]); - if (\$requiredMethods && !isset(\$requiredMethods[\$canonicalMethod]) && !isset(\$requiredMethods[\$requestMethod])) { - if (\$hasRequiredScheme) { - \$allow += \$requiredMethods; + $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); + if ($requiredMethods && !isset($requiredMethods[$canonicalMethod]) && !isset($requiredMethods[$requestMethod])) { + if ($hasRequiredScheme) { + $allow += $requiredMethods; } break; } - if (!\$hasRequiredScheme) { - \$allowSchemes += \$requiredSchemes; + if (!$hasRequiredScheme) { + $allowSchemes += $requiredSchemes; break; } - return \$ret; + return $ret; EOF; @@ -616,7 +636,7 @@ private function compileSwitchDefault(bool $hasVars, bool $matchHost): string * * @throws \LogicException */ - private function compileRoute(Route $route, string $name, bool $checkHost, bool $hasTrailingSlash, array $vars = null): string + private function compileRoute(Route $route, string $name, bool $checkHost, bool $hasTrailingSlash, bool $hasTrailingVar = false, array $vars = null): string { $compiledRoute = $route->compile(); $conditions = array(); @@ -624,44 +644,69 @@ private function compileRoute(Route $route, string $name, bool $checkHost, bool $hostMatches = (bool) $compiledRoute->getHostVariables(); $methods = array_flip($route->getMethods()); $gotoname = 'not_'.preg_replace('/[^A-Za-z0-9_]/', '', $name); - $code = " // $name"; + $code = " // $name\n"; if ('/' === $route->getPath()) { - $code .= "\n"; - } elseif (!$matches) { - $code .= sprintf(" - if ('/' !== \$pathinfo && '/' %s \$pathinfo[-1]) {%s - goto $gotoname; - }\n\n", - $hasTrailingSlash ? '!==' : '===', - $this->supportsRedirections && (!$methods || isset($methods['GET'])) ? " - if ('GET' === \$canonicalMethod) { - return \$allow = \$allowSchemes = array(); - }" : '' + // no-op + } elseif (!$hasTrailingVar) { + $code .= sprintf(<<<'EOF' + if ('/' !== $pathinfo && $trimmedPathinfo %s $pathinfo) {%%s + goto %%s; + } +EOF + , + $hasTrailingSlash ? '===' : '!==' ); } elseif ($hasTrailingSlash) { - $code .= sprintf(" - if ('/' !== \$pathinfo[-1]) {%s - goto $gotoname; - } - if ('/' !== \$pathinfo && preg_match(\$regex, substr(\$pathinfo, 0, -1), \$n) && \$m === (int) \$n['MARK']) { - \$matches = \$n; - }\n\n", - $this->supportsRedirections && (!$methods || isset($methods['GET'])) ? " - if ('GET' === \$canonicalMethod) { - return \$allow = \$allowSchemes = array(); - }" : '' - ); + $code .= <<<'EOF' + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) {%s + goto %s; + } + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } +EOF; + } elseif ($this->supportsRedirections && (!$methods || isset($methods['GET']))) { + $code .= <<<'EOF' + $hasTrailingSlash = false; + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; } else { - $code .= sprintf(" - if ('/' !== \$pathinfo && '/' === \$pathinfo[-1] && preg_match(\$regex, substr(\$pathinfo, 0, -1), \$n) && \$m === (int) \$n['MARK']) {%s - goto $gotoname; - }\n\n", - $this->supportsRedirections && (!$methods || isset($methods['GET'])) ? " - if ('GET' === \$canonicalMethod) { - return \$allow = \$allowSchemes = array(); - }" : '' - ); + $hasTrailingSlash = true; + } + + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) {%s + if ($trimmedPathinfo === $pathinfo) { + goto %s; + } + } +EOF; + } else { + $code .= <<<'EOF' + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { + goto %2$s; + } +EOF; + } + + if ($this->supportsRedirections && (!$methods || isset($methods['GET']))) { + $code = sprintf($code, <<<'EOF' + + if ('GET' === $canonicalMethod) { + return $allow = $allowSchemes = array(); + } +EOF + , + $gotoname + )."\n\n"; + } elseif ('/' !== $route->getPath()) { + $code = sprintf($code, '', $gotoname)."\n\n"; } if ($vars) { diff --git a/src/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php b/src/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php index e60552f15823..bfdb59b3785a 100644 --- a/src/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php +++ b/src/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php @@ -44,11 +44,11 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' === $pathinfo) { + } elseif ('/' === $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { throw $e; } else { try { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; $ret = parent::match($pathinfo); return $this->redirect($pathinfo, $ret['_route'] ?? null) + $ret; diff --git a/src/Symfony/Component/Routing/Matcher/UrlMatcher.php b/src/Symfony/Component/Routing/Matcher/UrlMatcher.php index f8379b41c515..296435206a71 100644 --- a/src/Symfony/Component/Routing/Matcher/UrlMatcher.php +++ b/src/Symfony/Component/Routing/Matcher/UrlMatcher.php @@ -84,7 +84,7 @@ public function match($pathinfo) { $this->allow = $this->allowSchemes = array(); - if ($ret = $this->matchCollection(rawurldecode($pathinfo), $this->routes)) { + if ($ret = $this->matchCollection(rawurldecode($pathinfo) ?: '/', $this->routes)) { return $ret; } @@ -134,49 +134,41 @@ protected function matchCollection($pathinfo, RouteCollection $routes) if ('HEAD' === $method = $this->context->getMethod()) { $method = 'GET'; } - $supportsTrailingSlash = '/' !== $pathinfo && '' !== $pathinfo && $this instanceof RedirectableUrlMatcherInterface; + $supportsTrailingSlash = 'GET' === $method && $this instanceof RedirectableUrlMatcherInterface; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; foreach ($routes as $name => $route) { $compiledRoute = $route->compile(); - $staticPrefix = $compiledRoute->getStaticPrefix(); + $staticPrefix = rtrim($compiledRoute->getStaticPrefix(), '/'); $requiredMethods = $route->getMethods(); // check the static prefix of the URL first. Only use the more expensive preg_match when it matches - if ('' === $staticPrefix || 0 === strpos($pathinfo, $staticPrefix)) { - // no-op - } elseif (!$supportsTrailingSlash || ($requiredMethods && !\in_array('GET', $requiredMethods)) || 'GET' !== $method) { - continue; - } elseif ('/' === $staticPrefix[-1] && substr($staticPrefix, 0, -1) === $pathinfo) { - return $this->allow = $this->allowSchemes = array(); - } elseif ('/' === $pathinfo[-1] && substr($pathinfo, 0, -1) === $staticPrefix) { - return $this->allow = $this->allowSchemes = array(); - } else { + if ('' !== $staticPrefix && 0 !== strpos($trimmedPathinfo, $staticPrefix)) { continue; } $regex = $compiledRoute->getRegex(); - if ($supportsTrailingSlash) { - $pos = strrpos($regex, '$'); - $hasTrailingSlash = '/' === $regex[$pos - 1]; - $regex = substr_replace($regex, '/?$', $pos - $hasTrailingSlash, 1 + $hasTrailingSlash); - } + $pos = strrpos($regex, '$'); + $hasTrailingSlash = '/' === $regex[$pos - 1]; + $regex = substr_replace($regex, '/?$', $pos - $hasTrailingSlash, 1 + $hasTrailingSlash); if (!preg_match($regex, $pathinfo, $matches)) { continue; } - if ($supportsTrailingSlash) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $m)) { - $matches = $m; - } else { - $hasTrailingSlash = true; - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar = preg_match('#\{\w+\}/?$#', $route->getPath())) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $m)) { + $matches = $m; + } else { + $hasTrailingSlash = true; + } + + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($supportsTrailingSlash && (!$requiredMethods || \in_array('GET', $requiredMethods))) { + return $this->allow = $this->allowSchemes = array(); } - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || \in_array('GET', $requiredMethods)) && 'GET' === $method) { - return $this->allow = $this->allowSchemes = array(); - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { continue; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher0.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher0.php index fa7fb6b5b922..49972ca8b750 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher0.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher0.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php index ccbe5941f2aa..b4c372313d9a 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); $host = strtolower($context->getHost()); @@ -27,7 +28,7 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { default: $routes = array( '/test/baz' => array(array('_route' => 'baz'), null, null, null, false), @@ -53,11 +54,8 @@ public function match($rawPathinfo) break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - break; - } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + break; } if ($requiredHost) { @@ -132,7 +130,7 @@ public function match($rawPathinfo) .')' .')' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -140,10 +138,10 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { case 115: // baz4 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { goto not_baz4; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -153,10 +151,10 @@ public function match($rawPathinfo) not_baz4: // baz5 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { goto not_baz5; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -170,10 +168,10 @@ public function match($rawPathinfo) not_baz5: // baz.baz6 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { goto not_bazbaz6; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -189,7 +187,11 @@ public function match($rawPathinfo) break; case 160: // foo1 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_foo1; } @@ -207,7 +209,11 @@ public function match($rawPathinfo) break; case 204: // foo2 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_foo2; } @@ -219,7 +225,11 @@ public function match($rawPathinfo) break; case 279: // foo3 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_foo3; } @@ -231,37 +241,36 @@ public function match($rawPathinfo) break; default: $routes = array( - 47 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null, false), - 70 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null, false), - 90 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null, false), - 131 => array(array('_route' => 'quoter'), array('quoter'), null, null, false), - 168 => array(array('_route' => 'bar1'), array('bar'), null, null, false), - 181 => array(array('_route' => 'overridden'), array('var'), null, null, false), - 212 => array(array('_route' => 'bar2'), array('bar1'), null, null, false), - 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null, false), - 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null, false), - 309 => array(array('_route' => 'foo4'), array('foo'), null, null, false), - 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null, false), - 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null, false), - 441 => array(array('_route' => 'route15'), array('name'), null, null, false), - 489 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null, false), - 510 => array(array('_route' => 'a'), array(), null, null, false), - 531 => array(array('_route' => 'b'), array('var'), null, null, false), - 549 => array(array('_route' => 'c'), array('var'), null, null, false), + 47 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null, false, true), + 70 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null, false, true), + 90 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null, false, true), + 131 => array(array('_route' => 'quoter'), array('quoter'), null, null, false, true), + 168 => array(array('_route' => 'bar1'), array('bar'), null, null, false, true), + 181 => array(array('_route' => 'overridden'), array('var'), null, null, false, true), + 212 => array(array('_route' => 'bar2'), array('bar1'), null, null, false, true), + 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null, false, true), + 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null, false, true), + 309 => array(array('_route' => 'foo4'), array('foo'), null, null, false, true), + 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null, false, true), + 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null, false, true), + 441 => array(array('_route' => 'route15'), array('name'), null, null, false, true), + 489 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null, false, true), + 510 => array(array('_route' => 'a'), array(), null, null, false, false), + 531 => array(array('_route' => 'b'), array('var'), null, null, false, true), + 549 => array(array('_route' => 'c'), array('var'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; - - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php index ab907b2393c9..a108249964dc 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -906,7 +907,7 @@ public function match($rawPathinfo) .'|1d92b/([^/]++)/([^/]++)/([^/]++)/51d92b(*:24737)' .'|98b3e/([^/]++)/([^/]++)/([^/]++)/598b3e(*:24786)' .')' - .')(?:/?)$}sD', + .')/?$}sD', 24786 => '{^(?' .'|/5(?' .'|b69b9/([^/]++)/([^/]++)/([^/]++)/5b69b9(*:24837)' @@ -1781,7 +1782,7 @@ public function match($rawPathinfo) .')' .'|9c9ad/([^/]++)/([^/]++)/([^/]++)/49c9ad(*:49718)' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -1789,1020 +1790,1019 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 54 => array(array('_route' => '_0'), array('a', 'b', 'c'), null, null, false), - 102 => array(array('_route' => '_190'), array('a', 'b', 'c'), null, null, false), - 147 => array(array('_route' => '_478'), array('a', 'b', 'c'), null, null, false), - 194 => array(array('_route' => '_259'), array('a', 'b', 'c'), null, null, false), - 240 => array(array('_route' => '_368'), array('a', 'b', 'c'), null, null, false), - 291 => array(array('_route' => '_1'), array('a', 'b', 'c'), null, null, false), - 337 => array(array('_route' => '_116'), array('a', 'b', 'c'), null, null, false), - 383 => array(array('_route' => '_490'), array('a', 'b', 'c'), null, null, false), - 434 => array(array('_route' => '_2'), array('a', 'b', 'c'), null, null, false), - 480 => array(array('_route' => '_124'), array('a', 'b', 'c'), null, null, false), - 526 => array(array('_route' => '_389'), array('a', 'b', 'c'), null, null, false), - 577 => array(array('_route' => '_8'), array('a', 'b', 'c'), null, null, false), - 623 => array(array('_route' => '_104'), array('a', 'b', 'c'), null, null, false), - 677 => array(array('_route' => '_12'), array('a', 'b', 'c'), null, null, false), - 722 => array(array('_route' => '_442'), array('a', 'b', 'c'), null, null, false), - 769 => array(array('_route' => '_253'), array('a', 'b', 'c'), null, null, false), - 820 => array(array('_route' => '_13'), array('a', 'b', 'c'), null, null, false), - 866 => array(array('_route' => '_254'), array('a', 'b', 'c'), null, null, false), - 912 => array(array('_route' => '_347'), array('a', 'b', 'c'), null, null, false), - 963 => array(array('_route' => '_16'), array('a', 'b', 'c'), null, null, false), - 1009 => array(array('_route' => '_87'), array('a', 'b', 'c'), null, null, false), - 1058 => array(array('_route' => '_31'), array('a', 'b', 'c'), null, null, false), - 1109 => array(array('_route' => '_50'), array('a', 'b', 'c'), null, null, false), - 1156 => array(array('_route' => '_219'), array('a', 'b', 'c'), null, null, false), - 1203 => array(array('_route' => '_332'), array('a', 'b', 'c'), null, null, false), - 1250 => array(array('_route' => '_359'), array('a', 'b', 'c'), null, null, false), - 1302 => array(array('_route' => '_183'), array('a', 'b', 'c'), null, null, false), - 1349 => array(array('_route' => '_500'), array('a', 'b', 'c'), null, null, false), - 1401 => array(array('_route' => '_214'), array('a', 'b', 'c'), null, null, false), - 1448 => array(array('_route' => '_321'), array('a', 'b', 'c'), null, null, false), - 1497 => array(array('_route' => '_243'), array('a', 'b', 'c'), null, null, false), - 1545 => array(array('_route' => '_328'), array('a', 'b', 'c'), null, null, false), - 1596 => array(array('_route' => '_362'), array('a', 'b', 'c'), null, null, false), - 1643 => array(array('_route' => '_488'), array('a', 'b', 'c'), null, null, false), - 1701 => array(array('_route' => '_3'), array('a', 'b', 'c'), null, null, false), - 1751 => array(array('_route' => '_102'), array('a', 'b', 'c'), null, null, false), - 1797 => array(array('_route' => '_220'), array('a', 'b', 'c'), null, null, false), - 1845 => array(array('_route' => '_127'), array('a', 'b', 'c'), null, null, false), - 1897 => array(array('_route' => '_5'), array('a', 'b', 'c'), null, null, false), - 1944 => array(array('_route' => '_242'), array('a', 'b', 'c'), null, null, false), - 1991 => array(array('_route' => '_397'), array('a', 'b', 'c'), null, null, false), - 2038 => array(array('_route' => '_454'), array('a', 'b', 'c'), null, null, false), - 2090 => array(array('_route' => '_34'), array('a', 'b', 'c'), null, null, false), - 2137 => array(array('_route' => '_281'), array('a', 'b', 'c'), null, null, false), - 2189 => array(array('_route' => '_64'), array('a', 'b', 'c'), null, null, false), - 2236 => array(array('_route' => '_205'), array('a', 'b', 'c'), null, null, false), - 2291 => array(array('_route' => '_71'), array('a', 'b', 'c'), null, null, false), - 2337 => array(array('_route' => '_203'), array('a', 'b', 'c'), null, null, false), - 2385 => array(array('_route' => '_97'), array('a', 'b', 'c'), null, null, false), - 2437 => array(array('_route' => '_98'), array('a', 'b', 'c'), null, null, false), - 2484 => array(array('_route' => '_267'), array('a', 'b', 'c'), null, null, false), - 2531 => array(array('_route' => '_309'), array('a', 'b', 'c'), null, null, false), - 2586 => array(array('_route' => '_117'), array('a', 'b', 'c'), null, null, false), - 2631 => array(array('_route' => '_211'), array('a', 'b', 'c'), null, null, false), - 2679 => array(array('_route' => '_484'), array('a', 'b', 'c'), null, null, false), - 2731 => array(array('_route' => '_139'), array('a', 'b', 'c'), null, null, false), - 2778 => array(array('_route' => '_421'), array('a', 'b', 'c'), null, null, false), - 2830 => array(array('_route' => '_185'), array('a', 'b', 'c'), null, null, false), - 2877 => array(array('_route' => '_439'), array('a', 'b', 'c'), null, null, false), - 2926 => array(array('_route' => '_218'), array('a', 'b', 'c'), null, null, false), - 2977 => array(array('_route' => '_233'), array('a', 'b', 'c'), null, null, false), - 3024 => array(array('_route' => '_483'), array('a', 'b', 'c'), null, null, false), - 3073 => array(array('_route' => '_265'), array('a', 'b', 'c'), null, null, false), - 3124 => array(array('_route' => '_299'), array('a', 'b', 'c'), null, null, false), - 3171 => array(array('_route' => '_351'), array('a', 'b', 'c'), null, null, false), - 3218 => array(array('_route' => '_472'), array('a', 'b', 'c'), null, null, false), - 3267 => array(array('_route' => '_360'), array('a', 'b', 'c'), null, null, false), - 3315 => array(array('_route' => '_466'), array('a', 'b', 'c'), null, null, false), - 3372 => array(array('_route' => '_4'), array('a', 'b', 'c'), null, null, false), - 3419 => array(array('_route' => '_142'), array('a', 'b', 'c'), null, null, false), - 3466 => array(array('_route' => '_151'), array('a', 'b', 'c'), null, null, false), - 3513 => array(array('_route' => '_308'), array('a', 'b', 'c'), null, null, false), - 3560 => array(array('_route' => '_440'), array('a', 'b', 'c'), null, null, false), - 3612 => array(array('_route' => '_14'), array('a', 'b', 'c'), null, null, false), - 3659 => array(array('_route' => '_358'), array('a', 'b', 'c'), null, null, false), - 3711 => array(array('_route' => '_37'), array('a', 'b', 'c'), null, null, false), - 3758 => array(array('_route' => '_38'), array('a', 'b', 'c'), null, null, false), - 3805 => array(array('_route' => '_146'), array('a', 'b', 'c'), null, null, false), - 3852 => array(array('_route' => '_194'), array('a', 'b', 'c'), null, null, false), - 3899 => array(array('_route' => '_487'), array('a', 'b', 'c'), null, null, false), - 3948 => array(array('_route' => '_42'), array('a', 'b', 'c'), null, null, false), - 3999 => array(array('_route' => '_54'), array('a', 'b', 'c'), null, null, false), - 4046 => array(array('_route' => '_326'), array('a', 'b', 'c'), null, null, false), - 4098 => array(array('_route' => '_68'), array('a', 'b', 'c'), null, null, false), - 4145 => array(array('_route' => '_108'), array('a', 'b', 'c'), null, null, false), - 4197 => array(array('_route' => '_74'), array('a', 'b', 'c'), null, null, false), - 4244 => array(array('_route' => '_315'), array('a', 'b', 'c'), null, null, false), - 4291 => array(array('_route' => '_374'), array('a', 'b', 'c'), null, null, false), - 4343 => array(array('_route' => '_99'), array('a', 'b', 'c'), null, null, false), - 4390 => array(array('_route' => '_238'), array('a', 'b', 'c'), null, null, false), - 4442 => array(array('_route' => '_107'), array('a', 'b', 'c'), null, null, false), - 4489 => array(array('_route' => '_409'), array('a', 'b', 'c'), null, null, false), - 4541 => array(array('_route' => '_122'), array('a', 'b', 'c'), null, null, false), - 4588 => array(array('_route' => '_379'), array('a', 'b', 'c'), null, null, false), - 4635 => array(array('_route' => '_390'), array('a', 'b', 'c'), null, null, false), - 4687 => array(array('_route' => '_171'), array('a', 'b', 'c'), null, null, false), - 4734 => array(array('_route' => '_260'), array('a', 'b', 'c'), null, null, false), - 4781 => array(array('_route' => '_434'), array('a', 'b', 'c'), null, null, false), - 4830 => array(array('_route' => '_189'), array('a', 'b', 'c'), null, null, false), - 4878 => array(array('_route' => '_467'), array('a', 'b', 'c'), null, null, false), - 4935 => array(array('_route' => '_6'), array('a', 'b', 'c'), null, null, false), - 4982 => array(array('_route' => '_286'), array('a', 'b', 'c'), null, null, false), - 5029 => array(array('_route' => '_438'), array('a', 'b', 'c'), null, null, false), - 5081 => array(array('_route' => '_19'), array('a', 'b', 'c'), null, null, false), - 5131 => array(array('_route' => '_24'), array('a', 'b', 'c'), null, null, false), - 5177 => array(array('_route' => '_172'), array('a', 'b', 'c'), null, null, false), - 5230 => array(array('_route' => '_33'), array('a', 'b', 'c'), null, null, false), - 5277 => array(array('_route' => '_400'), array('a', 'b', 'c'), null, null, false), - 5324 => array(array('_route' => '_427'), array('a', 'b', 'c'), null, null, false), - 5376 => array(array('_route' => '_35'), array('a', 'b', 'c'), null, null, false), - 5423 => array(array('_route' => '_156'), array('a', 'b', 'c'), null, null, false), - 5475 => array(array('_route' => '_36'), array('a', 'b', 'c'), null, null, false), - 5522 => array(array('_route' => '_251'), array('a', 'b', 'c'), null, null, false), - 5574 => array(array('_route' => '_43'), array('a', 'b', 'c'), null, null, false), - 5621 => array(array('_route' => '_292'), array('a', 'b', 'c'), null, null, false), - 5668 => array(array('_route' => '_411'), array('a', 'b', 'c'), null, null, false), - 5720 => array(array('_route' => '_69'), array('a', 'b', 'c'), null, null, false), - 5767 => array(array('_route' => '_159'), array('a', 'b', 'c'), null, null, false), - 5814 => array(array('_route' => '_170'), array('a', 'b', 'c'), null, null, false), - 5861 => array(array('_route' => '_376'), array('a', 'b', 'c'), null, null, false), - 5913 => array(array('_route' => '_131'), array('a', 'b', 'c'), null, null, false), - 5960 => array(array('_route' => '_446'), array('a', 'b', 'c'), null, null, false), - 6015 => array(array('_route' => '_140'), array('a', 'b', 'c'), null, null, false), - 6061 => array(array('_route' => '_353'), array('a', 'b', 'c'), null, null, false), - 6112 => array(array('_route' => '_224'), array('a', 'b', 'c'), null, null, false), - 6158 => array(array('_route' => '_346'), array('a', 'b', 'c'), null, null, false), - 6204 => array(array('_route' => '_443'), array('a', 'b', 'c'), null, null, false), - 6254 => array(array('_route' => '_154'), array('a', 'b', 'c'), null, null, false), - 6305 => array(array('_route' => '_212'), array('a', 'b', 'c'), null, null, false), - 6352 => array(array('_route' => '_313'), array('a', 'b', 'c'), null, null, false), - 6399 => array(array('_route' => '_395'), array('a', 'b', 'c'), null, null, false), - 6446 => array(array('_route' => '_441'), array('a', 'b', 'c'), null, null, false), - 6498 => array(array('_route' => '_223'), array('a', 'b', 'c'), null, null, false), - 6545 => array(array('_route' => '_303'), array('a', 'b', 'c'), null, null, false), - 6594 => array(array('_route' => '_410'), array('a', 'b', 'c'), null, null, false), - 6642 => array(array('_route' => '_494'), array('a', 'b', 'c'), null, null, false), - 6702 => array(array('_route' => '_7'), array('a', 'b', 'c'), null, null, false), - 6748 => array(array('_route' => '_268'), array('a', 'b', 'c'), null, null, false), - 6796 => array(array('_route' => '_178'), array('a', 'b', 'c'), null, null, false), - 6843 => array(array('_route' => '_179'), array('a', 'b', 'c'), null, null, false), - 6890 => array(array('_route' => '_416'), array('a', 'b', 'c'), null, null, false), - 6942 => array(array('_route' => '_25'), array('a', 'b', 'c'), null, null, false), - 6989 => array(array('_route' => '_307'), array('a', 'b', 'c'), null, null, false), - 7036 => array(array('_route' => '_387'), array('a', 'b', 'c'), null, null, false), - 7083 => array(array('_route' => '_471'), array('a', 'b', 'c'), null, null, false), - 7132 => array(array('_route' => '_90'), array('a', 'b', 'c'), null, null, false), - 7183 => array(array('_route' => '_95'), array('a', 'b', 'c'), null, null, false), - 7230 => array(array('_route' => '_338'), array('a', 'b', 'c'), null, null, false), - 7277 => array(array('_route' => '_401'), array('a', 'b', 'c'), null, null, false), - 7329 => array(array('_route' => '_147'), array('a', 'b', 'c'), null, null, false), - 7376 => array(array('_route' => '_319'), array('a', 'b', 'c'), null, null, false), - 7423 => array(array('_route' => '_354'), array('a', 'b', 'c'), null, null, false), - 7470 => array(array('_route' => '_428'), array('a', 'b', 'c'), null, null, false), - 7522 => array(array('_route' => '_162'), array('a', 'b', 'c'), null, null, false), - 7572 => array(array('_route' => '_175'), array('a', 'b', 'c'), null, null, false), - 7618 => array(array('_route' => '_455'), array('a', 'b', 'c'), null, null, false), - 7666 => array(array('_route' => '_355'), array('a', 'b', 'c'), null, null, false), - 7718 => array(array('_route' => '_197'), array('a', 'b', 'c'), null, null, false), - 7768 => array(array('_route' => '_202'), array('a', 'b', 'c'), null, null, false), - 7813 => array(array('_route' => '_489'), array('a', 'b', 'c'), null, null, false), - 7863 => array(array('_route' => '_199'), array('a', 'b', 'c'), null, null, false), - 7914 => array(array('_route' => '_263'), array('a', 'b', 'c'), null, null, false), - 7961 => array(array('_route' => '_406'), array('a', 'b', 'c'), null, null, false), - 8010 => array(array('_route' => '_289'), array('a', 'b', 'c'), null, null, false), - 8058 => array(array('_route' => '_325'), array('a', 'b', 'c'), null, null, false), - 8106 => array(array('_route' => '_378'), array('a', 'b', 'c'), null, null, false), - 8154 => array(array('_route' => '_468'), array('a', 'b', 'c'), null, null, false), - 8211 => array(array('_route' => '_9'), array('a', 'b', 'c'), null, null, false), - 8258 => array(array('_route' => '_216'), array('a', 'b', 'c'), null, null, false), - 8307 => array(array('_route' => '_26'), array('a', 'b', 'c'), null, null, false), - 8355 => array(array('_route' => '_62'), array('a', 'b', 'c'), null, null, false), - 8406 => array(array('_route' => '_81'), array('a', 'b', 'c'), null, null, false), - 8453 => array(array('_route' => '_318'), array('a', 'b', 'c'), null, null, false), - 8505 => array(array('_route' => '_121'), array('a', 'b', 'c'), null, null, false), - 8551 => array(array('_route' => '_182'), array('a', 'b', 'c'), null, null, false), - 8603 => array(array('_route' => '_136'), array('a', 'b', 'c'), null, null, false), - 8650 => array(array('_route' => '_415'), array('a', 'b', 'c'), null, null, false), - 8697 => array(array('_route' => '_457'), array('a', 'b', 'c'), null, null, false), - 8744 => array(array('_route' => '_463'), array('a', 'b', 'c'), null, null, false), - 8796 => array(array('_route' => '_148'), array('a', 'b', 'c'), null, null, false), - 8843 => array(array('_route' => '_273'), array('a', 'b', 'c'), null, null, false), - 8892 => array(array('_route' => '_284'), array('a', 'b', 'c'), null, null, false), - 8940 => array(array('_route' => '_288'), array('a', 'b', 'c'), null, null, false), - 8991 => array(array('_route' => '_295'), array('a', 'b', 'c'), null, null, false), - 9038 => array(array('_route' => '_305'), array('a', 'b', 'c'), null, null, false), - 9085 => array(array('_route' => '_453'), array('a', 'b', 'c'), null, null, false), - 9134 => array(array('_route' => '_340'), array('a', 'b', 'c'), null, null, false), - 9185 => array(array('_route' => '_371'), array('a', 'b', 'c'), null, null, false), - 9232 => array(array('_route' => '_417'), array('a', 'b', 'c'), null, null, false), - 9284 => array(array('_route' => '_382'), array('a', 'b', 'c'), null, null, false), - 9331 => array(array('_route' => '_404'), array('a', 'b', 'c'), null, null, false), - 9389 => array(array('_route' => '_10'), array('a', 'b', 'c'), null, null, false), - 9436 => array(array('_route' => '_279'), array('a', 'b', 'c'), null, null, false), - 9483 => array(array('_route' => '_377'), array('a', 'b', 'c'), null, null, false), - 9535 => array(array('_route' => '_39'), array('a', 'b', 'c'), null, null, false), - 9582 => array(array('_route' => '_40'), array('a', 'b', 'c'), null, null, false), - 9629 => array(array('_route' => '_264'), array('a', 'b', 'c'), null, null, false), - 9676 => array(array('_route' => '_449'), array('a', 'b', 'c'), null, null, false), - 9728 => array(array('_route' => '_46'), array('a', 'b', 'c'), null, null, false), - 9775 => array(array('_route' => '_257'), array('a', 'b', 'c'), null, null, false), - 9822 => array(array('_route' => '_274'), array('a', 'b', 'c'), null, null, false), - 9869 => array(array('_route' => '_388'), array('a', 'b', 'c'), null, null, false), - 9921 => array(array('_route' => '_53'), array('a', 'b', 'c'), null, null, false), - 9968 => array(array('_route' => '_345'), array('a', 'b', 'c'), null, null, false), - 10020 => array(array('_route' => '_73'), array('a', 'b', 'c'), null, null, false), - 10068 => array(array('_route' => '_296'), array('a', 'b', 'c'), null, null, false), - 10121 => array(array('_route' => '_75'), array('a', 'b', 'c'), null, null, false), - 10169 => array(array('_route' => '_458'), array('a', 'b', 'c'), null, null, false), - 10225 => array(array('_route' => '_79'), array('a', 'b', 'c'), null, null, false), - 10272 => array(array('_route' => '_129'), array('a', 'b', 'c'), null, null, false), - 10319 => array(array('_route' => '_418'), array('a', 'b', 'c'), null, null, false), - 10368 => array(array('_route' => '_225'), array('a', 'b', 'c'), null, null, false), - 10416 => array(array('_route' => '_479'), array('a', 'b', 'c'), null, null, false), - 10466 => array(array('_route' => '_120'), array('a', 'b', 'c'), null, null, false), - 10515 => array(array('_route' => '_276'), array('a', 'b', 'c'), null, null, false), - 10564 => array(array('_route' => '_370'), array('a', 'b', 'c'), null, null, false), - 10616 => array(array('_route' => '_385'), array('a', 'b', 'c'), null, null, false), - 10664 => array(array('_route' => '_469'), array('a', 'b', 'c'), null, null, false), - 10714 => array(array('_route' => '_435'), array('a', 'b', 'c'), null, null, false), - 10772 => array(array('_route' => '_11'), array('a', 'b', 'c'), null, null, false), - 10820 => array(array('_route' => '_105'), array('a', 'b', 'c'), null, null, false), - 10868 => array(array('_route' => '_132'), array('a', 'b', 'c'), null, null, false), - 10921 => array(array('_route' => '_18'), array('a', 'b', 'c'), null, null, false), - 10969 => array(array('_route' => '_210'), array('a', 'b', 'c'), null, null, false), - 11017 => array(array('_route' => '_329'), array('a', 'b', 'c'), null, null, false), - 11073 => array(array('_route' => '_29'), array('a', 'b', 'c'), null, null, false), - 11120 => array(array('_route' => '_480'), array('a', 'b', 'c'), null, null, false), - 11169 => array(array('_route' => '_426'), array('a', 'b', 'c'), null, null, false), - 11222 => array(array('_route' => '_32'), array('a', 'b', 'c'), null, null, false), - 11270 => array(array('_route' => '_217'), array('a', 'b', 'c'), null, null, false), - 11318 => array(array('_route' => '_275'), array('a', 'b', 'c'), null, null, false), - 11371 => array(array('_route' => '_45'), array('a', 'b', 'c'), null, null, false), - 11419 => array(array('_route' => '_157'), array('a', 'b', 'c'), null, null, false), - 11467 => array(array('_route' => '_184'), array('a', 'b', 'c'), null, null, false), - 11515 => array(array('_route' => '_250'), array('a', 'b', 'c'), null, null, false), - 11563 => array(array('_route' => '_356'), array('a', 'b', 'c'), null, null, false), - 11616 => array(array('_route' => '_47'), array('a', 'b', 'c'), null, null, false), - 11664 => array(array('_route' => '_445'), array('a', 'b', 'c'), null, null, false), - 11714 => array(array('_route' => '_48'), array('a', 'b', 'c'), null, null, false), - 11766 => array(array('_route' => '_58'), array('a', 'b', 'c'), null, null, false), - 11814 => array(array('_route' => '_414'), array('a', 'b', 'c'), null, null, false), - 11862 => array(array('_route' => '_431'), array('a', 'b', 'c'), null, null, false), - 11915 => array(array('_route' => '_84'), array('a', 'b', 'c'), null, null, false), - 11963 => array(array('_route' => '_294'), array('a', 'b', 'c'), null, null, false), - 12011 => array(array('_route' => '_336'), array('a', 'b', 'c'), null, null, false), - 12059 => array(array('_route' => '_465'), array('a', 'b', 'c'), null, null, false), - 12112 => array(array('_route' => '_103'), array('a', 'b', 'c'), null, null, false), - 12160 => array(array('_route' => '_111'), array('a', 'b', 'c'), null, null, false), - 12208 => array(array('_route' => '_207'), array('a', 'b', 'c'), null, null, false), - 12256 => array(array('_route' => '_402'), array('a', 'b', 'c'), null, null, false), - 12309 => array(array('_route' => '_230'), array('a', 'b', 'c'), null, null, false), - 12356 => array(array('_route' => '_331'), array('a', 'b', 'c'), null, null, false), - 12406 => array(array('_route' => '_248'), array('a', 'b', 'c'), null, null, false), - 12455 => array(array('_route' => '_282'), array('a', 'b', 'c'), null, null, false), - 12513 => array(array('_route' => '_15'), array('a', 'b', 'c'), null, null, false), - 12561 => array(array('_route' => '_130'), array('a', 'b', 'c'), null, null, false), - 12609 => array(array('_route' => '_231'), array('a', 'b', 'c'), null, null, false), - 12657 => array(array('_route' => '_365'), array('a', 'b', 'c'), null, null, false), - 12705 => array(array('_route' => '_448'), array('a', 'b', 'c'), null, null, false), - 12758 => array(array('_route' => '_20'), array('a', 'b', 'c'), null, null, false), - 12806 => array(array('_route' => '_93'), array('a', 'b', 'c'), null, null, false), - 12854 => array(array('_route' => '_186'), array('a', 'b', 'c'), null, null, false), - 12902 => array(array('_route' => '_460'), array('a', 'b', 'c'), null, null, false), - 12955 => array(array('_route' => '_52'), array('a', 'b', 'c'), null, null, false), - 13003 => array(array('_route' => '_447'), array('a', 'b', 'c'), null, null, false), - 13056 => array(array('_route' => '_56'), array('a', 'b', 'c'), null, null, false), - 13104 => array(array('_route' => '_133'), array('a', 'b', 'c'), null, null, false), - 13152 => array(array('_route' => '_297'), array('a', 'b', 'c'), null, null, false), - 13205 => array(array('_route' => '_82'), array('a', 'b', 'c'), null, null, false), - 13253 => array(array('_route' => '_165'), array('a', 'b', 'c'), null, null, false), - 13301 => array(array('_route' => '_213'), array('a', 'b', 'c'), null, null, false), - 13351 => array(array('_route' => '_86'), array('a', 'b', 'c'), null, null, false), - 13403 => array(array('_route' => '_92'), array('a', 'b', 'c'), null, null, false), - 13450 => array(array('_route' => '_280'), array('a', 'b', 'c'), null, null, false), - 13500 => array(array('_route' => '_143'), array('a', 'b', 'c'), null, null, false), - 13549 => array(array('_route' => '_177'), array('a', 'b', 'c'), null, null, false), - 13601 => array(array('_route' => '_188'), array('a', 'b', 'c'), null, null, false), - 13649 => array(array('_route' => '_311'), array('a', 'b', 'c'), null, null, false), - 13697 => array(array('_route' => '_350'), array('a', 'b', 'c'), null, null, false), - 13750 => array(array('_route' => '_226'), array('a', 'b', 'c'), null, null, false), - 13798 => array(array('_route' => '_291'), array('a', 'b', 'c'), null, null, false), - 13851 => array(array('_route' => '_244'), array('a', 'b', 'c'), null, null, false), - 13898 => array(array('_route' => '_287'), array('a', 'b', 'c'), null, null, false), - 13951 => array(array('_route' => '_300'), array('a', 'b', 'c'), null, null, false), - 13999 => array(array('_route' => '_451'), array('a', 'b', 'c'), null, null, false), - 14047 => array(array('_route' => '_452'), array('a', 'b', 'c'), null, null, false), - 14095 => array(array('_route' => '_481'), array('a', 'b', 'c'), null, null, false), - 14145 => array(array('_route' => '_312'), array('a', 'b', 'c'), null, null, false), - 14203 => array(array('_route' => '_17'), array('a', 'b', 'c'), null, null, false), - 14251 => array(array('_route' => '_227'), array('a', 'b', 'c'), null, null, false), - 14299 => array(array('_route' => '_393'), array('a', 'b', 'c'), null, null, false), - 14349 => array(array('_route' => '_57'), array('a', 'b', 'c'), null, null, false), - 14401 => array(array('_route' => '_61'), array('a', 'b', 'c'), null, null, false), - 14449 => array(array('_route' => '_112'), array('a', 'b', 'c'), null, null, false), - 14500 => array(array('_route' => '_135'), array('a', 'b', 'c'), null, null, false), - 14547 => array(array('_route' => '_271'), array('a', 'b', 'c'), null, null, false), - 14596 => array(array('_route' => '_459'), array('a', 'b', 'c'), null, null, false), - 14649 => array(array('_route' => '_67'), array('a', 'b', 'c'), null, null, false), - 14697 => array(array('_route' => '_113'), array('a', 'b', 'c'), null, null, false), - 14745 => array(array('_route' => '_497'), array('a', 'b', 'c'), null, null, false), - 14795 => array(array('_route' => '_70'), array('a', 'b', 'c'), null, null, false), - 14847 => array(array('_route' => '_89'), array('a', 'b', 'c'), null, null, false), - 14895 => array(array('_route' => '_128'), array('a', 'b', 'c'), null, null, false), - 14948 => array(array('_route' => '_150'), array('a', 'b', 'c'), null, null, false), - 14996 => array(array('_route' => '_166'), array('a', 'b', 'c'), null, null, false), - 15047 => array(array('_route' => '_206'), array('a', 'b', 'c'), null, null, false), - 15094 => array(array('_route' => '_419'), array('a', 'b', 'c'), null, null, false), - 15148 => array(array('_route' => '_201'), array('a', 'b', 'c'), null, null, false), - 15196 => array(array('_route' => '_314'), array('a', 'b', 'c'), null, null, false), - 15244 => array(array('_route' => '_429'), array('a', 'b', 'c'), null, null, false), - 15297 => array(array('_route' => '_228'), array('a', 'b', 'c'), null, null, false), - 15345 => array(array('_route' => '_477'), array('a', 'b', 'c'), null, null, false), - 15395 => array(array('_route' => '_272'), array('a', 'b', 'c'), null, null, false), - 15444 => array(array('_route' => '_486'), array('a', 'b', 'c'), null, null, false), - 15502 => array(array('_route' => '_21'), array('a', 'b', 'c'), null, null, false), - 15550 => array(array('_route' => '_247'), array('a', 'b', 'c'), null, null, false), - 15598 => array(array('_route' => '_424'), array('a', 'b', 'c'), null, null, false), - 15646 => array(array('_route' => '_499'), array('a', 'b', 'c'), null, null, false), - 15699 => array(array('_route' => '_23'), array('a', 'b', 'c'), null, null, false), - 15747 => array(array('_route' => '_152'), array('a', 'b', 'c'), null, null, false), - 15795 => array(array('_route' => '_304'), array('a', 'b', 'c'), null, null, false), - 15843 => array(array('_route' => '_352'), array('a', 'b', 'c'), null, null, false), - 15896 => array(array('_route' => '_28'), array('a', 'b', 'c'), null, null, false), - 15944 => array(array('_route' => '_240'), array('a', 'b', 'c'), null, null, false), - 16000 => array(array('_route' => '_30'), array('a', 'b', 'c'), null, null, false), - 16047 => array(array('_route' => '_41'), array('a', 'b', 'c'), null, null, false), - 16096 => array(array('_route' => '_301'), array('a', 'b', 'c'), null, null, false), - 16149 => array(array('_route' => '_66'), array('a', 'b', 'c'), null, null, false), - 16197 => array(array('_route' => '_72'), array('a', 'b', 'c'), null, null, false), - 16245 => array(array('_route' => '_320'), array('a', 'b', 'c'), null, null, false), - 16298 => array(array('_route' => '_78'), array('a', 'b', 'c'), null, null, false), - 16346 => array(array('_route' => '_337'), array('a', 'b', 'c'), null, null, false), - 16394 => array(array('_route' => '_399'), array('a', 'b', 'c'), null, null, false), - 16442 => array(array('_route' => '_495'), array('a', 'b', 'c'), null, null, false), - 16492 => array(array('_route' => '_85'), array('a', 'b', 'c'), null, null, false), - 16544 => array(array('_route' => '_101'), array('a', 'b', 'c'), null, null, false), - 16592 => array(array('_route' => '_176'), array('a', 'b', 'c'), null, null, false), - 16640 => array(array('_route' => '_246'), array('a', 'b', 'c'), null, null, false), - 16693 => array(array('_route' => '_125'), array('a', 'b', 'c'), null, null, false), - 16741 => array(array('_route' => '_341'), array('a', 'b', 'c'), null, null, false), - 16794 => array(array('_route' => '_137'), array('a', 'b', 'c'), null, null, false), - 16842 => array(array('_route' => '_270'), array('a', 'b', 'c'), null, null, false), - 16890 => array(array('_route' => '_386'), array('a', 'b', 'c'), null, null, false), - 16943 => array(array('_route' => '_169'), array('a', 'b', 'c'), null, null, false), - 16991 => array(array('_route' => '_200'), array('a', 'b', 'c'), null, null, false), - 17039 => array(array('_route' => '_262'), array('a', 'b', 'c'), null, null, false), - 17092 => array(array('_route' => '_187'), array('a', 'b', 'c'), null, null, false), - 17140 => array(array('_route' => '_333'), array('a', 'b', 'c'), null, null, false), - 17190 => array(array('_route' => '_215'), array('a', 'b', 'c'), null, null, false), - 17239 => array(array('_route' => '_316'), array('a', 'b', 'c'), null, null, false), - 17288 => array(array('_route' => '_343'), array('a', 'b', 'c'), null, null, false), - 17346 => array(array('_route' => '_22'), array('a', 'b', 'c'), null, null, false), - 17394 => array(array('_route' => '_420'), array('a', 'b', 'c'), null, null, false), - 17447 => array(array('_route' => '_55'), array('a', 'b', 'c'), null, null, false), - 17494 => array(array('_route' => '_496'), array('a', 'b', 'c'), null, null, false), - 17547 => array(array('_route' => '_153'), array('a', 'b', 'c'), null, null, false), - 17595 => array(array('_route' => '_344'), array('a', 'b', 'c'), null, null, false), - 17648 => array(array('_route' => '_160'), array('a', 'b', 'c'), null, null, false), - 17696 => array(array('_route' => '_398'), array('a', 'b', 'c'), null, null, false), - 17749 => array(array('_route' => '_161'), array('a', 'b', 'c'), null, null, false), - 17797 => array(array('_route' => '_193'), array('a', 'b', 'c'), null, null, false), - 17847 => array(array('_route' => '_174'), array('a', 'b', 'c'), null, null, false), - 17899 => array(array('_route' => '_209'), array('a', 'b', 'c'), null, null, false), - 17947 => array(array('_route' => '_261'), array('a', 'b', 'c'), null, null, false), - 18000 => array(array('_route' => '_222'), array('a', 'b', 'c'), null, null, false), - 18048 => array(array('_route' => '_323'), array('a', 'b', 'c'), null, null, false), - 18096 => array(array('_route' => '_380'), array('a', 'b', 'c'), null, null, false), - 18149 => array(array('_route' => '_232'), array('a', 'b', 'c'), null, null, false), - 18197 => array(array('_route' => '_383'), array('a', 'b', 'c'), null, null, false), - 18247 => array(array('_route' => '_306'), array('a', 'b', 'c'), null, null, false), - 18296 => array(array('_route' => '_327'), array('a', 'b', 'c'), null, null, false), - 18345 => array(array('_route' => '_364'), array('a', 'b', 'c'), null, null, false), - 18397 => array(array('_route' => '_403'), array('a', 'b', 'c'), null, null, false), - 18445 => array(array('_route' => '_405'), array('a', 'b', 'c'), null, null, false), - 18495 => array(array('_route' => '_412'), array('a', 'b', 'c'), null, null, false), - 18553 => array(array('_route' => '_27'), array('a', 'b', 'c'), null, null, false), - 18601 => array(array('_route' => '_134'), array('a', 'b', 'c'), null, null, false), - 18649 => array(array('_route' => '_245'), array('a', 'b', 'c'), null, null, false), - 18702 => array(array('_route' => '_59'), array('a', 'b', 'c'), null, null, false), - 18750 => array(array('_route' => '_208'), array('a', 'b', 'c'), null, null, false), - 18803 => array(array('_route' => '_60'), array('a', 'b', 'c'), null, null, false), - 18851 => array(array('_route' => '_119'), array('a', 'b', 'c'), null, null, false), - 18902 => array(array('_route' => '_163'), array('a', 'b', 'c'), null, null, false), - 18949 => array(array('_route' => '_249'), array('a', 'b', 'c'), null, null, false), - 18998 => array(array('_route' => '_278'), array('a', 'b', 'c'), null, null, false), - 19051 => array(array('_route' => '_63'), array('a', 'b', 'c'), null, null, false), - 19099 => array(array('_route' => '_195'), array('a', 'b', 'c'), null, null, false), - 19147 => array(array('_route' => '_252'), array('a', 'b', 'c'), null, null, false), - 19195 => array(array('_route' => '_461'), array('a', 'b', 'c'), null, null, false), - 19248 => array(array('_route' => '_126'), array('a', 'b', 'c'), null, null, false), - 19296 => array(array('_route' => '_158'), array('a', 'b', 'c'), null, null, false), - 19344 => array(array('_route' => '_221'), array('a', 'b', 'c'), null, null, false), - 19392 => array(array('_route' => '_269'), array('a', 'b', 'c'), null, null, false), - 19440 => array(array('_route' => '_310'), array('a', 'b', 'c'), null, null, false), - 19496 => array(array('_route' => '_138'), array('a', 'b', 'c'), null, null, false), - 19543 => array(array('_route' => '_348'), array('a', 'b', 'c'), null, null, false), - 19592 => array(array('_route' => '_236'), array('a', 'b', 'c'), null, null, false), - 19640 => array(array('_route' => '_433'), array('a', 'b', 'c'), null, null, false), - 19693 => array(array('_route' => '_141'), array('a', 'b', 'c'), null, null, false), - 19741 => array(array('_route' => '_283'), array('a', 'b', 'c'), null, null, false), - 19794 => array(array('_route' => '_144'), array('a', 'b', 'c'), null, null, false), - 19842 => array(array('_route' => '_191'), array('a', 'b', 'c'), null, null, false), - 19895 => array(array('_route' => '_168'), array('a', 'b', 'c'), null, null, false), - 19943 => array(array('_route' => '_363'), array('a', 'b', 'c'), null, null, false), - 19991 => array(array('_route' => '_381'), array('a', 'b', 'c'), null, null, false), - 20044 => array(array('_route' => '_180'), array('a', 'b', 'c'), null, null, false), - 20092 => array(array('_route' => '_339'), array('a', 'b', 'c'), null, null, false), - 20142 => array(array('_route' => '_196'), array('a', 'b', 'c'), null, null, false), - 20194 => array(array('_route' => '_198'), array('a', 'b', 'c'), null, null, false), - 20242 => array(array('_route' => '_285'), array('a', 'b', 'c'), null, null, false), - 20292 => array(array('_route' => '_349'), array('a', 'b', 'c'), null, null, false), - 20344 => array(array('_route' => '_367'), array('a', 'b', 'c'), null, null, false), - 20392 => array(array('_route' => '_384'), array('a', 'b', 'c'), null, null, false), - 20440 => array(array('_route' => '_498'), array('a', 'b', 'c'), null, null, false), - 20490 => array(array('_route' => '_369'), array('a', 'b', 'c'), null, null, false), - 20542 => array(array('_route' => '_408'), array('a', 'b', 'c'), null, null, false), - 20590 => array(array('_route' => '_413'), array('a', 'b', 'c'), null, null, false), - 20652 => array(array('_route' => '_44'), array('a', 'b', 'c'), null, null, false), - 20699 => array(array('_route' => '_256'), array('a', 'b', 'c'), null, null, false), - 20748 => array(array('_route' => '_173'), array('a', 'b', 'c'), null, null, false), - 20796 => array(array('_route' => '_266'), array('a', 'b', 'c'), null, null, false), - 20844 => array(array('_route' => '_392'), array('a', 'b', 'c'), null, null, false), - 20892 => array(array('_route' => '_430'), array('a', 'b', 'c'), null, null, false), - 20940 => array(array('_route' => '_482'), array('a', 'b', 'c'), null, null, false), - 20993 => array(array('_route' => '_49'), array('a', 'b', 'c'), null, null, false), - 21041 => array(array('_route' => '_94'), array('a', 'b', 'c'), null, null, false), - 21089 => array(array('_route' => '_407'), array('a', 'b', 'c'), null, null, false), - 21142 => array(array('_route' => '_65'), array('a', 'b', 'c'), null, null, false), - 21190 => array(array('_route' => '_181'), array('a', 'b', 'c'), null, null, false), - 21238 => array(array('_route' => '_437'), array('a', 'b', 'c'), null, null, false), - 21291 => array(array('_route' => '_76'), array('a', 'b', 'c'), null, null, false), - 21339 => array(array('_route' => '_357'), array('a', 'b', 'c'), null, null, false), - 21392 => array(array('_route' => '_80'), array('a', 'b', 'c'), null, null, false), - 21440 => array(array('_route' => '_106'), array('a', 'b', 'c'), null, null, false), - 21493 => array(array('_route' => '_83'), array('a', 'b', 'c'), null, null, false), - 21541 => array(array('_route' => '_255'), array('a', 'b', 'c'), null, null, false), - 21589 => array(array('_route' => '_330'), array('a', 'b', 'c'), null, null, false), - 21642 => array(array('_route' => '_100'), array('a', 'b', 'c'), null, null, false), - 21690 => array(array('_route' => '_396'), array('a', 'b', 'c'), null, null, false), - 21738 => array(array('_route' => '_422'), array('a', 'b', 'c'), null, null, false), - 21791 => array(array('_route' => '_149'), array('a', 'b', 'c'), null, null, false), - 21839 => array(array('_route' => '_324'), array('a', 'b', 'c'), null, null, false), - 21892 => array(array('_route' => '_164'), array('a', 'b', 'c'), null, null, false), - 21940 => array(array('_route' => '_423'), array('a', 'b', 'c'), null, null, false), - 21990 => array(array('_route' => '_241'), array('a', 'b', 'c'), null, null, false), - 22042 => array(array('_route' => '_290'), array('a', 'b', 'c'), null, null, false), - 22090 => array(array('_route' => '_335'), array('a', 'b', 'c'), null, null, false), - 22140 => array(array('_route' => '_373'), array('a', 'b', 'c'), null, null, false), - 22189 => array(array('_route' => '_375'), array('a', 'b', 'c'), null, null, false), - 22238 => array(array('_route' => '_450'), array('a', 'b', 'c'), null, null, false), - 22287 => array(array('_route' => '_464'), array('a', 'b', 'c'), null, null, false), - 22345 => array(array('_route' => '_51'), array('a', 'b', 'c'), null, null, false), - 22393 => array(array('_route' => '_77'), array('a', 'b', 'c'), null, null, false), - 22441 => array(array('_route' => '_234'), array('a', 'b', 'c'), null, null, false), - 22489 => array(array('_route' => '_394'), array('a', 'b', 'c'), null, null, false), - 22542 => array(array('_route' => '_88'), array('a', 'b', 'c'), null, null, false), - 22590 => array(array('_route' => '_155'), array('a', 'b', 'c'), null, null, false), - 22643 => array(array('_route' => '_96'), array('a', 'b', 'c'), null, null, false), - 22691 => array(array('_route' => '_298'), array('a', 'b', 'c'), null, null, false), - 22739 => array(array('_route' => '_470'), array('a', 'b', 'c'), null, null, false), - 22792 => array(array('_route' => '_109'), array('a', 'b', 'c'), null, null, false), - 22840 => array(array('_route' => '_204'), array('a', 'b', 'c'), null, null, false), - 22893 => array(array('_route' => '_115'), array('a', 'b', 'c'), null, null, false), - 22941 => array(array('_route' => '_145'), array('a', 'b', 'c'), null, null, false), - 22994 => array(array('_route' => '_123'), array('a', 'b', 'c'), null, null, false), - 23042 => array(array('_route' => '_277'), array('a', 'b', 'c'), null, null, false), - 23090 => array(array('_route' => '_473'), array('a', 'b', 'c'), null, null, false), - 23143 => array(array('_route' => '_334'), array('a', 'b', 'c'), null, null, false), - 23191 => array(array('_route' => '_493'), array('a', 'b', 'c'), null, null, false), - 23244 => array(array('_route' => '_372'), array('a', 'b', 'c'), null, null, false), - 23292 => array(array('_route' => '_432'), array('a', 'b', 'c'), null, null, false), - 23340 => array(array('_route' => '_436'), array('a', 'b', 'c'), null, null, false), - 23393 => array(array('_route' => '_425'), array('a', 'b', 'c'), null, null, false), - 23441 => array(array('_route' => '_456'), array('a', 'b', 'c'), null, null, false), - 23489 => array(array('_route' => '_474'), array('a', 'b', 'c'), null, null, false), - 23539 => array(array('_route' => '_485'), array('a', 'b', 'c'), null, null, false), - 23594 => array(array('_route' => '_91'), array('a', 'b', 'c'), null, null, false), - 23646 => array(array('_route' => '_110'), array('a', 'b', 'c'), null, null, false), - 23694 => array(array('_route' => '_114'), array('a', 'b', 'c'), null, null, false), - 23750 => array(array('_route' => '_118'), array('a', 'b', 'c'), null, null, false), - 23796 => array(array('_route' => '_475'), array('a', 'b', 'c'), null, null, false), - 23844 => array(array('_route' => '_366'), array('a', 'b', 'c'), null, null, false), - 23897 => array(array('_route' => '_167'), array('a', 'b', 'c'), null, null, false), - 23945 => array(array('_route' => '_192'), array('a', 'b', 'c'), null, null, false), - 23993 => array(array('_route' => '_342'), array('a', 'b', 'c'), null, null, false), - 24046 => array(array('_route' => '_229'), array('a', 'b', 'c'), null, null, false), - 24097 => array(array('_route' => '_235'), array('a', 'b', 'c'), null, null, false), - 24144 => array(array('_route' => '_302'), array('a', 'b', 'c'), null, null, false), - 24193 => array(array('_route' => '_322'), array('a', 'b', 'c'), null, null, false), - 24246 => array(array('_route' => '_237'), array('a', 'b', 'c'), null, null, false), - 24294 => array(array('_route' => '_293'), array('a', 'b', 'c'), null, null, false), - 24347 => array(array('_route' => '_239'), array('a', 'b', 'c'), null, null, false), - 24395 => array(array('_route' => '_444'), array('a', 'b', 'c'), null, null, false), - 24443 => array(array('_route' => '_491'), array('a', 'b', 'c'), null, null, false), - 24491 => array(array('_route' => '_492'), array('a', 'b', 'c'), null, null, false), - 24541 => array(array('_route' => '_258'), array('a', 'b', 'c'), null, null, false), - 24590 => array(array('_route' => '_317'), array('a', 'b', 'c'), null, null, false), - 24639 => array(array('_route' => '_361'), array('a', 'b', 'c'), null, null, false), - 24688 => array(array('_route' => '_391'), array('a', 'b', 'c'), null, null, false), - 24737 => array(array('_route' => '_462'), array('a', 'b', 'c'), null, null, false), - 24786 => array(array('_route' => '_476'), array('a', 'b', 'c'), null, null, false), - 24837 => array(array('_route' => '_501'), array('a', 'b', 'c'), null, null, false), - 24889 => array(array('_route' => '_514'), array('a', 'b', 'c'), null, null, false), - 24937 => array(array('_route' => '_731'), array('a', 'b', 'c'), null, null, false), - 24990 => array(array('_route' => '_522'), array('a', 'b', 'c'), null, null, false), - 25038 => array(array('_route' => '_693'), array('a', 'b', 'c'), null, null, false), - 25091 => array(array('_route' => '_537'), array('a', 'b', 'c'), null, null, false), - 25139 => array(array('_route' => '_554'), array('a', 'b', 'c'), null, null, false), - 25187 => array(array('_route' => '_645'), array('a', 'b', 'c'), null, null, false), - 25235 => array(array('_route' => '_862'), array('a', 'b', 'c'), null, null, false), - 25288 => array(array('_route' => '_539'), array('a', 'b', 'c'), null, null, false), - 25336 => array(array('_route' => '_729'), array('a', 'b', 'c'), null, null, false), - 25384 => array(array('_route' => '_897'), array('a', 'b', 'c'), null, null, false), - 25437 => array(array('_route' => '_561'), array('a', 'b', 'c'), null, null, false), - 25485 => array(array('_route' => '_615'), array('a', 'b', 'c'), null, null, false), - 25533 => array(array('_route' => '_764'), array('a', 'b', 'c'), null, null, false), - 25581 => array(array('_route' => '_948'), array('a', 'b', 'c'), null, null, false), - 25634 => array(array('_route' => '_617'), array('a', 'b', 'c'), null, null, false), - 25682 => array(array('_route' => '_671'), array('a', 'b', 'c'), null, null, false), - 25735 => array(array('_route' => '_649'), array('a', 'b', 'c'), null, null, false), - 25783 => array(array('_route' => '_651'), array('a', 'b', 'c'), null, null, false), - 25831 => array(array('_route' => '_684'), array('a', 'b', 'c'), null, null, false), - 25884 => array(array('_route' => '_669'), array('a', 'b', 'c'), null, null, false), - 25932 => array(array('_route' => '_743'), array('a', 'b', 'c'), null, null, false), - 25980 => array(array('_route' => '_962'), array('a', 'b', 'c'), null, null, false), - 26033 => array(array('_route' => '_694'), array('a', 'b', 'c'), null, null, false), - 26081 => array(array('_route' => '_985'), array('a', 'b', 'c'), null, null, false), - 26134 => array(array('_route' => '_707'), array('a', 'b', 'c'), null, null, false), - 26182 => array(array('_route' => '_718'), array('a', 'b', 'c'), null, null, false), - 26235 => array(array('_route' => '_720'), array('a', 'b', 'c'), null, null, false), - 26283 => array(array('_route' => '_745'), array('a', 'b', 'c'), null, null, false), - 26333 => array(array('_route' => '_874'), array('a', 'b', 'c'), null, null, false), - 26391 => array(array('_route' => '_502'), array('a', 'b', 'c'), null, null, false), - 26439 => array(array('_route' => '_667'), array('a', 'b', 'c'), null, null, false), - 26487 => array(array('_route' => '_911'), array('a', 'b', 'c'), null, null, false), - 26535 => array(array('_route' => '_942'), array('a', 'b', 'c'), null, null, false), - 26585 => array(array('_route' => '_504'), array('a', 'b', 'c'), null, null, false), - 26637 => array(array('_route' => '_524'), array('a', 'b', 'c'), null, null, false), - 26685 => array(array('_route' => '_732'), array('a', 'b', 'c'), null, null, false), - 26738 => array(array('_route' => '_596'), array('a', 'b', 'c'), null, null, false), - 26786 => array(array('_route' => '_601'), array('a', 'b', 'c'), null, null, false), - 26839 => array(array('_route' => '_620'), array('a', 'b', 'c'), null, null, false), - 26887 => array(array('_route' => '_631'), array('a', 'b', 'c'), null, null, false), - 26935 => array(array('_route' => '_771'), array('a', 'b', 'c'), null, null, false), - 26983 => array(array('_route' => '_937'), array('a', 'b', 'c'), null, null, false), - 27031 => array(array('_route' => '_999'), array('a', 'b', 'c'), null, null, false), - 27084 => array(array('_route' => '_657'), array('a', 'b', 'c'), null, null, false), - 27132 => array(array('_route' => '_701'), array('a', 'b', 'c'), null, null, false), - 27185 => array(array('_route' => '_662'), array('a', 'b', 'c'), null, null, false), - 27233 => array(array('_route' => '_797'), array('a', 'b', 'c'), null, null, false), - 27281 => array(array('_route' => '_924'), array('a', 'b', 'c'), null, null, false), - 27334 => array(array('_route' => '_702'), array('a', 'b', 'c'), null, null, false), - 27382 => array(array('_route' => '_750'), array('a', 'b', 'c'), null, null, false), - 27435 => array(array('_route' => '_749'), array('a', 'b', 'c'), null, null, false), - 27483 => array(array('_route' => '_837'), array('a', 'b', 'c'), null, null, false), - 27533 => array(array('_route' => '_758'), array('a', 'b', 'c'), null, null, false), - 27585 => array(array('_route' => '_810'), array('a', 'b', 'c'), null, null, false), - 27633 => array(array('_route' => '_902'), array('a', 'b', 'c'), null, null, false), - 27683 => array(array('_route' => '_845'), array('a', 'b', 'c'), null, null, false), - 27741 => array(array('_route' => '_503'), array('a', 'b', 'c'), null, null, false), - 27792 => array(array('_route' => '_756'), array('a', 'b', 'c'), null, null, false), - 27839 => array(array('_route' => '_799'), array('a', 'b', 'c'), null, null, false), - 27888 => array(array('_route' => '_769'), array('a', 'b', 'c'), null, null, false), - 27936 => array(array('_route' => '_981'), array('a', 'b', 'c'), null, null, false), - 27989 => array(array('_route' => '_507'), array('a', 'b', 'c'), null, null, false), - 28037 => array(array('_route' => '_672'), array('a', 'b', 'c'), null, null, false), - 28085 => array(array('_route' => '_790'), array('a', 'b', 'c'), null, null, false), - 28138 => array(array('_route' => '_515'), array('a', 'b', 'c'), null, null, false), - 28186 => array(array('_route' => '_523'), array('a', 'b', 'c'), null, null, false), - 28234 => array(array('_route' => '_957'), array('a', 'b', 'c'), null, null, false), - 28282 => array(array('_route' => '_995'), array('a', 'b', 'c'), null, null, false), - 28335 => array(array('_route' => '_532'), array('a', 'b', 'c'), null, null, false), - 28383 => array(array('_route' => '_642'), array('a', 'b', 'c'), null, null, false), - 28433 => array(array('_route' => '_579'), array('a', 'b', 'c'), null, null, false), - 28485 => array(array('_route' => '_625'), array('a', 'b', 'c'), null, null, false), - 28533 => array(array('_route' => '_916'), array('a', 'b', 'c'), null, null, false), - 28586 => array(array('_route' => '_633'), array('a', 'b', 'c'), null, null, false), - 28634 => array(array('_route' => '_656'), array('a', 'b', 'c'), null, null, false), - 28687 => array(array('_route' => '_658'), array('a', 'b', 'c'), null, null, false), - 28735 => array(array('_route' => '_943'), array('a', 'b', 'c'), null, null, false), - 28788 => array(array('_route' => '_664'), array('a', 'b', 'c'), null, null, false), - 28836 => array(array('_route' => '_852'), array('a', 'b', 'c'), null, null, false), - 28884 => array(array('_route' => '_870'), array('a', 'b', 'c'), null, null, false), - 28937 => array(array('_route' => '_683'), array('a', 'b', 'c'), null, null, false), - 28985 => array(array('_route' => '_915'), array('a', 'b', 'c'), null, null, false), - 29038 => array(array('_route' => '_719'), array('a', 'b', 'c'), null, null, false), - 29086 => array(array('_route' => '_859'), array('a', 'b', 'c'), null, null, false), - 29134 => array(array('_route' => '_912'), array('a', 'b', 'c'), null, null, false), - 29182 => array(array('_route' => '_978'), array('a', 'b', 'c'), null, null, false), - 29235 => array(array('_route' => '_738'), array('a', 'b', 'c'), null, null, false), - 29283 => array(array('_route' => '_883'), array('a', 'b', 'c'), null, null, false), - 29333 => array(array('_route' => '_741'), array('a', 'b', 'c'), null, null, false), - 29382 => array(array('_route' => '_760'), array('a', 'b', 'c'), null, null, false), - 29431 => array(array('_route' => '_895'), array('a', 'b', 'c'), null, null, false), - 29489 => array(array('_route' => '_505'), array('a', 'b', 'c'), null, null, false), - 29537 => array(array('_route' => '_935'), array('a', 'b', 'c'), null, null, false), - 29590 => array(array('_route' => '_509'), array('a', 'b', 'c'), null, null, false), - 29638 => array(array('_route' => '_820'), array('a', 'b', 'c'), null, null, false), - 29686 => array(array('_route' => '_910'), array('a', 'b', 'c'), null, null, false), - 29739 => array(array('_route' => '_518'), array('a', 'b', 'c'), null, null, false), - 29787 => array(array('_route' => '_618'), array('a', 'b', 'c'), null, null, false), - 29840 => array(array('_route' => '_546'), array('a', 'b', 'c'), null, null, false), - 29888 => array(array('_route' => '_740'), array('a', 'b', 'c'), null, null, false), - 29936 => array(array('_route' => '_867'), array('a', 'b', 'c'), null, null, false), - 29989 => array(array('_route' => '_572'), array('a', 'b', 'c'), null, null, false), - 30037 => array(array('_route' => '_952'), array('a', 'b', 'c'), null, null, false), - 30090 => array(array('_route' => '_573'), array('a', 'b', 'c'), null, null, false), - 30138 => array(array('_route' => '_692'), array('a', 'b', 'c'), null, null, false), - 30186 => array(array('_route' => '_700'), array('a', 'b', 'c'), null, null, false), - 30234 => array(array('_route' => '_772'), array('a', 'b', 'c'), null, null, false), - 30284 => array(array('_route' => '_653'), array('a', 'b', 'c'), null, null, false), - 30336 => array(array('_route' => '_695'), array('a', 'b', 'c'), null, null, false), - 30384 => array(array('_route' => '_748'), array('a', 'b', 'c'), null, null, false), - 30437 => array(array('_route' => '_710'), array('a', 'b', 'c'), null, null, false), - 30485 => array(array('_route' => '_716'), array('a', 'b', 'c'), null, null, false), - 30533 => array(array('_route' => '_969'), array('a', 'b', 'c'), null, null, false), - 30586 => array(array('_route' => '_734'), array('a', 'b', 'c'), null, null, false), - 30634 => array(array('_route' => '_742'), array('a', 'b', 'c'), null, null, false), - 30682 => array(array('_route' => '_844'), array('a', 'b', 'c'), null, null, false), - 30735 => array(array('_route' => '_763'), array('a', 'b', 'c'), null, null, false), - 30783 => array(array('_route' => '_965'), array('a', 'b', 'c'), null, null, false), - 30836 => array(array('_route' => '_778'), array('a', 'b', 'c'), null, null, false), - 30884 => array(array('_route' => '_813'), array('a', 'b', 'c'), null, null, false), - 30932 => array(array('_route' => '_831'), array('a', 'b', 'c'), null, null, false), - 30982 => array(array('_route' => '_955'), array('a', 'b', 'c'), null, null, false), - 31031 => array(array('_route' => '_997'), array('a', 'b', 'c'), null, null, false), - 31089 => array(array('_route' => '_506'), array('a', 'b', 'c'), null, null, false), - 31137 => array(array('_route' => '_575'), array('a', 'b', 'c'), null, null, false), - 31190 => array(array('_route' => '_516'), array('a', 'b', 'c'), null, null, false), - 31238 => array(array('_route' => '_553'), array('a', 'b', 'c'), null, null, false), - 31291 => array(array('_route' => '_528'), array('a', 'b', 'c'), null, null, false), - 31339 => array(array('_route' => '_847'), array('a', 'b', 'c'), null, null, false), - 31387 => array(array('_route' => '_904'), array('a', 'b', 'c'), null, null, false), - 31440 => array(array('_route' => '_574'), array('a', 'b', 'c'), null, null, false), - 31488 => array(array('_route' => '_818'), array('a', 'b', 'c'), null, null, false), - 31538 => array(array('_route' => '_577'), array('a', 'b', 'c'), null, null, false), - 31590 => array(array('_route' => '_584'), array('a', 'b', 'c'), null, null, false), - 31638 => array(array('_route' => '_905'), array('a', 'b', 'c'), null, null, false), - 31691 => array(array('_route' => '_612'), array('a', 'b', 'c'), null, null, false), - 31739 => array(array('_route' => '_688'), array('a', 'b', 'c'), null, null, false), - 31787 => array(array('_route' => '_854'), array('a', 'b', 'c'), null, null, false), - 31840 => array(array('_route' => '_613'), array('a', 'b', 'c'), null, null, false), - 31888 => array(array('_route' => '_767'), array('a', 'b', 'c'), null, null, false), - 31941 => array(array('_route' => '_666'), array('a', 'b', 'c'), null, null, false), - 31989 => array(array('_route' => '_759'), array('a', 'b', 'c'), null, null, false), - 32037 => array(array('_route' => '_827'), array('a', 'b', 'c'), null, null, false), - 32085 => array(array('_route' => '_840'), array('a', 'b', 'c'), null, null, false), - 32138 => array(array('_route' => '_680'), array('a', 'b', 'c'), null, null, false), - 32186 => array(array('_route' => '_784'), array('a', 'b', 'c'), null, null, false), - 32234 => array(array('_route' => '_842'), array('a', 'b', 'c'), null, null, false), - 32282 => array(array('_route' => '_860'), array('a', 'b', 'c'), null, null, false), - 32332 => array(array('_route' => '_704'), array('a', 'b', 'c'), null, null, false), - 32381 => array(array('_route' => '_727'), array('a', 'b', 'c'), null, null, false), - 32430 => array(array('_route' => '_777'), array('a', 'b', 'c'), null, null, false), - 32482 => array(array('_route' => '_838'), array('a', 'b', 'c'), null, null, false), - 32530 => array(array('_route' => '_861'), array('a', 'b', 'c'), null, null, false), - 32583 => array(array('_route' => '_849'), array('a', 'b', 'c'), null, null, false), - 32631 => array(array('_route' => '_982'), array('a', 'b', 'c'), null, null, false), - 32679 => array(array('_route' => '_986'), array('a', 'b', 'c'), null, null, false), - 32741 => array(array('_route' => '_508'), array('a', 'b', 'c'), null, null, false), - 32788 => array(array('_route' => '_517'), array('a', 'b', 'c'), null, null, false), - 32837 => array(array('_route' => '_622'), array('a', 'b', 'c'), null, null, false), - 32890 => array(array('_route' => '_513'), array('a', 'b', 'c'), null, null, false), - 32938 => array(array('_route' => '_655'), array('a', 'b', 'c'), null, null, false), - 32986 => array(array('_route' => '_843'), array('a', 'b', 'c'), null, null, false), - 33034 => array(array('_route' => '_939'), array('a', 'b', 'c'), null, null, false), - 33084 => array(array('_route' => '_529'), array('a', 'b', 'c'), null, null, false), - 33136 => array(array('_route' => '_535'), array('a', 'b', 'c'), null, null, false), - 33184 => array(array('_route' => '_685'), array('a', 'b', 'c'), null, null, false), - 33240 => array(array('_route' => '_559'), array('a', 'b', 'c'), null, null, false), - 33287 => array(array('_route' => '_661'), array('a', 'b', 'c'), null, null, false), - 33336 => array(array('_route' => '_768'), array('a', 'b', 'c'), null, null, false), - 33389 => array(array('_route' => '_589'), array('a', 'b', 'c'), null, null, false), - 33437 => array(array('_route' => '_647'), array('a', 'b', 'c'), null, null, false), - 33485 => array(array('_route' => '_652'), array('a', 'b', 'c'), null, null, false), - 33533 => array(array('_route' => '_834'), array('a', 'b', 'c'), null, null, false), - 33586 => array(array('_route' => '_591'), array('a', 'b', 'c'), null, null, false), - 33634 => array(array('_route' => '_599'), array('a', 'b', 'c'), null, null, false), - 33687 => array(array('_route' => '_787'), array('a', 'b', 'c'), null, null, false), - 33734 => array(array('_route' => '_848'), array('a', 'b', 'c'), null, null, false), - 33787 => array(array('_route' => '_796'), array('a', 'b', 'c'), null, null, false), - 33835 => array(array('_route' => '_877'), array('a', 'b', 'c'), null, null, false), - 33885 => array(array('_route' => '_809'), array('a', 'b', 'c'), null, null, false), - 33934 => array(array('_route' => '_817'), array('a', 'b', 'c'), null, null, false), - 33986 => array(array('_route' => '_819'), array('a', 'b', 'c'), null, null, false), - 34034 => array(array('_route' => '_865'), array('a', 'b', 'c'), null, null, false), - 34084 => array(array('_route' => '_919'), array('a', 'b', 'c'), null, null, false), - 34133 => array(array('_route' => '_949'), array('a', 'b', 'c'), null, null, false), - 34191 => array(array('_route' => '_510'), array('a', 'b', 'c'), null, null, false), - 34239 => array(array('_route' => '_590'), array('a', 'b', 'c'), null, null, false), - 34287 => array(array('_route' => '_597'), array('a', 'b', 'c'), null, null, false), - 34335 => array(array('_route' => '_682'), array('a', 'b', 'c'), null, null, false), - 34383 => array(array('_route' => '_723'), array('a', 'b', 'c'), null, null, false), - 34436 => array(array('_route' => '_521'), array('a', 'b', 'c'), null, null, false), - 34484 => array(array('_route' => '_594'), array('a', 'b', 'c'), null, null, false), - 34532 => array(array('_route' => '_689'), array('a', 'b', 'c'), null, null, false), - 34580 => array(array('_route' => '_713'), array('a', 'b', 'c'), null, null, false), - 34628 => array(array('_route' => '_889'), array('a', 'b', 'c'), null, null, false), - 34681 => array(array('_route' => '_531'), array('a', 'b', 'c'), null, null, false), - 34729 => array(array('_route' => '_639'), array('a', 'b', 'c'), null, null, false), - 34780 => array(array('_route' => '_646'), array('a', 'b', 'c'), null, null, false), - 34827 => array(array('_route' => '_659'), array('a', 'b', 'c'), null, null, false), - 34876 => array(array('_route' => '_959'), array('a', 'b', 'c'), null, null, false), - 34929 => array(array('_route' => '_550'), array('a', 'b', 'c'), null, null, false), - 34977 => array(array('_route' => '_833'), array('a', 'b', 'c'), null, null, false), - 35025 => array(array('_route' => '_899'), array('a', 'b', 'c'), null, null, false), - 35081 => array(array('_route' => '_580'), array('a', 'b', 'c'), null, null, false), - 35128 => array(array('_route' => '_762'), array('a', 'b', 'c'), null, null, false), - 35177 => array(array('_route' => '_896'), array('a', 'b', 'c'), null, null, false), - 35230 => array(array('_route' => '_595'), array('a', 'b', 'c'), null, null, false), - 35278 => array(array('_route' => '_933'), array('a', 'b', 'c'), null, null, false), - 35328 => array(array('_route' => '_610'), array('a', 'b', 'c'), null, null, false), - 35380 => array(array('_route' => '_629'), array('a', 'b', 'c'), null, null, false), - 35428 => array(array('_route' => '_744'), array('a', 'b', 'c'), null, null, false), - 35481 => array(array('_route' => '_674'), array('a', 'b', 'c'), null, null, false), - 35529 => array(array('_route' => '_726'), array('a', 'b', 'c'), null, null, false), - 35577 => array(array('_route' => '_929'), array('a', 'b', 'c'), null, null, false), - 35627 => array(array('_route' => '_696'), array('a', 'b', 'c'), null, null, false), - 35679 => array(array('_route' => '_841'), array('a', 'b', 'c'), null, null, false), - 35727 => array(array('_route' => '_890'), array('a', 'b', 'c'), null, null, false), - 35777 => array(array('_route' => '_885'), array('a', 'b', 'c'), null, null, false), - 35826 => array(array('_route' => '_888'), array('a', 'b', 'c'), null, null, false), - 35875 => array(array('_route' => '_996'), array('a', 'b', 'c'), null, null, false), - 35933 => array(array('_route' => '_511'), array('a', 'b', 'c'), null, null, false), - 35981 => array(array('_route' => '_576'), array('a', 'b', 'c'), null, null, false), - 36029 => array(array('_route' => '_623'), array('a', 'b', 'c'), null, null, false), - 36082 => array(array('_route' => '_560'), array('a', 'b', 'c'), null, null, false), - 36129 => array(array('_route' => '_585'), array('a', 'b', 'c'), null, null, false), - 36182 => array(array('_route' => '_570'), array('a', 'b', 'c'), null, null, false), - 36230 => array(array('_route' => '_578'), array('a', 'b', 'c'), null, null, false), - 36281 => array(array('_route' => '_780'), array('a', 'b', 'c'), null, null, false), - 36328 => array(array('_route' => '_808'), array('a', 'b', 'c'), null, null, false), - 36382 => array(array('_route' => '_593'), array('a', 'b', 'c'), null, null, false), - 36430 => array(array('_route' => '_900'), array('a', 'b', 'c'), null, null, false), - 36483 => array(array('_route' => '_632'), array('a', 'b', 'c'), null, null, false), - 36531 => array(array('_route' => '_654'), array('a', 'b', 'c'), null, null, false), - 36579 => array(array('_route' => '_721'), array('a', 'b', 'c'), null, null, false), - 36627 => array(array('_route' => '_836'), array('a', 'b', 'c'), null, null, false), - 36680 => array(array('_route' => '_637'), array('a', 'b', 'c'), null, null, false), - 36728 => array(array('_route' => '_737'), array('a', 'b', 'c'), null, null, false), - 36784 => array(array('_route' => '_699'), array('a', 'b', 'c'), null, null, false), - 36831 => array(array('_route' => '_822'), array('a', 'b', 'c'), null, null, false), - 36880 => array(array('_route' => '_853'), array('a', 'b', 'c'), null, null, false), - 36933 => array(array('_route' => '_708'), array('a', 'b', 'c'), null, null, false), - 36981 => array(array('_route' => '_871'), array('a', 'b', 'c'), null, null, false), - 37034 => array(array('_route' => '_752'), array('a', 'b', 'c'), null, null, false), - 37082 => array(array('_route' => '_989'), array('a', 'b', 'c'), null, null, false), - 37132 => array(array('_route' => '_855'), array('a', 'b', 'c'), null, null, false), - 37184 => array(array('_route' => '_858'), array('a', 'b', 'c'), null, null, false), - 37232 => array(array('_route' => '_898'), array('a', 'b', 'c'), null, null, false), - 37282 => array(array('_route' => '_903'), array('a', 'b', 'c'), null, null, false), - 37331 => array(array('_route' => '_909'), array('a', 'b', 'c'), null, null, false), - 37380 => array(array('_route' => '_950'), array('a', 'b', 'c'), null, null, false), - 37441 => array(array('_route' => '_512'), array('a', 'b', 'c'), null, null, false), - 37488 => array(array('_route' => '_691'), array('a', 'b', 'c'), null, null, false), - 37537 => array(array('_route' => '_686'), array('a', 'b', 'c'), null, null, false), - 37587 => array(array('_route' => '_527'), array('a', 'b', 'c'), null, null, false), - 37639 => array(array('_route' => '_541'), array('a', 'b', 'c'), null, null, false), - 37687 => array(array('_route' => '_956'), array('a', 'b', 'c'), null, null, false), - 37740 => array(array('_route' => '_555'), array('a', 'b', 'c'), null, null, false), - 37788 => array(array('_route' => '_681'), array('a', 'b', 'c'), null, null, false), - 37841 => array(array('_route' => '_556'), array('a', 'b', 'c'), null, null, false), - 37889 => array(array('_route' => '_802'), array('a', 'b', 'c'), null, null, false), - 37939 => array(array('_route' => '_558'), array('a', 'b', 'c'), null, null, false), - 37991 => array(array('_route' => '_564'), array('a', 'b', 'c'), null, null, false), - 38039 => array(array('_route' => '_670'), array('a', 'b', 'c'), null, null, false), - 38087 => array(array('_route' => '_884'), array('a', 'b', 'c'), null, null, false), - 38140 => array(array('_route' => '_627'), array('a', 'b', 'c'), null, null, false), - 38187 => array(array('_route' => '_746'), array('a', 'b', 'c'), null, null, false), - 38240 => array(array('_route' => '_668'), array('a', 'b', 'c'), null, null, false), - 38291 => array(array('_route' => '_712'), array('a', 'b', 'c'), null, null, false), - 38338 => array(array('_route' => '_863'), array('a', 'b', 'c'), null, null, false), - 38387 => array(array('_route' => '_801'), array('a', 'b', 'c'), null, null, false), - 38440 => array(array('_route' => '_709'), array('a', 'b', 'c'), null, null, false), - 38488 => array(array('_route' => '_850'), array('a', 'b', 'c'), null, null, false), - 38536 => array(array('_route' => '_918'), array('a', 'b', 'c'), null, null, false), - 38586 => array(array('_route' => '_803'), array('a', 'b', 'c'), null, null, false), - 38638 => array(array('_route' => '_864'), array('a', 'b', 'c'), null, null, false), - 38686 => array(array('_route' => '_880'), array('a', 'b', 'c'), null, null, false), - 38734 => array(array('_route' => '_927'), array('a', 'b', 'c'), null, null, false), - 38787 => array(array('_route' => '_930'), array('a', 'b', 'c'), null, null, false), - 38835 => array(array('_route' => '_951'), array('a', 'b', 'c'), null, null, false), - 38883 => array(array('_route' => '_963'), array('a', 'b', 'c'), null, null, false), - 38942 => array(array('_route' => '_519'), array('a', 'b', 'c'), null, null, false), - 38990 => array(array('_route' => '_823'), array('a', 'b', 'c'), null, null, false), - 39038 => array(array('_route' => '_954'), array('a', 'b', 'c'), null, null, false), - 39091 => array(array('_route' => '_525'), array('a', 'b', 'c'), null, null, false), - 39139 => array(array('_route' => '_991'), array('a', 'b', 'c'), null, null, false), - 39189 => array(array('_route' => '_536'), array('a', 'b', 'c'), null, null, false), - 39241 => array(array('_route' => '_545'), array('a', 'b', 'c'), null, null, false), - 39289 => array(array('_route' => '_944'), array('a', 'b', 'c'), null, null, false), - 39342 => array(array('_route' => '_557'), array('a', 'b', 'c'), null, null, false), - 39390 => array(array('_route' => '_783'), array('a', 'b', 'c'), null, null, false), - 39438 => array(array('_route' => '_807'), array('a', 'b', 'c'), null, null, false), - 39491 => array(array('_route' => '_586'), array('a', 'b', 'c'), null, null, false), - 39539 => array(array('_route' => '_711'), array('a', 'b', 'c'), null, null, false), - 39592 => array(array('_route' => '_598'), array('a', 'b', 'c'), null, null, false), - 39640 => array(array('_route' => '_635'), array('a', 'b', 'c'), null, null, false), - 39688 => array(array('_route' => '_983'), array('a', 'b', 'c'), null, null, false), - 39741 => array(array('_route' => '_634'), array('a', 'b', 'c'), null, null, false), - 39789 => array(array('_route' => '_641'), array('a', 'b', 'c'), null, null, false), - 39840 => array(array('_route' => '_779'), array('a', 'b', 'c'), null, null, false), - 39887 => array(array('_route' => '_876'), array('a', 'b', 'c'), null, null, false), - 39936 => array(array('_route' => '_811'), array('a', 'b', 'c'), null, null, false), - 39984 => array(array('_route' => '_824'), array('a', 'b', 'c'), null, null, false), - 40037 => array(array('_route' => '_660'), array('a', 'b', 'c'), null, null, false), - 40085 => array(array('_route' => '_789'), array('a', 'b', 'c'), null, null, false), - 40138 => array(array('_route' => '_733'), array('a', 'b', 'c'), null, null, false), - 40186 => array(array('_route' => '_735'), array('a', 'b', 'c'), null, null, false), - 40234 => array(array('_route' => '_882'), array('a', 'b', 'c'), null, null, false), - 40282 => array(array('_route' => '_967'), array('a', 'b', 'c'), null, null, false), - 40332 => array(array('_route' => '_736'), array('a', 'b', 'c'), null, null, false), - 40381 => array(array('_route' => '_753'), array('a', 'b', 'c'), null, null, false), - 40430 => array(array('_route' => '_786'), array('a', 'b', 'c'), null, null, false), - 40479 => array(array('_route' => '_907'), array('a', 'b', 'c'), null, null, false), - 40528 => array(array('_route' => '_920'), array('a', 'b', 'c'), null, null, false), - 40577 => array(array('_route' => '_971'), array('a', 'b', 'c'), null, null, false), - 40635 => array(array('_route' => '_520'), array('a', 'b', 'c'), null, null, false), - 40683 => array(array('_route' => '_891'), array('a', 'b', 'c'), null, null, false), - 40739 => array(array('_route' => '_534'), array('a', 'b', 'c'), null, null, false), - 40785 => array(array('_route' => '_602'), array('a', 'b', 'c'), null, null, false), - 40834 => array(array('_route' => '_605'), array('a', 'b', 'c'), null, null, false), - 40882 => array(array('_route' => '_979'), array('a', 'b', 'c'), null, null, false), - 40932 => array(array('_route' => '_547'), array('a', 'b', 'c'), null, null, false), - 40987 => array(array('_route' => '_549'), array('a', 'b', 'c'), null, null, false), - 41034 => array(array('_route' => '_755'), array('a', 'b', 'c'), null, null, false), - 41083 => array(array('_route' => '_922'), array('a', 'b', 'c'), null, null, false), - 41131 => array(array('_route' => '_977'), array('a', 'b', 'c'), null, null, false), - 41184 => array(array('_route' => '_565'), array('a', 'b', 'c'), null, null, false), - 41232 => array(array('_route' => '_926'), array('a', 'b', 'c'), null, null, false), - 41282 => array(array('_route' => '_571'), array('a', 'b', 'c'), null, null, false), - 41331 => array(array('_route' => '_581'), array('a', 'b', 'c'), null, null, false), - 41380 => array(array('_route' => '_619'), array('a', 'b', 'c'), null, null, false), - 41429 => array(array('_route' => '_636'), array('a', 'b', 'c'), null, null, false), - 41481 => array(array('_route' => '_679'), array('a', 'b', 'c'), null, null, false), - 41529 => array(array('_route' => '_866'), array('a', 'b', 'c'), null, null, false), - 41577 => array(array('_route' => '_973'), array('a', 'b', 'c'), null, null, false), - 41630 => array(array('_route' => '_690'), array('a', 'b', 'c'), null, null, false), - 41678 => array(array('_route' => '_775'), array('a', 'b', 'c'), null, null, false), - 41731 => array(array('_route' => '_722'), array('a', 'b', 'c'), null, null, false), - 41779 => array(array('_route' => '_906'), array('a', 'b', 'c'), null, null, false), - 41827 => array(array('_route' => '_946'), array('a', 'b', 'c'), null, null, false), - 41877 => array(array('_route' => '_788'), array('a', 'b', 'c'), null, null, false), - 41929 => array(array('_route' => '_828'), array('a', 'b', 'c'), null, null, false), - 41977 => array(array('_route' => '_892'), array('a', 'b', 'c'), null, null, false), - 42025 => array(array('_route' => '_972'), array('a', 'b', 'c'), null, null, false), - 42075 => array(array('_route' => '_829'), array('a', 'b', 'c'), null, null, false), - 42127 => array(array('_route' => '_923'), array('a', 'b', 'c'), null, null, false), - 42175 => array(array('_route' => '_947'), array('a', 'b', 'c'), null, null, false), - 42234 => array(array('_route' => '_526'), array('a', 'b', 'c'), null, null, false), - 42282 => array(array('_route' => '_614'), array('a', 'b', 'c'), null, null, false), - 42330 => array(array('_route' => '_621'), array('a', 'b', 'c'), null, null, false), - 42383 => array(array('_route' => '_543'), array('a', 'b', 'c'), null, null, false), - 42431 => array(array('_route' => '_812'), array('a', 'b', 'c'), null, null, false), - 42487 => array(array('_route' => '_548'), array('a', 'b', 'c'), null, null, false), - 42534 => array(array('_route' => '_747'), array('a', 'b', 'c'), null, null, false), - 42583 => array(array('_route' => '_715'), array('a', 'b', 'c'), null, null, false), - 42631 => array(array('_route' => '_940'), array('a', 'b', 'c'), null, null, false), - 42684 => array(array('_route' => '_563'), array('a', 'b', 'c'), null, null, false), - 42732 => array(array('_route' => '_611'), array('a', 'b', 'c'), null, null, false), - 42780 => array(array('_route' => '_830'), array('a', 'b', 'c'), null, null, false), - 42833 => array(array('_route' => '_569'), array('a', 'b', 'c'), null, null, false), - 42881 => array(array('_route' => '_908'), array('a', 'b', 'c'), null, null, false), - 42929 => array(array('_route' => '_913'), array('a', 'b', 'c'), null, null, false), - 42982 => array(array('_route' => '_644'), array('a', 'b', 'c'), null, null, false), - 43030 => array(array('_route' => '_776'), array('a', 'b', 'c'), null, null, false), - 43078 => array(array('_route' => '_856'), array('a', 'b', 'c'), null, null, false), - 43131 => array(array('_route' => '_650'), array('a', 'b', 'c'), null, null, false), - 43179 => array(array('_route' => '_761'), array('a', 'b', 'c'), null, null, false), - 43232 => array(array('_route' => '_663'), array('a', 'b', 'c'), null, null, false), - 43280 => array(array('_route' => '_754'), array('a', 'b', 'c'), null, null, false), - 43333 => array(array('_route' => '_665'), array('a', 'b', 'c'), null, null, false), - 43381 => array(array('_route' => '_805'), array('a', 'b', 'c'), null, null, false), - 43429 => array(array('_route' => '_846'), array('a', 'b', 'c'), null, null, false), - 43477 => array(array('_route' => '_857'), array('a', 'b', 'c'), null, null, false), - 43530 => array(array('_route' => '_675'), array('a', 'b', 'c'), null, null, false), - 43578 => array(array('_route' => '_839'), array('a', 'b', 'c'), null, null, false), - 43626 => array(array('_route' => '_968'), array('a', 'b', 'c'), null, null, false), - 43676 => array(array('_route' => '_697'), array('a', 'b', 'c'), null, null, false), - 43728 => array(array('_route' => '_725'), array('a', 'b', 'c'), null, null, false), - 43776 => array(array('_route' => '_794'), array('a', 'b', 'c'), null, null, false), - 43829 => array(array('_route' => '_773'), array('a', 'b', 'c'), null, null, false), - 43877 => array(array('_route' => '_992'), array('a', 'b', 'c'), null, null, false), - 43930 => array(array('_route' => '_901'), array('a', 'b', 'c'), null, null, false), - 43978 => array(array('_route' => '_970'), array('a', 'b', 'c'), null, null, false), - 44028 => array(array('_route' => '_964'), array('a', 'b', 'c'), null, null, false), - 44086 => array(array('_route' => '_530'), array('a', 'b', 'c'), null, null, false), - 44134 => array(array('_route' => '_703'), array('a', 'b', 'c'), null, null, false), - 44187 => array(array('_route' => '_533'), array('a', 'b', 'c'), null, null, false), - 44235 => array(array('_route' => '_739'), array('a', 'b', 'c'), null, null, false), - 44283 => array(array('_route' => '_791'), array('a', 'b', 'c'), null, null, false), - 44331 => array(array('_route' => '_987'), array('a', 'b', 'c'), null, null, false), - 44384 => array(array('_route' => '_566'), array('a', 'b', 'c'), null, null, false), - 44432 => array(array('_route' => '_592'), array('a', 'b', 'c'), null, null, false), - 44488 => array(array('_route' => '_568'), array('a', 'b', 'c'), null, null, false), - 44534 => array(array('_route' => '_868'), array('a', 'b', 'c'), null, null, false), - 44583 => array(array('_route' => '_878'), array('a', 'b', 'c'), null, null, false), - 44636 => array(array('_route' => '_588'), array('a', 'b', 'c'), null, null, false), - 44684 => array(array('_route' => '_793'), array('a', 'b', 'c'), null, null, false), - 44732 => array(array('_route' => '_917'), array('a', 'b', 'c'), null, null, false), - 44785 => array(array('_route' => '_600'), array('a', 'b', 'c'), null, null, false), - 44833 => array(array('_route' => '_728'), array('a', 'b', 'c'), null, null, false), - 44886 => array(array('_route' => '_603'), array('a', 'b', 'c'), null, null, false), - 44934 => array(array('_route' => '_765'), array('a', 'b', 'c'), null, null, false), - 44987 => array(array('_route' => '_607'), array('a', 'b', 'c'), null, null, false), - 45035 => array(array('_route' => '_676'), array('a', 'b', 'c'), null, null, false), - 45083 => array(array('_route' => '_804'), array('a', 'b', 'c'), null, null, false), - 45136 => array(array('_route' => '_609'), array('a', 'b', 'c'), null, null, false), - 45184 => array(array('_route' => '_961'), array('a', 'b', 'c'), null, null, false), - 45232 => array(array('_route' => '_980'), array('a', 'b', 'c'), null, null, false), - 45282 => array(array('_route' => '_714'), array('a', 'b', 'c'), null, null, false), - 45334 => array(array('_route' => '_730'), array('a', 'b', 'c'), null, null, false), - 45382 => array(array('_route' => '_806'), array('a', 'b', 'c'), null, null, false), - 45430 => array(array('_route' => '_825'), array('a', 'b', 'c'), null, null, false), - 45478 => array(array('_route' => '_879'), array('a', 'b', 'c'), null, null, false), - 45526 => array(array('_route' => '_893'), array('a', 'b', 'c'), null, null, false), - 45576 => array(array('_route' => '_928'), array('a', 'b', 'c'), null, null, false), - 45628 => array(array('_route' => '_932'), array('a', 'b', 'c'), null, null, false), - 45676 => array(array('_route' => '_958'), array('a', 'b', 'c'), null, null, false), - 45726 => array(array('_route' => '_984'), array('a', 'b', 'c'), null, null, false), - 45784 => array(array('_route' => '_538'), array('a', 'b', 'c'), null, null, false), - 45832 => array(array('_route' => '_993'), array('a', 'b', 'c'), null, null, false), - 45882 => array(array('_route' => '_542'), array('a', 'b', 'c'), null, null, false), - 45934 => array(array('_route' => '_551'), array('a', 'b', 'c'), null, null, false), - 45982 => array(array('_route' => '_687'), array('a', 'b', 'c'), null, null, false), - 46030 => array(array('_route' => '_724'), array('a', 'b', 'c'), null, null, false), - 46078 => array(array('_route' => '_925'), array('a', 'b', 'c'), null, null, false), - 46131 => array(array('_route' => '_587'), array('a', 'b', 'c'), null, null, false), - 46179 => array(array('_route' => '_914'), array('a', 'b', 'c'), null, null, false), - 46229 => array(array('_route' => '_616'), array('a', 'b', 'c'), null, null, false), - 46284 => array(array('_route' => '_677'), array('a', 'b', 'c'), null, null, false), - 46331 => array(array('_route' => '_815'), array('a', 'b', 'c'), null, null, false), - 46380 => array(array('_route' => '_781'), array('a', 'b', 'c'), null, null, false), - 46430 => array(array('_route' => '_717'), array('a', 'b', 'c'), null, null, false), - 46482 => array(array('_route' => '_782'), array('a', 'b', 'c'), null, null, false), - 46530 => array(array('_route' => '_832'), array('a', 'b', 'c'), null, null, false), - 46583 => array(array('_route' => '_795'), array('a', 'b', 'c'), null, null, false), - 46631 => array(array('_route' => '_887'), array('a', 'b', 'c'), null, null, false), - 46681 => array(array('_route' => '_800'), array('a', 'b', 'c'), null, null, false), - 46730 => array(array('_route' => '_826'), array('a', 'b', 'c'), null, null, false), - 46779 => array(array('_route' => '_881'), array('a', 'b', 'c'), null, null, false), - 46828 => array(array('_route' => '_886'), array('a', 'b', 'c'), null, null, false), - 46877 => array(array('_route' => '_938'), array('a', 'b', 'c'), null, null, false), - 46935 => array(array('_route' => '_540'), array('a', 'b', 'c'), null, null, false), - 46983 => array(array('_route' => '_643'), array('a', 'b', 'c'), null, null, false), - 47033 => array(array('_route' => '_544'), array('a', 'b', 'c'), null, null, false), - 47082 => array(array('_route' => '_552'), array('a', 'b', 'c'), null, null, false), - 47134 => array(array('_route' => '_567'), array('a', 'b', 'c'), null, null, false), - 47182 => array(array('_route' => '_608'), array('a', 'b', 'c'), null, null, false), - 47230 => array(array('_route' => '_698'), array('a', 'b', 'c'), null, null, false), - 47278 => array(array('_route' => '_988'), array('a', 'b', 'c'), null, null, false), - 47331 => array(array('_route' => '_583'), array('a', 'b', 'c'), null, null, false), - 47379 => array(array('_route' => '_998'), array('a', 'b', 'c'), null, null, false), - 47432 => array(array('_route' => '_604'), array('a', 'b', 'c'), null, null, false), - 47480 => array(array('_route' => '_630'), array('a', 'b', 'c'), null, null, false), - 47528 => array(array('_route' => '_706'), array('a', 'b', 'c'), null, null, false), - 47576 => array(array('_route' => '_976'), array('a', 'b', 'c'), null, null, false), - 47629 => array(array('_route' => '_673'), array('a', 'b', 'c'), null, null, false), - 47677 => array(array('_route' => '_678'), array('a', 'b', 'c'), null, null, false), - 47725 => array(array('_route' => '_931'), array('a', 'b', 'c'), null, null, false), - 47775 => array(array('_route' => '_751'), array('a', 'b', 'c'), null, null, false), - 47824 => array(array('_route' => '_766'), array('a', 'b', 'c'), null, null, false), - 47876 => array(array('_route' => '_792'), array('a', 'b', 'c'), null, null, false), - 47924 => array(array('_route' => '_814'), array('a', 'b', 'c'), null, null, false), - 47974 => array(array('_route' => '_798'), array('a', 'b', 'c'), null, null, false), - 48026 => array(array('_route' => '_851'), array('a', 'b', 'c'), null, null, false), - 48074 => array(array('_route' => '_941'), array('a', 'b', 'c'), null, null, false), - 48122 => array(array('_route' => '_953'), array('a', 'b', 'c'), null, null, false), - 48170 => array(array('_route' => '_975'), array('a', 'b', 'c'), null, null, false), - 48220 => array(array('_route' => '_873'), array('a', 'b', 'c'), null, null, false), - 48269 => array(array('_route' => '_936'), array('a', 'b', 'c'), null, null, false), - 48318 => array(array('_route' => '_994'), array('a', 'b', 'c'), null, null, false), - 48376 => array(array('_route' => '_562'), array('a', 'b', 'c'), null, null, false), - 48424 => array(array('_route' => '_770'), array('a', 'b', 'c'), null, null, false), - 48475 => array(array('_route' => '_774'), array('a', 'b', 'c'), null, null, false), - 48522 => array(array('_route' => '_966'), array('a', 'b', 'c'), null, null, false), - 48573 => array(array('_route' => '_582'), array('a', 'b', 'c'), null, null, false), - 48625 => array(array('_route' => '_606'), array('a', 'b', 'c'), null, null, false), - 48673 => array(array('_route' => '_648'), array('a', 'b', 'c'), null, null, false), - 48723 => array(array('_route' => '_624'), array('a', 'b', 'c'), null, null, false), - 48775 => array(array('_route' => '_626'), array('a', 'b', 'c'), null, null, false), - 48823 => array(array('_route' => '_821'), array('a', 'b', 'c'), null, null, false), - 48873 => array(array('_route' => '_628'), array('a', 'b', 'c'), null, null, false), - 48922 => array(array('_route' => '_638'), array('a', 'b', 'c'), null, null, false), - 48974 => array(array('_route' => '_640'), array('a', 'b', 'c'), null, null, false), - 49022 => array(array('_route' => '_990'), array('a', 'b', 'c'), null, null, false), - 49072 => array(array('_route' => '_705'), array('a', 'b', 'c'), null, null, false), - 49121 => array(array('_route' => '_757'), array('a', 'b', 'c'), null, null, false), - 49176 => array(array('_route' => '_785'), array('a', 'b', 'c'), null, null, false), - 49223 => array(array('_route' => '_875'), array('a', 'b', 'c'), null, null, false), - 49270 => array(array('_route' => '_894'), array('a', 'b', 'c'), null, null, false), - 49319 => array(array('_route' => '_945'), array('a', 'b', 'c'), null, null, false), - 49375 => array(array('_route' => '_816'), array('a', 'b', 'c'), null, null, false), - 49422 => array(array('_route' => '_872'), array('a', 'b', 'c'), null, null, false), - 49471 => array(array('_route' => '_921'), array('a', 'b', 'c'), null, null, false), - 49519 => array(array('_route' => '_960'), array('a', 'b', 'c'), null, null, false), - 49567 => array(array('_route' => '_974'), array('a', 'b', 'c'), null, null, false), - 49620 => array(array('_route' => '_835'), array('a', 'b', 'c'), null, null, false), - 49668 => array(array('_route' => '_934'), array('a', 'b', 'c'), null, null, false), - 49718 => array(array('_route' => '_869'), array('a', 'b', 'c'), null, null, false), + 54 => array(array('_route' => '_0'), array('a', 'b', 'c'), null, null, false, false), + 102 => array(array('_route' => '_190'), array('a', 'b', 'c'), null, null, false, false), + 147 => array(array('_route' => '_478'), array('a', 'b', 'c'), null, null, false, false), + 194 => array(array('_route' => '_259'), array('a', 'b', 'c'), null, null, false, false), + 240 => array(array('_route' => '_368'), array('a', 'b', 'c'), null, null, false, false), + 291 => array(array('_route' => '_1'), array('a', 'b', 'c'), null, null, false, false), + 337 => array(array('_route' => '_116'), array('a', 'b', 'c'), null, null, false, false), + 383 => array(array('_route' => '_490'), array('a', 'b', 'c'), null, null, false, false), + 434 => array(array('_route' => '_2'), array('a', 'b', 'c'), null, null, false, false), + 480 => array(array('_route' => '_124'), array('a', 'b', 'c'), null, null, false, false), + 526 => array(array('_route' => '_389'), array('a', 'b', 'c'), null, null, false, false), + 577 => array(array('_route' => '_8'), array('a', 'b', 'c'), null, null, false, false), + 623 => array(array('_route' => '_104'), array('a', 'b', 'c'), null, null, false, false), + 677 => array(array('_route' => '_12'), array('a', 'b', 'c'), null, null, false, false), + 722 => array(array('_route' => '_442'), array('a', 'b', 'c'), null, null, false, false), + 769 => array(array('_route' => '_253'), array('a', 'b', 'c'), null, null, false, false), + 820 => array(array('_route' => '_13'), array('a', 'b', 'c'), null, null, false, false), + 866 => array(array('_route' => '_254'), array('a', 'b', 'c'), null, null, false, false), + 912 => array(array('_route' => '_347'), array('a', 'b', 'c'), null, null, false, false), + 963 => array(array('_route' => '_16'), array('a', 'b', 'c'), null, null, false, false), + 1009 => array(array('_route' => '_87'), array('a', 'b', 'c'), null, null, false, false), + 1058 => array(array('_route' => '_31'), array('a', 'b', 'c'), null, null, false, false), + 1109 => array(array('_route' => '_50'), array('a', 'b', 'c'), null, null, false, false), + 1156 => array(array('_route' => '_219'), array('a', 'b', 'c'), null, null, false, false), + 1203 => array(array('_route' => '_332'), array('a', 'b', 'c'), null, null, false, false), + 1250 => array(array('_route' => '_359'), array('a', 'b', 'c'), null, null, false, false), + 1302 => array(array('_route' => '_183'), array('a', 'b', 'c'), null, null, false, false), + 1349 => array(array('_route' => '_500'), array('a', 'b', 'c'), null, null, false, false), + 1401 => array(array('_route' => '_214'), array('a', 'b', 'c'), null, null, false, false), + 1448 => array(array('_route' => '_321'), array('a', 'b', 'c'), null, null, false, false), + 1497 => array(array('_route' => '_243'), array('a', 'b', 'c'), null, null, false, false), + 1545 => array(array('_route' => '_328'), array('a', 'b', 'c'), null, null, false, false), + 1596 => array(array('_route' => '_362'), array('a', 'b', 'c'), null, null, false, false), + 1643 => array(array('_route' => '_488'), array('a', 'b', 'c'), null, null, false, false), + 1701 => array(array('_route' => '_3'), array('a', 'b', 'c'), null, null, false, false), + 1751 => array(array('_route' => '_102'), array('a', 'b', 'c'), null, null, false, false), + 1797 => array(array('_route' => '_220'), array('a', 'b', 'c'), null, null, false, false), + 1845 => array(array('_route' => '_127'), array('a', 'b', 'c'), null, null, false, false), + 1897 => array(array('_route' => '_5'), array('a', 'b', 'c'), null, null, false, false), + 1944 => array(array('_route' => '_242'), array('a', 'b', 'c'), null, null, false, false), + 1991 => array(array('_route' => '_397'), array('a', 'b', 'c'), null, null, false, false), + 2038 => array(array('_route' => '_454'), array('a', 'b', 'c'), null, null, false, false), + 2090 => array(array('_route' => '_34'), array('a', 'b', 'c'), null, null, false, false), + 2137 => array(array('_route' => '_281'), array('a', 'b', 'c'), null, null, false, false), + 2189 => array(array('_route' => '_64'), array('a', 'b', 'c'), null, null, false, false), + 2236 => array(array('_route' => '_205'), array('a', 'b', 'c'), null, null, false, false), + 2291 => array(array('_route' => '_71'), array('a', 'b', 'c'), null, null, false, false), + 2337 => array(array('_route' => '_203'), array('a', 'b', 'c'), null, null, false, false), + 2385 => array(array('_route' => '_97'), array('a', 'b', 'c'), null, null, false, false), + 2437 => array(array('_route' => '_98'), array('a', 'b', 'c'), null, null, false, false), + 2484 => array(array('_route' => '_267'), array('a', 'b', 'c'), null, null, false, false), + 2531 => array(array('_route' => '_309'), array('a', 'b', 'c'), null, null, false, false), + 2586 => array(array('_route' => '_117'), array('a', 'b', 'c'), null, null, false, false), + 2631 => array(array('_route' => '_211'), array('a', 'b', 'c'), null, null, false, false), + 2679 => array(array('_route' => '_484'), array('a', 'b', 'c'), null, null, false, false), + 2731 => array(array('_route' => '_139'), array('a', 'b', 'c'), null, null, false, false), + 2778 => array(array('_route' => '_421'), array('a', 'b', 'c'), null, null, false, false), + 2830 => array(array('_route' => '_185'), array('a', 'b', 'c'), null, null, false, false), + 2877 => array(array('_route' => '_439'), array('a', 'b', 'c'), null, null, false, false), + 2926 => array(array('_route' => '_218'), array('a', 'b', 'c'), null, null, false, false), + 2977 => array(array('_route' => '_233'), array('a', 'b', 'c'), null, null, false, false), + 3024 => array(array('_route' => '_483'), array('a', 'b', 'c'), null, null, false, false), + 3073 => array(array('_route' => '_265'), array('a', 'b', 'c'), null, null, false, false), + 3124 => array(array('_route' => '_299'), array('a', 'b', 'c'), null, null, false, false), + 3171 => array(array('_route' => '_351'), array('a', 'b', 'c'), null, null, false, false), + 3218 => array(array('_route' => '_472'), array('a', 'b', 'c'), null, null, false, false), + 3267 => array(array('_route' => '_360'), array('a', 'b', 'c'), null, null, false, false), + 3315 => array(array('_route' => '_466'), array('a', 'b', 'c'), null, null, false, false), + 3372 => array(array('_route' => '_4'), array('a', 'b', 'c'), null, null, false, false), + 3419 => array(array('_route' => '_142'), array('a', 'b', 'c'), null, null, false, false), + 3466 => array(array('_route' => '_151'), array('a', 'b', 'c'), null, null, false, false), + 3513 => array(array('_route' => '_308'), array('a', 'b', 'c'), null, null, false, false), + 3560 => array(array('_route' => '_440'), array('a', 'b', 'c'), null, null, false, false), + 3612 => array(array('_route' => '_14'), array('a', 'b', 'c'), null, null, false, false), + 3659 => array(array('_route' => '_358'), array('a', 'b', 'c'), null, null, false, false), + 3711 => array(array('_route' => '_37'), array('a', 'b', 'c'), null, null, false, false), + 3758 => array(array('_route' => '_38'), array('a', 'b', 'c'), null, null, false, false), + 3805 => array(array('_route' => '_146'), array('a', 'b', 'c'), null, null, false, false), + 3852 => array(array('_route' => '_194'), array('a', 'b', 'c'), null, null, false, false), + 3899 => array(array('_route' => '_487'), array('a', 'b', 'c'), null, null, false, false), + 3948 => array(array('_route' => '_42'), array('a', 'b', 'c'), null, null, false, false), + 3999 => array(array('_route' => '_54'), array('a', 'b', 'c'), null, null, false, false), + 4046 => array(array('_route' => '_326'), array('a', 'b', 'c'), null, null, false, false), + 4098 => array(array('_route' => '_68'), array('a', 'b', 'c'), null, null, false, false), + 4145 => array(array('_route' => '_108'), array('a', 'b', 'c'), null, null, false, false), + 4197 => array(array('_route' => '_74'), array('a', 'b', 'c'), null, null, false, false), + 4244 => array(array('_route' => '_315'), array('a', 'b', 'c'), null, null, false, false), + 4291 => array(array('_route' => '_374'), array('a', 'b', 'c'), null, null, false, false), + 4343 => array(array('_route' => '_99'), array('a', 'b', 'c'), null, null, false, false), + 4390 => array(array('_route' => '_238'), array('a', 'b', 'c'), null, null, false, false), + 4442 => array(array('_route' => '_107'), array('a', 'b', 'c'), null, null, false, false), + 4489 => array(array('_route' => '_409'), array('a', 'b', 'c'), null, null, false, false), + 4541 => array(array('_route' => '_122'), array('a', 'b', 'c'), null, null, false, false), + 4588 => array(array('_route' => '_379'), array('a', 'b', 'c'), null, null, false, false), + 4635 => array(array('_route' => '_390'), array('a', 'b', 'c'), null, null, false, false), + 4687 => array(array('_route' => '_171'), array('a', 'b', 'c'), null, null, false, false), + 4734 => array(array('_route' => '_260'), array('a', 'b', 'c'), null, null, false, false), + 4781 => array(array('_route' => '_434'), array('a', 'b', 'c'), null, null, false, false), + 4830 => array(array('_route' => '_189'), array('a', 'b', 'c'), null, null, false, false), + 4878 => array(array('_route' => '_467'), array('a', 'b', 'c'), null, null, false, false), + 4935 => array(array('_route' => '_6'), array('a', 'b', 'c'), null, null, false, false), + 4982 => array(array('_route' => '_286'), array('a', 'b', 'c'), null, null, false, false), + 5029 => array(array('_route' => '_438'), array('a', 'b', 'c'), null, null, false, false), + 5081 => array(array('_route' => '_19'), array('a', 'b', 'c'), null, null, false, false), + 5131 => array(array('_route' => '_24'), array('a', 'b', 'c'), null, null, false, false), + 5177 => array(array('_route' => '_172'), array('a', 'b', 'c'), null, null, false, false), + 5230 => array(array('_route' => '_33'), array('a', 'b', 'c'), null, null, false, false), + 5277 => array(array('_route' => '_400'), array('a', 'b', 'c'), null, null, false, false), + 5324 => array(array('_route' => '_427'), array('a', 'b', 'c'), null, null, false, false), + 5376 => array(array('_route' => '_35'), array('a', 'b', 'c'), null, null, false, false), + 5423 => array(array('_route' => '_156'), array('a', 'b', 'c'), null, null, false, false), + 5475 => array(array('_route' => '_36'), array('a', 'b', 'c'), null, null, false, false), + 5522 => array(array('_route' => '_251'), array('a', 'b', 'c'), null, null, false, false), + 5574 => array(array('_route' => '_43'), array('a', 'b', 'c'), null, null, false, false), + 5621 => array(array('_route' => '_292'), array('a', 'b', 'c'), null, null, false, false), + 5668 => array(array('_route' => '_411'), array('a', 'b', 'c'), null, null, false, false), + 5720 => array(array('_route' => '_69'), array('a', 'b', 'c'), null, null, false, false), + 5767 => array(array('_route' => '_159'), array('a', 'b', 'c'), null, null, false, false), + 5814 => array(array('_route' => '_170'), array('a', 'b', 'c'), null, null, false, false), + 5861 => array(array('_route' => '_376'), array('a', 'b', 'c'), null, null, false, false), + 5913 => array(array('_route' => '_131'), array('a', 'b', 'c'), null, null, false, false), + 5960 => array(array('_route' => '_446'), array('a', 'b', 'c'), null, null, false, false), + 6015 => array(array('_route' => '_140'), array('a', 'b', 'c'), null, null, false, false), + 6061 => array(array('_route' => '_353'), array('a', 'b', 'c'), null, null, false, false), + 6112 => array(array('_route' => '_224'), array('a', 'b', 'c'), null, null, false, false), + 6158 => array(array('_route' => '_346'), array('a', 'b', 'c'), null, null, false, false), + 6204 => array(array('_route' => '_443'), array('a', 'b', 'c'), null, null, false, false), + 6254 => array(array('_route' => '_154'), array('a', 'b', 'c'), null, null, false, false), + 6305 => array(array('_route' => '_212'), array('a', 'b', 'c'), null, null, false, false), + 6352 => array(array('_route' => '_313'), array('a', 'b', 'c'), null, null, false, false), + 6399 => array(array('_route' => '_395'), array('a', 'b', 'c'), null, null, false, false), + 6446 => array(array('_route' => '_441'), array('a', 'b', 'c'), null, null, false, false), + 6498 => array(array('_route' => '_223'), array('a', 'b', 'c'), null, null, false, false), + 6545 => array(array('_route' => '_303'), array('a', 'b', 'c'), null, null, false, false), + 6594 => array(array('_route' => '_410'), array('a', 'b', 'c'), null, null, false, false), + 6642 => array(array('_route' => '_494'), array('a', 'b', 'c'), null, null, false, false), + 6702 => array(array('_route' => '_7'), array('a', 'b', 'c'), null, null, false, false), + 6748 => array(array('_route' => '_268'), array('a', 'b', 'c'), null, null, false, false), + 6796 => array(array('_route' => '_178'), array('a', 'b', 'c'), null, null, false, false), + 6843 => array(array('_route' => '_179'), array('a', 'b', 'c'), null, null, false, false), + 6890 => array(array('_route' => '_416'), array('a', 'b', 'c'), null, null, false, false), + 6942 => array(array('_route' => '_25'), array('a', 'b', 'c'), null, null, false, false), + 6989 => array(array('_route' => '_307'), array('a', 'b', 'c'), null, null, false, false), + 7036 => array(array('_route' => '_387'), array('a', 'b', 'c'), null, null, false, false), + 7083 => array(array('_route' => '_471'), array('a', 'b', 'c'), null, null, false, false), + 7132 => array(array('_route' => '_90'), array('a', 'b', 'c'), null, null, false, false), + 7183 => array(array('_route' => '_95'), array('a', 'b', 'c'), null, null, false, false), + 7230 => array(array('_route' => '_338'), array('a', 'b', 'c'), null, null, false, false), + 7277 => array(array('_route' => '_401'), array('a', 'b', 'c'), null, null, false, false), + 7329 => array(array('_route' => '_147'), array('a', 'b', 'c'), null, null, false, false), + 7376 => array(array('_route' => '_319'), array('a', 'b', 'c'), null, null, false, false), + 7423 => array(array('_route' => '_354'), array('a', 'b', 'c'), null, null, false, false), + 7470 => array(array('_route' => '_428'), array('a', 'b', 'c'), null, null, false, false), + 7522 => array(array('_route' => '_162'), array('a', 'b', 'c'), null, null, false, false), + 7572 => array(array('_route' => '_175'), array('a', 'b', 'c'), null, null, false, false), + 7618 => array(array('_route' => '_455'), array('a', 'b', 'c'), null, null, false, false), + 7666 => array(array('_route' => '_355'), array('a', 'b', 'c'), null, null, false, false), + 7718 => array(array('_route' => '_197'), array('a', 'b', 'c'), null, null, false, false), + 7768 => array(array('_route' => '_202'), array('a', 'b', 'c'), null, null, false, false), + 7813 => array(array('_route' => '_489'), array('a', 'b', 'c'), null, null, false, false), + 7863 => array(array('_route' => '_199'), array('a', 'b', 'c'), null, null, false, false), + 7914 => array(array('_route' => '_263'), array('a', 'b', 'c'), null, null, false, false), + 7961 => array(array('_route' => '_406'), array('a', 'b', 'c'), null, null, false, false), + 8010 => array(array('_route' => '_289'), array('a', 'b', 'c'), null, null, false, false), + 8058 => array(array('_route' => '_325'), array('a', 'b', 'c'), null, null, false, false), + 8106 => array(array('_route' => '_378'), array('a', 'b', 'c'), null, null, false, false), + 8154 => array(array('_route' => '_468'), array('a', 'b', 'c'), null, null, false, false), + 8211 => array(array('_route' => '_9'), array('a', 'b', 'c'), null, null, false, false), + 8258 => array(array('_route' => '_216'), array('a', 'b', 'c'), null, null, false, false), + 8307 => array(array('_route' => '_26'), array('a', 'b', 'c'), null, null, false, false), + 8355 => array(array('_route' => '_62'), array('a', 'b', 'c'), null, null, false, false), + 8406 => array(array('_route' => '_81'), array('a', 'b', 'c'), null, null, false, false), + 8453 => array(array('_route' => '_318'), array('a', 'b', 'c'), null, null, false, false), + 8505 => array(array('_route' => '_121'), array('a', 'b', 'c'), null, null, false, false), + 8551 => array(array('_route' => '_182'), array('a', 'b', 'c'), null, null, false, false), + 8603 => array(array('_route' => '_136'), array('a', 'b', 'c'), null, null, false, false), + 8650 => array(array('_route' => '_415'), array('a', 'b', 'c'), null, null, false, false), + 8697 => array(array('_route' => '_457'), array('a', 'b', 'c'), null, null, false, false), + 8744 => array(array('_route' => '_463'), array('a', 'b', 'c'), null, null, false, false), + 8796 => array(array('_route' => '_148'), array('a', 'b', 'c'), null, null, false, false), + 8843 => array(array('_route' => '_273'), array('a', 'b', 'c'), null, null, false, false), + 8892 => array(array('_route' => '_284'), array('a', 'b', 'c'), null, null, false, false), + 8940 => array(array('_route' => '_288'), array('a', 'b', 'c'), null, null, false, false), + 8991 => array(array('_route' => '_295'), array('a', 'b', 'c'), null, null, false, false), + 9038 => array(array('_route' => '_305'), array('a', 'b', 'c'), null, null, false, false), + 9085 => array(array('_route' => '_453'), array('a', 'b', 'c'), null, null, false, false), + 9134 => array(array('_route' => '_340'), array('a', 'b', 'c'), null, null, false, false), + 9185 => array(array('_route' => '_371'), array('a', 'b', 'c'), null, null, false, false), + 9232 => array(array('_route' => '_417'), array('a', 'b', 'c'), null, null, false, false), + 9284 => array(array('_route' => '_382'), array('a', 'b', 'c'), null, null, false, false), + 9331 => array(array('_route' => '_404'), array('a', 'b', 'c'), null, null, false, false), + 9389 => array(array('_route' => '_10'), array('a', 'b', 'c'), null, null, false, false), + 9436 => array(array('_route' => '_279'), array('a', 'b', 'c'), null, null, false, false), + 9483 => array(array('_route' => '_377'), array('a', 'b', 'c'), null, null, false, false), + 9535 => array(array('_route' => '_39'), array('a', 'b', 'c'), null, null, false, false), + 9582 => array(array('_route' => '_40'), array('a', 'b', 'c'), null, null, false, false), + 9629 => array(array('_route' => '_264'), array('a', 'b', 'c'), null, null, false, false), + 9676 => array(array('_route' => '_449'), array('a', 'b', 'c'), null, null, false, false), + 9728 => array(array('_route' => '_46'), array('a', 'b', 'c'), null, null, false, false), + 9775 => array(array('_route' => '_257'), array('a', 'b', 'c'), null, null, false, false), + 9822 => array(array('_route' => '_274'), array('a', 'b', 'c'), null, null, false, false), + 9869 => array(array('_route' => '_388'), array('a', 'b', 'c'), null, null, false, false), + 9921 => array(array('_route' => '_53'), array('a', 'b', 'c'), null, null, false, false), + 9968 => array(array('_route' => '_345'), array('a', 'b', 'c'), null, null, false, false), + 10020 => array(array('_route' => '_73'), array('a', 'b', 'c'), null, null, false, false), + 10068 => array(array('_route' => '_296'), array('a', 'b', 'c'), null, null, false, false), + 10121 => array(array('_route' => '_75'), array('a', 'b', 'c'), null, null, false, false), + 10169 => array(array('_route' => '_458'), array('a', 'b', 'c'), null, null, false, false), + 10225 => array(array('_route' => '_79'), array('a', 'b', 'c'), null, null, false, false), + 10272 => array(array('_route' => '_129'), array('a', 'b', 'c'), null, null, false, false), + 10319 => array(array('_route' => '_418'), array('a', 'b', 'c'), null, null, false, false), + 10368 => array(array('_route' => '_225'), array('a', 'b', 'c'), null, null, false, false), + 10416 => array(array('_route' => '_479'), array('a', 'b', 'c'), null, null, false, false), + 10466 => array(array('_route' => '_120'), array('a', 'b', 'c'), null, null, false, false), + 10515 => array(array('_route' => '_276'), array('a', 'b', 'c'), null, null, false, false), + 10564 => array(array('_route' => '_370'), array('a', 'b', 'c'), null, null, false, false), + 10616 => array(array('_route' => '_385'), array('a', 'b', 'c'), null, null, false, false), + 10664 => array(array('_route' => '_469'), array('a', 'b', 'c'), null, null, false, false), + 10714 => array(array('_route' => '_435'), array('a', 'b', 'c'), null, null, false, false), + 10772 => array(array('_route' => '_11'), array('a', 'b', 'c'), null, null, false, false), + 10820 => array(array('_route' => '_105'), array('a', 'b', 'c'), null, null, false, false), + 10868 => array(array('_route' => '_132'), array('a', 'b', 'c'), null, null, false, false), + 10921 => array(array('_route' => '_18'), array('a', 'b', 'c'), null, null, false, false), + 10969 => array(array('_route' => '_210'), array('a', 'b', 'c'), null, null, false, false), + 11017 => array(array('_route' => '_329'), array('a', 'b', 'c'), null, null, false, false), + 11073 => array(array('_route' => '_29'), array('a', 'b', 'c'), null, null, false, false), + 11120 => array(array('_route' => '_480'), array('a', 'b', 'c'), null, null, false, false), + 11169 => array(array('_route' => '_426'), array('a', 'b', 'c'), null, null, false, false), + 11222 => array(array('_route' => '_32'), array('a', 'b', 'c'), null, null, false, false), + 11270 => array(array('_route' => '_217'), array('a', 'b', 'c'), null, null, false, false), + 11318 => array(array('_route' => '_275'), array('a', 'b', 'c'), null, null, false, false), + 11371 => array(array('_route' => '_45'), array('a', 'b', 'c'), null, null, false, false), + 11419 => array(array('_route' => '_157'), array('a', 'b', 'c'), null, null, false, false), + 11467 => array(array('_route' => '_184'), array('a', 'b', 'c'), null, null, false, false), + 11515 => array(array('_route' => '_250'), array('a', 'b', 'c'), null, null, false, false), + 11563 => array(array('_route' => '_356'), array('a', 'b', 'c'), null, null, false, false), + 11616 => array(array('_route' => '_47'), array('a', 'b', 'c'), null, null, false, false), + 11664 => array(array('_route' => '_445'), array('a', 'b', 'c'), null, null, false, false), + 11714 => array(array('_route' => '_48'), array('a', 'b', 'c'), null, null, false, false), + 11766 => array(array('_route' => '_58'), array('a', 'b', 'c'), null, null, false, false), + 11814 => array(array('_route' => '_414'), array('a', 'b', 'c'), null, null, false, false), + 11862 => array(array('_route' => '_431'), array('a', 'b', 'c'), null, null, false, false), + 11915 => array(array('_route' => '_84'), array('a', 'b', 'c'), null, null, false, false), + 11963 => array(array('_route' => '_294'), array('a', 'b', 'c'), null, null, false, false), + 12011 => array(array('_route' => '_336'), array('a', 'b', 'c'), null, null, false, false), + 12059 => array(array('_route' => '_465'), array('a', 'b', 'c'), null, null, false, false), + 12112 => array(array('_route' => '_103'), array('a', 'b', 'c'), null, null, false, false), + 12160 => array(array('_route' => '_111'), array('a', 'b', 'c'), null, null, false, false), + 12208 => array(array('_route' => '_207'), array('a', 'b', 'c'), null, null, false, false), + 12256 => array(array('_route' => '_402'), array('a', 'b', 'c'), null, null, false, false), + 12309 => array(array('_route' => '_230'), array('a', 'b', 'c'), null, null, false, false), + 12356 => array(array('_route' => '_331'), array('a', 'b', 'c'), null, null, false, false), + 12406 => array(array('_route' => '_248'), array('a', 'b', 'c'), null, null, false, false), + 12455 => array(array('_route' => '_282'), array('a', 'b', 'c'), null, null, false, false), + 12513 => array(array('_route' => '_15'), array('a', 'b', 'c'), null, null, false, false), + 12561 => array(array('_route' => '_130'), array('a', 'b', 'c'), null, null, false, false), + 12609 => array(array('_route' => '_231'), array('a', 'b', 'c'), null, null, false, false), + 12657 => array(array('_route' => '_365'), array('a', 'b', 'c'), null, null, false, false), + 12705 => array(array('_route' => '_448'), array('a', 'b', 'c'), null, null, false, false), + 12758 => array(array('_route' => '_20'), array('a', 'b', 'c'), null, null, false, false), + 12806 => array(array('_route' => '_93'), array('a', 'b', 'c'), null, null, false, false), + 12854 => array(array('_route' => '_186'), array('a', 'b', 'c'), null, null, false, false), + 12902 => array(array('_route' => '_460'), array('a', 'b', 'c'), null, null, false, false), + 12955 => array(array('_route' => '_52'), array('a', 'b', 'c'), null, null, false, false), + 13003 => array(array('_route' => '_447'), array('a', 'b', 'c'), null, null, false, false), + 13056 => array(array('_route' => '_56'), array('a', 'b', 'c'), null, null, false, false), + 13104 => array(array('_route' => '_133'), array('a', 'b', 'c'), null, null, false, false), + 13152 => array(array('_route' => '_297'), array('a', 'b', 'c'), null, null, false, false), + 13205 => array(array('_route' => '_82'), array('a', 'b', 'c'), null, null, false, false), + 13253 => array(array('_route' => '_165'), array('a', 'b', 'c'), null, null, false, false), + 13301 => array(array('_route' => '_213'), array('a', 'b', 'c'), null, null, false, false), + 13351 => array(array('_route' => '_86'), array('a', 'b', 'c'), null, null, false, false), + 13403 => array(array('_route' => '_92'), array('a', 'b', 'c'), null, null, false, false), + 13450 => array(array('_route' => '_280'), array('a', 'b', 'c'), null, null, false, false), + 13500 => array(array('_route' => '_143'), array('a', 'b', 'c'), null, null, false, false), + 13549 => array(array('_route' => '_177'), array('a', 'b', 'c'), null, null, false, false), + 13601 => array(array('_route' => '_188'), array('a', 'b', 'c'), null, null, false, false), + 13649 => array(array('_route' => '_311'), array('a', 'b', 'c'), null, null, false, false), + 13697 => array(array('_route' => '_350'), array('a', 'b', 'c'), null, null, false, false), + 13750 => array(array('_route' => '_226'), array('a', 'b', 'c'), null, null, false, false), + 13798 => array(array('_route' => '_291'), array('a', 'b', 'c'), null, null, false, false), + 13851 => array(array('_route' => '_244'), array('a', 'b', 'c'), null, null, false, false), + 13898 => array(array('_route' => '_287'), array('a', 'b', 'c'), null, null, false, false), + 13951 => array(array('_route' => '_300'), array('a', 'b', 'c'), null, null, false, false), + 13999 => array(array('_route' => '_451'), array('a', 'b', 'c'), null, null, false, false), + 14047 => array(array('_route' => '_452'), array('a', 'b', 'c'), null, null, false, false), + 14095 => array(array('_route' => '_481'), array('a', 'b', 'c'), null, null, false, false), + 14145 => array(array('_route' => '_312'), array('a', 'b', 'c'), null, null, false, false), + 14203 => array(array('_route' => '_17'), array('a', 'b', 'c'), null, null, false, false), + 14251 => array(array('_route' => '_227'), array('a', 'b', 'c'), null, null, false, false), + 14299 => array(array('_route' => '_393'), array('a', 'b', 'c'), null, null, false, false), + 14349 => array(array('_route' => '_57'), array('a', 'b', 'c'), null, null, false, false), + 14401 => array(array('_route' => '_61'), array('a', 'b', 'c'), null, null, false, false), + 14449 => array(array('_route' => '_112'), array('a', 'b', 'c'), null, null, false, false), + 14500 => array(array('_route' => '_135'), array('a', 'b', 'c'), null, null, false, false), + 14547 => array(array('_route' => '_271'), array('a', 'b', 'c'), null, null, false, false), + 14596 => array(array('_route' => '_459'), array('a', 'b', 'c'), null, null, false, false), + 14649 => array(array('_route' => '_67'), array('a', 'b', 'c'), null, null, false, false), + 14697 => array(array('_route' => '_113'), array('a', 'b', 'c'), null, null, false, false), + 14745 => array(array('_route' => '_497'), array('a', 'b', 'c'), null, null, false, false), + 14795 => array(array('_route' => '_70'), array('a', 'b', 'c'), null, null, false, false), + 14847 => array(array('_route' => '_89'), array('a', 'b', 'c'), null, null, false, false), + 14895 => array(array('_route' => '_128'), array('a', 'b', 'c'), null, null, false, false), + 14948 => array(array('_route' => '_150'), array('a', 'b', 'c'), null, null, false, false), + 14996 => array(array('_route' => '_166'), array('a', 'b', 'c'), null, null, false, false), + 15047 => array(array('_route' => '_206'), array('a', 'b', 'c'), null, null, false, false), + 15094 => array(array('_route' => '_419'), array('a', 'b', 'c'), null, null, false, false), + 15148 => array(array('_route' => '_201'), array('a', 'b', 'c'), null, null, false, false), + 15196 => array(array('_route' => '_314'), array('a', 'b', 'c'), null, null, false, false), + 15244 => array(array('_route' => '_429'), array('a', 'b', 'c'), null, null, false, false), + 15297 => array(array('_route' => '_228'), array('a', 'b', 'c'), null, null, false, false), + 15345 => array(array('_route' => '_477'), array('a', 'b', 'c'), null, null, false, false), + 15395 => array(array('_route' => '_272'), array('a', 'b', 'c'), null, null, false, false), + 15444 => array(array('_route' => '_486'), array('a', 'b', 'c'), null, null, false, false), + 15502 => array(array('_route' => '_21'), array('a', 'b', 'c'), null, null, false, false), + 15550 => array(array('_route' => '_247'), array('a', 'b', 'c'), null, null, false, false), + 15598 => array(array('_route' => '_424'), array('a', 'b', 'c'), null, null, false, false), + 15646 => array(array('_route' => '_499'), array('a', 'b', 'c'), null, null, false, false), + 15699 => array(array('_route' => '_23'), array('a', 'b', 'c'), null, null, false, false), + 15747 => array(array('_route' => '_152'), array('a', 'b', 'c'), null, null, false, false), + 15795 => array(array('_route' => '_304'), array('a', 'b', 'c'), null, null, false, false), + 15843 => array(array('_route' => '_352'), array('a', 'b', 'c'), null, null, false, false), + 15896 => array(array('_route' => '_28'), array('a', 'b', 'c'), null, null, false, false), + 15944 => array(array('_route' => '_240'), array('a', 'b', 'c'), null, null, false, false), + 16000 => array(array('_route' => '_30'), array('a', 'b', 'c'), null, null, false, false), + 16047 => array(array('_route' => '_41'), array('a', 'b', 'c'), null, null, false, false), + 16096 => array(array('_route' => '_301'), array('a', 'b', 'c'), null, null, false, false), + 16149 => array(array('_route' => '_66'), array('a', 'b', 'c'), null, null, false, false), + 16197 => array(array('_route' => '_72'), array('a', 'b', 'c'), null, null, false, false), + 16245 => array(array('_route' => '_320'), array('a', 'b', 'c'), null, null, false, false), + 16298 => array(array('_route' => '_78'), array('a', 'b', 'c'), null, null, false, false), + 16346 => array(array('_route' => '_337'), array('a', 'b', 'c'), null, null, false, false), + 16394 => array(array('_route' => '_399'), array('a', 'b', 'c'), null, null, false, false), + 16442 => array(array('_route' => '_495'), array('a', 'b', 'c'), null, null, false, false), + 16492 => array(array('_route' => '_85'), array('a', 'b', 'c'), null, null, false, false), + 16544 => array(array('_route' => '_101'), array('a', 'b', 'c'), null, null, false, false), + 16592 => array(array('_route' => '_176'), array('a', 'b', 'c'), null, null, false, false), + 16640 => array(array('_route' => '_246'), array('a', 'b', 'c'), null, null, false, false), + 16693 => array(array('_route' => '_125'), array('a', 'b', 'c'), null, null, false, false), + 16741 => array(array('_route' => '_341'), array('a', 'b', 'c'), null, null, false, false), + 16794 => array(array('_route' => '_137'), array('a', 'b', 'c'), null, null, false, false), + 16842 => array(array('_route' => '_270'), array('a', 'b', 'c'), null, null, false, false), + 16890 => array(array('_route' => '_386'), array('a', 'b', 'c'), null, null, false, false), + 16943 => array(array('_route' => '_169'), array('a', 'b', 'c'), null, null, false, false), + 16991 => array(array('_route' => '_200'), array('a', 'b', 'c'), null, null, false, false), + 17039 => array(array('_route' => '_262'), array('a', 'b', 'c'), null, null, false, false), + 17092 => array(array('_route' => '_187'), array('a', 'b', 'c'), null, null, false, false), + 17140 => array(array('_route' => '_333'), array('a', 'b', 'c'), null, null, false, false), + 17190 => array(array('_route' => '_215'), array('a', 'b', 'c'), null, null, false, false), + 17239 => array(array('_route' => '_316'), array('a', 'b', 'c'), null, null, false, false), + 17288 => array(array('_route' => '_343'), array('a', 'b', 'c'), null, null, false, false), + 17346 => array(array('_route' => '_22'), array('a', 'b', 'c'), null, null, false, false), + 17394 => array(array('_route' => '_420'), array('a', 'b', 'c'), null, null, false, false), + 17447 => array(array('_route' => '_55'), array('a', 'b', 'c'), null, null, false, false), + 17494 => array(array('_route' => '_496'), array('a', 'b', 'c'), null, null, false, false), + 17547 => array(array('_route' => '_153'), array('a', 'b', 'c'), null, null, false, false), + 17595 => array(array('_route' => '_344'), array('a', 'b', 'c'), null, null, false, false), + 17648 => array(array('_route' => '_160'), array('a', 'b', 'c'), null, null, false, false), + 17696 => array(array('_route' => '_398'), array('a', 'b', 'c'), null, null, false, false), + 17749 => array(array('_route' => '_161'), array('a', 'b', 'c'), null, null, false, false), + 17797 => array(array('_route' => '_193'), array('a', 'b', 'c'), null, null, false, false), + 17847 => array(array('_route' => '_174'), array('a', 'b', 'c'), null, null, false, false), + 17899 => array(array('_route' => '_209'), array('a', 'b', 'c'), null, null, false, false), + 17947 => array(array('_route' => '_261'), array('a', 'b', 'c'), null, null, false, false), + 18000 => array(array('_route' => '_222'), array('a', 'b', 'c'), null, null, false, false), + 18048 => array(array('_route' => '_323'), array('a', 'b', 'c'), null, null, false, false), + 18096 => array(array('_route' => '_380'), array('a', 'b', 'c'), null, null, false, false), + 18149 => array(array('_route' => '_232'), array('a', 'b', 'c'), null, null, false, false), + 18197 => array(array('_route' => '_383'), array('a', 'b', 'c'), null, null, false, false), + 18247 => array(array('_route' => '_306'), array('a', 'b', 'c'), null, null, false, false), + 18296 => array(array('_route' => '_327'), array('a', 'b', 'c'), null, null, false, false), + 18345 => array(array('_route' => '_364'), array('a', 'b', 'c'), null, null, false, false), + 18397 => array(array('_route' => '_403'), array('a', 'b', 'c'), null, null, false, false), + 18445 => array(array('_route' => '_405'), array('a', 'b', 'c'), null, null, false, false), + 18495 => array(array('_route' => '_412'), array('a', 'b', 'c'), null, null, false, false), + 18553 => array(array('_route' => '_27'), array('a', 'b', 'c'), null, null, false, false), + 18601 => array(array('_route' => '_134'), array('a', 'b', 'c'), null, null, false, false), + 18649 => array(array('_route' => '_245'), array('a', 'b', 'c'), null, null, false, false), + 18702 => array(array('_route' => '_59'), array('a', 'b', 'c'), null, null, false, false), + 18750 => array(array('_route' => '_208'), array('a', 'b', 'c'), null, null, false, false), + 18803 => array(array('_route' => '_60'), array('a', 'b', 'c'), null, null, false, false), + 18851 => array(array('_route' => '_119'), array('a', 'b', 'c'), null, null, false, false), + 18902 => array(array('_route' => '_163'), array('a', 'b', 'c'), null, null, false, false), + 18949 => array(array('_route' => '_249'), array('a', 'b', 'c'), null, null, false, false), + 18998 => array(array('_route' => '_278'), array('a', 'b', 'c'), null, null, false, false), + 19051 => array(array('_route' => '_63'), array('a', 'b', 'c'), null, null, false, false), + 19099 => array(array('_route' => '_195'), array('a', 'b', 'c'), null, null, false, false), + 19147 => array(array('_route' => '_252'), array('a', 'b', 'c'), null, null, false, false), + 19195 => array(array('_route' => '_461'), array('a', 'b', 'c'), null, null, false, false), + 19248 => array(array('_route' => '_126'), array('a', 'b', 'c'), null, null, false, false), + 19296 => array(array('_route' => '_158'), array('a', 'b', 'c'), null, null, false, false), + 19344 => array(array('_route' => '_221'), array('a', 'b', 'c'), null, null, false, false), + 19392 => array(array('_route' => '_269'), array('a', 'b', 'c'), null, null, false, false), + 19440 => array(array('_route' => '_310'), array('a', 'b', 'c'), null, null, false, false), + 19496 => array(array('_route' => '_138'), array('a', 'b', 'c'), null, null, false, false), + 19543 => array(array('_route' => '_348'), array('a', 'b', 'c'), null, null, false, false), + 19592 => array(array('_route' => '_236'), array('a', 'b', 'c'), null, null, false, false), + 19640 => array(array('_route' => '_433'), array('a', 'b', 'c'), null, null, false, false), + 19693 => array(array('_route' => '_141'), array('a', 'b', 'c'), null, null, false, false), + 19741 => array(array('_route' => '_283'), array('a', 'b', 'c'), null, null, false, false), + 19794 => array(array('_route' => '_144'), array('a', 'b', 'c'), null, null, false, false), + 19842 => array(array('_route' => '_191'), array('a', 'b', 'c'), null, null, false, false), + 19895 => array(array('_route' => '_168'), array('a', 'b', 'c'), null, null, false, false), + 19943 => array(array('_route' => '_363'), array('a', 'b', 'c'), null, null, false, false), + 19991 => array(array('_route' => '_381'), array('a', 'b', 'c'), null, null, false, false), + 20044 => array(array('_route' => '_180'), array('a', 'b', 'c'), null, null, false, false), + 20092 => array(array('_route' => '_339'), array('a', 'b', 'c'), null, null, false, false), + 20142 => array(array('_route' => '_196'), array('a', 'b', 'c'), null, null, false, false), + 20194 => array(array('_route' => '_198'), array('a', 'b', 'c'), null, null, false, false), + 20242 => array(array('_route' => '_285'), array('a', 'b', 'c'), null, null, false, false), + 20292 => array(array('_route' => '_349'), array('a', 'b', 'c'), null, null, false, false), + 20344 => array(array('_route' => '_367'), array('a', 'b', 'c'), null, null, false, false), + 20392 => array(array('_route' => '_384'), array('a', 'b', 'c'), null, null, false, false), + 20440 => array(array('_route' => '_498'), array('a', 'b', 'c'), null, null, false, false), + 20490 => array(array('_route' => '_369'), array('a', 'b', 'c'), null, null, false, false), + 20542 => array(array('_route' => '_408'), array('a', 'b', 'c'), null, null, false, false), + 20590 => array(array('_route' => '_413'), array('a', 'b', 'c'), null, null, false, false), + 20652 => array(array('_route' => '_44'), array('a', 'b', 'c'), null, null, false, false), + 20699 => array(array('_route' => '_256'), array('a', 'b', 'c'), null, null, false, false), + 20748 => array(array('_route' => '_173'), array('a', 'b', 'c'), null, null, false, false), + 20796 => array(array('_route' => '_266'), array('a', 'b', 'c'), null, null, false, false), + 20844 => array(array('_route' => '_392'), array('a', 'b', 'c'), null, null, false, false), + 20892 => array(array('_route' => '_430'), array('a', 'b', 'c'), null, null, false, false), + 20940 => array(array('_route' => '_482'), array('a', 'b', 'c'), null, null, false, false), + 20993 => array(array('_route' => '_49'), array('a', 'b', 'c'), null, null, false, false), + 21041 => array(array('_route' => '_94'), array('a', 'b', 'c'), null, null, false, false), + 21089 => array(array('_route' => '_407'), array('a', 'b', 'c'), null, null, false, false), + 21142 => array(array('_route' => '_65'), array('a', 'b', 'c'), null, null, false, false), + 21190 => array(array('_route' => '_181'), array('a', 'b', 'c'), null, null, false, false), + 21238 => array(array('_route' => '_437'), array('a', 'b', 'c'), null, null, false, false), + 21291 => array(array('_route' => '_76'), array('a', 'b', 'c'), null, null, false, false), + 21339 => array(array('_route' => '_357'), array('a', 'b', 'c'), null, null, false, false), + 21392 => array(array('_route' => '_80'), array('a', 'b', 'c'), null, null, false, false), + 21440 => array(array('_route' => '_106'), array('a', 'b', 'c'), null, null, false, false), + 21493 => array(array('_route' => '_83'), array('a', 'b', 'c'), null, null, false, false), + 21541 => array(array('_route' => '_255'), array('a', 'b', 'c'), null, null, false, false), + 21589 => array(array('_route' => '_330'), array('a', 'b', 'c'), null, null, false, false), + 21642 => array(array('_route' => '_100'), array('a', 'b', 'c'), null, null, false, false), + 21690 => array(array('_route' => '_396'), array('a', 'b', 'c'), null, null, false, false), + 21738 => array(array('_route' => '_422'), array('a', 'b', 'c'), null, null, false, false), + 21791 => array(array('_route' => '_149'), array('a', 'b', 'c'), null, null, false, false), + 21839 => array(array('_route' => '_324'), array('a', 'b', 'c'), null, null, false, false), + 21892 => array(array('_route' => '_164'), array('a', 'b', 'c'), null, null, false, false), + 21940 => array(array('_route' => '_423'), array('a', 'b', 'c'), null, null, false, false), + 21990 => array(array('_route' => '_241'), array('a', 'b', 'c'), null, null, false, false), + 22042 => array(array('_route' => '_290'), array('a', 'b', 'c'), null, null, false, false), + 22090 => array(array('_route' => '_335'), array('a', 'b', 'c'), null, null, false, false), + 22140 => array(array('_route' => '_373'), array('a', 'b', 'c'), null, null, false, false), + 22189 => array(array('_route' => '_375'), array('a', 'b', 'c'), null, null, false, false), + 22238 => array(array('_route' => '_450'), array('a', 'b', 'c'), null, null, false, false), + 22287 => array(array('_route' => '_464'), array('a', 'b', 'c'), null, null, false, false), + 22345 => array(array('_route' => '_51'), array('a', 'b', 'c'), null, null, false, false), + 22393 => array(array('_route' => '_77'), array('a', 'b', 'c'), null, null, false, false), + 22441 => array(array('_route' => '_234'), array('a', 'b', 'c'), null, null, false, false), + 22489 => array(array('_route' => '_394'), array('a', 'b', 'c'), null, null, false, false), + 22542 => array(array('_route' => '_88'), array('a', 'b', 'c'), null, null, false, false), + 22590 => array(array('_route' => '_155'), array('a', 'b', 'c'), null, null, false, false), + 22643 => array(array('_route' => '_96'), array('a', 'b', 'c'), null, null, false, false), + 22691 => array(array('_route' => '_298'), array('a', 'b', 'c'), null, null, false, false), + 22739 => array(array('_route' => '_470'), array('a', 'b', 'c'), null, null, false, false), + 22792 => array(array('_route' => '_109'), array('a', 'b', 'c'), null, null, false, false), + 22840 => array(array('_route' => '_204'), array('a', 'b', 'c'), null, null, false, false), + 22893 => array(array('_route' => '_115'), array('a', 'b', 'c'), null, null, false, false), + 22941 => array(array('_route' => '_145'), array('a', 'b', 'c'), null, null, false, false), + 22994 => array(array('_route' => '_123'), array('a', 'b', 'c'), null, null, false, false), + 23042 => array(array('_route' => '_277'), array('a', 'b', 'c'), null, null, false, false), + 23090 => array(array('_route' => '_473'), array('a', 'b', 'c'), null, null, false, false), + 23143 => array(array('_route' => '_334'), array('a', 'b', 'c'), null, null, false, false), + 23191 => array(array('_route' => '_493'), array('a', 'b', 'c'), null, null, false, false), + 23244 => array(array('_route' => '_372'), array('a', 'b', 'c'), null, null, false, false), + 23292 => array(array('_route' => '_432'), array('a', 'b', 'c'), null, null, false, false), + 23340 => array(array('_route' => '_436'), array('a', 'b', 'c'), null, null, false, false), + 23393 => array(array('_route' => '_425'), array('a', 'b', 'c'), null, null, false, false), + 23441 => array(array('_route' => '_456'), array('a', 'b', 'c'), null, null, false, false), + 23489 => array(array('_route' => '_474'), array('a', 'b', 'c'), null, null, false, false), + 23539 => array(array('_route' => '_485'), array('a', 'b', 'c'), null, null, false, false), + 23594 => array(array('_route' => '_91'), array('a', 'b', 'c'), null, null, false, false), + 23646 => array(array('_route' => '_110'), array('a', 'b', 'c'), null, null, false, false), + 23694 => array(array('_route' => '_114'), array('a', 'b', 'c'), null, null, false, false), + 23750 => array(array('_route' => '_118'), array('a', 'b', 'c'), null, null, false, false), + 23796 => array(array('_route' => '_475'), array('a', 'b', 'c'), null, null, false, false), + 23844 => array(array('_route' => '_366'), array('a', 'b', 'c'), null, null, false, false), + 23897 => array(array('_route' => '_167'), array('a', 'b', 'c'), null, null, false, false), + 23945 => array(array('_route' => '_192'), array('a', 'b', 'c'), null, null, false, false), + 23993 => array(array('_route' => '_342'), array('a', 'b', 'c'), null, null, false, false), + 24046 => array(array('_route' => '_229'), array('a', 'b', 'c'), null, null, false, false), + 24097 => array(array('_route' => '_235'), array('a', 'b', 'c'), null, null, false, false), + 24144 => array(array('_route' => '_302'), array('a', 'b', 'c'), null, null, false, false), + 24193 => array(array('_route' => '_322'), array('a', 'b', 'c'), null, null, false, false), + 24246 => array(array('_route' => '_237'), array('a', 'b', 'c'), null, null, false, false), + 24294 => array(array('_route' => '_293'), array('a', 'b', 'c'), null, null, false, false), + 24347 => array(array('_route' => '_239'), array('a', 'b', 'c'), null, null, false, false), + 24395 => array(array('_route' => '_444'), array('a', 'b', 'c'), null, null, false, false), + 24443 => array(array('_route' => '_491'), array('a', 'b', 'c'), null, null, false, false), + 24491 => array(array('_route' => '_492'), array('a', 'b', 'c'), null, null, false, false), + 24541 => array(array('_route' => '_258'), array('a', 'b', 'c'), null, null, false, false), + 24590 => array(array('_route' => '_317'), array('a', 'b', 'c'), null, null, false, false), + 24639 => array(array('_route' => '_361'), array('a', 'b', 'c'), null, null, false, false), + 24688 => array(array('_route' => '_391'), array('a', 'b', 'c'), null, null, false, false), + 24737 => array(array('_route' => '_462'), array('a', 'b', 'c'), null, null, false, false), + 24786 => array(array('_route' => '_476'), array('a', 'b', 'c'), null, null, false, false), + 24837 => array(array('_route' => '_501'), array('a', 'b', 'c'), null, null, false, false), + 24889 => array(array('_route' => '_514'), array('a', 'b', 'c'), null, null, false, false), + 24937 => array(array('_route' => '_731'), array('a', 'b', 'c'), null, null, false, false), + 24990 => array(array('_route' => '_522'), array('a', 'b', 'c'), null, null, false, false), + 25038 => array(array('_route' => '_693'), array('a', 'b', 'c'), null, null, false, false), + 25091 => array(array('_route' => '_537'), array('a', 'b', 'c'), null, null, false, false), + 25139 => array(array('_route' => '_554'), array('a', 'b', 'c'), null, null, false, false), + 25187 => array(array('_route' => '_645'), array('a', 'b', 'c'), null, null, false, false), + 25235 => array(array('_route' => '_862'), array('a', 'b', 'c'), null, null, false, false), + 25288 => array(array('_route' => '_539'), array('a', 'b', 'c'), null, null, false, false), + 25336 => array(array('_route' => '_729'), array('a', 'b', 'c'), null, null, false, false), + 25384 => array(array('_route' => '_897'), array('a', 'b', 'c'), null, null, false, false), + 25437 => array(array('_route' => '_561'), array('a', 'b', 'c'), null, null, false, false), + 25485 => array(array('_route' => '_615'), array('a', 'b', 'c'), null, null, false, false), + 25533 => array(array('_route' => '_764'), array('a', 'b', 'c'), null, null, false, false), + 25581 => array(array('_route' => '_948'), array('a', 'b', 'c'), null, null, false, false), + 25634 => array(array('_route' => '_617'), array('a', 'b', 'c'), null, null, false, false), + 25682 => array(array('_route' => '_671'), array('a', 'b', 'c'), null, null, false, false), + 25735 => array(array('_route' => '_649'), array('a', 'b', 'c'), null, null, false, false), + 25783 => array(array('_route' => '_651'), array('a', 'b', 'c'), null, null, false, false), + 25831 => array(array('_route' => '_684'), array('a', 'b', 'c'), null, null, false, false), + 25884 => array(array('_route' => '_669'), array('a', 'b', 'c'), null, null, false, false), + 25932 => array(array('_route' => '_743'), array('a', 'b', 'c'), null, null, false, false), + 25980 => array(array('_route' => '_962'), array('a', 'b', 'c'), null, null, false, false), + 26033 => array(array('_route' => '_694'), array('a', 'b', 'c'), null, null, false, false), + 26081 => array(array('_route' => '_985'), array('a', 'b', 'c'), null, null, false, false), + 26134 => array(array('_route' => '_707'), array('a', 'b', 'c'), null, null, false, false), + 26182 => array(array('_route' => '_718'), array('a', 'b', 'c'), null, null, false, false), + 26235 => array(array('_route' => '_720'), array('a', 'b', 'c'), null, null, false, false), + 26283 => array(array('_route' => '_745'), array('a', 'b', 'c'), null, null, false, false), + 26333 => array(array('_route' => '_874'), array('a', 'b', 'c'), null, null, false, false), + 26391 => array(array('_route' => '_502'), array('a', 'b', 'c'), null, null, false, false), + 26439 => array(array('_route' => '_667'), array('a', 'b', 'c'), null, null, false, false), + 26487 => array(array('_route' => '_911'), array('a', 'b', 'c'), null, null, false, false), + 26535 => array(array('_route' => '_942'), array('a', 'b', 'c'), null, null, false, false), + 26585 => array(array('_route' => '_504'), array('a', 'b', 'c'), null, null, false, false), + 26637 => array(array('_route' => '_524'), array('a', 'b', 'c'), null, null, false, false), + 26685 => array(array('_route' => '_732'), array('a', 'b', 'c'), null, null, false, false), + 26738 => array(array('_route' => '_596'), array('a', 'b', 'c'), null, null, false, false), + 26786 => array(array('_route' => '_601'), array('a', 'b', 'c'), null, null, false, false), + 26839 => array(array('_route' => '_620'), array('a', 'b', 'c'), null, null, false, false), + 26887 => array(array('_route' => '_631'), array('a', 'b', 'c'), null, null, false, false), + 26935 => array(array('_route' => '_771'), array('a', 'b', 'c'), null, null, false, false), + 26983 => array(array('_route' => '_937'), array('a', 'b', 'c'), null, null, false, false), + 27031 => array(array('_route' => '_999'), array('a', 'b', 'c'), null, null, false, false), + 27084 => array(array('_route' => '_657'), array('a', 'b', 'c'), null, null, false, false), + 27132 => array(array('_route' => '_701'), array('a', 'b', 'c'), null, null, false, false), + 27185 => array(array('_route' => '_662'), array('a', 'b', 'c'), null, null, false, false), + 27233 => array(array('_route' => '_797'), array('a', 'b', 'c'), null, null, false, false), + 27281 => array(array('_route' => '_924'), array('a', 'b', 'c'), null, null, false, false), + 27334 => array(array('_route' => '_702'), array('a', 'b', 'c'), null, null, false, false), + 27382 => array(array('_route' => '_750'), array('a', 'b', 'c'), null, null, false, false), + 27435 => array(array('_route' => '_749'), array('a', 'b', 'c'), null, null, false, false), + 27483 => array(array('_route' => '_837'), array('a', 'b', 'c'), null, null, false, false), + 27533 => array(array('_route' => '_758'), array('a', 'b', 'c'), null, null, false, false), + 27585 => array(array('_route' => '_810'), array('a', 'b', 'c'), null, null, false, false), + 27633 => array(array('_route' => '_902'), array('a', 'b', 'c'), null, null, false, false), + 27683 => array(array('_route' => '_845'), array('a', 'b', 'c'), null, null, false, false), + 27741 => array(array('_route' => '_503'), array('a', 'b', 'c'), null, null, false, false), + 27792 => array(array('_route' => '_756'), array('a', 'b', 'c'), null, null, false, false), + 27839 => array(array('_route' => '_799'), array('a', 'b', 'c'), null, null, false, false), + 27888 => array(array('_route' => '_769'), array('a', 'b', 'c'), null, null, false, false), + 27936 => array(array('_route' => '_981'), array('a', 'b', 'c'), null, null, false, false), + 27989 => array(array('_route' => '_507'), array('a', 'b', 'c'), null, null, false, false), + 28037 => array(array('_route' => '_672'), array('a', 'b', 'c'), null, null, false, false), + 28085 => array(array('_route' => '_790'), array('a', 'b', 'c'), null, null, false, false), + 28138 => array(array('_route' => '_515'), array('a', 'b', 'c'), null, null, false, false), + 28186 => array(array('_route' => '_523'), array('a', 'b', 'c'), null, null, false, false), + 28234 => array(array('_route' => '_957'), array('a', 'b', 'c'), null, null, false, false), + 28282 => array(array('_route' => '_995'), array('a', 'b', 'c'), null, null, false, false), + 28335 => array(array('_route' => '_532'), array('a', 'b', 'c'), null, null, false, false), + 28383 => array(array('_route' => '_642'), array('a', 'b', 'c'), null, null, false, false), + 28433 => array(array('_route' => '_579'), array('a', 'b', 'c'), null, null, false, false), + 28485 => array(array('_route' => '_625'), array('a', 'b', 'c'), null, null, false, false), + 28533 => array(array('_route' => '_916'), array('a', 'b', 'c'), null, null, false, false), + 28586 => array(array('_route' => '_633'), array('a', 'b', 'c'), null, null, false, false), + 28634 => array(array('_route' => '_656'), array('a', 'b', 'c'), null, null, false, false), + 28687 => array(array('_route' => '_658'), array('a', 'b', 'c'), null, null, false, false), + 28735 => array(array('_route' => '_943'), array('a', 'b', 'c'), null, null, false, false), + 28788 => array(array('_route' => '_664'), array('a', 'b', 'c'), null, null, false, false), + 28836 => array(array('_route' => '_852'), array('a', 'b', 'c'), null, null, false, false), + 28884 => array(array('_route' => '_870'), array('a', 'b', 'c'), null, null, false, false), + 28937 => array(array('_route' => '_683'), array('a', 'b', 'c'), null, null, false, false), + 28985 => array(array('_route' => '_915'), array('a', 'b', 'c'), null, null, false, false), + 29038 => array(array('_route' => '_719'), array('a', 'b', 'c'), null, null, false, false), + 29086 => array(array('_route' => '_859'), array('a', 'b', 'c'), null, null, false, false), + 29134 => array(array('_route' => '_912'), array('a', 'b', 'c'), null, null, false, false), + 29182 => array(array('_route' => '_978'), array('a', 'b', 'c'), null, null, false, false), + 29235 => array(array('_route' => '_738'), array('a', 'b', 'c'), null, null, false, false), + 29283 => array(array('_route' => '_883'), array('a', 'b', 'c'), null, null, false, false), + 29333 => array(array('_route' => '_741'), array('a', 'b', 'c'), null, null, false, false), + 29382 => array(array('_route' => '_760'), array('a', 'b', 'c'), null, null, false, false), + 29431 => array(array('_route' => '_895'), array('a', 'b', 'c'), null, null, false, false), + 29489 => array(array('_route' => '_505'), array('a', 'b', 'c'), null, null, false, false), + 29537 => array(array('_route' => '_935'), array('a', 'b', 'c'), null, null, false, false), + 29590 => array(array('_route' => '_509'), array('a', 'b', 'c'), null, null, false, false), + 29638 => array(array('_route' => '_820'), array('a', 'b', 'c'), null, null, false, false), + 29686 => array(array('_route' => '_910'), array('a', 'b', 'c'), null, null, false, false), + 29739 => array(array('_route' => '_518'), array('a', 'b', 'c'), null, null, false, false), + 29787 => array(array('_route' => '_618'), array('a', 'b', 'c'), null, null, false, false), + 29840 => array(array('_route' => '_546'), array('a', 'b', 'c'), null, null, false, false), + 29888 => array(array('_route' => '_740'), array('a', 'b', 'c'), null, null, false, false), + 29936 => array(array('_route' => '_867'), array('a', 'b', 'c'), null, null, false, false), + 29989 => array(array('_route' => '_572'), array('a', 'b', 'c'), null, null, false, false), + 30037 => array(array('_route' => '_952'), array('a', 'b', 'c'), null, null, false, false), + 30090 => array(array('_route' => '_573'), array('a', 'b', 'c'), null, null, false, false), + 30138 => array(array('_route' => '_692'), array('a', 'b', 'c'), null, null, false, false), + 30186 => array(array('_route' => '_700'), array('a', 'b', 'c'), null, null, false, false), + 30234 => array(array('_route' => '_772'), array('a', 'b', 'c'), null, null, false, false), + 30284 => array(array('_route' => '_653'), array('a', 'b', 'c'), null, null, false, false), + 30336 => array(array('_route' => '_695'), array('a', 'b', 'c'), null, null, false, false), + 30384 => array(array('_route' => '_748'), array('a', 'b', 'c'), null, null, false, false), + 30437 => array(array('_route' => '_710'), array('a', 'b', 'c'), null, null, false, false), + 30485 => array(array('_route' => '_716'), array('a', 'b', 'c'), null, null, false, false), + 30533 => array(array('_route' => '_969'), array('a', 'b', 'c'), null, null, false, false), + 30586 => array(array('_route' => '_734'), array('a', 'b', 'c'), null, null, false, false), + 30634 => array(array('_route' => '_742'), array('a', 'b', 'c'), null, null, false, false), + 30682 => array(array('_route' => '_844'), array('a', 'b', 'c'), null, null, false, false), + 30735 => array(array('_route' => '_763'), array('a', 'b', 'c'), null, null, false, false), + 30783 => array(array('_route' => '_965'), array('a', 'b', 'c'), null, null, false, false), + 30836 => array(array('_route' => '_778'), array('a', 'b', 'c'), null, null, false, false), + 30884 => array(array('_route' => '_813'), array('a', 'b', 'c'), null, null, false, false), + 30932 => array(array('_route' => '_831'), array('a', 'b', 'c'), null, null, false, false), + 30982 => array(array('_route' => '_955'), array('a', 'b', 'c'), null, null, false, false), + 31031 => array(array('_route' => '_997'), array('a', 'b', 'c'), null, null, false, false), + 31089 => array(array('_route' => '_506'), array('a', 'b', 'c'), null, null, false, false), + 31137 => array(array('_route' => '_575'), array('a', 'b', 'c'), null, null, false, false), + 31190 => array(array('_route' => '_516'), array('a', 'b', 'c'), null, null, false, false), + 31238 => array(array('_route' => '_553'), array('a', 'b', 'c'), null, null, false, false), + 31291 => array(array('_route' => '_528'), array('a', 'b', 'c'), null, null, false, false), + 31339 => array(array('_route' => '_847'), array('a', 'b', 'c'), null, null, false, false), + 31387 => array(array('_route' => '_904'), array('a', 'b', 'c'), null, null, false, false), + 31440 => array(array('_route' => '_574'), array('a', 'b', 'c'), null, null, false, false), + 31488 => array(array('_route' => '_818'), array('a', 'b', 'c'), null, null, false, false), + 31538 => array(array('_route' => '_577'), array('a', 'b', 'c'), null, null, false, false), + 31590 => array(array('_route' => '_584'), array('a', 'b', 'c'), null, null, false, false), + 31638 => array(array('_route' => '_905'), array('a', 'b', 'c'), null, null, false, false), + 31691 => array(array('_route' => '_612'), array('a', 'b', 'c'), null, null, false, false), + 31739 => array(array('_route' => '_688'), array('a', 'b', 'c'), null, null, false, false), + 31787 => array(array('_route' => '_854'), array('a', 'b', 'c'), null, null, false, false), + 31840 => array(array('_route' => '_613'), array('a', 'b', 'c'), null, null, false, false), + 31888 => array(array('_route' => '_767'), array('a', 'b', 'c'), null, null, false, false), + 31941 => array(array('_route' => '_666'), array('a', 'b', 'c'), null, null, false, false), + 31989 => array(array('_route' => '_759'), array('a', 'b', 'c'), null, null, false, false), + 32037 => array(array('_route' => '_827'), array('a', 'b', 'c'), null, null, false, false), + 32085 => array(array('_route' => '_840'), array('a', 'b', 'c'), null, null, false, false), + 32138 => array(array('_route' => '_680'), array('a', 'b', 'c'), null, null, false, false), + 32186 => array(array('_route' => '_784'), array('a', 'b', 'c'), null, null, false, false), + 32234 => array(array('_route' => '_842'), array('a', 'b', 'c'), null, null, false, false), + 32282 => array(array('_route' => '_860'), array('a', 'b', 'c'), null, null, false, false), + 32332 => array(array('_route' => '_704'), array('a', 'b', 'c'), null, null, false, false), + 32381 => array(array('_route' => '_727'), array('a', 'b', 'c'), null, null, false, false), + 32430 => array(array('_route' => '_777'), array('a', 'b', 'c'), null, null, false, false), + 32482 => array(array('_route' => '_838'), array('a', 'b', 'c'), null, null, false, false), + 32530 => array(array('_route' => '_861'), array('a', 'b', 'c'), null, null, false, false), + 32583 => array(array('_route' => '_849'), array('a', 'b', 'c'), null, null, false, false), + 32631 => array(array('_route' => '_982'), array('a', 'b', 'c'), null, null, false, false), + 32679 => array(array('_route' => '_986'), array('a', 'b', 'c'), null, null, false, false), + 32741 => array(array('_route' => '_508'), array('a', 'b', 'c'), null, null, false, false), + 32788 => array(array('_route' => '_517'), array('a', 'b', 'c'), null, null, false, false), + 32837 => array(array('_route' => '_622'), array('a', 'b', 'c'), null, null, false, false), + 32890 => array(array('_route' => '_513'), array('a', 'b', 'c'), null, null, false, false), + 32938 => array(array('_route' => '_655'), array('a', 'b', 'c'), null, null, false, false), + 32986 => array(array('_route' => '_843'), array('a', 'b', 'c'), null, null, false, false), + 33034 => array(array('_route' => '_939'), array('a', 'b', 'c'), null, null, false, false), + 33084 => array(array('_route' => '_529'), array('a', 'b', 'c'), null, null, false, false), + 33136 => array(array('_route' => '_535'), array('a', 'b', 'c'), null, null, false, false), + 33184 => array(array('_route' => '_685'), array('a', 'b', 'c'), null, null, false, false), + 33240 => array(array('_route' => '_559'), array('a', 'b', 'c'), null, null, false, false), + 33287 => array(array('_route' => '_661'), array('a', 'b', 'c'), null, null, false, false), + 33336 => array(array('_route' => '_768'), array('a', 'b', 'c'), null, null, false, false), + 33389 => array(array('_route' => '_589'), array('a', 'b', 'c'), null, null, false, false), + 33437 => array(array('_route' => '_647'), array('a', 'b', 'c'), null, null, false, false), + 33485 => array(array('_route' => '_652'), array('a', 'b', 'c'), null, null, false, false), + 33533 => array(array('_route' => '_834'), array('a', 'b', 'c'), null, null, false, false), + 33586 => array(array('_route' => '_591'), array('a', 'b', 'c'), null, null, false, false), + 33634 => array(array('_route' => '_599'), array('a', 'b', 'c'), null, null, false, false), + 33687 => array(array('_route' => '_787'), array('a', 'b', 'c'), null, null, false, false), + 33734 => array(array('_route' => '_848'), array('a', 'b', 'c'), null, null, false, false), + 33787 => array(array('_route' => '_796'), array('a', 'b', 'c'), null, null, false, false), + 33835 => array(array('_route' => '_877'), array('a', 'b', 'c'), null, null, false, false), + 33885 => array(array('_route' => '_809'), array('a', 'b', 'c'), null, null, false, false), + 33934 => array(array('_route' => '_817'), array('a', 'b', 'c'), null, null, false, false), + 33986 => array(array('_route' => '_819'), array('a', 'b', 'c'), null, null, false, false), + 34034 => array(array('_route' => '_865'), array('a', 'b', 'c'), null, null, false, false), + 34084 => array(array('_route' => '_919'), array('a', 'b', 'c'), null, null, false, false), + 34133 => array(array('_route' => '_949'), array('a', 'b', 'c'), null, null, false, false), + 34191 => array(array('_route' => '_510'), array('a', 'b', 'c'), null, null, false, false), + 34239 => array(array('_route' => '_590'), array('a', 'b', 'c'), null, null, false, false), + 34287 => array(array('_route' => '_597'), array('a', 'b', 'c'), null, null, false, false), + 34335 => array(array('_route' => '_682'), array('a', 'b', 'c'), null, null, false, false), + 34383 => array(array('_route' => '_723'), array('a', 'b', 'c'), null, null, false, false), + 34436 => array(array('_route' => '_521'), array('a', 'b', 'c'), null, null, false, false), + 34484 => array(array('_route' => '_594'), array('a', 'b', 'c'), null, null, false, false), + 34532 => array(array('_route' => '_689'), array('a', 'b', 'c'), null, null, false, false), + 34580 => array(array('_route' => '_713'), array('a', 'b', 'c'), null, null, false, false), + 34628 => array(array('_route' => '_889'), array('a', 'b', 'c'), null, null, false, false), + 34681 => array(array('_route' => '_531'), array('a', 'b', 'c'), null, null, false, false), + 34729 => array(array('_route' => '_639'), array('a', 'b', 'c'), null, null, false, false), + 34780 => array(array('_route' => '_646'), array('a', 'b', 'c'), null, null, false, false), + 34827 => array(array('_route' => '_659'), array('a', 'b', 'c'), null, null, false, false), + 34876 => array(array('_route' => '_959'), array('a', 'b', 'c'), null, null, false, false), + 34929 => array(array('_route' => '_550'), array('a', 'b', 'c'), null, null, false, false), + 34977 => array(array('_route' => '_833'), array('a', 'b', 'c'), null, null, false, false), + 35025 => array(array('_route' => '_899'), array('a', 'b', 'c'), null, null, false, false), + 35081 => array(array('_route' => '_580'), array('a', 'b', 'c'), null, null, false, false), + 35128 => array(array('_route' => '_762'), array('a', 'b', 'c'), null, null, false, false), + 35177 => array(array('_route' => '_896'), array('a', 'b', 'c'), null, null, false, false), + 35230 => array(array('_route' => '_595'), array('a', 'b', 'c'), null, null, false, false), + 35278 => array(array('_route' => '_933'), array('a', 'b', 'c'), null, null, false, false), + 35328 => array(array('_route' => '_610'), array('a', 'b', 'c'), null, null, false, false), + 35380 => array(array('_route' => '_629'), array('a', 'b', 'c'), null, null, false, false), + 35428 => array(array('_route' => '_744'), array('a', 'b', 'c'), null, null, false, false), + 35481 => array(array('_route' => '_674'), array('a', 'b', 'c'), null, null, false, false), + 35529 => array(array('_route' => '_726'), array('a', 'b', 'c'), null, null, false, false), + 35577 => array(array('_route' => '_929'), array('a', 'b', 'c'), null, null, false, false), + 35627 => array(array('_route' => '_696'), array('a', 'b', 'c'), null, null, false, false), + 35679 => array(array('_route' => '_841'), array('a', 'b', 'c'), null, null, false, false), + 35727 => array(array('_route' => '_890'), array('a', 'b', 'c'), null, null, false, false), + 35777 => array(array('_route' => '_885'), array('a', 'b', 'c'), null, null, false, false), + 35826 => array(array('_route' => '_888'), array('a', 'b', 'c'), null, null, false, false), + 35875 => array(array('_route' => '_996'), array('a', 'b', 'c'), null, null, false, false), + 35933 => array(array('_route' => '_511'), array('a', 'b', 'c'), null, null, false, false), + 35981 => array(array('_route' => '_576'), array('a', 'b', 'c'), null, null, false, false), + 36029 => array(array('_route' => '_623'), array('a', 'b', 'c'), null, null, false, false), + 36082 => array(array('_route' => '_560'), array('a', 'b', 'c'), null, null, false, false), + 36129 => array(array('_route' => '_585'), array('a', 'b', 'c'), null, null, false, false), + 36182 => array(array('_route' => '_570'), array('a', 'b', 'c'), null, null, false, false), + 36230 => array(array('_route' => '_578'), array('a', 'b', 'c'), null, null, false, false), + 36281 => array(array('_route' => '_780'), array('a', 'b', 'c'), null, null, false, false), + 36328 => array(array('_route' => '_808'), array('a', 'b', 'c'), null, null, false, false), + 36382 => array(array('_route' => '_593'), array('a', 'b', 'c'), null, null, false, false), + 36430 => array(array('_route' => '_900'), array('a', 'b', 'c'), null, null, false, false), + 36483 => array(array('_route' => '_632'), array('a', 'b', 'c'), null, null, false, false), + 36531 => array(array('_route' => '_654'), array('a', 'b', 'c'), null, null, false, false), + 36579 => array(array('_route' => '_721'), array('a', 'b', 'c'), null, null, false, false), + 36627 => array(array('_route' => '_836'), array('a', 'b', 'c'), null, null, false, false), + 36680 => array(array('_route' => '_637'), array('a', 'b', 'c'), null, null, false, false), + 36728 => array(array('_route' => '_737'), array('a', 'b', 'c'), null, null, false, false), + 36784 => array(array('_route' => '_699'), array('a', 'b', 'c'), null, null, false, false), + 36831 => array(array('_route' => '_822'), array('a', 'b', 'c'), null, null, false, false), + 36880 => array(array('_route' => '_853'), array('a', 'b', 'c'), null, null, false, false), + 36933 => array(array('_route' => '_708'), array('a', 'b', 'c'), null, null, false, false), + 36981 => array(array('_route' => '_871'), array('a', 'b', 'c'), null, null, false, false), + 37034 => array(array('_route' => '_752'), array('a', 'b', 'c'), null, null, false, false), + 37082 => array(array('_route' => '_989'), array('a', 'b', 'c'), null, null, false, false), + 37132 => array(array('_route' => '_855'), array('a', 'b', 'c'), null, null, false, false), + 37184 => array(array('_route' => '_858'), array('a', 'b', 'c'), null, null, false, false), + 37232 => array(array('_route' => '_898'), array('a', 'b', 'c'), null, null, false, false), + 37282 => array(array('_route' => '_903'), array('a', 'b', 'c'), null, null, false, false), + 37331 => array(array('_route' => '_909'), array('a', 'b', 'c'), null, null, false, false), + 37380 => array(array('_route' => '_950'), array('a', 'b', 'c'), null, null, false, false), + 37441 => array(array('_route' => '_512'), array('a', 'b', 'c'), null, null, false, false), + 37488 => array(array('_route' => '_691'), array('a', 'b', 'c'), null, null, false, false), + 37537 => array(array('_route' => '_686'), array('a', 'b', 'c'), null, null, false, false), + 37587 => array(array('_route' => '_527'), array('a', 'b', 'c'), null, null, false, false), + 37639 => array(array('_route' => '_541'), array('a', 'b', 'c'), null, null, false, false), + 37687 => array(array('_route' => '_956'), array('a', 'b', 'c'), null, null, false, false), + 37740 => array(array('_route' => '_555'), array('a', 'b', 'c'), null, null, false, false), + 37788 => array(array('_route' => '_681'), array('a', 'b', 'c'), null, null, false, false), + 37841 => array(array('_route' => '_556'), array('a', 'b', 'c'), null, null, false, false), + 37889 => array(array('_route' => '_802'), array('a', 'b', 'c'), null, null, false, false), + 37939 => array(array('_route' => '_558'), array('a', 'b', 'c'), null, null, false, false), + 37991 => array(array('_route' => '_564'), array('a', 'b', 'c'), null, null, false, false), + 38039 => array(array('_route' => '_670'), array('a', 'b', 'c'), null, null, false, false), + 38087 => array(array('_route' => '_884'), array('a', 'b', 'c'), null, null, false, false), + 38140 => array(array('_route' => '_627'), array('a', 'b', 'c'), null, null, false, false), + 38187 => array(array('_route' => '_746'), array('a', 'b', 'c'), null, null, false, false), + 38240 => array(array('_route' => '_668'), array('a', 'b', 'c'), null, null, false, false), + 38291 => array(array('_route' => '_712'), array('a', 'b', 'c'), null, null, false, false), + 38338 => array(array('_route' => '_863'), array('a', 'b', 'c'), null, null, false, false), + 38387 => array(array('_route' => '_801'), array('a', 'b', 'c'), null, null, false, false), + 38440 => array(array('_route' => '_709'), array('a', 'b', 'c'), null, null, false, false), + 38488 => array(array('_route' => '_850'), array('a', 'b', 'c'), null, null, false, false), + 38536 => array(array('_route' => '_918'), array('a', 'b', 'c'), null, null, false, false), + 38586 => array(array('_route' => '_803'), array('a', 'b', 'c'), null, null, false, false), + 38638 => array(array('_route' => '_864'), array('a', 'b', 'c'), null, null, false, false), + 38686 => array(array('_route' => '_880'), array('a', 'b', 'c'), null, null, false, false), + 38734 => array(array('_route' => '_927'), array('a', 'b', 'c'), null, null, false, false), + 38787 => array(array('_route' => '_930'), array('a', 'b', 'c'), null, null, false, false), + 38835 => array(array('_route' => '_951'), array('a', 'b', 'c'), null, null, false, false), + 38883 => array(array('_route' => '_963'), array('a', 'b', 'c'), null, null, false, false), + 38942 => array(array('_route' => '_519'), array('a', 'b', 'c'), null, null, false, false), + 38990 => array(array('_route' => '_823'), array('a', 'b', 'c'), null, null, false, false), + 39038 => array(array('_route' => '_954'), array('a', 'b', 'c'), null, null, false, false), + 39091 => array(array('_route' => '_525'), array('a', 'b', 'c'), null, null, false, false), + 39139 => array(array('_route' => '_991'), array('a', 'b', 'c'), null, null, false, false), + 39189 => array(array('_route' => '_536'), array('a', 'b', 'c'), null, null, false, false), + 39241 => array(array('_route' => '_545'), array('a', 'b', 'c'), null, null, false, false), + 39289 => array(array('_route' => '_944'), array('a', 'b', 'c'), null, null, false, false), + 39342 => array(array('_route' => '_557'), array('a', 'b', 'c'), null, null, false, false), + 39390 => array(array('_route' => '_783'), array('a', 'b', 'c'), null, null, false, false), + 39438 => array(array('_route' => '_807'), array('a', 'b', 'c'), null, null, false, false), + 39491 => array(array('_route' => '_586'), array('a', 'b', 'c'), null, null, false, false), + 39539 => array(array('_route' => '_711'), array('a', 'b', 'c'), null, null, false, false), + 39592 => array(array('_route' => '_598'), array('a', 'b', 'c'), null, null, false, false), + 39640 => array(array('_route' => '_635'), array('a', 'b', 'c'), null, null, false, false), + 39688 => array(array('_route' => '_983'), array('a', 'b', 'c'), null, null, false, false), + 39741 => array(array('_route' => '_634'), array('a', 'b', 'c'), null, null, false, false), + 39789 => array(array('_route' => '_641'), array('a', 'b', 'c'), null, null, false, false), + 39840 => array(array('_route' => '_779'), array('a', 'b', 'c'), null, null, false, false), + 39887 => array(array('_route' => '_876'), array('a', 'b', 'c'), null, null, false, false), + 39936 => array(array('_route' => '_811'), array('a', 'b', 'c'), null, null, false, false), + 39984 => array(array('_route' => '_824'), array('a', 'b', 'c'), null, null, false, false), + 40037 => array(array('_route' => '_660'), array('a', 'b', 'c'), null, null, false, false), + 40085 => array(array('_route' => '_789'), array('a', 'b', 'c'), null, null, false, false), + 40138 => array(array('_route' => '_733'), array('a', 'b', 'c'), null, null, false, false), + 40186 => array(array('_route' => '_735'), array('a', 'b', 'c'), null, null, false, false), + 40234 => array(array('_route' => '_882'), array('a', 'b', 'c'), null, null, false, false), + 40282 => array(array('_route' => '_967'), array('a', 'b', 'c'), null, null, false, false), + 40332 => array(array('_route' => '_736'), array('a', 'b', 'c'), null, null, false, false), + 40381 => array(array('_route' => '_753'), array('a', 'b', 'c'), null, null, false, false), + 40430 => array(array('_route' => '_786'), array('a', 'b', 'c'), null, null, false, false), + 40479 => array(array('_route' => '_907'), array('a', 'b', 'c'), null, null, false, false), + 40528 => array(array('_route' => '_920'), array('a', 'b', 'c'), null, null, false, false), + 40577 => array(array('_route' => '_971'), array('a', 'b', 'c'), null, null, false, false), + 40635 => array(array('_route' => '_520'), array('a', 'b', 'c'), null, null, false, false), + 40683 => array(array('_route' => '_891'), array('a', 'b', 'c'), null, null, false, false), + 40739 => array(array('_route' => '_534'), array('a', 'b', 'c'), null, null, false, false), + 40785 => array(array('_route' => '_602'), array('a', 'b', 'c'), null, null, false, false), + 40834 => array(array('_route' => '_605'), array('a', 'b', 'c'), null, null, false, false), + 40882 => array(array('_route' => '_979'), array('a', 'b', 'c'), null, null, false, false), + 40932 => array(array('_route' => '_547'), array('a', 'b', 'c'), null, null, false, false), + 40987 => array(array('_route' => '_549'), array('a', 'b', 'c'), null, null, false, false), + 41034 => array(array('_route' => '_755'), array('a', 'b', 'c'), null, null, false, false), + 41083 => array(array('_route' => '_922'), array('a', 'b', 'c'), null, null, false, false), + 41131 => array(array('_route' => '_977'), array('a', 'b', 'c'), null, null, false, false), + 41184 => array(array('_route' => '_565'), array('a', 'b', 'c'), null, null, false, false), + 41232 => array(array('_route' => '_926'), array('a', 'b', 'c'), null, null, false, false), + 41282 => array(array('_route' => '_571'), array('a', 'b', 'c'), null, null, false, false), + 41331 => array(array('_route' => '_581'), array('a', 'b', 'c'), null, null, false, false), + 41380 => array(array('_route' => '_619'), array('a', 'b', 'c'), null, null, false, false), + 41429 => array(array('_route' => '_636'), array('a', 'b', 'c'), null, null, false, false), + 41481 => array(array('_route' => '_679'), array('a', 'b', 'c'), null, null, false, false), + 41529 => array(array('_route' => '_866'), array('a', 'b', 'c'), null, null, false, false), + 41577 => array(array('_route' => '_973'), array('a', 'b', 'c'), null, null, false, false), + 41630 => array(array('_route' => '_690'), array('a', 'b', 'c'), null, null, false, false), + 41678 => array(array('_route' => '_775'), array('a', 'b', 'c'), null, null, false, false), + 41731 => array(array('_route' => '_722'), array('a', 'b', 'c'), null, null, false, false), + 41779 => array(array('_route' => '_906'), array('a', 'b', 'c'), null, null, false, false), + 41827 => array(array('_route' => '_946'), array('a', 'b', 'c'), null, null, false, false), + 41877 => array(array('_route' => '_788'), array('a', 'b', 'c'), null, null, false, false), + 41929 => array(array('_route' => '_828'), array('a', 'b', 'c'), null, null, false, false), + 41977 => array(array('_route' => '_892'), array('a', 'b', 'c'), null, null, false, false), + 42025 => array(array('_route' => '_972'), array('a', 'b', 'c'), null, null, false, false), + 42075 => array(array('_route' => '_829'), array('a', 'b', 'c'), null, null, false, false), + 42127 => array(array('_route' => '_923'), array('a', 'b', 'c'), null, null, false, false), + 42175 => array(array('_route' => '_947'), array('a', 'b', 'c'), null, null, false, false), + 42234 => array(array('_route' => '_526'), array('a', 'b', 'c'), null, null, false, false), + 42282 => array(array('_route' => '_614'), array('a', 'b', 'c'), null, null, false, false), + 42330 => array(array('_route' => '_621'), array('a', 'b', 'c'), null, null, false, false), + 42383 => array(array('_route' => '_543'), array('a', 'b', 'c'), null, null, false, false), + 42431 => array(array('_route' => '_812'), array('a', 'b', 'c'), null, null, false, false), + 42487 => array(array('_route' => '_548'), array('a', 'b', 'c'), null, null, false, false), + 42534 => array(array('_route' => '_747'), array('a', 'b', 'c'), null, null, false, false), + 42583 => array(array('_route' => '_715'), array('a', 'b', 'c'), null, null, false, false), + 42631 => array(array('_route' => '_940'), array('a', 'b', 'c'), null, null, false, false), + 42684 => array(array('_route' => '_563'), array('a', 'b', 'c'), null, null, false, false), + 42732 => array(array('_route' => '_611'), array('a', 'b', 'c'), null, null, false, false), + 42780 => array(array('_route' => '_830'), array('a', 'b', 'c'), null, null, false, false), + 42833 => array(array('_route' => '_569'), array('a', 'b', 'c'), null, null, false, false), + 42881 => array(array('_route' => '_908'), array('a', 'b', 'c'), null, null, false, false), + 42929 => array(array('_route' => '_913'), array('a', 'b', 'c'), null, null, false, false), + 42982 => array(array('_route' => '_644'), array('a', 'b', 'c'), null, null, false, false), + 43030 => array(array('_route' => '_776'), array('a', 'b', 'c'), null, null, false, false), + 43078 => array(array('_route' => '_856'), array('a', 'b', 'c'), null, null, false, false), + 43131 => array(array('_route' => '_650'), array('a', 'b', 'c'), null, null, false, false), + 43179 => array(array('_route' => '_761'), array('a', 'b', 'c'), null, null, false, false), + 43232 => array(array('_route' => '_663'), array('a', 'b', 'c'), null, null, false, false), + 43280 => array(array('_route' => '_754'), array('a', 'b', 'c'), null, null, false, false), + 43333 => array(array('_route' => '_665'), array('a', 'b', 'c'), null, null, false, false), + 43381 => array(array('_route' => '_805'), array('a', 'b', 'c'), null, null, false, false), + 43429 => array(array('_route' => '_846'), array('a', 'b', 'c'), null, null, false, false), + 43477 => array(array('_route' => '_857'), array('a', 'b', 'c'), null, null, false, false), + 43530 => array(array('_route' => '_675'), array('a', 'b', 'c'), null, null, false, false), + 43578 => array(array('_route' => '_839'), array('a', 'b', 'c'), null, null, false, false), + 43626 => array(array('_route' => '_968'), array('a', 'b', 'c'), null, null, false, false), + 43676 => array(array('_route' => '_697'), array('a', 'b', 'c'), null, null, false, false), + 43728 => array(array('_route' => '_725'), array('a', 'b', 'c'), null, null, false, false), + 43776 => array(array('_route' => '_794'), array('a', 'b', 'c'), null, null, false, false), + 43829 => array(array('_route' => '_773'), array('a', 'b', 'c'), null, null, false, false), + 43877 => array(array('_route' => '_992'), array('a', 'b', 'c'), null, null, false, false), + 43930 => array(array('_route' => '_901'), array('a', 'b', 'c'), null, null, false, false), + 43978 => array(array('_route' => '_970'), array('a', 'b', 'c'), null, null, false, false), + 44028 => array(array('_route' => '_964'), array('a', 'b', 'c'), null, null, false, false), + 44086 => array(array('_route' => '_530'), array('a', 'b', 'c'), null, null, false, false), + 44134 => array(array('_route' => '_703'), array('a', 'b', 'c'), null, null, false, false), + 44187 => array(array('_route' => '_533'), array('a', 'b', 'c'), null, null, false, false), + 44235 => array(array('_route' => '_739'), array('a', 'b', 'c'), null, null, false, false), + 44283 => array(array('_route' => '_791'), array('a', 'b', 'c'), null, null, false, false), + 44331 => array(array('_route' => '_987'), array('a', 'b', 'c'), null, null, false, false), + 44384 => array(array('_route' => '_566'), array('a', 'b', 'c'), null, null, false, false), + 44432 => array(array('_route' => '_592'), array('a', 'b', 'c'), null, null, false, false), + 44488 => array(array('_route' => '_568'), array('a', 'b', 'c'), null, null, false, false), + 44534 => array(array('_route' => '_868'), array('a', 'b', 'c'), null, null, false, false), + 44583 => array(array('_route' => '_878'), array('a', 'b', 'c'), null, null, false, false), + 44636 => array(array('_route' => '_588'), array('a', 'b', 'c'), null, null, false, false), + 44684 => array(array('_route' => '_793'), array('a', 'b', 'c'), null, null, false, false), + 44732 => array(array('_route' => '_917'), array('a', 'b', 'c'), null, null, false, false), + 44785 => array(array('_route' => '_600'), array('a', 'b', 'c'), null, null, false, false), + 44833 => array(array('_route' => '_728'), array('a', 'b', 'c'), null, null, false, false), + 44886 => array(array('_route' => '_603'), array('a', 'b', 'c'), null, null, false, false), + 44934 => array(array('_route' => '_765'), array('a', 'b', 'c'), null, null, false, false), + 44987 => array(array('_route' => '_607'), array('a', 'b', 'c'), null, null, false, false), + 45035 => array(array('_route' => '_676'), array('a', 'b', 'c'), null, null, false, false), + 45083 => array(array('_route' => '_804'), array('a', 'b', 'c'), null, null, false, false), + 45136 => array(array('_route' => '_609'), array('a', 'b', 'c'), null, null, false, false), + 45184 => array(array('_route' => '_961'), array('a', 'b', 'c'), null, null, false, false), + 45232 => array(array('_route' => '_980'), array('a', 'b', 'c'), null, null, false, false), + 45282 => array(array('_route' => '_714'), array('a', 'b', 'c'), null, null, false, false), + 45334 => array(array('_route' => '_730'), array('a', 'b', 'c'), null, null, false, false), + 45382 => array(array('_route' => '_806'), array('a', 'b', 'c'), null, null, false, false), + 45430 => array(array('_route' => '_825'), array('a', 'b', 'c'), null, null, false, false), + 45478 => array(array('_route' => '_879'), array('a', 'b', 'c'), null, null, false, false), + 45526 => array(array('_route' => '_893'), array('a', 'b', 'c'), null, null, false, false), + 45576 => array(array('_route' => '_928'), array('a', 'b', 'c'), null, null, false, false), + 45628 => array(array('_route' => '_932'), array('a', 'b', 'c'), null, null, false, false), + 45676 => array(array('_route' => '_958'), array('a', 'b', 'c'), null, null, false, false), + 45726 => array(array('_route' => '_984'), array('a', 'b', 'c'), null, null, false, false), + 45784 => array(array('_route' => '_538'), array('a', 'b', 'c'), null, null, false, false), + 45832 => array(array('_route' => '_993'), array('a', 'b', 'c'), null, null, false, false), + 45882 => array(array('_route' => '_542'), array('a', 'b', 'c'), null, null, false, false), + 45934 => array(array('_route' => '_551'), array('a', 'b', 'c'), null, null, false, false), + 45982 => array(array('_route' => '_687'), array('a', 'b', 'c'), null, null, false, false), + 46030 => array(array('_route' => '_724'), array('a', 'b', 'c'), null, null, false, false), + 46078 => array(array('_route' => '_925'), array('a', 'b', 'c'), null, null, false, false), + 46131 => array(array('_route' => '_587'), array('a', 'b', 'c'), null, null, false, false), + 46179 => array(array('_route' => '_914'), array('a', 'b', 'c'), null, null, false, false), + 46229 => array(array('_route' => '_616'), array('a', 'b', 'c'), null, null, false, false), + 46284 => array(array('_route' => '_677'), array('a', 'b', 'c'), null, null, false, false), + 46331 => array(array('_route' => '_815'), array('a', 'b', 'c'), null, null, false, false), + 46380 => array(array('_route' => '_781'), array('a', 'b', 'c'), null, null, false, false), + 46430 => array(array('_route' => '_717'), array('a', 'b', 'c'), null, null, false, false), + 46482 => array(array('_route' => '_782'), array('a', 'b', 'c'), null, null, false, false), + 46530 => array(array('_route' => '_832'), array('a', 'b', 'c'), null, null, false, false), + 46583 => array(array('_route' => '_795'), array('a', 'b', 'c'), null, null, false, false), + 46631 => array(array('_route' => '_887'), array('a', 'b', 'c'), null, null, false, false), + 46681 => array(array('_route' => '_800'), array('a', 'b', 'c'), null, null, false, false), + 46730 => array(array('_route' => '_826'), array('a', 'b', 'c'), null, null, false, false), + 46779 => array(array('_route' => '_881'), array('a', 'b', 'c'), null, null, false, false), + 46828 => array(array('_route' => '_886'), array('a', 'b', 'c'), null, null, false, false), + 46877 => array(array('_route' => '_938'), array('a', 'b', 'c'), null, null, false, false), + 46935 => array(array('_route' => '_540'), array('a', 'b', 'c'), null, null, false, false), + 46983 => array(array('_route' => '_643'), array('a', 'b', 'c'), null, null, false, false), + 47033 => array(array('_route' => '_544'), array('a', 'b', 'c'), null, null, false, false), + 47082 => array(array('_route' => '_552'), array('a', 'b', 'c'), null, null, false, false), + 47134 => array(array('_route' => '_567'), array('a', 'b', 'c'), null, null, false, false), + 47182 => array(array('_route' => '_608'), array('a', 'b', 'c'), null, null, false, false), + 47230 => array(array('_route' => '_698'), array('a', 'b', 'c'), null, null, false, false), + 47278 => array(array('_route' => '_988'), array('a', 'b', 'c'), null, null, false, false), + 47331 => array(array('_route' => '_583'), array('a', 'b', 'c'), null, null, false, false), + 47379 => array(array('_route' => '_998'), array('a', 'b', 'c'), null, null, false, false), + 47432 => array(array('_route' => '_604'), array('a', 'b', 'c'), null, null, false, false), + 47480 => array(array('_route' => '_630'), array('a', 'b', 'c'), null, null, false, false), + 47528 => array(array('_route' => '_706'), array('a', 'b', 'c'), null, null, false, false), + 47576 => array(array('_route' => '_976'), array('a', 'b', 'c'), null, null, false, false), + 47629 => array(array('_route' => '_673'), array('a', 'b', 'c'), null, null, false, false), + 47677 => array(array('_route' => '_678'), array('a', 'b', 'c'), null, null, false, false), + 47725 => array(array('_route' => '_931'), array('a', 'b', 'c'), null, null, false, false), + 47775 => array(array('_route' => '_751'), array('a', 'b', 'c'), null, null, false, false), + 47824 => array(array('_route' => '_766'), array('a', 'b', 'c'), null, null, false, false), + 47876 => array(array('_route' => '_792'), array('a', 'b', 'c'), null, null, false, false), + 47924 => array(array('_route' => '_814'), array('a', 'b', 'c'), null, null, false, false), + 47974 => array(array('_route' => '_798'), array('a', 'b', 'c'), null, null, false, false), + 48026 => array(array('_route' => '_851'), array('a', 'b', 'c'), null, null, false, false), + 48074 => array(array('_route' => '_941'), array('a', 'b', 'c'), null, null, false, false), + 48122 => array(array('_route' => '_953'), array('a', 'b', 'c'), null, null, false, false), + 48170 => array(array('_route' => '_975'), array('a', 'b', 'c'), null, null, false, false), + 48220 => array(array('_route' => '_873'), array('a', 'b', 'c'), null, null, false, false), + 48269 => array(array('_route' => '_936'), array('a', 'b', 'c'), null, null, false, false), + 48318 => array(array('_route' => '_994'), array('a', 'b', 'c'), null, null, false, false), + 48376 => array(array('_route' => '_562'), array('a', 'b', 'c'), null, null, false, false), + 48424 => array(array('_route' => '_770'), array('a', 'b', 'c'), null, null, false, false), + 48475 => array(array('_route' => '_774'), array('a', 'b', 'c'), null, null, false, false), + 48522 => array(array('_route' => '_966'), array('a', 'b', 'c'), null, null, false, false), + 48573 => array(array('_route' => '_582'), array('a', 'b', 'c'), null, null, false, false), + 48625 => array(array('_route' => '_606'), array('a', 'b', 'c'), null, null, false, false), + 48673 => array(array('_route' => '_648'), array('a', 'b', 'c'), null, null, false, false), + 48723 => array(array('_route' => '_624'), array('a', 'b', 'c'), null, null, false, false), + 48775 => array(array('_route' => '_626'), array('a', 'b', 'c'), null, null, false, false), + 48823 => array(array('_route' => '_821'), array('a', 'b', 'c'), null, null, false, false), + 48873 => array(array('_route' => '_628'), array('a', 'b', 'c'), null, null, false, false), + 48922 => array(array('_route' => '_638'), array('a', 'b', 'c'), null, null, false, false), + 48974 => array(array('_route' => '_640'), array('a', 'b', 'c'), null, null, false, false), + 49022 => array(array('_route' => '_990'), array('a', 'b', 'c'), null, null, false, false), + 49072 => array(array('_route' => '_705'), array('a', 'b', 'c'), null, null, false, false), + 49121 => array(array('_route' => '_757'), array('a', 'b', 'c'), null, null, false, false), + 49176 => array(array('_route' => '_785'), array('a', 'b', 'c'), null, null, false, false), + 49223 => array(array('_route' => '_875'), array('a', 'b', 'c'), null, null, false, false), + 49270 => array(array('_route' => '_894'), array('a', 'b', 'c'), null, null, false, false), + 49319 => array(array('_route' => '_945'), array('a', 'b', 'c'), null, null, false, false), + 49375 => array(array('_route' => '_816'), array('a', 'b', 'c'), null, null, false, false), + 49422 => array(array('_route' => '_872'), array('a', 'b', 'c'), null, null, false, false), + 49471 => array(array('_route' => '_921'), array('a', 'b', 'c'), null, null, false, false), + 49519 => array(array('_route' => '_960'), array('a', 'b', 'c'), null, null, false, false), + 49567 => array(array('_route' => '_974'), array('a', 'b', 'c'), null, null, false, false), + 49620 => array(array('_route' => '_835'), array('a', 'b', 'c'), null, null, false, false), + 49668 => array(array('_route' => '_934'), array('a', 'b', 'c'), null, null, false, false), + 49718 => array(array('_route' => '_869'), array('a', 'b', 'c'), null, null, false, false), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher11.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher11.php index 5621ec968c13..c6af6b5ceed0 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher11.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher11.php @@ -37,8 +37,8 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' !== $pathinfo) { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + } elseif ('/' !== $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { return $this->redirect($pathinfo, $ret['_route']) + $ret; } @@ -50,10 +50,11 @@ public function match($pathinfo) throw new ResourceNotFoundException(); } - private function doMatch(string $rawPathinfo, array &$allow = array(), array &$allowSchemes = array()): array + private function doMatch(string $pathinfo, array &$allow = array(), array &$allowSchemes = array()): array { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -92,7 +93,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a .')' .')' .'|/(en|fr)?(*:264)' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -100,37 +101,36 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a switch ($m = (int) $matches['MARK']) { default: $routes = array( - 32 => array(array('_route' => 'a', '_locale' => 'en'), array('_locale'), null, null, true), - 46 => array(array('_route' => 'b', '_locale' => 'en'), array('_locale'), null, null, false), - 58 => array(array('_route' => 'c', '_locale' => 'en'), array('_locale', 'id'), null, null, false), - 75 => array(array('_route' => 'd', '_locale' => 'en'), array('_locale', 'id'), null, null, false), - 94 => array(array('_route' => 'e', '_locale' => 'en'), array('_locale', 'id'), null, null, false), - 110 => array(array('_route' => 'f', '_locale' => 'en'), array('_locale'), null, null, true), - 130 => array(array('_route' => 'g', '_locale' => 'en'), array('_locale'), null, null, false), - 154 => array(array('_route' => 'h', '_locale' => 'en'), array('_locale', 'page'), null, null, false), - 175 => array(array('_route' => 'i', '_locale' => 'en'), array('_locale', 'page'), null, null, false), - 202 => array(array('_route' => 'j', '_locale' => 'en'), array('_locale', 'id'), null, null, false), - 216 => array(array('_route' => 'k', '_locale' => 'en'), array('_locale'), null, null, false), - 234 => array(array('_route' => 'l', '_locale' => 'en'), array('_locale'), null, null, false), - 245 => array(array('_route' => 'm', '_locale' => 'en'), array('_locale'), null, null, false), - 264 => array(array('_route' => 'n', '_locale' => 'en'), array('_locale'), null, null, false), + 32 => array(array('_route' => 'a', '_locale' => 'en'), array('_locale'), null, null, true, false), + 46 => array(array('_route' => 'b', '_locale' => 'en'), array('_locale'), null, null, false, false), + 58 => array(array('_route' => 'c', '_locale' => 'en'), array('_locale', 'id'), null, null, false, true), + 75 => array(array('_route' => 'd', '_locale' => 'en'), array('_locale', 'id'), null, null, false, false), + 94 => array(array('_route' => 'e', '_locale' => 'en'), array('_locale', 'id'), null, null, false, false), + 110 => array(array('_route' => 'f', '_locale' => 'en'), array('_locale'), null, null, true, false), + 130 => array(array('_route' => 'g', '_locale' => 'en'), array('_locale'), null, null, false, false), + 154 => array(array('_route' => 'h', '_locale' => 'en'), array('_locale', 'page'), null, null, false, true), + 175 => array(array('_route' => 'i', '_locale' => 'en'), array('_locale', 'page'), null, null, false, true), + 202 => array(array('_route' => 'j', '_locale' => 'en'), array('_locale', 'id'), null, null, false, false), + 216 => array(array('_route' => 'k', '_locale' => 'en'), array('_locale'), null, null, false, false), + 234 => array(array('_route' => 'l', '_locale' => 'en'), array('_locale'), null, null, false, false), + 245 => array(array('_route' => 'm', '_locale' => 'en'), array('_locale'), null, null, false, false), + 264 => array(array('_route' => 'n', '_locale' => 'en'), array('_locale'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php index d92394f5a6f5..346c625d3a52 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -45,7 +46,7 @@ public function match($rawPathinfo) .')' .')' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -53,26 +54,25 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 27 => array(array('_route' => 'r1'), array('foo'), null, null, false), - 38 => array(array('_route' => 'r10'), array('foo'), null, null, false), - 46 => array(array('_route' => 'r100'), array('foo'), null, null, false), - 59 => array(array('_route' => 'r2'), array('foo'), null, null, false), - 70 => array(array('_route' => 'r20'), array('foo'), null, null, false), - 78 => array(array('_route' => 'r200'), array('foo'), null, null, false), + 27 => array(array('_route' => 'r1'), array('foo'), null, null, false, false), + 38 => array(array('_route' => 'r10'), array('foo'), null, null, false, false), + 46 => array(array('_route' => 'r100'), array('foo'), null, null, false, false), + 59 => array(array('_route' => 'r2'), array('foo'), null, null, false, false), + 70 => array(array('_route' => 'r20'), array('foo'), null, null, false, false), + 78 => array(array('_route' => 'r200'), array('foo'), null, null, false, false), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php index 60cc69fa7bfe..0ccc84a38e46 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); $host = strtolower($context->getHost()); @@ -35,7 +36,7 @@ public function match($rawPathinfo) .'|(*:56)' .')' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -43,7 +44,11 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { case 56: // r1 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_r1; } @@ -53,7 +58,11 @@ public function match($rawPathinfo) not_r1: // r2 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_r2; } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php index 3a61a2bdf78e..1a49c6e1e5ab 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php @@ -37,8 +37,8 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' !== $pathinfo) { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + } elseif ('/' !== $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { return $this->redirect($pathinfo, $ret['_route']) + $ret; } @@ -50,10 +50,11 @@ public function match($pathinfo) throw new ResourceNotFoundException(); } - private function doMatch(string $rawPathinfo, array &$allow = array(), array &$allowSchemes = array()): array + private function doMatch(string $pathinfo, array &$allow = array(), array &$allowSchemes = array()): array { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); $host = strtolower($context->getHost()); @@ -62,7 +63,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { default: $routes = array( '/test/baz' => array(array('_route' => 'baz'), null, null, null, false), @@ -90,14 +91,11 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } - break; + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } + break; } if ($requiredHost) { @@ -172,7 +170,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a .')' .')' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -180,13 +178,13 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a switch ($m = (int) $matches['MARK']) { case 115: // baz4 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { if ('GET' === $canonicalMethod) { return $allow = $allowSchemes = array(); } goto not_baz4; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -196,10 +194,10 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a not_baz4: // baz5 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { goto not_baz5; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -213,10 +211,10 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a not_baz5: // baz.baz6 - if ('/' !== $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo === $pathinfo) { goto not_bazbaz6; } - if ('/' !== $pathinfo && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ('/' !== $pathinfo && preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { $matches = $n; } @@ -232,7 +230,11 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; case 160: // foo1 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } elseif ('/' !== $pathinfo) { goto not_foo1; } @@ -250,11 +252,22 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; case 204: // foo2 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + $hasTrailingSlash = false; + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { if ('GET' === $canonicalMethod) { return $allow = $allowSchemes = array(); } - goto not_foo2; + if ($trimmedPathinfo === $pathinfo) { + goto not_foo2; + } } $matches = array('foo1' => $matches[1] ?? null); @@ -265,11 +278,22 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; case 279: // foo3 - if ('/' !== $pathinfo && '/' === $pathinfo[-1] && preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { + $hasTrailingSlash = false; + if ($trimmedPathinfo === $pathinfo) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { if ('GET' === $canonicalMethod) { return $allow = $allowSchemes = array(); } - goto not_foo3; + if ($trimmedPathinfo === $pathinfo) { + goto not_foo3; + } } $matches = array('_locale' => $matches[1] ?? null, 'foo' => $matches[2] ?? null); @@ -280,40 +304,39 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; default: $routes = array( - 47 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null, false), - 70 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null, false), - 90 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null, false), - 131 => array(array('_route' => 'quoter'), array('quoter'), null, null, false), - 168 => array(array('_route' => 'bar1'), array('bar'), null, null, false), - 181 => array(array('_route' => 'overridden'), array('var'), null, null, false), - 212 => array(array('_route' => 'bar2'), array('bar1'), null, null, false), - 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null, false), - 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null, false), - 309 => array(array('_route' => 'foo4'), array('foo'), null, null, false), - 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null, false), - 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null, false), - 441 => array(array('_route' => 'route15'), array('name'), null, null, false), - 489 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null, false), - 510 => array(array('_route' => 'a'), array(), null, null, false), - 531 => array(array('_route' => 'b'), array('var'), null, null, false), - 549 => array(array('_route' => 'c'), array('var'), null, null, false), + 47 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null, false, true), + 70 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null, false, true), + 90 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null, false, true), + 131 => array(array('_route' => 'quoter'), array('quoter'), null, null, false, true), + 168 => array(array('_route' => 'bar1'), array('bar'), null, null, false, true), + 181 => array(array('_route' => 'overridden'), array('var'), null, null, false, true), + 212 => array(array('_route' => 'bar2'), array('bar1'), null, null, false, true), + 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null, false, true), + 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null, false, true), + 309 => array(array('_route' => 'foo4'), array('foo'), null, null, false, true), + 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null, false, true), + 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null, false, true), + 441 => array(array('_route' => 'route15'), array('name'), null, null, false, true), + 489 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null, false, true), + 510 => array(array('_route' => 'a'), array(), null, null, false, false), + 531 => array(array('_route' => 'b'), array('var'), null, null, false, true), + 549 => array(array('_route' => 'c'), array('var'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php index a6d11f6b7e50..a726a8b5154f 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher3.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -26,10 +27,10 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { case '/with-condition': // with-condition - if ('/' !== $pathinfo && '/' === $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo !== $pathinfo) { goto not_withcondition; } @@ -47,11 +48,8 @@ public function match($rawPathinfo) break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - break; - } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + break; } $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); @@ -73,7 +71,7 @@ public function match($rawPathinfo) $regexList = array( 0 => '{^(?' .'|/rootprefix/([^/]++)(*:27)' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -81,21 +79,20 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 27 => array(array('_route' => 'dynamic'), array('var'), null, null, false), + 27 => array(array('_route' => 'dynamic'), array('var'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher4.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher4.php index 97ace0d51063..2181a6d7b573 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher4.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher4.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -26,10 +27,10 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { case '/put_and_post': // put_and_post - if ('/' !== $pathinfo && '/' === $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo !== $pathinfo) { goto not_put_and_post; } @@ -42,7 +43,7 @@ public function match($rawPathinfo) return $ret; not_put_and_post: // put_and_get_and_head - if ('/' !== $pathinfo && '/' === $pathinfo[-1]) { + if ('/' !== $pathinfo && $trimmedPathinfo !== $pathinfo) { goto not_put_and_get_and_head; } @@ -67,11 +68,8 @@ public function match($rawPathinfo) break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - break; - } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + break; } $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher5.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher5.php index c8d7b40e951c..0ea159646cf3 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher5.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher5.php @@ -37,8 +37,8 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' !== $pathinfo) { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + } elseif ('/' !== $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { return $this->redirect($pathinfo, $ret['_route']) + $ret; } @@ -50,10 +50,11 @@ public function match($pathinfo) throw new ResourceNotFoundException(); } - private function doMatch(string $rawPathinfo, array &$allow = array(), array &$allowSchemes = array()): array + private function doMatch(string $pathinfo, array &$allow = array(), array &$allowSchemes = array()): array { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -61,7 +62,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { default: $routes = array( '/a/11' => array(array('_route' => 'a_first'), null, null, null, false), @@ -82,14 +83,11 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } - break; + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } + break; } $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); @@ -112,7 +110,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a 0 => '{^(?' .'|/([^/]++)(*:16)' .'|/nested/([^/]++)(*:39)' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -120,25 +118,24 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a switch ($m = (int) $matches['MARK']) { default: $routes = array( - 16 => array(array('_route' => 'a_wildcard'), array('param'), null, null, false), - 39 => array(array('_route' => 'nested_wildcard'), array('param'), null, null, false), + 16 => array(array('_route' => 'a_wildcard'), array('param'), null, null, false, true), + 39 => array(array('_route' => 'nested_wildcard'), array('param'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher6.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher6.php index 749ebd118335..859ca6415ef5 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher6.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher6.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -26,7 +27,7 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { default: $routes = array( '/trailing/simple/no-methods' => array(array('_route' => 'simple_trailing_slash_no_methods'), null, null, null, true), @@ -43,11 +44,8 @@ public function match($rawPathinfo) break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - break; - } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + break; } $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); @@ -80,7 +78,7 @@ public function match($rawPathinfo) .'|head\\-method/([^/]++)(*:240)' .'|post\\-method/([^/]++)(*:269)' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -88,28 +86,27 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 46 => array(array('_route' => 'regex_trailing_slash_no_methods'), array('param'), null, null, true), - 73 => array(array('_route' => 'regex_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, true), - 101 => array(array('_route' => 'regex_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, true), - 130 => array(array('_route' => 'regex_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, true), - 183 => array(array('_route' => 'regex_not_trailing_slash_no_methods'), array('param'), null, null, false), - 211 => array(array('_route' => 'regex_not_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, false), - 240 => array(array('_route' => 'regex_not_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, false), - 269 => array(array('_route' => 'regex_not_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, false), + 46 => array(array('_route' => 'regex_trailing_slash_no_methods'), array('param'), null, null, true, true), + 73 => array(array('_route' => 'regex_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, true, true), + 101 => array(array('_route' => 'regex_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, true, true), + 130 => array(array('_route' => 'regex_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, true, true), + 183 => array(array('_route' => 'regex_not_trailing_slash_no_methods'), array('param'), null, null, false, true), + 211 => array(array('_route' => 'regex_not_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, false, true), + 240 => array(array('_route' => 'regex_not_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, false, true), + 269 => array(array('_route' => 'regex_not_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher7.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher7.php index b3513bc3f732..8462e1924266 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher7.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher7.php @@ -37,8 +37,8 @@ public function match($pathinfo) } finally { $this->context->setScheme($scheme); } - } elseif ('/' !== $pathinfo) { - $pathinfo = '/' !== $pathinfo[-1] ? $pathinfo.'/' : substr($pathinfo, 0, -1); + } elseif ('/' !== $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/') { + $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo.'/' : $trimmedPathinfo; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { return $this->redirect($pathinfo, $ret['_route']) + $ret; } @@ -50,10 +50,11 @@ public function match($pathinfo) throw new ResourceNotFoundException(); } - private function doMatch(string $rawPathinfo, array &$allow = array(), array &$allowSchemes = array()): array + private function doMatch(string $pathinfo, array &$allow = array(), array &$allowSchemes = array()): array { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -61,7 +62,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { default: $routes = array( '/trailing/simple/no-methods' => array(array('_route' => 'simple_trailing_slash_no_methods'), null, null, null, true), @@ -78,14 +79,11 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; } list($ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$trimmedPathinfo]; - - if ('/' !== $pathinfo) { - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } - break; + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } + break; } $hasRequiredScheme = !$requiredSchemes || isset($requiredSchemes[$context->getScheme()]); @@ -118,7 +116,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a .'|head\\-method/([^/]++)(*:240)' .'|post\\-method/([^/]++)(*:269)' .')' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -126,31 +124,30 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a switch ($m = (int) $matches['MARK']) { default: $routes = array( - 46 => array(array('_route' => 'regex_trailing_slash_no_methods'), array('param'), null, null, true), - 73 => array(array('_route' => 'regex_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, true), - 101 => array(array('_route' => 'regex_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, true), - 130 => array(array('_route' => 'regex_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, true), - 183 => array(array('_route' => 'regex_not_trailing_slash_no_methods'), array('param'), null, null, false), - 211 => array(array('_route' => 'regex_not_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, false), - 240 => array(array('_route' => 'regex_not_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, false), - 269 => array(array('_route' => 'regex_not_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, false), + 46 => array(array('_route' => 'regex_trailing_slash_no_methods'), array('param'), null, null, true, true), + 73 => array(array('_route' => 'regex_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, true, true), + 101 => array(array('_route' => 'regex_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, true, true), + 130 => array(array('_route' => 'regex_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, true, true), + 183 => array(array('_route' => 'regex_not_trailing_slash_no_methods'), array('param'), null, null, false, true), + 211 => array(array('_route' => 'regex_not_trailing_slash_GET_method'), array('param'), array('GET' => 0), null, false, true), + 240 => array(array('_route' => 'regex_not_trailing_slash_HEAD_method'), array('param'), array('HEAD' => 0), null, false, true), + 269 => array(array('_route' => 'regex_not_trailing_slash_POST_method'), array('param'), array('POST' => 0), null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ('GET' === $canonicalMethod && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = array(); } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { - if ((!$requiredMethods || isset($requiredMethods['GET'])) && 'GET' === $canonicalMethod) { - return $allow = $allowSchemes = array(); - } + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php index f80eb4c9d87a..aa05bf8f3fdd 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); @@ -30,13 +31,13 @@ public function match($rawPathinfo) $regexList = array( 0 => '{^(?' .'|/(a)(*:11)' - .')(?:/?)$}sD', + .')/?$}sD', 11 => '{^(?' .'|/(.)(*:22)' - .')(?:/?)$}sDu', + .')/?$}sDu', 22 => '{^(?' .'|/(.)(*:33)' - .')(?:/?)$}sD', + .')/?$}sD', ); foreach ($regexList as $offset => $regex) { @@ -44,23 +45,22 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 11 => array(array('_route' => 'a'), array('a'), null, null, false), - 22 => array(array('_route' => 'b'), array('a'), null, null, false), - 33 => array(array('_route' => 'c'), array('a'), null, null, false), + 11 => array(array('_route' => 'a'), array('a'), null, null, false, true), + 22 => array(array('_route' => 'b'), array('a'), null, null, false, true), + 33 => array(array('_route' => 'c'), array('a'), null, null, false, true), ); - list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash) = $routes[$m]; + list($ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar) = $routes[$m]; - if ('/' !== $pathinfo) { - if ('/' === $pathinfo[-1]) { - if (preg_match($regex, substr($pathinfo, 0, -1), $n) && $m === (int) $n['MARK']) { - $matches = $n; - } else { - $hasTrailingSlash = true; - } - } - - if ($hasTrailingSlash !== ('/' === $pathinfo[-1])) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { + // no-op + } elseif (preg_match($regex, $trimmedPathinfo, $n) && $m === (int) $n['MARK']) { + $matches = $n; + } else { + $hasTrailingSlash = true; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($trimmedPathinfo === $pathinfo || !$hasTrailingVar) { break; } } diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher9.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher9.php index 8b567addeb8b..6dfe3e56d3d7 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher9.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher9.php @@ -15,10 +15,11 @@ public function __construct(RequestContext $context) $this->context = $context; } - public function match($rawPathinfo) + public function match($pathinfo) { $allow = $allowSchemes = array(); - $pathinfo = rawurldecode($rawPathinfo) ?: '/'; + $pathinfo = rawurldecode($pathinfo) ?: '/'; + $trimmedPathinfo = rtrim($pathinfo, '/') ?: '/'; $context = $this->context; $requestMethod = $canonicalMethod = $context->getMethod(); $host = strtolower($context->getHost()); @@ -27,7 +28,7 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - switch ($trimmedPathinfo = '/' !== $pathinfo && '/' === $pathinfo[-1] ? substr($pathinfo, 0, -1) : $pathinfo) { + switch ($trimmedPathinfo) { case '/': // a if (preg_match('#^(?P[^\\.]++)\\.e\\.c\\.b\\.a$#sDi', $host, $hostMatches)) { diff --git a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php index 159f2725867d..a8eca73ee289 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php @@ -706,6 +706,16 @@ public function testSlashWithVerb() $matcher = $this->getUrlMatcher($coll); $this->assertSame(array('_route' => 'b'), $matcher->match('/bar/')); + + $coll = new RouteCollection(); + $coll->add('a', new Route('/dav/{foo<.*>?}', array(), array(), array(), '', array(), array('GET', 'OPTIONS'))); + + $matcher = $this->getUrlMatcher($coll, new RequestContext('', 'OPTIONS')); + $expected = array( + '_route' => 'a', + 'foo' => 'files/bar', + ); + $this->assertEquals($expected, $matcher->match('/dav/files/bar/')); } public function testSlashAndVerbPrecedence()