diff --git a/compiler/src/main/php/xp/compiler/emit/source/Emitter.class.php b/compiler/src/main/php/xp/compiler/emit/source/Emitter.class.php index 1dc631e0f..745b11034 100644 --- a/compiler/src/main/php/xp/compiler/emit/source/Emitter.class.php +++ b/compiler/src/main/php/xp/compiler/emit/source/Emitter.class.php @@ -205,24 +205,40 @@ protected function emitUses($b, array $types) { } $uses && $b->insert('uses(\''.implode("', '", $uses).'\');', 0); } - + /** * Emit parameters * * @param xp.compiler.emit.Buffer b - * @param xp.compiler.ast.Node[] params + * @param xp.compiler.types.Types + * @param xp.compiler.ast.Node[] arguments * @param bool brackets * @return int */ - protected function emitInvocationArguments($b, array $params, $brackets= true) { + protected function emitInvocationArguments($b, $ptr, array $arguments, $brackets= TRUE) { $brackets && $b->append('('); - $s= sizeof($params)- 1; - foreach ($params as $i => $param) { - $this->emitOne($b, $param); - $i < $s && $b->append(','); + $s= sizeof($arguments)- 1; + $i= 0; + if (is_string(key($arguments))) { // Named + $p= sizeof($ptr->parameters)- 1; + foreach ($ptr->parameters as $name => $param) { + if (isset($arguments[$name])) { + $this->emitOne($b, $arguments[$name]); + } else if ($param['default']) { + $this->emitOne($b, $param['default']); + } else { + $this->error('P404', 'Cannot omit '.$ptr->name.'()\'s parameter "'.$name.'"'); + } + $i++ < $p && $b->append(','); + } + } else { // Ordered + foreach ($arguments as $param) { + $this->emitOne($b, $param); + $i++ < $s && $b->append(','); + } } $brackets && $b->append(')'); - return sizeof($params); + return sizeof($arguments); } /** @@ -244,11 +260,11 @@ protected function emitInvocation($b, $inv) { // Static method call vs. function call if (true === $ptr) { $b->append($inv->name); - $this->emitInvocationArguments($b, (array)$inv->arguments); + $this->emitInvocationArguments($b, null, (array)$inv->arguments); $this->scope[0]->setType($inv, TypeName::$VAR); } else { $b->append($ptr->holder->literal().'::'.$ptr->name()); - $this->emitInvocationArguments($b, (array)$inv->arguments); + $this->emitInvocationArguments($b, $ptr, (array)$inv->arguments); $this->scope[0]->setType($inv, $ptr->returns); } } @@ -447,7 +463,7 @@ public function emitDynamicMemberAccess($b, $access) { public function emitStaticMethodCall($b, $call) { $ptr= $this->resolveType($call->type); $b->append($ptr->literal().'::'.$call->name); - $this->emitInvocationArguments($b, (array)$call->arguments); + $this->emitInvocationArguments($b, $ptr->getMethod($call->name), (array)$call->arguments); // Record type $this->scope[0]->setType($call, $ptr->hasMethod($call->name) ? $ptr->getMethod($call->name)->returns : TypeName::$VAR); @@ -469,7 +485,7 @@ public function emitInstanceCall($b, $call) { $b->append(') ? null : call_user_func(')->append($var); if ($call->arguments) { $b->append(', '); - $this->emitInvocationArguments($b, $call->arguments, false); + $this->emitInvocationArguments($b, null, $call->arguments, false); } $b->append('))'); } else { @@ -477,7 +493,7 @@ public function emitInstanceCall($b, $call) { $this->emitOne($b, $call->target); if ($call->arguments) { $b->append(', '); - $this->emitInvocationArguments($b, $call->arguments, false); + $this->emitInvocationArguments($b, null, $call->arguments, false); } $b->append(')'); } @@ -499,7 +515,7 @@ public function emitMethodCall($b, $call) { $b->insert($ext->holder->literal().'::'.$call->name.'(', $mark); if ($call->arguments) { $b->append(', '); - $this->emitInvocationArguments($b, $call->arguments, false); + $this->emitInvocationArguments($b, $ext, $call->arguments, false); } $b->append(')'); $this->scope[0]->setType($call, $ext->returns); @@ -514,7 +530,7 @@ public function emitMethodCall($b, $call) { $b->insert('(NULL === ('.$var.'=', $mark); $b->append(') ? NULL : ')->append($var)->append('->'); $b->append($call->name); - $this->emitInvocationArguments($b, (array)$call->arguments); + $this->emitInvocationArguments($b, $ptr->getMethod($call->name), (array)$call->arguments); $b->append(')'); } else { @@ -534,7 +550,7 @@ public function emitMethodCall($b, $call) { } $b->append('->'.$call->name); - $this->emitInvocationArguments($b, (array)$call->arguments); + $this->emitInvocationArguments($b, $ptr->getMethod($call->name), (array)$call->arguments); } // Record type @@ -1187,8 +1203,7 @@ protected function emitFinally($b, $finally) { */ protected function emitDynamicInstanceCreation($b, $new) { $b->append('new ')->append('$')->append($new->variable); - $this->emitInvocationArguments($b, (array)$new->parameters); - + $this->emitInvocationArguments($b, null, (array)$new->parameters); $this->scope[0]->setType($new, new TypeName('lang.Object')); } @@ -1256,12 +1271,12 @@ protected function emitInstanceCreation($b, $new) { $b->append('>\''); if ($new->parameters) { $b->append(','); - $this->emitInvocationArguments($b, (array)$new->parameters, false); + $this->emitInvocationArguments($b, $ptr->getConstructor(), (array)$new->parameters, false); } $b->append(')'); } else { $b->append('new '.$ptr->literal()); - $this->emitInvocationArguments($b, (array)$new->parameters); + $this->emitInvocationArguments($b, $ptr->getConstructor(), (array)$new->parameters); } } @@ -2280,8 +2295,8 @@ protected function emitClass($b, $declaration) { $arguments= array(); $parameters= array(); if ($parentType->hasConstructor()) { - foreach ($parentType->getConstructor()->parameters as $i => $type) { - $parameters[]= array('name' => '··a'.$i, 'type' => $type); // TODO: default + foreach ($parentType->getConstructor()->parameters as $i => $param) { + $parameters[]= array('name' => '··a'.$i, 'type' => $param['type']); // TODO: default $arguments[]= new VariableNode('··a'.$i); } $body= array(new StaticMethodCallNode(new TypeName('parent'), '__construct', $arguments)); diff --git a/compiler/src/main/php/xp/compiler/grammar/xp.jay b/compiler/src/main/php/xp/compiler/grammar/xp.jay index e4e5ffe30..f272c1d2f 100644 --- a/compiler/src/main/php/xp/compiler/grammar/xp.jay +++ b/compiler/src/main/php/xp/compiler/grammar/xp.jay @@ -508,6 +508,27 @@ throws_opt: /* empty */ { $$= NULL; } | T_THROWS name_list { $$= $2; } ; + +arguments: + /* empty */ { $$= NULL; } + | argument_list +; + +argument_list: + argument + | argument_list ',' argument_opt { $$= array_merge($1, $3); } +; + +argument_opt: + /* empty */ { $$= array(); } + | argument +; + +argument: + T_WORD ':' expression { $$= array($1 => $3); } + | T_STRING ':' expression { $$= array($1 => $3); } + | expression { $$= array($1); } +; // }}} // {{{ Overloadable operators @@ -709,7 +730,7 @@ expression_opt: ; instancecreation: - typename '(' expressionlist_opt ')' classbody_opt { + typename '(' arguments ')' classbody_opt { $$= new InstanceCreationNode(); $$->type= $1; $$->parameters= $3; @@ -731,7 +752,7 @@ staticmember: T_VARIABLE { $$= new StaticMemberAccessNode(NULL, $1); } - | T_WORD '(' expressionlist_opt ')' { + | T_WORD '(' arguments ')' { $$= new StaticMethodCallNode(NULL, $1, $3); } | T_WORD { @@ -774,7 +795,7 @@ expression: $$= $4; } } - | T_WORD '(' { $2= $yyLex->create(new InvocationNode($1)); } expressionlist_opt ')' chain_opt { + | T_WORD '(' { $2= $yyLex->create(new InvocationNode($1)); } arguments ')' chain_opt { $2->arguments= $4; if ($6) { $$= $6[0]; @@ -984,10 +1005,10 @@ chain: | nav member { $$= $yyLex->create(new MemberAccessNode(NULL, $2, $1)); } - | nav member '(' { $1= $yyLex->create(new MethodCallNode(NULL, $2, NULL, $1)); } expressionlist_opt ')' { + | nav member '(' { $1= $yyLex->create(new MethodCallNode(NULL, $2, NULL, $1)); } arguments ')' { $1->arguments= $5; } - | nav '(' { $1= $yyLex->create(new InstanceCallNode(NULL, NULL, $1)); } expressionlist_opt ')' { + | nav '(' { $1= $yyLex->create(new InstanceCallNode(NULL, NULL, $1)); } arguments ')' { $1->arguments= $4; } ; diff --git a/compiler/src/main/php/xp/compiler/syntax/xp/Parser.class.php b/compiler/src/main/php/xp/compiler/syntax/xp/Parser.class.php index 3b0d8f407..e11e98495 100644 --- a/compiler/src/main/php/xp/compiler/syntax/xp/Parser.class.php +++ b/compiler/src/main/php/xp/compiler/syntax/xp/Parser.class.php @@ -161,28 +161,29 @@ class Parser extends \text\parser\generic\AbstractParser { 43, 25, 45, 25, 47, 25, 11, 11, 48, 48, 50, 50, 50, 51, 51, 51, 52, 52, 53, 53, 42, 42, 42, 39, 39, 39, 44, 44, 54, 54, - 37, 37, 37, 55, 55, 41, 41, 46, 46, 46, - 46, 46, 46, 26, 26, 56, 56, 59, 57, 60, - 57, 63, 57, 65, 57, 67, 57, 68, 57, 69, - 57, 71, 57, 72, 57, 73, 57, 74, 57, 57, - 57, 57, 76, 76, 78, 78, 77, 77, 79, 66, - 66, 70, 70, 80, 80, 82, 81, 83, 81, 61, - 61, 62, 84, 62, 75, 75, 85, 85, 89, 88, - 90, 90, 86, 86, 91, 87, 64, 64, 92, 92, - 58, 58, 93, 93, 93, 97, 97, 97, 97, 99, - 31, 31, 100, 31, 101, 31, 102, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 110, - 31, 31, 109, 109, 108, 108, 111, 111, 112, 112, - 36, 114, 36, 36, 36, 36, 36, 36, 113, 113, - 96, 96, 115, 115, 117, 117, 116, 116, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, - 106, 106, 106, 106, 106, 107, 107, 98, 98, 118, - 118, 120, 119, 119, 123, 119, 124, 119, 121, 121, - 122, 122, 122, 32, 32, 32, 12, 12, 94, 95, - 125, 125, 126, 126, 21, 21, 49, 49, 127, 127, - 128, 128, 128, 128, 128, 128, 128, 128, + 37, 37, 37, 55, 55, 41, 41, 56, 56, 57, + 57, 59, 59, 58, 58, 58, 46, 46, 46, 46, + 46, 46, 26, 26, 60, 60, 63, 61, 64, 61, + 67, 61, 69, 61, 71, 61, 72, 61, 73, 61, + 75, 61, 76, 61, 77, 61, 78, 61, 61, 61, + 61, 80, 80, 82, 82, 81, 81, 83, 70, 70, + 74, 74, 84, 84, 86, 85, 87, 85, 65, 65, + 66, 88, 66, 79, 79, 89, 89, 93, 92, 94, + 94, 90, 90, 95, 91, 68, 68, 96, 96, 62, + 62, 97, 97, 97, 101, 101, 101, 101, 103, 31, + 31, 104, 31, 105, 31, 106, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 114, 31, + 31, 113, 113, 112, 112, 115, 115, 116, 116, 36, + 118, 36, 36, 36, 36, 36, 36, 117, 117, 100, + 100, 119, 119, 121, 121, 120, 120, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, + 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, + 110, 110, 110, 110, 111, 111, 102, 102, 122, 122, + 124, 123, 123, 127, 123, 128, 123, 125, 125, 126, + 126, 126, 32, 32, 32, 12, 12, 98, 99, 129, + 129, 130, 130, 21, 21, 49, 49, 131, 131, 132, + 132, 132, 132, 132, 132, 132, 132, ); protected static $yyLen= array(2, 3, 0, 0, 4, 0, 1, 1, 2, 0, 7, @@ -194,1214 +195,1226 @@ class Parser extends \text\parser\generic\AbstractParser { 0, 9, 0, 8, 0, 10, 4, 1, 1, 3, 2, 5, 5, 3, 3, 1, 1, 3, 3, 3, 1, 3, 3, 0, 2, 1, 0, 1, 1, 3, - 3, 3, 4, 1, 2, 0, 2, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 2, 0, 4, 0, - 7, 0, 10, 0, 8, 0, 6, 0, 8, 0, - 8, 0, 3, 0, 3, 0, 4, 0, 6, 7, - 7, 2, 1, 3, 1, 3, 1, 3, 3, 1, - 3, 0, 1, 1, 2, 0, 5, 0, 4, 1, - 3, 0, 0, 3, 2, 1, 1, 2, 0, 9, - 1, 3, 0, 1, 0, 5, 0, 1, 1, 3, - 0, 1, 5, 4, 4, 1, 4, 1, 1, 0, - 3, 2, 0, 4, 0, 5, 0, 6, 2, 3, - 1, 1, 1, 1, 1, 5, 3, 3, 3, 0, - 8, 4, 1, 3, 0, 1, 1, 3, 1, 2, - 1, 0, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 0, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, - 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, - 2, 0, 4, 2, 0, 6, 0, 5, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 4, 3, 4, - 1, 3, 1, 3, 1, 3, 0, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 4, 1, 2, 0, 2, 0, 1, 1, + 3, 0, 1, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 2, 0, 4, 0, 7, + 0, 10, 0, 8, 0, 6, 0, 8, 0, 8, + 0, 3, 0, 3, 0, 4, 0, 6, 7, 7, + 2, 1, 3, 1, 3, 1, 3, 3, 1, 3, + 0, 1, 1, 2, 0, 5, 0, 4, 1, 3, + 0, 0, 3, 2, 1, 1, 2, 0, 9, 1, + 3, 0, 1, 0, 5, 0, 1, 1, 3, 0, + 1, 5, 4, 4, 1, 4, 1, 1, 0, 3, + 2, 0, 4, 0, 5, 0, 6, 2, 3, 1, + 1, 1, 1, 1, 5, 3, 3, 3, 0, 8, + 4, 1, 3, 0, 1, 1, 3, 1, 2, 1, + 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 0, 1, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, + 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 4, 4, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 1, 1, 2, + 0, 4, 2, 0, 6, 0, 5, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 4, 3, 4, 1, + 3, 1, 3, 1, 3, 0, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, ); protected static $yyDefRed= array(0, 3, 0, 0, 0, 9, 0, 0, 7, 0, 0, - 0, 0, 0, 301, 303, 302, 305, 307, 306, 308, - 304, 1, 0, 68, 0, 299, 8, 0, 0, 4, - 12, 13, 0, 0, 0, 69, 20, 24, 22, 300, + 0, 0, 0, 310, 312, 311, 314, 316, 315, 317, + 313, 1, 0, 68, 0, 308, 8, 0, 0, 4, + 12, 13, 0, 0, 0, 69, 20, 24, 22, 309, 18, 19, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 67, 0, 0, - 0, 0, 15, 0, 0, 74, 75, 212, 0, 218, - 214, 217, 215, 216, 0, 0, 0, 77, 0, 0, + 0, 0, 15, 0, 0, 74, 75, 221, 0, 227, + 223, 226, 224, 225, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 72, - 0, 73, 0, 0, 284, 0, 285, 286, 0, 291, - 27, 0, 0, 0, 31, 35, 0, 16, 221, 0, - 0, 0, 0, 0, 0, 183, 0, 0, 0, 180, - 0, 0, 0, 0, 0, 219, 0, 220, 191, 192, - 193, 194, 195, 0, 0, 223, 211, 79, 80, 0, - 78, 0, 0, 0, 0, 288, 29, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 187, 0, 0, 0, 0, 185, 0, 0, 0, + 0, 73, 0, 0, 293, 0, 294, 295, 0, 300, + 27, 0, 0, 0, 31, 35, 0, 16, 230, 0, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 189, + 0, 0, 0, 0, 0, 228, 0, 229, 200, 201, + 202, 203, 204, 0, 0, 232, 220, 79, 80, 0, + 78, 0, 0, 0, 0, 297, 29, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 196, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 266, 267, 0, 272, - 280, 279, 182, 269, 0, 0, 0, 213, 0, 294, - 0, 289, 292, 0, 296, 0, 0, 25, 0, 34, + 0, 0, 0, 0, 0, 0, 275, 276, 0, 281, + 289, 288, 191, 278, 0, 0, 0, 222, 0, 303, + 0, 298, 301, 0, 305, 0, 0, 25, 0, 34, 36, 37, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 181, 0, 209, 0, 0, 0, - 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 190, 0, 218, 0, 0, 0, + 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 199, 0, 0, 190, - 0, 271, 281, 283, 282, 277, 0, 170, 0, 0, - 226, 224, 290, 21, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 35, 0, 184, 0, 0, 0, 202, - 210, 0, 0, 0, 179, 176, 0, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 275, 108, 0, - 126, 112, 116, 118, 114, 122, 124, 110, 120, 0, - 0, 0, 0, 106, 0, 63, 0, 0, 0, 0, - 0, 0, 35, 45, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 0, 208, 0, 186, 0, 273, 0, - 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 132, 107, 0, 0, 61, - 59, 98, 99, 100, 101, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 188, 0, 200, - 0, 278, 0, 0, 0, 0, 0, 133, 0, 0, - 0, 0, 150, 0, 0, 123, 125, 0, 0, 0, - 0, 137, 0, 0, 89, 0, 0, 0, 0, 0, - 65, 0, 0, 48, 0, 0, 53, 33, 0, 173, - 204, 0, 177, 276, 109, 0, 0, 0, 0, 127, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 55, 0, 49, 54, 47, 201, 0, - 0, 134, 0, 0, 0, 151, 0, 0, 0, 0, - 0, 0, 138, 0, 0, 0, 0, 90, 92, 91, - 0, 0, 0, 0, 0, 159, 165, 129, 0, 156, - 157, 0, 0, 117, 0, 141, 0, 0, 0, 0, - 93, 97, 0, 81, 0, 64, 0, 0, 0, 56, - 0, 0, 155, 164, 158, 130, 0, 0, 0, 153, - 111, 146, 148, 0, 0, 144, 131, 0, 0, 62, - 60, 0, 0, 0, 0, 119, 115, 0, 0, 0, - 121, 145, 83, 82, 66, 161, 0, 0, 0, 154, - 0, 0, 0, 0, 166, 113, 0, 149, 162, 0, - 147, 0, 0, 160, + 0, 0, 0, 0, 0, 0, 208, 0, 0, 199, + 0, 280, 290, 292, 291, 286, 0, 179, 0, 0, + 235, 233, 299, 21, 0, 0, 0, 0, 0, 0, + 0, 23, 0, 35, 0, 193, 0, 0, 0, 0, + 0, 0, 0, 100, 211, 219, 0, 0, 0, 188, + 185, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 284, 117, 0, 135, 121, 125, 127, 123, + 131, 133, 119, 129, 0, 0, 0, 0, 115, 0, + 63, 0, 0, 0, 0, 0, 0, 35, 45, 0, + 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 217, 0, 195, 0, 282, 0, 0, 0, + 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 38, 141, 116, 0, 0, 61, 59, 107, + 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 183, 184, 0, 0, 197, 103, 101, + 0, 209, 0, 287, 0, 0, 0, 0, 0, 142, + 0, 0, 0, 0, 159, 0, 0, 132, 134, 0, + 0, 0, 0, 146, 0, 0, 89, 0, 0, 0, + 0, 0, 65, 0, 0, 48, 0, 0, 53, 33, + 0, 182, 213, 0, 186, 285, 118, 0, 0, 0, + 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 55, 0, 49, 54, 47, + 210, 0, 0, 143, 0, 0, 0, 160, 0, 0, + 0, 0, 0, 0, 147, 0, 0, 0, 0, 90, + 92, 91, 0, 0, 0, 0, 0, 168, 174, 138, + 0, 165, 166, 0, 0, 126, 0, 150, 0, 0, + 0, 0, 93, 97, 0, 81, 0, 64, 0, 0, + 0, 56, 0, 0, 164, 173, 167, 139, 0, 0, + 0, 162, 120, 155, 157, 0, 0, 153, 140, 0, + 0, 62, 60, 0, 0, 0, 0, 128, 124, 0, + 0, 0, 130, 154, 83, 82, 66, 170, 0, 0, + 0, 163, 0, 0, 0, 0, 175, 122, 0, 158, + 171, 0, 156, 0, 0, 169, ); protected static $yyDgoto= array(2, 3, 6, 22, 123, 4, 7, 8, 33, 12, 65, 219, 95, 50, 81, 103, 150, 52, 224, 51, 83, - 105, 354, 220, 221, 222, 341, 225, 226, 300, 301, - 342, 279, 401, 352, 446, 125, 435, 447, 479, 440, - 507, 536, 439, 436, 389, 398, 482, 35, 24, 36, - 47, 77, 78, 437, 438, 343, 344, 256, 372, 382, - 424, 551, 376, 126, 379, 466, 377, 378, 383, 554, - 380, 381, 375, 415, 518, 417, 431, 418, 432, 555, - 556, 569, 570, 568, 519, 543, 520, 521, 541, 577, - 542, 127, 229, 97, 98, 128, 317, 203, 164, 159, - 242, 233, 129, 130, 131, 132, 133, 239, 364, 452, - 240, 241, 134, 87, 135, 136, 292, 204, 205, 281, - 206, 287, 371, 327, 99, 100, 25, 26, + 105, 359, 220, 221, 222, 346, 225, 226, 300, 301, + 347, 279, 409, 357, 458, 125, 447, 459, 491, 452, + 519, 548, 451, 448, 397, 406, 494, 35, 24, 36, + 47, 77, 78, 449, 450, 312, 313, 314, 420, 348, + 349, 256, 380, 390, 436, 563, 384, 126, 387, 478, + 385, 386, 391, 566, 388, 389, 383, 427, 530, 429, + 443, 430, 444, 567, 568, 581, 582, 580, 531, 555, + 532, 533, 553, 589, 554, 127, 229, 97, 98, 128, + 322, 203, 164, 159, 242, 233, 129, 130, 131, 132, + 133, 239, 372, 464, 240, 241, 134, 87, 135, 136, + 292, 204, 205, 281, 206, 287, 379, 332, 99, 100, + 25, 26, ); - protected static $yySindex = array( -267, - 0, 0, -261, -168, 0, 1149, -261, 0, 12, 35, - 47, 85, 94, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 167, 0, 872, 0, 0, -168, -168, 0, - 0, 0, -64, -167, 42, 0, 0, 0, 0, 0, - 0, 0, 164, 65, 163, 0, 230, 94, 872, -168, - -168, -168, -7, -168, -168, 567, 0, 0, 222, -9, - 2, -9, 0, 287, 286, 0, 0, 0, 289, 0, - 0, 0, 0, 0, 305, 333, 320, 0, 16, -168, - 70, -168, 266, 70, -7, 0, 4262, 257, 257, 0, - -147, 0, 81, 340, 0, 309, 0, 0, 78, 0, - 0, -168, 284, 387, 0, 0, 328, 0, 0, 4426, - 4426, 4426, 4426, 4426, 4426, 0, 4426, 537, 374, 0, - 4426, 329, 33, 2986, -34, 0, 414, 0, 0, 0, - 0, 0, 0, 367, 429, 0, 0, 0, 0, 289, - 0, -168, 69, 386, 16, 0, 0, 0, -168, 572, - 241, 139, -77, -77, -112, -77, -77, -77, 69, 0, - 4426, 0, 4426, -34, 2115, -85, 0, 4426, 4426, 4426, - 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, - 4426, 4426, 4426, 4271, 4392, 3953, 4426, 4234, 4426, 4426, - 4426, 4426, 4426, 4426, -168, 4426, 0, 0, 69, 0, - 0, 0, 0, 0, -34, -1, 4426, 0, 155, 0, - 40, 0, 0, 904, 0, 380, 251, 0, 14, 0, - 0, 0, 0, 391, 295, 0, 491, 309, -34, 409, - 415, 2986, 4426, 2986, 0, -34, 0, -73, 280, 502, - 0, -226, 3248, 3284, 3284, 3284, 3284, 3284, 3284, 3284, - 3284, 3284, 3284, 3284, 2986, 490, 22, 160, 3830, 4426, - 1325, 4426, 1325, 4426, 4426, 914, 914, 4426, 4426, 914, - 914, 26, 26, -112, -112, -112, 0, -77, 121, 0, - 4426, 0, 0, 0, 0, 0, 511, 0, 495, 374, - 0, 0, 0, 0, 622, 296, 268, 310, 72, 432, - 525, 0, 241, 0, 4426, 0, 4426, 8, 532, 0, - 0, 4326, -85, 540, 0, 0, -34, 4426, 3284, 3284, - 914, 914, 914, 914, 0, 481, 4426, 0, 0, -8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 457, 2231, 622, 0, 533, 0, 556, 557, 145, 507, - 539, 480, 0, 0, 4426, 0, 940, 570, 483, 487, - -34, 622, 2986, 494, 0, 4426, 0, 87, 0, 579, - 4426, 4426, 0, 282, 4426, 585, 594, 500, 595, 577, - 578, 603, 605, 316, 0, 0, 0, 257, -80, 0, - 0, 0, 0, 0, 0, 0, 0, 620, -80, 4426, - 602, 404, 916, 2328, 432, 0, 0, 0, 543, 0, - 625, 0, 630, 617, 622, 619, 373, 0, 2388, 4426, - 4426, 622, 0, 321, 344, 0, 0, 4426, 4426, 624, - 398, 0, 632, 647, 0, 657, 660, -286, -82, -82, - 0, 613, 2986, 0, -33, -83, 0, 0, 432, 0, - 0, -34, 0, 0, 0, 582, 4426, 282, 589, 0, - 664, 2503, 601, 692, 691, 372, 2530, 2557, 4426, 316, - 614, 0, 479, 422, -80, 405, 539, -80, 703, 660, - 705, -80, 0, 0, 622, 0, 0, 0, 0, 93, - 2986, 0, 622, 4426, 500, 0, 4426, 407, 4426, 500, - 627, 2986, 0, 622, 539, -168, -43, 0, 0, 0, - 660, 422, 422, 716, 633, 0, 0, 0, 93, 0, - 0, 634, 707, 0, 2654, 0, 2714, 401, 152, 648, - 0, 0, 4426, 0, 622, 0, -43, -43, 422, 0, - 738, 656, 0, 0, 0, 0, 4426, 721, 500, 0, - 0, 0, 0, 662, 152, 0, 0, 2830, 663, 0, - 0, -43, -168, 622, 740, 0, 0, 500, 4426, 727, - 0, 0, 0, 0, 0, 0, -79, 665, 500, 0, - 2950, 622, -168, 748, 0, 0, 622, 0, 0, 670, - 0, 622, 669, 0, + protected static $yySindex = array( -284, + 0, 0, -264, -113, 0, 1130, -264, 0, 17, 81, + 15, -234, 85, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 375, 0, 1011, 0, 0, -113, -113, 0, + 0, 0, -79, -205, 84, 0, 0, 0, 0, 0, + 0, 0, 160, -14, 125, 0, 177, 85, 1011, -113, + -113, -113, 1, -113, -113, 325, 0, 0, 192, -54, + -12, -54, 0, 254, 250, 0, 0, 0, 252, 0, + 0, 0, 0, 0, 264, 270, 169, 0, 91, -113, + 44, -113, 242, 44, 1, 0, 4260, 787, 787, 0, + -240, 0, 22, 313, 0, 288, 0, 0, 142, 0, + 0, -113, 271, 352, 0, 0, 285, 0, 0, 4444, + 4444, 4444, 4444, 4444, 4444, 0, 4444, 406, 346, 0, + 4444, 296, 16, 3284, -34, 0, 399, 0, 0, 0, + 0, 0, 0, 357, 401, 0, 0, 0, 0, 252, + 0, -113, 109, 374, 91, 0, 0, 0, -113, 1236, + 224, 281, -122, -122, 4, -122, -122, -122, 109, 0, + 4444, 0, 4444, -34, 2141, -85, 0, 4444, 4444, 4444, + 4444, 4444, 4444, 4444, 4444, 4444, 4444, 4444, 4444, 4444, + 4444, 4444, 4444, 4269, 4300, 3498, 4444, 4205, 4444, 4444, + 4444, 4444, 4444, 4444, -113, 4444, 0, 0, 109, 0, + 0, 0, 0, 0, -34, -3, 4444, 0, 128, 0, + 68, 0, 0, 1749, 0, 369, 239, 0, 43, 0, + 0, 0, 0, 381, 149, 0, 467, 288, -34, 414, + 442, 3284, 4453, 3284, 0, -34, 0, -76, 258, 523, + 0, 97, 3311, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 3284, 514, 3996, 946, 4010, 4444, + 4017, 4444, 4017, 4444, 4444, 1175, 1175, 4444, 4444, 1175, + 1175, 137, 137, 4, 4, 4, 0, -122, -18, 0, + 4444, 0, 0, 0, 0, 0, 540, 0, 524, 346, + 0, 0, 0, 0, 639, 333, 324, 334, 193, 478, + 563, 0, 224, 0, 4453, 0, 4444, 45, 483, 546, + 3284, 566, 568, 0, 0, 0, 4413, -85, 570, 0, + 0, -34, 4444, 54, 54, 1175, 1175, 1175, 1175, 0, + 520, 4453, 0, 0, -11, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 575, 495, 2295, 639, 0, 576, + 0, 591, 602, 485, 561, 601, 547, 0, 0, 4444, + 0, 673, 628, 548, 553, 4444, 4444, -34, 4453, 639, + 3284, 555, 0, 4453, 0, 232, 0, 640, 4453, 4444, + 0, 343, 4444, 645, 650, 458, 659, 637, 648, 668, + 669, 370, 0, 0, 0, 787, -75, 0, 0, 0, + 0, 0, 0, 0, 0, 671, -75, 4444, 654, 457, + 2146, 2349, 478, 0, 0, 3284, 3284, 0, 0, 0, + 599, 0, 675, 0, 688, 674, 639, 676, 392, 0, + 2403, 4444, 4444, 639, 0, 371, 394, 0, 0, 4444, + 4444, 678, 456, 0, 677, 689, 0, 699, 697, 23, + 73, 73, 0, 649, 3284, 0, -33, -103, 0, 0, + 478, 0, 0, -34, 0, 0, 0, 618, 4444, 343, + 633, 0, 702, 2446, 641, 722, 723, 404, 2555, 2592, + 4444, 370, 646, 0, 513, 449, -75, 434, 601, -75, + 735, 697, 739, -75, 0, 0, 639, 0, 0, 0, + 0, 87, 3284, 0, 639, 4444, 458, 0, 4444, 443, + 4444, 458, 679, 3284, 0, 639, 601, -113, 21, 0, + 0, 0, 697, 449, 449, 753, 680, 0, 0, 0, + 87, 0, 0, 691, 737, 0, 2851, 0, 2888, 432, + 101, 692, 0, 0, 4444, 0, 639, 0, 21, 21, + 449, 0, 774, 706, 0, 0, 0, 0, 4444, 763, + 458, 0, 0, 0, 0, 707, 101, 0, 0, 2985, + 708, 0, 0, 21, -113, 639, 793, 0, 0, 458, + 4444, 778, 0, 0, 0, 0, 0, 0, -119, 712, + 458, 0, 3012, 639, -113, 797, 0, 0, 639, 0, + 0, 717, 0, 639, 718, 0, ); - protected static $yyRindex= array( 1059, - 0, 0, 1230, 0, 0, 267, 1503, 0, 1289, 0, - 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, + protected static $yyRindex= array( 1313, + 0, 0, 1889, 0, 0, 387, 2232, 0, 1408, 0, + 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 106, 0, 932, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1462, -38, - 674, -38, 0, 746, 0, 0, 0, 0, 765, 0, + 0, 0, 0, 297, 0, 0, 96, 0, 773, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 515, -112, + 726, -112, 0, 791, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 689, 0, 0, 689, 0, 0, 723, 0, 0, 0, - 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, - 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1078, 1262, 0, - 0, 0, 0, 451, 1673, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, - 698, 658, 403, 1847, 2788, 1905, 1932, 2002, 0, 0, - 0, 0, 0, 1673, 0, 568, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, + 731, 0, 0, 731, 0, 0, 764, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, + 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1020, 1146, 0, + 0, 0, 0, 738, 1663, 0, 78, 0, 0, 0, + 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, + 733, 748, 1735, 1805, 3040, 1845, 1873, 1963, 0, 0, + 0, 0, 0, 1663, 0, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1702, 0, 629, 0, 64, 0, - 0, 0, 0, -189, 0, 1137, 0, 0, 0, 0, - 0, 0, 441, 0, 708, 0, 743, 0, 1673, 744, - 745, 212, 796, 250, 0, 1673, 0, 0, 0, 581, - 0, 0, 68, -37, -31, -21, 263, 272, 361, 534, - 733, 888, 1049, 1051, 974, 0, 4005, 4074, 234, 0, - 3931, 0, 3968, 0, 0, 631, 1778, 0, 0, 3510, - 3547, 3368, 3442, 3041, 3115, 3213, 0, 2087, 1520, 0, - 751, 0, 0, 0, 0, 0, 851, 0, 0, 0, - 0, 0, 0, 0, 714, 0, 281, 0, 0, 11, - 0, 0, 0, 0, 796, 0, 720, 0, 0, 0, - 0, 0, 0, 878, 0, 0, 1673, 0, 1053, 1121, - 3666, 3695, 3769, 3843, 0, 0, 796, 0, 0, 0, + 0, 0, 0, 0, 1708, 0, 951, 0, 38, 0, + 0, 0, 0, -181, 0, 1641, 0, 0, 0, 0, + 0, 0, 445, 0, 742, 0, 777, 0, 1663, 784, + 785, 229, 828, 251, 0, 1663, 0, 0, 0, 620, + 0, 0, 161, -31, -23, 25, 27, 63, 65, 67, + 209, 719, 812, 821, 656, 0, 287, 3872, 3818, 0, + 3847, 0, 3951, 0, 0, 249, 2376, 0, 0, 3611, + 3693, 3186, 3569, 3081, 3108, 3149, 0, 2259, 1545, 0, + 788, 0, 0, 0, 0, 0, 849, 0, 0, 0, + 0, 0, 0, 0, 757, 0, -2, 0, 0, 28, + 0, 0, 0, 0, 828, 0, 758, 0, 1243, 1279, + 464, 0, 843, 0, 0, 0, 0, 0, 977, 0, + 0, 1663, 0, 904, 1049, 3709, 3733, 3778, 3802, 0, + 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, + 0, 0, 762, 0, 0, 830, 0, 0, 0, 0, + 0, 319, 0, 0, 0, 0, 0, 1663, 468, 757, + 772, 0, 0, 828, 0, 3749, 0, 0, 828, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -110, 0, 0, 0, 0, 724, 0, 0, - 789, 0, 0, 0, 0, 0, 58, 0, 0, 0, - 1673, 714, 726, 0, 0, 796, 0, 4097, 0, 0, - 796, 805, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, + 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -189, 0, 1042, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 714, 412, 0, 0, 0, 814, - 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 833, 0, 835, 835, - 0, 0, 115, 0, 0, 0, 0, 0, 11, 0, - 0, 1673, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 506, 0, 0, 837, - 0, 830, 0, 0, 714, 0, 0, 0, 0, 0, - 436, 0, 714, 814, 0, 0, 0, 0, 0, 0, - 0, 498, 0, 714, 506, 0, 0, 0, 0, 0, - 840, 28, 28, 0, 0, 0, 0, 0, 244, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 774, 0, - 0, 0, 0, 0, 714, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, - 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, - 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, + -181, 0, 1078, 0, 0, 494, 504, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 757, 506, 0, 0, + 0, 854, 0, 757, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, + 894, 894, 0, 0, 358, 0, 0, 0, 0, 0, + 28, 0, 0, 1663, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 0, 0, 490, 0, + 0, 895, 0, 865, 0, 0, 757, 0, 0, 0, + 0, 0, 510, 0, 757, 854, 0, 0, 0, 0, + 0, 0, 0, 551, 0, 757, 490, 0, 0, 0, + 0, 0, 897, 245, 245, 0, 0, 0, 0, 0, + 256, 0, 0, 0, 0, 0, 0, 0, 0, 385, + 814, 0, 0, 0, 0, 0, 757, 0, 0, 0, + 245, 0, 0, 0, 0, 0, 0, 0, 900, 0, + 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, + 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, - 0, 714, 0, 0, + 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, + 0, 0, 0, 757, 0, 0, ); protected static $yyGindex= array(0, - 0, 0, 0, -4, 0, 0, 883, 0, 0, 806, - 895, -49, 0, 842, 821, -47, 0, 0, 0, 0, - -97, -328, 0, 0, 0, 1792, 0, 604, 0, 0, - 55, 370, -388, 0, 0, -48, -338, 471, 478, 0, - -133, -186, 0, 444, 0, 0, 0, 0, 879, 885, - 0, 0, 836, -129, 732, 0, 301, -178, 0, 0, - 300, 0, 0, -24, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 476, 473, 0, - 395, 0, 0, 0, 0, 0, 433, 434, 0, 0, - 0, 0, 0, 795, 799, 652, 0, -65, 0, 0, + 0, 0, 0, -4, 0, 0, 940, 0, 0, 864, + 944, -49, 0, 889, 875, -19, 0, 0, 0, 0, + -95, -396, 0, 0, 0, 1900, 0, 658, 0, 0, + 55, 887, -422, 0, 0, -47, -351, 507, 512, 0, + -124, -352, 0, 473, 0, 0, 0, 0, 919, 921, + 0, 0, 879, -413, 779, 35, 0, 617, 0, 0, + 465, -193, 0, 0, -448, 0, 0, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 0, 0, 0, 757, 0, 762, 0, 0, - 0, 0, 0, 0, 0, 828, 0, 949, + 0, 501, 505, 0, 423, 0, 0, 0, 0, 0, + 463, 472, 0, 0, 0, 0, 0, 837, 853, 690, + 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 695, 0, 0, 0, 807, + 0, 820, 0, 0, 0, 0, 0, 0, 0, 872, + 0, 1002, ); protected static $yyTable = array(11, - 60, 61, 62, 198, 147, 94, 198, 76, 94, 229, - 94, 202, 229, 196, 105, 534, 104, 144, 295, 230, - 198, 198, 230, 41, 42, 484, 229, 229, 288, 46, - 101, 374, 104, 314, 63, 1, 230, 230, 286, 138, - 139, 486, 5, 476, 583, 59, 59, 59, 196, 66, - 67, 215, 104, 477, 32, 198, 200, 28, 194, 183, - 442, 229, 194, 192, 190, 109, 191, 192, 193, 32, - 297, 230, 193, 315, 59, 59, 450, 59, 93, 535, - 29, 186, 295, 188, 26, 48, 96, 198, 510, 485, - 17, 9, 44, 229, 17, 222, 297, 59, 235, 104, - 214, 168, 326, 230, 94, 30, 94, 225, 197, 227, - 28, 197, 140, 316, 373, 182, 531, 10, 10, 168, - 488, 145, 54, 194, 183, 197, 197, 222, 192, 190, - 144, 191, 293, 193, 49, 32, 508, 210, 59, 146, - 59, 124, 297, 17, 59, 277, 186, 196, 188, 71, - 96, 196, 75, 168, 59, 58, 225, 34, 58, 94, - 197, 59, 144, 306, 153, 154, 155, 156, 157, 158, - 310, 160, 45, 58, 9, 165, 445, 9, 162, 9, - 182, 396, 39, 325, 28, 168, 394, 392, 225, 393, - 59, 395, 197, 414, 59, 43, 194, 183, 71, 195, - 10, 192, 190, 10, 191, 10, 193, 58, 309, 53, - 181, 144, 196, 533, 59, 232, 295, 234, 199, 186, - 55, 188, 243, 244, 245, 246, 247, 248, 249, 250, + 60, 61, 62, 196, 595, 94, 147, 364, 76, 207, + 26, 202, 207, 288, 144, 94, 462, 238, 1, 140, + 238, 498, 114, 41, 42, 496, 207, 207, 382, 46, + 101, 28, 104, 113, 238, 238, 286, 492, 492, 5, + 138, 139, 63, 54, 330, 59, 59, 59, 31, 66, + 67, 32, 104, 215, 44, 454, 200, 17, 536, 75, + 231, 207, 28, 540, 500, 239, 522, 240, 239, 238, + 240, 32, 144, 30, 59, 59, 523, 59, 306, 546, + 10, 234, 239, 239, 240, 240, 32, 331, 17, 497, + 194, 183, 231, 207, 543, 192, 190, 59, 191, 104, + 193, 238, 109, 241, 306, 242, 241, 244, 242, 227, + 244, 381, 579, 186, 170, 188, 180, 239, 177, 240, + 241, 241, 242, 242, 244, 244, 29, 48, 214, 196, + 234, 592, 473, 94, 45, 520, 177, 210, 59, 71, + 59, 124, 598, 547, 59, 277, 9, 182, 34, 239, + 306, 240, 32, 93, 59, 241, 457, 242, 144, 244, + 293, 59, 234, 94, 153, 154, 155, 156, 157, 158, + 177, 160, 10, 194, 9, 165, 49, 181, 192, 196, + 43, 94, 55, 193, 9, 145, 426, 241, 71, 242, + 59, 244, 303, 235, 59, 302, 572, 573, 26, 94, + 10, 206, 177, 146, 206, 53, 535, 304, 199, 92, + 10, 304, 91, 302, 59, 232, 56, 234, 206, 206, + 596, 587, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, 259, 261, 263, - 266, 267, 270, 271, 272, 273, 274, 275, 276, 478, - 278, 367, 64, 199, 237, 227, 357, 434, 283, 434, - 584, 255, 105, 105, 104, 104, 311, 289, 290, 56, - 397, 256, 26, 297, 256, 9, 163, 256, 163, 293, - 358, 79, 359, 163, 96, 196, 163, 124, 163, 197, - 198, 256, 256, 228, 256, 408, 256, 293, 284, 10, - 80, 10, 370, 231, 227, 403, 231, 346, 59, 480, - 480, 82, 232, 28, 319, 232, 320, 297, 321, 322, - 231, 231, 323, 324, 197, 198, 256, 256, 9, 232, - 232, 348, 85, 195, 163, 255, 227, 195, 303, 433, - 17, 411, 228, 297, 86, 298, 413, 68, 511, 88, - 560, 561, 199, 304, 10, 231, 199, 256, 256, 124, - 92, 124, 285, 91, 232, 89, 363, 31, 163, 163, - 32, 17, 368, 90, 228, 575, 198, 198, 537, 538, - 102, 124, 229, 229, 59, 201, 489, 231, 106, 297, - 142, 349, 230, 230, 59, 461, 232, 143, 195, 144, - 152, 233, 152, 350, 233, 562, 148, 152, 532, 404, - 152, 351, 152, 459, 289, 290, 458, 199, 233, 233, - 124, 189, 187, 197, 198, 124, 255, 197, 198, 419, - 149, 163, 184, 185, 59, 59, 516, 517, 471, 262, - 262, 470, 167, 262, 262, 262, 262, 262, 96, 262, - 151, 166, 135, 233, 443, 135, 104, 207, 152, 208, - 262, 262, 262, 262, 262, 262, 37, 38, 39, 523, - 59, 195, 209, 59, 124, 462, 136, 59, 212, 136, - 46, 197, 467, 468, 44, 233, 189, 187, 197, 198, - 199, 169, 152, 152, 169, 262, 262, 184, 185, 44, - 223, 59, 295, 163, 163, 163, 163, 163, 163, 169, - 296, 491, 211, 576, 96, 302, 137, 70, 71, 72, - 73, 74, 565, 502, 552, 553, 262, 262, 228, 163, - 305, 307, 112, 589, 122, 238, 312, 308, 139, 121, - 17, 139, 110, 169, 111, 313, 57, 318, 124, 57, - 328, 525, 161, 527, 353, 345, 163, 298, 59, 189, - 187, 197, 198, 44, 355, 44, 297, 297, 297, 347, - 184, 185, 361, 369, 235, 169, 162, 235, 59, 366, - 384, 385, 28, 163, 163, 163, 163, 558, 299, 163, - 68, 235, 235, 388, 161, 390, 391, 399, 57, 400, - 17, 124, 402, 163, 163, 163, 163, 406, 163, 163, - 405, 407, 17, 163, 163, 163, 163, 163, 410, 412, - 17, 416, 422, 581, 420, 113, 235, 152, 152, 152, - 152, 152, 152, 421, 425, 426, 427, 256, 256, 256, - 256, 256, 428, 387, 429, 163, 163, 256, 256, 256, - 256, 256, 256, 152, 112, 430, 122, 68, 235, 441, - 444, 121, 13, 445, 110, 453, 111, 451, 241, 171, - 454, 241, 171, 163, 241, 455, 231, 231, 423, 457, - 152, 464, 238, 465, 469, 232, 232, 171, 241, 241, - 472, 241, 473, 241, 211, 211, 218, 474, 211, 211, - 211, 211, 211, 475, 211, 483, 490, 152, 152, 152, - 152, 493, 68, 152, 262, 211, 211, 211, 211, 211, - 211, 171, 494, 241, 241, 496, 298, 152, 152, 152, - 152, 497, 152, 152, 498, 499, 504, 152, 505, 152, - 152, 152, 506, 512, 509, 513, 526, 113, 211, 529, - 211, 211, 298, 171, 241, 241, 539, 540, 546, 152, - 70, 71, 72, 73, 74, 547, 298, 298, 298, 152, - 152, 550, 557, 234, 233, 233, 234, 563, 564, 566, - 579, 211, 211, 211, 582, 10, 571, 574, 590, 585, - 234, 234, 592, 594, 524, 423, 30, 152, 298, 528, - 423, 11, 262, 262, 14, 211, 262, 262, 262, 262, - 262, 28, 117, 262, 262, 167, 262, 262, 262, 262, - 262, 262, 41, 171, 205, 234, 69, 70, 71, 72, - 73, 74, 40, 284, 285, 286, 167, 206, 104, 120, - 329, 330, 331, 171, 167, 116, 51, 57, 567, 423, - 203, 14, 15, 16, 216, 18, 19, 234, 20, 332, - 333, 334, 335, 171, 336, 337, 75, 580, 423, 338, - 87, 339, 167, 88, 21, 84, 140, 86, 586, 423, - 85, 152, 70, 71, 72, 73, 74, 274, 274, 27, - 108, 274, 274, 274, 274, 274, 274, 274, 142, 143, - 23, 114, 115, 84, 107, 217, 356, 10, 274, 274, - 274, 274, 274, 274, 178, 178, 487, 481, 178, 178, - 178, 178, 178, 178, 178, 514, 141, 58, 236, 340, - 280, 236, 57, 492, 117, 178, 178, 178, 178, 178, - 178, 274, 503, 274, 274, 236, 236, 235, 235, 572, - 194, 544, 545, 230, 365, 192, 190, 231, 191, 360, - 193, 120, 329, 330, 331, 291, 282, 116, 178, 211, - 178, 178, 213, 40, 274, 274, 274, 0, 0, 0, - 236, 332, 333, 334, 335, 0, 336, 337, 211, 0, - 0, 338, 0, 339, 13, 0, 0, 0, 0, 0, - 0, 178, 178, 178, 0, 0, 13, 0, 0, 0, - 0, 0, 236, 0, 172, 0, 0, 172, 0, 0, - 0, 0, 297, 114, 115, 0, 0, 0, 294, 0, - 13, 172, 172, 0, 241, 241, 241, 241, 241, 196, - 448, 241, 241, 0, 241, 241, 241, 241, 241, 241, - 0, 340, 0, 0, 0, 0, 0, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 172, 17, 211, 211, - 0, 211, 211, 211, 211, 211, 211, 211, 32, 32, - 0, 0, 32, 32, 32, 32, 32, 32, 32, 237, - 0, 238, 237, 247, 238, 0, 247, 0, 172, 32, - 32, 32, 32, 32, 32, 0, 237, 237, 238, 238, - 247, 247, 0, 0, 211, 211, 0, 0, 0, 211, - 211, 211, 211, 0, 211, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 32, 32, 0, 211, 211, 211, - 211, 237, 0, 238, 0, 247, 234, 234, 0, 2, - 0, 14, 15, 16, 17, 18, 19, 0, 20, 0, - 0, 248, 274, 0, 248, 32, 32, 32, 211, 0, - 211, 211, 0, 237, 21, 238, 0, 247, 248, 248, - 0, 274, 0, 14, 15, 16, 216, 18, 19, 178, - 20, 297, 0, 0, 0, 14, 15, 16, 216, 18, - 19, 211, 20, 211, 0, 0, 21, 0, 178, 0, - 0, 0, 0, 248, 0, 0, 0, 297, 21, 14, - 15, 16, 216, 18, 19, 195, 20, 305, 0, 0, - 0, 297, 297, 297, 0, 0, 0, 217, 0, 13, - 0, 0, 21, 0, 199, 248, 0, 0, 0, 217, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, - 0, 274, 274, 297, 274, 274, 274, 274, 274, 274, - 274, 0, 0, 217, 0, 0, 0, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 0, 0, 178, 178, - 0, 178, 178, 178, 178, 178, 178, 178, 218, 218, - 0, 236, 236, 218, 218, 218, 218, 218, 218, 0, - 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, - 5, 218, 218, 218, 218, 17, 17, 0, 17, 17, - 17, 17, 17, 17, 0, 17, 0, 0, 2, 2, - 2, 2, 2, 2, 0, 2, 17, 17, 17, 17, - 17, 17, 218, 32, 218, 218, 0, 0, 2, 2, - 2, 194, 2, 0, 0, 0, 192, 190, 0, 191, - 0, 193, 32, 0, 0, 0, 0, 0, 0, 17, - 0, 17, 17, 0, 186, 218, 188, 218, 0, 211, - 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, - 0, 17, 17, 17, 17, 0, 305, 305, 305, 305, - 305, 305, 305, 305, 0, 0, 0, 0, 14, 15, - 16, 17, 18, 19, 0, 20, 0, 0, 0, 305, - 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 196, 21, 32, 32, 0, 32, 32, 32, 32, 32, - 32, 32, 237, 237, 238, 238, 247, 247, 305, 0, - 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 0, 17, 211, 211, - 0, 211, 211, 211, 211, 211, 211, 211, 287, 287, - 0, 287, 287, 287, 287, 287, 287, 0, 287, 5, - 5, 5, 5, 5, 5, 0, 5, 0, 0, 287, - 287, 0, 287, 287, 287, 0, 0, 0, 0, 5, - 5, 5, 5, 0, 248, 248, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 17, 0, - 0, 0, 287, 0, 287, 287, 94, 94, 0, 0, - 94, 94, 94, 94, 94, 0, 94, 0, 0, 0, - 0, 0, 0, 218, 0, 0, 0, 94, 94, 94, - 94, 94, 0, 0, 287, 287, 287, 287, 0, 0, - 0, 0, 218, 6, 0, 0, 0, 0, 17, 17, - 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 94, 94, 0, 0, 0, 0, 17, 17, - 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 0, 0, 94, 94, 94, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 0, 0, 218, 218, 0, 218, 218, 218, 218, 218, - 218, 218, 0, 0, 0, 0, 0, 0, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, - 17, 0, 17, 17, 17, 17, 17, 17, 0, 268, - 268, 0, 0, 268, 268, 268, 268, 268, 287, 268, - 0, 287, 0, 0, 189, 187, 197, 198, 0, 0, - 268, 268, 268, 268, 268, 268, 0, 0, 270, 270, - 0, 0, 270, 270, 270, 270, 270, 0, 270, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, - 270, 270, 270, 270, 270, 268, 268, 0, 0, 0, - 0, 287, 287, 287, 0, 0, 0, 0, 0, 0, - 0, 287, 6, 6, 6, 6, 6, 6, 0, 6, - 0, 287, 287, 287, 270, 270, 268, 268, 268, 0, - 0, 287, 6, 6, 6, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 243, 0, 0, 243, 0, - 0, 243, 0, 0, 0, 270, 270, 270, 0, 0, - 0, 94, 0, 0, 0, 243, 243, 0, 243, 0, - 243, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 94, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 0, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 243, 243, 287, 287, 0, 287, 287, 287, 287, 287, - 287, 0, 0, 263, 263, 0, 0, 263, 263, 263, - 263, 263, 0, 263, 0, 0, 0, 0, 0, 0, - 0, 243, 243, 0, 263, 263, 263, 263, 263, 263, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 0, 0, - 94, 94, 0, 94, 94, 94, 94, 94, 94, 263, - 263, 261, 261, 0, 0, 261, 261, 261, 261, 261, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 261, 261, 261, 261, 261, 261, 264, 264, - 263, 263, 264, 264, 264, 264, 264, 0, 264, 0, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 264, - 264, 264, 264, 264, 264, 0, 0, 261, 261, 0, - 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 264, 264, 0, 0, 261, 261, - 0, 0, 270, 0, 0, 0, 0, 0, 265, 265, - 0, 0, 265, 265, 265, 265, 265, 0, 265, 0, - 0, 0, 0, 0, 0, 264, 264, 0, 0, 265, - 265, 265, 265, 265, 265, 0, 0, 0, 0, 0, - 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 0, 0, 268, 268, 0, 268, 268, 268, 268, - 268, 268, 0, 0, 265, 265, 0, 0, 0, 0, - 0, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 0, 0, 270, 270, 0, 270, 270, 270, 270, 270, - 270, 0, 0, 254, 254, 265, 265, 254, 254, 254, - 254, 254, 0, 254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 0, 194, 183, 409, 0, 236, 192, 190, 263, 191, - 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 170, 188, 180, 0, 254, - 254, 243, 243, 243, 243, 243, 0, 0, 243, 243, - 0, 243, 243, 243, 243, 243, 243, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 456, 0, 182, 0, - 254, 254, 0, 463, 0, 0, 261, 0, 0, 0, + 266, 267, 270, 271, 272, 273, 274, 275, 276, 243, + 278, 79, 243, 206, 237, 80, 283, 17, 306, 577, + 64, 255, 196, 316, 446, 315, 243, 243, 194, 183, + 114, 114, 236, 192, 190, 304, 191, 545, 193, 197, + 198, 113, 113, 144, 362, 206, 250, 311, 172, 250, + 172, 186, 250, 188, 237, 172, 284, 82, 172, 85, + 172, 243, 297, 96, 289, 290, 250, 250, 86, 250, + 90, 250, 88, 59, 324, 195, 325, 17, 326, 327, + 162, 236, 328, 329, 89, 182, 28, 264, 10, 17, + 264, 142, 9, 243, 199, 255, 17, 17, 411, 363, + 17, 250, 250, 237, 264, 264, 172, 264, 445, 264, + 9, 375, 488, 236, 102, 181, 319, 196, 10, 311, + 285, 124, 489, 351, 106, 195, 378, 96, 9, 28, + 143, 371, 250, 250, 298, 237, 10, 376, 144, 264, + 172, 172, 207, 207, 199, 201, 311, 289, 290, 17, + 238, 238, 59, 148, 10, 149, 320, 418, 58, 549, + 550, 58, 59, 163, 490, 197, 198, 151, 423, 304, + 264, 264, 446, 425, 412, 68, 58, 161, 166, 161, + 416, 417, 544, 311, 161, 167, 574, 161, 311, 161, + 528, 529, 471, 311, 255, 470, 321, 431, 239, 239, + 240, 240, 207, 39, 209, 162, 59, 59, 195, 208, + 58, 28, 353, 189, 187, 197, 198, 171, 172, 173, + 174, 176, 455, 161, 184, 185, 212, 199, 104, 175, + 178, 177, 179, 564, 565, 161, 241, 241, 242, 242, + 244, 244, 59, 223, 46, 59, 124, 474, 44, 59, + 112, 295, 122, 501, 479, 480, 483, 121, 296, 482, + 110, 96, 111, 44, 106, 302, 305, 106, 102, 161, + 161, 102, 354, 59, 317, 172, 172, 172, 172, 172, + 172, 404, 162, 503, 355, 588, 402, 400, 28, 401, + 57, 403, 356, 57, 104, 514, 307, 104, 197, 198, + 366, 172, 307, 195, 105, 601, 144, 105, 68, 144, + 145, 296, 296, 145, 296, 296, 296, 296, 296, 296, + 124, 296, 199, 537, 308, 539, 318, 44, 172, 44, + 59, 323, 296, 296, 206, 296, 296, 296, 306, 333, + 434, 161, 57, 113, 69, 70, 71, 72, 73, 74, + 59, 148, 350, 352, 148, 172, 172, 172, 172, 570, + 358, 172, 360, 367, 306, 296, 368, 296, 296, 374, + 405, 369, 377, 124, 392, 172, 172, 172, 172, 393, + 172, 172, 243, 243, 75, 172, 172, 172, 172, 172, + 398, 189, 187, 197, 198, 593, 396, 296, 296, 296, + 296, 399, 184, 185, 161, 161, 161, 161, 161, 161, + 306, 407, 250, 250, 250, 250, 250, 172, 172, 250, + 250, 408, 250, 250, 250, 250, 250, 250, 413, 410, + 161, 112, 414, 122, 37, 38, 39, 415, 121, 422, + 424, 110, 428, 111, 432, 172, 306, 306, 306, 433, + 264, 264, 264, 264, 264, 438, 181, 161, 437, 181, + 264, 264, 264, 264, 264, 264, 439, 440, 441, 442, + 453, 307, 456, 181, 181, 465, 457, 152, 70, 71, + 72, 73, 74, 463, 161, 161, 161, 161, 466, 68, + 161, 476, 467, 477, 485, 484, 469, 307, 481, 486, + 487, 495, 502, 10, 161, 161, 161, 161, 181, 161, + 161, 307, 307, 307, 161, 505, 161, 161, 161, 245, + 506, 509, 245, 13, 113, 508, 510, 511, 516, 518, + 117, 296, 517, 521, 296, 524, 245, 245, 178, 525, + 181, 178, 538, 307, 220, 220, 161, 161, 220, 220, + 220, 220, 220, 551, 220, 559, 178, 120, 334, 335, + 336, 541, 562, 116, 552, 220, 220, 220, 220, 220, + 220, 245, 395, 575, 161, 558, 569, 337, 338, 339, + 340, 578, 341, 342, 296, 296, 296, 343, 576, 344, + 178, 583, 586, 591, 296, 594, 597, 602, 220, 604, + 220, 220, 606, 245, 296, 296, 296, 11, 30, 14, + 435, 220, 246, 28, 296, 246, 176, 41, 180, 114, + 115, 247, 178, 306, 247, 214, 40, 293, 98, 246, + 246, 220, 220, 220, 294, 295, 215, 68, 247, 247, + 180, 113, 176, 99, 51, 283, 283, 345, 57, 283, + 283, 283, 283, 283, 283, 283, 212, 180, 152, 70, + 71, 72, 73, 74, 246, 87, 283, 283, 283, 283, + 283, 283, 176, 247, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 88, 10, 296, 296, 149, 296, 296, + 296, 296, 296, 296, 84, 86, 246, 85, 151, 283, + 176, 283, 283, 152, 256, 247, 27, 256, 108, 23, + 84, 117, 14, 15, 16, 216, 18, 19, 107, 20, + 361, 256, 256, 493, 499, 96, 526, 58, 57, 141, + 504, 435, 283, 283, 283, 21, 435, 280, 120, 334, + 335, 336, 194, 183, 116, 419, 515, 192, 190, 584, + 191, 180, 193, 556, 180, 230, 256, 365, 337, 338, + 339, 340, 557, 341, 342, 186, 217, 188, 343, 180, + 344, 231, 373, 187, 187, 291, 213, 187, 187, 187, + 187, 187, 187, 187, 282, 435, 40, 0, 256, 211, + 0, 96, 306, 0, 187, 187, 187, 187, 187, 187, + 114, 115, 0, 180, 435, 228, 137, 70, 71, 72, + 73, 74, 238, 0, 0, 435, 220, 220, 306, 220, + 0, 220, 220, 220, 220, 0, 220, 187, 345, 187, + 187, 196, 306, 306, 306, 180, 0, 0, 220, 220, + 220, 220, 220, 0, 0, 0, 0, 0, 0, 257, + 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, + 187, 187, 187, 0, 306, 299, 257, 257, 0, 0, + 220, 0, 220, 220, 32, 32, 0, 0, 32, 32, + 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 245, 245, 0, 32, 32, 32, 32, 32, + 32, 257, 0, 220, 0, 220, 0, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 0, 17, 220, 220, + 283, 220, 220, 220, 220, 220, 220, 220, 32, 0, + 32, 32, 0, 257, 0, 0, 0, 0, 0, 283, + 0, 0, 227, 227, 0, 0, 0, 227, 227, 227, + 227, 227, 227, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 238, 227, 227, 227, 227, 0, + 0, 194, 0, 0, 0, 0, 192, 190, 0, 191, + 13, 193, 0, 0, 0, 246, 246, 0, 0, 0, + 0, 0, 0, 0, 247, 247, 227, 0, 227, 227, + 0, 0, 0, 0, 0, 0, 0, 0, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 195, 0, 283, + 283, 0, 283, 283, 283, 283, 283, 283, 283, 227, + 0, 227, 0, 0, 0, 0, 199, 0, 0, 220, + 220, 0, 0, 220, 220, 220, 220, 220, 187, 220, + 14, 15, 16, 17, 18, 19, 0, 20, 0, 0, + 196, 0, 220, 220, 220, 220, 0, 187, 0, 0, + 0, 0, 0, 21, 0, 227, 227, 256, 256, 227, + 227, 227, 227, 227, 227, 227, 13, 0, 0, 0, + 0, 220, 0, 220, 0, 0, 220, 0, 227, 227, + 227, 227, 0, 0, 0, 189, 187, 197, 198, 0, + 220, 0, 0, 0, 0, 0, 184, 185, 0, 0, + 218, 0, 0, 0, 0, 0, 220, 0, 220, 227, + 0, 0, 227, 0, 0, 0, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 0, 0, 187, 187, 32, + 187, 187, 187, 187, 187, 187, 187, 0, 0, 0, + 0, 0, 227, 2, 227, 0, 0, 0, 32, 14, + 15, 16, 17, 18, 19, 0, 20, 0, 0, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 0, 17, + 220, 220, 21, 220, 220, 220, 220, 220, 220, 220, + 0, 0, 0, 0, 17, 17, 0, 17, 17, 17, + 17, 17, 17, 0, 17, 0, 0, 227, 0, 0, + 0, 0, 257, 257, 0, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 227, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 195, 0, 32, 32, + 0, 32, 32, 32, 32, 32, 32, 32, 17, 0, + 17, 17, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 15, 16, 216, 18, + 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 17, 17, 17, 17, 0, 0, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 220, 0, 227, 227, 0, 227, + 227, 227, 227, 227, 227, 227, 0, 0, 0, 217, + 0, 0, 0, 220, 0, 0, 197, 198, 0, 0, + 0, 94, 94, 0, 0, 94, 94, 94, 94, 94, + 227, 94, 2, 2, 2, 2, 2, 2, 0, 2, + 0, 0, 94, 94, 94, 94, 94, 0, 0, 227, + 0, 0, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 196, 0, 0, 264, 0, 0, 263, 263, 0, 0, - 263, 263, 263, 263, 263, 0, 0, 263, 263, 0, - 263, 263, 263, 263, 263, 263, 0, 194, 183, 0, - 0, 0, 192, 190, 0, 191, 515, 193, 0, 0, - 0, 0, 0, 0, 522, 0, 0, 0, 0, 386, - 186, 170, 188, 180, 0, 530, 0, 0, 0, 0, - 0, 0, 0, 0, 261, 261, 0, 0, 261, 261, - 261, 261, 261, 265, 0, 261, 261, 0, 261, 261, - 261, 261, 261, 261, 182, 0, 559, 0, 0, 0, - 0, 264, 264, 0, 0, 264, 264, 264, 264, 264, - 0, 0, 264, 264, 0, 264, 264, 264, 264, 264, - 264, 0, 0, 0, 181, 578, 196, 0, 0, 0, - 0, 0, 0, 0, 194, 183, 0, 0, 449, 192, - 190, 0, 191, 588, 193, 0, 0, 0, 591, 0, - 0, 0, 0, 593, 0, 0, 0, 186, 170, 188, - 180, 0, 0, 0, 0, 0, 0, 0, 254, 0, - 0, 265, 265, 0, 0, 265, 265, 265, 265, 265, - 0, 0, 265, 265, 0, 265, 265, 265, 265, 265, - 265, 182, 0, 0, 194, 183, 195, 0, 0, 192, - 190, 0, 191, 0, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 199, 460, 186, 170, 188, - 180, 181, 0, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 94, 0, + 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 0, 17, 220, 220, 0, 220, 220, 220, 220, + 220, 220, 220, 0, 17, 0, 0, 17, 94, 94, + 94, 0, 0, 0, 0, 0, 0, 0, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 0, 0, 227, + 227, 0, 227, 227, 227, 227, 227, 227, 227, 277, + 277, 0, 0, 277, 277, 277, 277, 277, 0, 277, + 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, + 277, 277, 277, 277, 277, 277, 0, 17, 0, 0, + 0, 314, 0, 0, 0, 0, 0, 17, 17, 17, + 0, 0, 0, 0, 279, 279, 0, 17, 279, 279, + 279, 279, 279, 0, 279, 277, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 279, 279, 279, 279, 279, + 279, 271, 271, 0, 0, 271, 271, 271, 271, 271, + 0, 271, 0, 0, 0, 0, 277, 277, 277, 0, + 0, 0, 271, 271, 271, 271, 271, 271, 0, 0, + 279, 279, 0, 0, 0, 0, 0, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, + 0, 17, 17, 17, 17, 17, 17, 271, 271, 0, + 0, 279, 279, 279, 0, 0, 0, 0, 0, 13, + 0, 272, 272, 0, 0, 272, 272, 272, 272, 272, + 0, 272, 0, 0, 0, 0, 94, 0, 271, 271, + 0, 0, 272, 272, 272, 272, 272, 272, 0, 0, + 0, 0, 0, 294, 94, 94, 0, 0, 0, 0, + 0, 270, 270, 0, 94, 270, 270, 270, 270, 270, + 0, 270, 0, 0, 0, 0, 0, 272, 272, 0, + 314, 0, 270, 270, 270, 270, 270, 270, 0, 273, + 273, 0, 0, 273, 273, 273, 273, 273, 0, 273, + 314, 314, 314, 314, 314, 314, 314, 314, 272, 272, + 273, 273, 273, 273, 273, 273, 0, 270, 270, 0, + 0, 0, 0, 314, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 0, 0, 94, 94, 0, 94, 94, + 94, 94, 94, 94, 0, 273, 273, 0, 270, 270, + 0, 0, 314, 0, 277, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 277, 0, 0, 273, 273, 0, 274, + 274, 0, 0, 274, 274, 274, 274, 274, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, + 274, 274, 274, 274, 274, 274, 0, 0, 14, 15, + 16, 216, 18, 19, 0, 20, 0, 0, 279, 0, + 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, + 0, 21, 0, 0, 0, 274, 274, 0, 0, 0, + 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 0, 0, 277, 277, 0, 277, 277, 277, 277, + 277, 277, 217, 0, 0, 0, 274, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 279, 279, 279, + 279, 279, 279, 279, 279, 279, 272, 0, 279, 279, + 0, 279, 279, 279, 279, 279, 279, 0, 0, 0, + 0, 0, 0, 0, 271, 271, 0, 0, 271, 271, + 271, 271, 271, 0, 0, 271, 271, 0, 271, 271, + 271, 271, 271, 271, 0, 0, 270, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, + 5, 5, 5, 5, 0, 5, 0, 194, 183, 0, + 0, 236, 192, 190, 273, 191, 0, 193, 5, 5, + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 186, 170, 188, 180, 272, 272, 0, 0, 272, 272, + 272, 272, 272, 0, 0, 272, 272, 0, 272, 272, + 272, 272, 272, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 182, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 270, 270, 0, 0, 270, 270, + 270, 270, 270, 0, 0, 270, 270, 0, 270, 270, + 270, 270, 270, 270, 181, 0, 196, 0, 0, 421, + 460, 0, 273, 273, 274, 0, 273, 273, 273, 273, + 273, 0, 0, 273, 273, 0, 273, 273, 273, 273, + 273, 273, 0, 0, 0, 263, 263, 0, 0, 263, + 263, 263, 263, 263, 0, 263, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 263, 263, 263, 263, + 263, 263, 6, 0, 0, 0, 468, 0, 0, 0, + 0, 194, 183, 475, 0, 0, 192, 190, 0, 191, + 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 263, 263, 394, 186, 170, 188, 180, 0, 0, + 0, 0, 274, 274, 0, 0, 274, 274, 274, 274, + 274, 0, 0, 274, 274, 0, 274, 274, 274, 274, + 274, 274, 263, 263, 0, 194, 183, 0, 182, 461, + 192, 190, 0, 191, 0, 193, 527, 0, 0, 0, + 0, 0, 0, 0, 534, 0, 0, 0, 186, 170, + 188, 180, 0, 252, 0, 542, 252, 0, 181, 252, + 196, 0, 0, 0, 0, 14, 15, 16, 216, 18, + 19, 0, 20, 252, 252, 0, 252, 0, 252, 194, + 183, 0, 182, 0, 192, 190, 571, 191, 21, 193, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 472, 186, 170, 188, 180, 0, 0, 252, 252, + 0, 199, 181, 0, 196, 590, 0, 0, 0, 217, + 0, 0, 194, 183, 0, 0, 507, 192, 190, 0, + 191, 0, 193, 600, 0, 0, 182, 0, 603, 252, + 252, 0, 0, 605, 0, 186, 170, 188, 180, 0, + 0, 6, 6, 6, 6, 6, 6, 0, 6, 0, + 0, 0, 0, 0, 0, 0, 181, 0, 196, 0, + 0, 6, 6, 6, 6, 0, 0, 0, 0, 182, + 189, 187, 197, 198, 171, 172, 173, 174, 176, 0, + 0, 184, 185, 0, 168, 169, 175, 178, 177, 179, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, + 263, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 182, 0, 0, 0, 0, 254, 254, 0, 0, - 254, 254, 254, 254, 254, 0, 0, 254, 254, 0, - 254, 254, 254, 254, 254, 254, 0, 0, 0, 0, - 0, 181, 0, 196, 189, 187, 197, 198, 171, 172, + 0, 194, 183, 0, 0, 512, 192, 190, 0, 191, + 0, 193, 0, 0, 0, 0, 195, 0, 0, 0, + 0, 0, 0, 0, 186, 170, 188, 180, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 194, 183, + 0, 0, 513, 192, 190, 0, 191, 0, 193, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, + 0, 186, 170, 188, 180, 0, 0, 0, 263, 263, + 195, 0, 263, 263, 263, 263, 263, 0, 0, 263, + 263, 0, 263, 263, 263, 263, 263, 263, 181, 199, + 196, 0, 0, 0, 0, 182, 0, 0, 0, 0, + 0, 0, 0, 0, 189, 187, 197, 198, 171, 172, 173, 174, 176, 0, 0, 184, 185, 0, 168, 169, - 175, 178, 177, 179, 0, 0, 0, 0, 0, 194, - 183, 0, 195, 495, 192, 190, 0, 191, 0, 193, + 175, 178, 177, 179, 195, 181, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 199, 186, 170, 188, 180, 194, 183, 0, 0, - 500, 192, 190, 0, 191, 0, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 170, 188, 180, 194, 183, 0, 182, 501, 192, 190, - 0, 191, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 186, 170, 188, 180, - 0, 0, 0, 182, 0, 0, 181, 0, 196, 0, - 189, 187, 197, 198, 171, 172, 173, 174, 176, 195, - 0, 184, 185, 0, 168, 169, 175, 178, 177, 179, - 182, 0, 0, 181, 0, 196, 0, 0, 199, 0, + 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 189, 187, + 197, 198, 171, 172, 173, 174, 176, 195, 0, 184, + 185, 0, 168, 169, 175, 178, 177, 179, 0, 0, + 0, 0, 0, 0, 0, 0, 199, 0, 0, 252, + 252, 252, 252, 252, 0, 0, 252, 252, 0, 252, + 252, 252, 252, 252, 252, 0, 0, 0, 0, 0, + 0, 0, 189, 187, 197, 198, 171, 172, 173, 174, + 176, 0, 0, 184, 185, 0, 168, 169, 175, 178, + 177, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 189, 187, 197, 198, 171, + 172, 173, 174, 176, 0, 0, 184, 185, 0, 168, + 169, 175, 178, 177, 179, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 181, 0, 196, 0, 0, 0, 0, 0, 0, 0, - 194, 183, 0, 0, 548, 192, 190, 0, 191, 195, - 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 170, 188, 180, 0, 199, 0, + 0, 0, 0, 0, 0, 199, 0, 194, 183, 0, + 0, 560, 192, 190, 0, 191, 0, 193, 0, 0, + 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, + 186, 170, 188, 180, 0, 0, 0, 0, 0, 0, + 0, 0, 199, 0, 194, 183, 0, 0, 561, 192, + 190, 0, 191, 0, 193, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 182, 0, 0, 186, 170, 188, + 180, 0, 0, 0, 189, 187, 197, 198, 171, 172, + 173, 174, 176, 0, 0, 184, 185, 0, 168, 169, + 175, 178, 177, 179, 181, 0, 196, 0, 0, 0, + 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 189, 187, 197, 198, 171, 172, 173, 174, 176, + 0, 0, 184, 185, 0, 168, 169, 175, 178, 177, + 179, 181, 0, 196, 0, 0, 0, 0, 0, 0, + 0, 194, 183, 0, 0, 0, 192, 190, 0, 191, + 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 585, 186, 170, 188, 180, 194, 183, + 0, 0, 0, 192, 190, 0, 191, 0, 193, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, + 0, 186, 170, 188, 180, 0, 269, 269, 182, 0, + 269, 269, 269, 269, 269, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 269, 269, + 269, 269, 269, 0, 0, 182, 0, 0, 181, 0, + 196, 0, 0, 0, 0, 0, 0, 260, 260, 0, + 0, 260, 260, 260, 260, 260, 0, 260, 0, 0, + 0, 0, 269, 269, 0, 181, 0, 196, 260, 260, + 260, 260, 260, 260, 261, 261, 0, 0, 261, 261, + 261, 261, 261, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 195, 269, 269, 261, 261, 261, 261, 261, + 261, 0, 0, 260, 260, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 262, 262, 0, 0, 262, + 262, 262, 262, 262, 0, 262, 0, 0, 0, 195, + 261, 261, 0, 0, 260, 260, 262, 262, 262, 262, + 262, 262, 0, 0, 0, 0, 0, 0, 199, 0, + 0, 0, 0, 258, 0, 0, 258, 0, 258, 258, + 258, 261, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 262, 262, 258, 258, 258, 258, 258, 258, 0, + 189, 187, 197, 198, 171, 172, 173, 174, 176, 0, + 0, 184, 185, 0, 168, 169, 175, 178, 177, 179, + 0, 0, 262, 262, 0, 0, 0, 0, 258, 258, 0, 0, 0, 0, 0, 0, 0, 189, 187, 197, - 198, 171, 172, 173, 174, 176, 0, 0, 184, 185, - 0, 168, 169, 175, 178, 177, 179, 182, 0, 0, - 194, 183, 0, 0, 549, 192, 190, 0, 191, 0, + 198, 171, 172, 173, 174, 176, 195, 0, 184, 185, + 0, 168, 169, 175, 178, 177, 179, 0, 0, 258, + 258, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 194, 183, 0, 195, 0, 192, 190, 0, 191, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 170, 188, 180, 181, 0, 196, - 0, 0, 0, 0, 0, 0, 0, 189, 187, 197, - 198, 171, 172, 173, 174, 176, 0, 0, 184, 185, - 0, 168, 169, 175, 178, 177, 179, 182, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 260, 260, 0, 0, 260, 260, - 260, 260, 260, 199, 260, 0, 0, 181, 0, 196, - 0, 195, 0, 0, 0, 260, 260, 260, 260, 260, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 194, 183, 195, 0, - 0, 192, 190, 0, 191, 0, 193, 0, 0, 0, - 260, 260, 0, 0, 0, 0, 0, 199, 573, 186, - 170, 188, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 189, 187, 197, 198, 171, 172, 173, 174, - 176, 260, 260, 184, 185, 0, 168, 169, 175, 178, - 177, 179, 0, 182, 0, 0, 0, 0, 0, 189, - 187, 197, 198, 171, 172, 173, 174, 176, 0, 0, - 184, 185, 0, 168, 169, 175, 178, 177, 179, 0, - 0, 0, 0, 181, 0, 196, 189, 187, 197, 198, - 171, 172, 173, 174, 176, 195, 0, 184, 185, 0, - 168, 169, 175, 178, 177, 179, 0, 0, 0, 0, - 0, 0, 0, 0, 199, 0, 194, 183, 0, 0, - 0, 192, 190, 0, 191, 0, 193, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 587, 0, 186, - 170, 188, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 194, 183, 0, 195, 0, 192, 190, 0, - 191, 0, 193, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 182, 199, 186, 170, 188, 180, 0, + 0, 0, 199, 186, 170, 188, 180, 194, 183, 0, + 0, 0, 192, 190, 0, 191, 0, 193, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 186, 170, 188, 180, 0, 0, 0, 182, 0, 0, + 0, 0, 0, 0, 189, 187, 197, 198, 171, 172, + 173, 174, 176, 0, 0, 184, 185, 0, 168, 169, + 175, 178, 177, 179, 182, 0, 0, 181, 0, 196, + 0, 189, 187, 197, 198, 171, 172, 173, 174, 176, + 0, 0, 184, 185, 0, 168, 169, 175, 178, 177, + 179, 0, 0, 0, 181, 0, 196, 0, 0, 269, + 269, 0, 0, 269, 269, 269, 269, 269, 0, 0, + 269, 269, 0, 269, 269, 269, 269, 269, 269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 260, 0, 0, 260, 260, 260, 260, 260, 0, + 0, 260, 260, 0, 260, 260, 260, 260, 260, 260, + 0, 0, 0, 0, 0, 0, 0, 261, 261, 0, + 0, 261, 261, 261, 261, 261, 0, 0, 261, 261, + 0, 261, 261, 261, 261, 261, 261, 0, 0, 0, + 112, 0, 122, 0, 0, 0, 0, 121, 0, 0, + 110, 0, 111, 0, 0, 0, 0, 0, 262, 262, + 0, 0, 262, 262, 262, 262, 262, 264, 0, 262, + 262, 0, 262, 262, 262, 262, 262, 262, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 258, 258, 0, 68, 258, + 258, 258, 258, 258, 0, 195, 258, 258, 0, 258, + 258, 258, 258, 258, 258, 0, 259, 0, 0, 259, + 0, 259, 259, 259, 199, 0, 0, 0, 0, 0, + 0, 0, 195, 113, 0, 0, 259, 259, 259, 259, + 259, 259, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 251, 0, + 0, 251, 0, 0, 251, 0, 0, 0, 0, 0, + 0, 259, 259, 0, 0, 0, 0, 0, 251, 251, + 0, 251, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 187, 197, 198, 171, 172, 173, - 174, 176, 0, 0, 184, 185, 0, 168, 169, 175, - 178, 177, 179, 181, 0, 196, 0, 251, 251, 182, - 0, 251, 251, 251, 251, 251, 0, 251, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 251, 251, - 251, 251, 251, 251, 0, 0, 0, 0, 0, 181, - 0, 196, 0, 189, 187, 197, 198, 171, 172, 173, - 174, 176, 0, 0, 184, 185, 0, 168, 169, 175, + 174, 176, 259, 259, 184, 185, 0, 168, 169, 175, 178, 177, 179, 251, 251, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 252, 252, 0, 0, 252, 252, 252, 252, 252, - 199, 252, 0, 0, 251, 251, 0, 0, 0, 0, - 0, 0, 252, 252, 252, 252, 252, 252, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 260, 260, 0, - 0, 260, 260, 260, 260, 260, 0, 0, 260, 260, - 0, 260, 260, 260, 260, 260, 260, 252, 252, 0, + 189, 187, 197, 198, 171, 172, 173, 174, 176, 0, + 0, 184, 185, 0, 0, 169, 175, 178, 177, 179, + 253, 0, 0, 253, 251, 251, 253, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 268, 0, 0, 268, + 253, 253, 268, 253, 0, 253, 0, 152, 70, 71, + 72, 73, 74, 0, 0, 0, 268, 268, 0, 268, + 249, 268, 0, 249, 0, 0, 249, 0, 0, 0, + 0, 0, 0, 10, 0, 253, 253, 0, 0, 205, + 249, 249, 205, 249, 0, 249, 0, 0, 0, 0, + 0, 268, 268, 0, 0, 0, 205, 205, 0, 205, + 117, 205, 0, 0, 0, 267, 253, 253, 267, 0, + 0, 267, 0, 0, 0, 249, 249, 0, 0, 0, + 0, 0, 268, 268, 0, 267, 267, 120, 267, 248, + 267, 205, 248, 116, 0, 248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 265, 249, 249, 265, 248, + 248, 265, 248, 0, 248, 0, 0, 0, 0, 0, + 267, 267, 0, 205, 0, 265, 265, 0, 265, 0, + 265, 0, 0, 0, 254, 0, 0, 254, 0, 0, + 254, 0, 0, 0, 248, 248, 0, 0, 265, 114, + 115, 267, 267, 0, 254, 254, 0, 254, 0, 254, + 265, 265, 266, 0, 0, 266, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 248, 248, 0, 0, 266, + 266, 0, 266, 0, 266, 0, 0, 0, 0, 254, + 254, 265, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 187, 197, 198, 171, 172, 173, 174, 176, 252, 252, - 184, 185, 0, 168, 169, 175, 178, 177, 179, 253, - 253, 0, 0, 253, 253, 253, 253, 253, 0, 253, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 253, 253, 253, 253, 253, 0, 0, 0, 0, - 199, 0, 0, 0, 194, 183, 0, 0, 0, 192, - 190, 0, 191, 0, 193, 0, 0, 195, 0, 0, - 0, 0, 0, 0, 0, 253, 253, 186, 170, 188, - 180, 0, 0, 0, 0, 0, 199, 0, 0, 0, - 194, 183, 0, 0, 0, 192, 190, 0, 191, 0, - 193, 0, 0, 0, 0, 0, 253, 253, 0, 0, - 0, 182, 0, 186, 170, 188, 180, 0, 0, 189, - 187, 197, 198, 171, 172, 173, 174, 176, 0, 0, - 184, 185, 0, 168, 169, 175, 178, 177, 179, 0, - 0, 181, 0, 196, 0, 0, 0, 182, 0, 0, - 0, 0, 0, 0, 0, 189, 187, 197, 198, 171, - 172, 173, 174, 176, 0, 0, 184, 185, 0, 168, - 169, 175, 178, 177, 179, 249, 0, 181, 249, 196, - 249, 249, 249, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 249, 249, 249, 249, - 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 251, 251, 0, 0, 251, 251, 251, 251, 251, 0, + 0, 0, 0, 0, 266, 266, 0, 0, 259, 259, + 254, 254, 259, 259, 259, 259, 259, 0, 0, 259, + 259, 0, 259, 259, 259, 259, 259, 259, 255, 0, + 0, 255, 0, 0, 255, 266, 266, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, + 0, 255, 0, 255, 251, 251, 251, 251, 251, 0, 0, 251, 251, 0, 251, 251, 251, 251, 251, 251, - 249, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, - 0, 0, 250, 0, 250, 250, 250, 0, 0, 0, - 0, 249, 249, 0, 0, 0, 0, 0, 0, 250, - 250, 250, 250, 250, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 252, 252, 0, 0, 252, 252, - 252, 252, 252, 0, 0, 252, 252, 0, 252, 252, - 252, 252, 252, 252, 250, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, - 242, 0, 0, 242, 0, 0, 0, 0, 0, 195, - 0, 0, 0, 0, 0, 250, 250, 242, 242, 0, - 242, 0, 242, 0, 0, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 244, 0, 0, 244, 0, 0, - 244, 0, 0, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 242, 242, 244, 244, 0, 244, 0, 244, - 0, 0, 253, 253, 199, 0, 253, 253, 253, 253, + 0, 0, 194, 183, 0, 0, 0, 192, 190, 0, + 191, 0, 193, 255, 255, 0, 194, 0, 0, 0, + 0, 192, 190, 194, 191, 186, 193, 188, 192, 190, + 0, 191, 0, 193, 0, 0, 0, 0, 0, 186, + 0, 188, 0, 0, 255, 255, 186, 0, 188, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 253, 253, 253, 253, 253, 0, 0, 253, 253, 0, 253, 253, 253, 253, - 253, 253, 0, 242, 242, 0, 0, 0, 0, 244, - 244, 0, 0, 0, 0, 0, 0, 189, 187, 197, - 198, 171, 172, 173, 174, 176, 0, 0, 184, 185, - 0, 0, 169, 175, 178, 177, 179, 0, 0, 0, - 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 189, 187, 197, 198, 171, 172, 173, - 174, 176, 0, 0, 184, 185, 0, 0, 0, 175, - 178, 177, 179, 259, 0, 0, 259, 0, 0, 259, + 253, 253, 268, 268, 268, 268, 268, 0, 0, 268, + 268, 196, 268, 268, 268, 268, 268, 268, 0, 0, + 0, 0, 0, 0, 0, 196, 249, 249, 249, 249, + 249, 0, 196, 249, 249, 0, 249, 249, 249, 249, + 249, 249, 205, 205, 205, 205, 205, 0, 0, 0, + 0, 0, 205, 205, 205, 205, 205, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 259, 0, 259, 0, 259, 0, - 0, 0, 240, 0, 0, 240, 0, 0, 240, 0, + 0, 267, 267, 267, 267, 267, 0, 0, 267, 267, + 0, 267, 267, 267, 267, 267, 267, 0, 0, 0, + 0, 0, 0, 0, 0, 248, 248, 248, 248, 248, + 0, 0, 248, 248, 0, 248, 248, 248, 248, 248, + 248, 265, 265, 265, 265, 265, 0, 0, 0, 0, + 0, 265, 265, 265, 265, 265, 265, 112, 0, 122, + 0, 0, 0, 0, 121, 0, 0, 110, 0, 111, + 254, 254, 254, 254, 254, 0, 0, 0, 0, 0, + 254, 254, 254, 254, 254, 254, 268, 0, 0, 0, + 0, 0, 0, 0, 0, 266, 266, 266, 266, 266, + 0, 0, 0, 0, 0, 266, 266, 266, 266, 266, + 266, 0, 112, 0, 122, 68, 0, 0, 0, 121, + 0, 112, 110, 122, 111, 0, 0, 195, 121, 0, + 0, 110, 0, 111, 0, 0, 0, 109, 0, 0, + 0, 195, 0, 0, 0, 0, 199, 0, 195, 260, + 113, 0, 112, 0, 122, 0, 0, 0, 0, 121, + 199, 0, 110, 0, 111, 0, 0, 199, 0, 0, + 68, 0, 0, 0, 255, 255, 255, 255, 255, 68, + 262, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 240, 0, 240, 0, 240, 259, 259, - 0, 0, 0, 0, 0, 0, 0, 249, 249, 0, - 0, 249, 249, 249, 249, 249, 0, 0, 249, 249, - 0, 249, 249, 249, 249, 249, 249, 240, 240, 259, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 258, 0, 0, 258, - 0, 0, 258, 0, 0, 0, 0, 0, 240, 240, - 0, 0, 0, 0, 0, 0, 258, 258, 0, 258, - 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 250, 250, 0, 0, 250, 250, 250, 250, 250, - 0, 0, 250, 250, 0, 250, 250, 250, 250, 250, - 250, 258, 258, 0, 0, 0, 194, 0, 0, 0, - 0, 192, 190, 0, 191, 0, 193, 0, 0, 0, - 239, 0, 0, 239, 0, 0, 239, 0, 0, 186, - 0, 188, 258, 258, 0, 0, 0, 0, 0, 0, - 239, 239, 0, 239, 0, 239, 0, 0, 0, 0, - 0, 0, 0, 242, 242, 242, 242, 242, 0, 0, - 242, 242, 0, 242, 242, 242, 242, 242, 242, 0, - 0, 0, 0, 0, 0, 239, 239, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, + 68, 0, 0, 0, 113, 189, 187, 197, 198, 0, + 0, 0, 0, 0, 0, 0, 184, 185, 0, 189, + 187, 197, 198, 0, 0, 0, 189, 187, 197, 198, + 184, 185, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 244, 244, 244, 244, 244, 196, 0, 244, 244, 0, - 244, 244, 244, 244, 244, 244, 239, 239, 245, 0, - 0, 245, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 112, 0, 122, 245, 245, - 0, 245, 121, 245, 0, 110, 0, 111, 0, 0, - 0, 0, 0, 0, 0, 246, 0, 0, 246, 0, - 0, 246, 264, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 245, 245, 246, 246, 0, 246, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 68, 0, 255, 0, 0, 255, 0, - 0, 0, 0, 0, 245, 245, 0, 0, 0, 0, - 246, 246, 255, 255, 0, 255, 0, 255, 0, 259, - 259, 259, 259, 259, 0, 0, 259, 259, 113, 259, - 259, 259, 259, 259, 259, 0, 0, 0, 0, 0, - 0, 246, 246, 0, 0, 0, 0, 255, 240, 240, - 240, 240, 240, 0, 0, 240, 240, 0, 240, 240, - 240, 240, 240, 240, 257, 0, 0, 257, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 0, 257, 257, 0, 257, 0, 257, 196, 0, 0, - 196, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 196, 196, 0, 196, 0, 196, - 199, 0, 0, 0, 0, 0, 257, 257, 0, 0, - 0, 0, 258, 258, 258, 258, 258, 0, 0, 258, - 258, 0, 258, 258, 258, 258, 258, 258, 0, 196, - 0, 0, 0, 0, 0, 0, 0, 257, 257, 0, + 0, 0, 0, 0, 0, 112, 0, 122, 0, 0, + 0, 0, 121, 0, 0, 110, 0, 111, 0, 0, + 0, 0, 0, 0, 152, 70, 71, 72, 73, 74, + 0, 0, 0, 0, 0, 0, 112, 0, 122, 0, + 0, 0, 0, 121, 0, 112, 110, 122, 111, 0, + 10, 0, 121, 0, 0, 110, 0, 111, 0, 0, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 0, 118, + 119, 71, 72, 73, 74, 0, 0, 0, 152, 70, + 71, 72, 73, 74, 68, 370, 0, 0, 113, 0, + 0, 0, 0, 68, 120, 10, 0, 0, 0, 0, + 116, 0, 0, 0, 10, 0, 0, 0, 0, 152, + 70, 71, 72, 73, 74, 0, 0, 0, 0, 113, + 0, 0, 117, 0, 0, 0, 0, 0, 113, 0, + 0, 117, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, + 0, 0, 0, 0, 269, 116, 114, 115, 120, 0, + 0, 0, 117, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 152, 70, 71, 72, 73, 74, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 0, 0, 189, - 187, 197, 198, 0, 0, 0, 0, 0, 10, 0, - 184, 185, 0, 0, 0, 0, 239, 239, 239, 239, - 239, 0, 0, 239, 239, 0, 239, 239, 239, 239, - 239, 239, 0, 0, 0, 117, 112, 0, 122, 0, - 0, 0, 0, 121, 0, 0, 110, 0, 111, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, + 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 120, 0, 112, 268, 122, 0, 116, 0, - 0, 121, 0, 112, 110, 122, 111, 0, 0, 0, - 121, 0, 0, 110, 0, 111, 0, 0, 0, 109, - 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 0, 260, 0, 0, 245, 245, 245, 245, 245, 0, - 0, 0, 0, 0, 245, 245, 245, 245, 245, 245, - 0, 0, 68, 265, 114, 115, 0, 0, 112, 113, - 122, 68, 0, 0, 0, 121, 0, 0, 110, 0, - 111, 246, 246, 246, 246, 246, 0, 0, 0, 0, - 0, 246, 246, 246, 246, 246, 246, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 255, 255, 255, 0, 0, 0, 68, 0, 255, 255, - 255, 255, 255, 255, 112, 0, 122, 0, 0, 0, - 0, 121, 0, 0, 110, 0, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, - 0, 113, 262, 0, 0, 0, 0, 0, 112, 0, - 122, 0, 0, 0, 0, 121, 0, 0, 110, 0, - 111, 0, 0, 0, 0, 0, 0, 257, 257, 257, - 257, 257, 68, 0, 0, 0, 0, 257, 257, 257, - 257, 257, 257, 152, 70, 71, 72, 73, 74, 0, - 196, 196, 196, 196, 196, 0, 0, 0, 0, 0, - 196, 196, 196, 196, 196, 196, 68, 113, 0, 10, - 0, 118, 119, 71, 72, 73, 74, 0, 0, 0, - 152, 70, 71, 72, 73, 74, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 10, 0, 0, - 0, 113, 0, 0, 0, 0, 10, 0, 0, 0, + 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, + 114, 115, 152, 70, 71, 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 120, 117, 0, 0, 0, 0, 116, - 0, 0, 0, 117, 0, 152, 70, 71, 72, 73, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 120, 0, 0, 0, 0, 0, 116, 0, 0, - 120, 10, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 114, 115, 152, 70, 71, 72, 73, 74, 0, + 0, 0, 309, 310, 71, 72, 73, 74, 0, 0, + 0, 0, 0, 0, 0, 117, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 114, 115, 0, 117, 0, + 0, 0, 120, 0, 0, 0, 117, 0, 116, 0, + 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 152, 70, 71, 72, 73, 74, 0, 0, 0, - 0, 0, 0, 114, 115, 120, 0, 0, 0, 0, - 0, 116, 114, 115, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 152, 70, 71, 72, 73, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 115, 0, - 0, 120, 0, 0, 0, 0, 0, 116, 117, 0, + 0, 0, 0, 120, 0, 0, 0, 0, 0, 116, + 0, 0, 120, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 115, + 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, + 0, 0, 0, 0, 114, 115, ); protected static $yyCheck = array(4, - 50, 51, 52, 41, 102, 91, 44, 56, 91, 41, - 91, 46, 44, 126, 125, 59, 125, 91, 59, 41, - 58, 59, 44, 28, 29, 59, 58, 59, 207, 34, - 80, 40, 82, 260, 42, 303, 58, 59, 40, 88, - 89, 125, 304, 330, 124, 50, 51, 52, 126, 54, - 55, 149, 102, 340, 44, 93, 91, 46, 37, 38, - 399, 93, 37, 42, 43, 58, 45, 42, 47, 59, - 260, 93, 47, 300, 79, 80, 405, 82, 63, 123, - 46, 60, 123, 62, 123, 44, 59, 125, 477, 123, - 40, 260, 260, 125, 44, 93, 286, 102, 164, 149, - 148, 41, 281, 125, 91, 59, 91, 44, 41, 159, - 46, 44, 260, 340, 123, 94, 505, 286, 286, 59, - 449, 44, 58, 37, 38, 58, 59, 125, 42, 43, - 91, 45, 93, 47, 93, 125, 475, 142, 143, 62, - 145, 87, 332, 93, 149, 195, 60, 126, 62, 44, - 123, 126, 300, 93, 159, 41, 93, 64, 44, 91, - 93, 166, 91, 229, 110, 111, 112, 113, 114, 115, - 236, 117, 340, 59, 260, 121, 260, 260, 40, 260, - 94, 37, 125, 63, 46, 125, 42, 43, 125, 45, - 195, 47, 125, 372, 199, 260, 37, 38, 93, 312, - 286, 42, 43, 286, 45, 286, 47, 93, 233, 46, - 124, 91, 126, 257, 219, 161, 257, 163, 331, 60, - 58, 62, 168, 169, 170, 171, 172, 173, 174, 175, + 50, 51, 52, 126, 124, 91, 102, 307, 56, 41, + 123, 46, 44, 207, 91, 91, 413, 41, 303, 260, + 44, 125, 125, 28, 29, 59, 58, 59, 40, 34, + 80, 46, 82, 125, 58, 59, 40, 451, 452, 304, + 88, 89, 42, 58, 63, 50, 51, 52, 283, 54, + 55, 286, 102, 149, 260, 407, 91, 60, 507, 300, + 93, 93, 46, 512, 461, 41, 489, 41, 44, 93, + 44, 44, 91, 59, 79, 80, 490, 82, 260, 59, + 286, 44, 58, 59, 58, 59, 59, 281, 91, 123, + 37, 38, 125, 125, 517, 42, 43, 102, 45, 149, + 47, 125, 58, 41, 286, 41, 44, 41, 44, 159, + 44, 123, 561, 60, 61, 62, 63, 93, 41, 93, + 58, 59, 58, 59, 58, 59, 46, 44, 148, 126, + 93, 580, 432, 91, 340, 487, 59, 142, 143, 44, + 145, 87, 591, 123, 149, 195, 260, 94, 64, 125, + 332, 125, 125, 63, 159, 93, 260, 93, 91, 93, + 93, 166, 125, 91, 110, 111, 112, 113, 114, 115, + 93, 117, 286, 37, 260, 121, 93, 124, 42, 126, + 260, 91, 58, 47, 260, 44, 380, 125, 93, 125, + 195, 125, 44, 164, 199, 44, 549, 550, 311, 91, + 286, 41, 125, 62, 44, 46, 506, 59, 331, 41, + 286, 59, 44, 62, 219, 161, 40, 163, 58, 59, + 340, 574, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 332, - 196, 317, 260, 331, 340, 44, 304, 340, 260, 340, - 340, 207, 373, 374, 373, 374, 340, 260, 261, 40, - 126, 38, 311, 260, 41, 260, 33, 44, 35, 44, - 305, 60, 307, 40, 257, 126, 43, 233, 45, 402, - 403, 58, 59, 44, 61, 361, 63, 62, 300, 286, - 310, 286, 327, 41, 93, 353, 44, 40, 313, 439, - 440, 310, 41, 46, 260, 44, 262, 260, 264, 265, - 58, 59, 268, 269, 402, 403, 93, 94, 260, 58, - 59, 260, 46, 312, 91, 281, 125, 312, 44, 388, - 60, 366, 93, 286, 59, 332, 371, 91, 478, 61, - 537, 538, 331, 59, 286, 93, 331, 124, 125, 305, - 41, 307, 364, 44, 93, 61, 312, 283, 125, 126, - 286, 91, 318, 41, 125, 562, 414, 415, 512, 513, - 311, 327, 414, 415, 389, 420, 452, 125, 123, 332, - 310, 320, 414, 415, 399, 420, 125, 58, 312, 91, - 33, 41, 35, 332, 44, 539, 123, 40, 506, 355, - 43, 340, 45, 41, 260, 261, 44, 331, 58, 59, - 366, 400, 401, 402, 403, 371, 372, 402, 403, 375, - 44, 58, 411, 412, 439, 440, 344, 345, 41, 37, - 38, 44, 410, 41, 42, 43, 44, 45, 79, 47, - 123, 123, 41, 93, 400, 44, 506, 44, 91, 93, - 58, 59, 60, 61, 62, 63, 300, 301, 302, 494, - 475, 312, 44, 478, 420, 421, 41, 482, 93, 44, - 40, 414, 428, 429, 44, 125, 400, 401, 402, 403, - 331, 41, 125, 126, 44, 93, 94, 411, 412, 59, - 260, 506, 123, 260, 261, 262, 263, 264, 265, 59, - 260, 457, 143, 563, 145, 125, 260, 261, 262, 263, - 264, 265, 547, 469, 373, 374, 124, 125, 159, 286, - 40, 123, 33, 583, 35, 166, 257, 123, 41, 40, - 260, 44, 43, 93, 45, 44, 41, 58, 494, 44, - 40, 497, 58, 499, 123, 260, 313, 91, 563, 400, - 401, 402, 403, 123, 40, 125, 300, 301, 302, 260, - 411, 412, 41, 93, 41, 125, 40, 44, 583, 40, - 40, 125, 46, 340, 341, 342, 343, 533, 219, 346, - 91, 58, 59, 61, 58, 40, 40, 91, 93, 61, - 320, 547, 123, 360, 361, 362, 363, 125, 365, 366, - 41, 125, 332, 370, 371, 372, 373, 374, 125, 41, - 340, 340, 123, 569, 40, 126, 93, 260, 261, 262, - 263, 264, 265, 40, 40, 59, 59, 404, 405, 406, - 407, 408, 40, 343, 40, 402, 403, 414, 415, 416, - 417, 418, 419, 286, 33, 340, 35, 91, 125, 40, - 59, 40, 91, 260, 43, 41, 45, 125, 38, 41, - 41, 41, 44, 430, 44, 59, 414, 415, 378, 61, - 313, 361, 313, 340, 61, 414, 415, 59, 58, 59, - 59, 61, 46, 63, 37, 38, 125, 41, 41, 42, - 43, 44, 45, 44, 47, 93, 125, 340, 341, 342, - 343, 123, 91, 346, 312, 58, 59, 60, 61, 62, - 63, 93, 59, 93, 94, 125, 260, 360, 361, 362, - 363, 40, 365, 366, 44, 364, 123, 370, 260, 372, - 373, 374, 321, 41, 340, 41, 340, 126, 91, 123, - 93, 94, 286, 125, 124, 125, 41, 125, 125, 260, - 261, 262, 263, 264, 265, 59, 300, 301, 302, 402, - 403, 371, 125, 41, 414, 415, 44, 40, 123, 59, - 41, 124, 125, 126, 58, 286, 125, 125, 41, 125, - 58, 59, 123, 125, 495, 495, 123, 430, 332, 500, - 500, 260, 400, 401, 59, 41, 404, 405, 406, 407, - 408, 123, 313, 411, 412, 93, 414, 415, 416, 417, - 418, 419, 125, 58, 257, 93, 260, 261, 262, 263, - 264, 265, 125, 91, 91, 91, 41, 257, 125, 340, - 341, 342, 343, 93, 125, 346, 123, 59, 549, 549, - 125, 280, 281, 282, 283, 284, 285, 125, 287, 360, - 361, 362, 363, 59, 365, 366, 300, 568, 568, 370, - 41, 372, 59, 41, 303, 41, 364, 41, 579, 579, - 41, 260, 261, 262, 263, 264, 265, 37, 38, 7, - 85, 41, 42, 43, 44, 45, 46, 47, 125, 125, - 6, 402, 403, 62, 84, 334, 303, 286, 58, 59, - 60, 61, 62, 63, 37, 38, 446, 440, 41, 42, - 43, 44, 45, 46, 47, 482, 91, 49, 41, 430, - 199, 44, 48, 458, 313, 58, 59, 60, 61, 62, - 63, 91, 470, 93, 94, 58, 59, 414, 415, 555, - 37, 519, 519, 159, 313, 42, 43, 159, 45, 308, - 47, 340, 341, 342, 343, 209, 205, 346, 91, 312, - 93, 94, 145, 25, 124, 125, 126, -1, -1, -1, - 93, 360, 361, 362, 363, -1, 365, 366, 331, -1, - -1, 370, -1, 372, 91, -1, -1, -1, -1, -1, - -1, 124, 125, 126, -1, -1, 91, -1, -1, -1, - -1, -1, 125, -1, 41, -1, -1, 44, -1, -1, - -1, -1, 91, 402, 403, -1, -1, -1, 125, -1, - 91, 58, 59, -1, 404, 405, 406, 407, 408, 126, - 125, 411, 412, -1, 414, 415, 416, 417, 418, 419, - -1, 430, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 93, 410, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 37, 38, - -1, -1, 41, 42, 43, 44, 45, 46, 47, 41, - -1, 41, 44, 41, 44, -1, 44, -1, 125, 58, - 59, 60, 61, 62, 63, -1, 58, 59, 58, 59, - 58, 59, -1, -1, 37, 38, -1, -1, -1, 42, - 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, - -1, -1, 91, -1, 93, 94, -1, 60, 61, 62, - 63, 93, -1, 93, -1, 93, 414, 415, -1, 91, - -1, 280, 281, 282, 283, 284, 285, -1, 287, -1, - -1, 41, 312, -1, 44, 124, 125, 126, 91, -1, - 93, 94, -1, 125, 303, 125, -1, 125, 58, 59, - -1, 331, -1, 280, 281, 282, 283, 284, 285, 312, - 287, 260, -1, -1, -1, 280, 281, 282, 283, 284, - 285, 124, 287, 126, -1, -1, 303, -1, 331, -1, - -1, -1, -1, 93, -1, -1, -1, 286, 303, 280, - 281, 282, 283, 284, 285, 312, 287, 91, -1, -1, - -1, 300, 301, 302, -1, -1, -1, 334, -1, 91, - -1, -1, 303, -1, 331, 125, -1, -1, -1, 334, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, 332, 414, 415, 416, 417, 418, 419, - 420, -1, -1, 334, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 37, 38, - -1, 414, 415, 42, 43, 44, 45, 46, 47, -1, - -1, -1, -1, -1, -1, 402, 403, -1, -1, -1, - 91, 60, 61, 62, 63, 37, 38, -1, 40, 41, - 42, 43, 44, 45, -1, 47, -1, -1, 280, 281, - 282, 283, 284, 285, -1, 287, 58, 59, 60, 61, - 62, 63, 91, 312, 93, 94, -1, -1, 300, 301, - 302, 37, 304, -1, -1, -1, 42, 43, -1, 45, - -1, 47, 331, -1, -1, -1, -1, -1, -1, 91, - -1, 93, 94, -1, 60, 124, 62, 126, -1, 312, - -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 331, -1, - -1, 123, 124, 125, 126, -1, 280, 281, 282, 283, - 284, 285, 286, 287, -1, -1, -1, -1, 280, 281, - 282, 283, 284, 285, -1, 287, -1, -1, -1, 303, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 126, 303, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 414, 415, 414, 415, 414, 415, 332, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 41, + 196, 60, 44, 93, 340, 310, 260, 260, 229, 559, + 260, 207, 126, 340, 340, 236, 58, 59, 37, 38, + 373, 374, 44, 42, 43, 123, 45, 257, 47, 402, + 403, 373, 374, 91, 304, 125, 38, 233, 33, 41, + 35, 60, 44, 62, 44, 40, 300, 310, 43, 46, + 45, 93, 260, 59, 260, 261, 58, 59, 59, 61, + 41, 63, 61, 318, 260, 312, 262, 320, 264, 265, + 40, 93, 268, 269, 61, 94, 46, 41, 286, 332, + 44, 310, 260, 125, 331, 281, 40, 340, 358, 305, + 44, 93, 94, 93, 58, 59, 91, 61, 396, 63, + 260, 322, 330, 125, 311, 124, 260, 126, 286, 305, + 364, 307, 340, 40, 123, 312, 332, 123, 260, 46, + 58, 317, 124, 125, 332, 125, 286, 323, 91, 93, + 125, 126, 414, 415, 331, 420, 332, 260, 261, 93, + 414, 415, 397, 123, 286, 44, 300, 368, 41, 524, + 525, 44, 407, 58, 332, 402, 403, 123, 374, 257, + 124, 125, 340, 379, 360, 91, 59, 33, 123, 35, + 366, 367, 518, 369, 40, 410, 551, 43, 374, 45, + 344, 345, 41, 379, 380, 44, 340, 383, 414, 415, + 414, 415, 44, 125, 44, 40, 451, 452, 312, 93, + 93, 46, 260, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 408, 58, 411, 412, 93, 331, 518, 416, + 417, 418, 419, 373, 374, 91, 414, 415, 414, 415, + 414, 415, 487, 260, 40, 490, 432, 433, 44, 494, + 33, 123, 35, 464, 440, 441, 41, 40, 260, 44, + 43, 257, 45, 59, 41, 125, 40, 44, 41, 125, + 126, 44, 320, 518, 257, 260, 261, 262, 263, 264, + 265, 37, 40, 469, 332, 575, 42, 43, 46, 45, + 41, 47, 340, 44, 41, 481, 123, 44, 402, 403, + 58, 286, 91, 312, 41, 595, 41, 44, 91, 44, + 41, 37, 38, 44, 40, 41, 42, 43, 44, 45, + 506, 47, 331, 509, 123, 511, 44, 123, 313, 125, + 575, 58, 58, 59, 414, 61, 62, 63, 260, 40, + 123, 58, 93, 126, 260, 261, 262, 263, 264, 265, + 595, 41, 260, 260, 44, 340, 341, 342, 343, 545, + 123, 346, 40, 58, 286, 91, 41, 93, 94, 40, + 126, 44, 93, 559, 40, 360, 361, 362, 363, 125, + 365, 366, 414, 415, 300, 370, 371, 372, 373, 374, + 40, 400, 401, 402, 403, 581, 61, 123, 124, 125, + 126, 40, 411, 412, 260, 261, 262, 263, 264, 265, + 332, 91, 404, 405, 406, 407, 408, 402, 403, 411, + 412, 61, 414, 415, 416, 417, 418, 419, 41, 123, + 286, 33, 125, 35, 300, 301, 302, 125, 40, 125, + 41, 43, 340, 45, 40, 430, 300, 301, 302, 40, + 404, 405, 406, 407, 408, 59, 41, 313, 40, 44, + 414, 415, 416, 417, 418, 419, 59, 40, 40, 340, + 40, 260, 59, 58, 59, 41, 260, 260, 261, 262, + 263, 264, 265, 125, 340, 341, 342, 343, 41, 91, + 346, 361, 59, 340, 46, 59, 61, 286, 61, 41, + 44, 93, 125, 286, 360, 361, 362, 363, 93, 365, + 366, 300, 301, 302, 370, 123, 372, 373, 374, 41, + 59, 40, 44, 91, 126, 125, 44, 364, 123, 321, + 313, 257, 260, 340, 260, 41, 58, 59, 41, 41, + 125, 44, 340, 332, 37, 38, 402, 403, 41, 42, + 43, 44, 45, 41, 47, 59, 59, 340, 341, 342, + 343, 123, 371, 346, 125, 58, 59, 60, 61, 62, + 63, 93, 348, 40, 430, 125, 125, 360, 361, 362, + 363, 59, 365, 366, 310, 311, 312, 370, 123, 372, + 93, 125, 125, 41, 320, 58, 125, 41, 91, 123, + 93, 94, 125, 125, 330, 331, 332, 260, 123, 59, + 386, 41, 41, 123, 340, 44, 93, 125, 58, 402, + 403, 41, 125, 91, 44, 257, 125, 91, 41, 58, + 59, 124, 125, 126, 91, 91, 257, 91, 58, 59, + 93, 125, 125, 41, 123, 37, 38, 430, 59, 41, + 42, 43, 44, 45, 46, 47, 125, 59, 260, 261, + 262, 263, 264, 265, 93, 41, 58, 59, 60, 61, + 62, 63, 59, 93, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 41, 286, 411, 412, 364, 414, 415, + 416, 417, 418, 419, 41, 41, 125, 41, 125, 91, + 41, 93, 94, 125, 41, 125, 7, 44, 85, 6, + 62, 313, 280, 281, 282, 283, 284, 285, 84, 287, + 303, 58, 59, 452, 458, 79, 494, 49, 48, 91, + 470, 507, 124, 125, 126, 303, 512, 199, 340, 341, + 342, 343, 37, 38, 346, 369, 482, 42, 43, 567, + 45, 41, 47, 531, 44, 159, 93, 308, 360, 361, + 362, 363, 531, 365, 366, 60, 334, 62, 370, 59, + 372, 159, 318, 37, 38, 209, 145, 41, 42, 43, + 44, 45, 46, 47, 205, 561, 25, -1, 125, 143, + -1, 145, 260, -1, 58, 59, 60, 61, 62, 63, + 402, 403, -1, 93, 580, 159, 260, 261, 262, 263, + 264, 265, 166, -1, -1, 591, 37, 38, 286, 312, + -1, 42, 43, 44, 45, -1, 47, 91, 430, 93, + 94, 126, 300, 301, 302, 125, -1, -1, 331, 60, + 61, 62, 63, -1, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 124, 125, 126, -1, 332, 219, 58, 59, -1, -1, + 91, -1, 93, 94, 37, 38, -1, -1, 41, 42, + 43, 44, 45, 46, 47, -1, -1, -1, -1, -1, + -1, -1, 414, 415, -1, 58, 59, 60, 61, 62, + 63, 93, -1, 124, -1, 126, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 47, 280, - 281, 282, 283, 284, 285, -1, 287, -1, -1, 58, - 59, -1, 61, 62, 63, -1, -1, -1, -1, 300, - 301, 302, 303, -1, 414, 415, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, -1, -1, 260, -1, - -1, -1, 91, -1, 93, 94, 37, 38, -1, -1, - 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, - -1, -1, -1, 312, -1, -1, -1, 58, 59, 60, - 61, 62, -1, -1, 123, 124, 125, 126, -1, -1, - -1, -1, 331, 91, -1, -1, -1, -1, 310, 311, - 312, -1, -1, -1, -1, -1, -1, -1, 320, -1, - -1, -1, 93, 94, -1, -1, -1, -1, 330, 331, - 332, -1, -1, -1, -1, -1, -1, -1, 340, -1, + 312, 414, 415, 416, 417, 418, 419, 420, 91, -1, + 93, 94, -1, 125, -1, -1, -1, -1, -1, 331, + -1, -1, 37, 38, -1, -1, -1, 42, 43, 44, + 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, + -1, 124, 125, 126, 318, 60, 61, 62, 63, -1, + -1, 37, -1, -1, -1, -1, 42, 43, -1, 45, + 91, 47, -1, -1, -1, 414, 415, -1, -1, -1, + -1, -1, -1, -1, 414, 415, 91, -1, 93, 94, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 312, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 124, + -1, 126, -1, -1, -1, -1, 331, -1, -1, 37, + 38, -1, -1, 41, 42, 43, 44, 45, 312, 47, + 280, 281, 282, 283, 284, 285, -1, 287, -1, -1, + 126, -1, 60, 61, 62, 63, -1, 331, -1, -1, + -1, -1, -1, 303, -1, 37, 38, 414, 415, 41, + 42, 43, 44, 45, 46, 47, 91, -1, -1, -1, + -1, 312, -1, 91, -1, -1, 94, -1, 60, 61, + 62, 63, -1, -1, -1, 400, 401, 402, 403, -1, + 331, -1, -1, -1, -1, -1, 411, 412, -1, -1, + 125, -1, -1, -1, -1, -1, 124, -1, 126, 91, + -1, -1, 94, -1, -1, -1, 400, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, 411, 412, 312, + 414, 415, 416, 417, 418, 419, 420, -1, -1, -1, + -1, -1, 124, 91, 126, -1, -1, -1, 331, 280, + 281, 282, 283, 284, 285, -1, 287, -1, -1, 400, + 401, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, 303, 414, 415, 416, 417, 418, 419, 420, + -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, + 43, 44, 45, -1, 47, -1, -1, 312, -1, -1, + -1, -1, 414, 415, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, 331, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 312, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 91, -1, + 93, 94, -1, -1, -1, 331, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 280, 281, 282, 283, 284, + 285, -1, 287, -1, -1, -1, -1, -1, -1, -1, + 123, 124, 125, 126, -1, -1, -1, -1, 303, -1, + -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 312, -1, 411, 412, -1, 414, + 415, 416, 417, 418, 419, 420, -1, -1, -1, 334, + -1, -1, -1, 331, -1, -1, 402, 403, -1, -1, + -1, 37, 38, -1, -1, 41, 42, 43, 44, 45, + 312, 47, 280, 281, 282, 283, 284, 285, -1, 287, + -1, -1, 58, 59, 60, 61, 62, -1, -1, 331, + -1, -1, 300, 301, 302, -1, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, 94, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 420, -1, 257, -1, -1, 260, 124, 125, + 126, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, -1, -1, 310, 311, 312, + 58, 59, 60, 61, 62, 63, -1, 320, -1, -1, + -1, 91, -1, -1, -1, -1, -1, 330, 331, 332, + -1, -1, -1, -1, 37, 38, -1, 340, 41, 42, + 43, 44, 45, -1, 47, 93, 94, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, 60, 61, 62, + 63, 37, 38, -1, -1, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, 124, 125, 126, -1, + -1, -1, 58, 59, 60, 61, 62, 63, -1, -1, + 93, 94, -1, -1, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 93, 94, -1, + -1, 124, 125, 126, -1, -1, -1, -1, -1, 91, + -1, 37, 38, -1, -1, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, 312, -1, 124, 125, + -1, -1, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, 125, 330, 331, -1, -1, -1, -1, + -1, 37, 38, -1, 340, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, 93, 94, -1, + 260, -1, 58, 59, 60, 61, 62, 63, -1, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, + 280, 281, 282, 283, 284, 285, 286, 287, 124, 125, + 58, 59, 60, 61, 62, 63, -1, 93, 94, -1, + -1, -1, -1, 303, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, -1, 93, 94, -1, 124, 125, + -1, -1, 332, -1, 312, -1, -1, -1, -1, 91, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 331, -1, -1, 124, 125, -1, 37, + 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 312, + 58, 59, 60, 61, 62, 63, -1, -1, 280, 281, + 282, 283, 284, 285, -1, 287, -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, 312, -1, -1, -1, - -1, -1, -1, 124, 125, 126, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 420, -1, -1, -1, -1, -1, -1, 400, 401, - 402, 403, 404, 405, 406, 407, 408, -1, 410, 411, - 412, -1, 414, 415, 416, 417, 418, 419, -1, 37, - 38, -1, -1, 41, 42, 43, 44, 45, 257, 47, - -1, 260, -1, -1, 400, 401, 402, 403, -1, -1, - 58, 59, 60, 61, 62, 63, -1, -1, 37, 38, - -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, 93, 94, -1, -1, -1, - -1, 310, 311, 312, -1, -1, -1, -1, -1, -1, - -1, 320, 280, 281, 282, 283, 284, 285, -1, 287, - -1, 330, 331, 332, 93, 94, 124, 125, 126, -1, - -1, 340, 300, 301, 302, 303, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, - -1, 44, -1, -1, -1, 124, 125, 126, -1, -1, - -1, 312, -1, -1, -1, 58, 59, -1, 61, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, 330, - 331, -1, -1, -1, -1, -1, -1, -1, -1, 340, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 93, 94, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, -1, 37, 38, -1, -1, 41, 42, 43, - 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, - -1, 124, 125, -1, 58, 59, 60, 61, 62, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, - 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, - 411, 412, -1, 414, 415, 416, 417, 418, 419, 93, - 94, 37, 38, -1, -1, 41, 42, 43, 44, 45, - -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 58, 59, 60, 61, 62, 63, 37, 38, - 124, 125, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, 312, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, 93, 94, -1, - -1, -1, -1, 331, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 312, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 93, 94, -1, -1, 124, 125, - -1, -1, 331, -1, -1, -1, -1, -1, 37, 38, - -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, -1, -1, -1, 124, 125, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + -1, 303, -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, -1, 93, 94, -1, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, -1, 37, 38, 124, 125, 41, 42, 43, - 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 58, 59, 60, 61, 62, 63, - -1, 37, 38, 362, -1, 41, 42, 43, 312, 45, - -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 60, 61, 62, 63, -1, 93, - 94, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 415, -1, 94, -1, - 124, 125, -1, 422, -1, -1, 312, -1, -1, -1, + 418, 419, 334, -1, -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, -1, - 126, -1, -1, 312, -1, -1, 400, 401, -1, -1, - 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, -1, 37, 38, -1, - -1, -1, 42, 43, -1, 45, 485, 47, -1, -1, - -1, -1, -1, -1, 493, -1, -1, -1, -1, 59, - 60, 61, 62, 63, -1, 504, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 312, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, - 406, 407, 408, 312, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 94, -1, 535, -1, -1, -1, - -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, -1, -1, -1, 124, 564, 126, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, -1, 41, 42, - 43, -1, 45, 582, 47, -1, -1, -1, 587, -1, - -1, -1, -1, 592, -1, -1, -1, 60, 61, 62, - 63, -1, -1, -1, -1, -1, -1, -1, 312, -1, - -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 94, -1, -1, 37, 38, 312, -1, -1, 42, - 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 331, 59, 60, 61, 62, - 63, 124, -1, 126, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 94, -1, -1, -1, -1, 400, 401, -1, -1, - 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, - -1, 124, -1, 126, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, -1, -1, -1, -1, -1, 37, - 38, -1, 312, 41, 42, 43, -1, 45, -1, 47, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 331, 60, 61, 62, 63, 37, 38, -1, -1, - 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, - 61, 62, 63, 37, 38, -1, 94, 41, 42, 43, - -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 60, 61, 62, 63, - -1, -1, -1, 94, -1, -1, 124, -1, 126, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 312, + 416, 417, 418, 419, -1, -1, 312, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, 281, + 282, 283, 284, 285, -1, 287, -1, 37, 38, -1, + -1, 41, 42, 43, 312, 45, -1, 47, 300, 301, + 302, 303, -1, -1, -1, -1, -1, -1, -1, -1, + 60, 61, 62, 63, 400, 401, -1, -1, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 94, -1, 91, -1, -1, -1, + -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 124, -1, 126, -1, -1, 370, + 125, -1, 400, 401, 312, -1, 404, 405, 406, 407, + 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, + 418, 419, -1, -1, -1, 37, 38, -1, -1, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, 60, 61, + 62, 63, 91, -1, -1, -1, 427, -1, -1, -1, + -1, 37, 38, 434, -1, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, 94, 59, 60, 61, 62, 63, -1, -1, + -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, + 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 124, 125, -1, 37, 38, -1, 94, 41, + 42, 43, -1, 45, -1, 47, 497, -1, -1, -1, + -1, -1, -1, -1, 505, -1, -1, -1, 60, 61, + 62, 63, -1, 38, -1, 516, 41, -1, 124, 44, + 126, -1, -1, -1, -1, 280, 281, 282, 283, 284, + 285, -1, 287, 58, 59, -1, 61, -1, 63, 37, + 38, -1, 94, -1, 42, 43, 547, 45, 303, 47, + -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, + -1, 59, 60, 61, 62, 63, -1, -1, 93, 94, + -1, 331, 124, -1, 126, 576, -1, -1, -1, 334, + -1, -1, 37, 38, -1, -1, 41, 42, 43, -1, + 45, -1, 47, 594, -1, -1, 94, -1, 599, 124, + 125, -1, -1, 604, -1, 60, 61, 62, 63, -1, + -1, 280, 281, 282, 283, 284, 285, -1, 287, -1, + -1, -1, -1, -1, -1, -1, 124, -1, 126, -1, + -1, 300, 301, 302, 303, -1, -1, -1, -1, 94, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 94, -1, -1, 124, -1, 126, -1, -1, 331, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, + 312, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, 41, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, 312, -1, -1, -1, + -1, -1, -1, -1, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, 331, -1, -1, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, + -1, 60, 61, 62, 63, -1, -1, -1, 400, 401, + 312, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 124, 331, + 126, -1, -1, -1, -1, 94, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 312, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, -1, 41, 42, 43, -1, 45, 312, - 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 60, 61, 62, 63, -1, 331, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 94, -1, -1, - 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, - 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 60, 61, 62, 63, 124, -1, 126, - -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 94, -1, -1, - -1, -1, -1, -1, 312, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, -1, 41, 42, - 43, 44, 45, 331, 47, -1, -1, 124, -1, 126, - -1, 312, -1, -1, -1, 58, 59, 60, 61, 62, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 331, -1, -1, -1, -1, -1, 37, 38, 312, -1, - -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, - 93, 94, -1, -1, -1, -1, -1, 331, 59, 60, - 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 331, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 312, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, -1, + -1, -1, -1, -1, -1, -1, 331, -1, -1, 404, + 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, + 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 124, 125, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 94, -1, -1, -1, -1, -1, 400, - 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, - 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, - -1, -1, -1, 124, -1, 126, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 312, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, - -1, -1, -1, -1, 331, -1, 37, 38, -1, -1, - -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 58, -1, 60, - 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 37, 38, -1, 312, -1, 42, 43, -1, - 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 94, 331, 60, 61, 62, 63, -1, - -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 124, -1, 126, -1, 37, 38, 94, - -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 60, 61, 62, 63, -1, -1, -1, -1, -1, 124, - -1, 126, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 93, 94, -1, -1, -1, -1, -1, - -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, -1, 41, 42, 43, 44, 45, - 331, 47, -1, -1, 124, 125, -1, -1, -1, -1, - -1, -1, 58, 59, 60, 61, 62, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, - -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 93, 94, -1, + 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, + 418, 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 124, 125, - 411, 412, -1, 414, 415, 416, 417, 418, 419, 37, - 38, -1, -1, 41, 42, 43, 44, 45, -1, 47, - -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, - 331, -1, -1, -1, 37, 38, -1, -1, -1, 42, - 43, -1, 45, -1, 47, -1, -1, 312, -1, -1, - -1, -1, -1, -1, -1, 93, 94, 60, 61, 62, - 63, -1, -1, -1, -1, -1, 331, -1, -1, -1, - 37, 38, -1, -1, -1, 42, 43, -1, 45, -1, - 47, -1, -1, -1, -1, -1, 124, 125, -1, -1, - -1, 94, -1, 60, 61, 62, 63, -1, -1, 400, - 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, - 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, - -1, 124, -1, 126, -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, - 415, 416, 417, 418, 419, 38, -1, 124, 41, 126, - 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, 60, 61, 62, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, + 415, 416, 417, 418, 419, -1, 312, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 331, -1, 37, 38, -1, + -1, 41, 42, 43, -1, 45, -1, 47, -1, -1, + -1, -1, -1, 312, -1, -1, -1, -1, -1, -1, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, 331, -1, 37, 38, -1, -1, 41, 42, + 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 94, -1, -1, 60, 61, 62, + 63, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 124, -1, 126, -1, -1, -1, + -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, + 419, 124, -1, 126, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, 61, 62, 63, 37, 38, + -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + -1, 60, 61, 62, 63, -1, 37, 38, 94, -1, + 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, + 61, 62, 63, -1, -1, 94, -1, -1, 124, -1, + 126, -1, -1, -1, -1, -1, -1, 37, 38, -1, + -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, + -1, -1, 93, 94, -1, 124, -1, 126, 58, 59, + 60, 61, 62, 63, 37, 38, -1, -1, 41, 42, + 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, 312, 124, 125, 58, 59, 60, 61, 62, + 63, -1, -1, 93, 94, -1, -1, -1, -1, -1, + -1, 331, -1, -1, -1, 37, 38, -1, -1, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, 312, + 93, 94, -1, -1, 124, 125, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, 331, -1, + -1, -1, -1, 38, -1, -1, 41, -1, 43, 44, + 45, 124, 125, -1, -1, -1, -1, -1, -1, -1, + -1, 93, 94, 58, 59, 60, 61, 62, 63, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, - -1, -1, 41, -1, 43, 44, 45, -1, -1, -1, - -1, 124, 125, -1, -1, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, + -1, -1, 124, 125, -1, -1, -1, -1, 93, 94, + -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 312, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, -1, 124, + 125, -1, -1, -1, -1, 331, -1, -1, -1, -1, + 37, 38, -1, 312, -1, 42, 43, -1, 45, -1, + 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 331, 60, 61, 62, 63, 37, 38, -1, + -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 60, 61, 62, 63, -1, -1, -1, 94, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 93, 94, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, -1, 312, - -1, -1, -1, -1, -1, 124, 125, 58, 59, -1, - 61, -1, 63, -1, -1, -1, -1, -1, 331, -1, - -1, -1, -1, -1, 38, -1, -1, 41, -1, -1, - 44, -1, -1, -1, -1, 312, -1, -1, -1, -1, - -1, -1, 93, 94, 58, 59, -1, 61, -1, 63, - -1, -1, 400, 401, 331, -1, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, 124, 125, -1, -1, -1, -1, 93, - 94, -1, -1, -1, -1, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, -1, 415, 416, 417, 418, 419, -1, -1, -1, - 124, 125, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, -1, -1, 411, 412, -1, -1, -1, 416, - 417, 418, 419, 38, -1, -1, 41, -1, -1, 44, + 416, 417, 418, 419, 94, -1, -1, 124, -1, 126, + -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, + 419, -1, -1, -1, 124, -1, 126, -1, -1, 400, + 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, + 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, 61, -1, 63, -1, - -1, -1, 38, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 58, 59, -1, 61, -1, 63, 93, 94, + 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, + -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 93, 94, 124, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 38, -1, -1, 41, - -1, -1, 44, -1, -1, -1, -1, -1, 124, 125, - -1, -1, -1, -1, -1, -1, 58, 59, -1, 61, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, - -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 93, 94, -1, -1, -1, 37, -1, -1, -1, - -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, - 38, -1, -1, 41, -1, -1, 44, -1, -1, 60, - -1, 62, 124, 125, -1, -1, -1, -1, -1, -1, - 58, 59, -1, 61, -1, 63, -1, -1, -1, -1, - -1, -1, -1, 404, 405, 406, 407, 408, -1, -1, - 411, 412, -1, 414, 415, 416, 417, 418, 419, -1, - -1, -1, -1, -1, -1, 93, 94, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, + 33, -1, 35, -1, -1, -1, -1, 40, -1, -1, + 43, -1, 45, -1, -1, -1, -1, -1, 400, 401, + -1, -1, 404, 405, 406, 407, 408, 60, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 404, 405, 406, 407, 408, 126, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, 124, 125, 38, -1, + -1, -1, -1, -1, -1, 400, 401, -1, 91, 404, + 405, 406, 407, 408, -1, 312, 411, 412, -1, 414, + 415, 416, 417, 418, 419, -1, 38, -1, -1, 41, + -1, 43, 44, 45, 331, -1, -1, -1, -1, -1, + -1, -1, 312, 126, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 331, -1, -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 33, -1, 35, 58, 59, - -1, 61, 40, 63, -1, 43, -1, 45, -1, -1, - -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, - -1, 44, 60, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 94, 58, 59, -1, 61, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 91, -1, 41, -1, -1, 44, -1, - -1, -1, -1, -1, 124, 125, -1, -1, -1, -1, - 93, 94, 58, 59, -1, 61, -1, 63, -1, 404, - 405, 406, 407, 408, -1, -1, 411, 412, 126, 414, - 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, - -1, 124, 125, -1, -1, -1, -1, 93, 404, 405, - 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 41, -1, -1, 44, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, - -1, 58, 59, -1, 61, -1, 63, 41, -1, -1, - 44, 312, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 58, 59, -1, 61, -1, 63, - 331, -1, -1, -1, -1, -1, 93, 94, -1, -1, - -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, - 412, -1, 414, 415, 416, 417, 418, 419, -1, 93, - -1, -1, -1, -1, -1, -1, -1, 124, 125, -1, + -1, 93, 94, -1, -1, -1, -1, -1, 58, 59, + -1, 61, -1, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 124, 125, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 93, 94, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + -1, 411, 412, -1, -1, 415, 416, 417, 418, 419, + 38, -1, -1, 41, 124, 125, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 38, -1, -1, 41, + 58, 59, 44, 61, -1, 63, -1, 260, 261, 262, + 263, 264, 265, -1, -1, -1, 58, 59, -1, 61, + 38, 63, -1, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, 286, -1, 93, 94, -1, -1, 41, + 58, 59, 44, 61, -1, 63, -1, -1, -1, -1, + -1, 93, 94, -1, -1, -1, 58, 59, -1, 61, + 313, 63, -1, -1, -1, 38, 124, 125, 41, -1, + -1, 44, -1, -1, -1, 93, 94, -1, -1, -1, + -1, -1, 124, 125, -1, 58, 59, 340, 61, 38, + 63, 93, 41, 346, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 38, 124, 125, 41, 58, + 59, 44, 61, -1, 63, -1, -1, -1, -1, -1, + 93, 94, -1, 125, -1, 58, 59, -1, 61, -1, + 63, -1, -1, -1, 38, -1, -1, 41, -1, -1, + 44, -1, -1, -1, 93, 94, -1, -1, 401, 402, + 403, 124, 125, -1, 58, 59, -1, 61, -1, 63, + 93, 94, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 124, 125, -1, -1, 58, + 59, -1, 61, -1, 63, -1, -1, -1, -1, 93, + 94, 124, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, 400, - 401, 402, 403, -1, -1, -1, -1, -1, 286, -1, - 411, 412, -1, -1, -1, -1, 404, 405, 406, 407, + -1, -1, -1, -1, 93, 94, -1, -1, 400, 401, + 124, 125, 404, 405, 406, 407, 408, -1, -1, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 38, -1, + -1, 41, -1, -1, 44, 124, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 61, -1, 63, 404, 405, 406, 407, 408, -1, + -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, + -1, -1, 37, 38, -1, -1, -1, 42, 43, -1, + 45, -1, 47, 93, 94, -1, 37, -1, -1, -1, + -1, 42, 43, 37, 45, 60, 47, 62, 42, 43, + -1, 45, -1, 47, -1, -1, -1, -1, -1, 60, + -1, 62, -1, -1, 124, 125, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, + -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, -1, -1, -1, 313, 33, -1, 35, -1, - -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, + 418, 419, 404, 405, 406, 407, 408, -1, -1, 411, + 412, 126, 414, 415, 416, 417, 418, 419, -1, -1, + -1, -1, -1, -1, -1, 126, 404, 405, 406, 407, + 408, -1, 126, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 404, 405, 406, 407, 408, -1, -1, -1, + -1, -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 340, -1, 33, 62, 35, -1, 346, -1, - -1, 40, -1, 33, 43, 35, 45, -1, -1, -1, - 40, -1, -1, 43, -1, 45, -1, -1, -1, 58, - -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, - -1, 61, -1, -1, 404, 405, 406, 407, 408, -1, - -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, - -1, -1, 91, 401, 402, 403, -1, -1, 33, 126, - 35, 91, -1, -1, -1, 40, -1, -1, 43, -1, - 45, 404, 405, 406, 407, 408, -1, -1, -1, -1, - -1, 414, 415, 416, 417, 418, 419, 126, -1, -1, - -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 404, 405, - 406, 407, 408, -1, -1, -1, 91, -1, 414, 415, - 416, 417, 418, 419, 33, -1, 35, -1, -1, -1, - -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, 126, 61, -1, -1, -1, -1, -1, 33, -1, - 35, -1, -1, -1, -1, 40, -1, -1, 43, -1, - 45, -1, -1, -1, -1, -1, -1, 404, 405, 406, - 407, 408, 91, -1, -1, -1, -1, 414, 415, 416, - 417, 418, 419, 260, 261, 262, 263, 264, 265, -1, + -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, + -1, 414, 415, 416, 417, 418, 419, -1, -1, -1, + -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, + -1, -1, 411, 412, -1, 414, 415, 416, 417, 418, + 419, 404, 405, 406, 407, 408, -1, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, 33, -1, 35, + -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - 414, 415, 416, 417, 418, 419, 91, 126, -1, 286, - -1, 260, 261, 262, 263, 264, 265, -1, -1, -1, - 260, 261, 262, 263, 264, 265, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 313, 286, -1, -1, - -1, 126, -1, -1, -1, -1, 286, -1, -1, -1, + 414, 415, 416, 417, 418, 419, 62, -1, -1, -1, + -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, + -1, -1, -1, -1, -1, 414, 415, 416, 417, 418, + 419, -1, 33, -1, 35, 91, -1, -1, -1, 40, + -1, 33, 43, 35, 45, -1, -1, 312, 40, -1, + -1, 43, -1, 45, -1, -1, -1, 58, -1, -1, + -1, 312, -1, -1, -1, -1, 331, -1, 312, 61, + 126, -1, 33, -1, 35, -1, -1, -1, -1, 40, + 331, -1, 43, -1, 45, -1, -1, 331, -1, -1, + 91, -1, -1, -1, 404, 405, 406, 407, 408, 91, + 61, -1, -1, -1, 414, 415, 416, 417, 418, 419, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, + 91, -1, -1, -1, 126, 400, 401, 402, 403, -1, + -1, -1, -1, -1, -1, -1, 411, 412, -1, 400, + 401, 402, 403, -1, -1, -1, 400, 401, 402, 403, + 411, 412, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 340, 313, -1, -1, -1, -1, 346, - -1, -1, -1, 313, -1, 260, 261, 262, 263, 264, - 265, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 340, -1, -1, -1, -1, -1, 346, -1, -1, - 340, 286, -1, -1, -1, -1, 346, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 35, -1, -1, + -1, -1, 40, -1, -1, 43, -1, 45, -1, -1, + -1, -1, -1, -1, 260, 261, 262, 263, 264, 265, + -1, -1, -1, -1, -1, -1, 33, -1, 35, -1, + -1, -1, -1, 40, -1, 33, 43, 35, 45, -1, + 286, -1, 40, -1, -1, 43, -1, 45, -1, -1, + -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 313, -1, 260, + 261, 262, 263, 264, 265, -1, -1, -1, 260, 261, + 262, 263, 264, 265, 91, 123, -1, -1, 126, -1, + -1, -1, -1, 91, 340, 286, -1, -1, -1, -1, + 346, -1, -1, -1, 286, -1, -1, -1, -1, 260, + 261, 262, 263, 264, 265, -1, -1, -1, -1, 126, + -1, -1, 313, -1, -1, -1, -1, -1, 126, -1, + -1, 313, -1, -1, -1, 286, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 340, + -1, -1, -1, -1, 400, 346, 402, 403, 340, -1, + -1, -1, 313, -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 400, -1, 402, 403, -1, 313, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 340, + -1, -1, -1, -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 260, 261, 262, 263, 264, 265, -1, -1, -1, - -1, -1, -1, 402, 403, 340, -1, -1, -1, -1, - -1, 346, 402, 403, -1, -1, -1, 286, -1, -1, - -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, - 265, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, - -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 402, 403, -1, - -1, 340, -1, -1, -1, -1, -1, 346, 313, -1, + -1, 402, 403, -1, -1, -1, -1, -1, -1, -1, + 402, 403, 260, 261, 262, 263, 264, 265, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 286, -1, + -1, 402, 403, 260, 261, 262, 263, 264, 265, -1, + -1, -1, 260, 261, 262, 263, 264, 265, -1, -1, + -1, -1, -1, -1, -1, 313, -1, -1, -1, 286, + -1, -1, -1, -1, -1, -1, -1, -1, 286, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 340, -1, -1, -1, 313, -1, 346, -1, + -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 340, -1, -1, -1, -1, - -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 340, -1, -1, -1, -1, -1, 346, + -1, -1, 340, -1, -1, -1, -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 402, 403, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 402, 403, + -1, -1, -1, -1, -1, 402, 403, -1, -1, -1, + -1, -1, -1, -1, 402, 403, ); protected static $yyFinal= 2; protected static $yyName= array( @@ -1998,37 +2011,55 @@ public function yyparse($yyLex) { case 97: #line 509 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; + case 98: #line 513 "grammar/xp.jay" + { $yyVal= NULL; } break; + + case 101: #line 519 "grammar/xp.jay" + { $yyVal= array_merge($yyVals[-2+$yyTop], $yyVals[0+$yyTop]); } break; + + case 102: #line 523 "grammar/xp.jay" + { $yyVal= array(); } break; + case 104: #line 528 "grammar/xp.jay" + { $yyVal= array($yyVals[-2+$yyTop] => $yyVals[0+$yyTop]); } break; + + case 105: #line 529 "grammar/xp.jay" + { $yyVal= array($yyVals[-2+$yyTop] => $yyVals[0+$yyTop]); } break; + + case 106: #line 530 "grammar/xp.jay" + { $yyVal= array($yyVals[0+$yyTop]); } break; + + case 113: #line 549 "grammar/xp.jay" { $yyVal= NULL; } break; - case 106: #line 533 "grammar/xp.jay" + case 115: #line 554 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 107: #line 534 "grammar/xp.jay" + case 116: #line 555 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-1+$yyTop], array($yyVals[0+$yyTop])); } break; - case 108: #line 538 "grammar/xp.jay" + case 117: #line 559 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ReturnNode()); } break; - case 109: #line 538 "grammar/xp.jay" + case 118: #line 559 "grammar/xp.jay" { $yyVal->expression= $yyVals[-1+$yyTop]; } break; - case 110: #line 541 "grammar/xp.jay" + case 119: #line 562 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new IfNode()); } break; - case 111: #line 541 "grammar/xp.jay" + case 120: #line 562 "grammar/xp.jay" { $yyVals[-6+$yyTop]->condition= $yyVals[-3+$yyTop]; $yyVals[-6+$yyTop]->statements= $yyVals[-1+$yyTop]; $yyVals[-6+$yyTop]->otherwise= $yyVals[0+$yyTop]; } break; - case 112: #line 546 "grammar/xp.jay" + case 121: #line 567 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ForNode()); } break; - case 113: #line 546 "grammar/xp.jay" + case 122: #line 567 "grammar/xp.jay" { if ($yyVals[-6+$yyTop]) { $yyVals[-9+$yyTop]->initialization= $yyVals[-6+$yyTop]; @@ -2040,168 +2071,168 @@ public function yyparse($yyLex) { $yyVals[-9+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 114: #line 556 "grammar/xp.jay" + case 123: #line 577 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ForeachNode()); } break; - case 115: #line 556 "grammar/xp.jay" + case 124: #line 577 "grammar/xp.jay" { $yyVals[-7+$yyTop]->expression= $yyVals[-2+$yyTop]; $yyVals[-7+$yyTop]->assignment= $yyVals[-4+$yyTop]; $yyVals[-7+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 116: #line 561 "grammar/xp.jay" + case 125: #line 582 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new WhileNode()); } break; - case 117: #line 561 "grammar/xp.jay" + case 126: #line 582 "grammar/xp.jay" { $yyVals[-5+$yyTop]->expression= $yyVals[-2+$yyTop]; $yyVals[-5+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 118: #line 565 "grammar/xp.jay" + case 127: #line 586 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new DoNode()); } break; - case 119: #line 565 "grammar/xp.jay" + case 128: #line 586 "grammar/xp.jay" { $yyVals[-7+$yyTop]->expression= $yyVals[-2+$yyTop]; $yyVals[-7+$yyTop]->statements= $yyVals[-5+$yyTop]; } break; - case 120: #line 569 "grammar/xp.jay" + case 129: #line 590 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new SwitchNode()); } break; - case 121: #line 569 "grammar/xp.jay" + case 130: #line 590 "grammar/xp.jay" { $yyVals[-7+$yyTop]->expression= $yyVals[-4+$yyTop]; $yyVals[-7+$yyTop]->cases= $yyVals[-1+$yyTop]; } break; - case 122: #line 573 "grammar/xp.jay" + case 131: #line 594 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new BreakNode()); } break; - case 124: #line 574 "grammar/xp.jay" + case 133: #line 595 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ContinueNode()); } break; - case 126: #line 575 "grammar/xp.jay" + case 135: #line 596 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ThrowNode()); } break; - case 127: #line 575 "grammar/xp.jay" + case 136: #line 596 "grammar/xp.jay" { $yyVals[-3+$yyTop]->expression= $yyVals[-1+$yyTop]; } break; - case 128: #line 578 "grammar/xp.jay" + case 137: #line 599 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new TryNode()); } break; - case 129: #line 578 "grammar/xp.jay" + case 138: #line 599 "grammar/xp.jay" { $yyVals[-4+$yyTop]->statements= $yyVals[-2+$yyTop]; $yyVals[-4+$yyTop]->handling= $yyVals[0+$yyTop]; $yyVal= $yyVals[-4+$yyTop]; } break; - case 130: #line 583 "grammar/xp.jay" + case 139: #line 604 "grammar/xp.jay" { $yyVal= $yyLex->create(new ArmNode($yyVals[-4+$yyTop]['i'], $yyVals[-4+$yyTop]['v'], $yyVals[-1+$yyTop] ? $yyVals[-1+$yyTop] : array())); } break; - case 131: #line 586 "grammar/xp.jay" + case 140: #line 607 "grammar/xp.jay" { $yyVal= $yyLex->create(new WithNode($yyVals[-4+$yyTop], $yyVals[-1+$yyTop] ? $yyVals[-1+$yyTop] : array())); } break; - case 133: #line 593 "grammar/xp.jay" + case 142: #line 614 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 134: #line 594 "grammar/xp.jay" + case 143: #line 615 "grammar/xp.jay" { $yyVal= array_merge_recursive($yyVals[-2+$yyTop], $yyVals[0+$yyTop]); } break; - case 135: #line 598 "grammar/xp.jay" + case 144: #line 619 "grammar/xp.jay" { $yyVal= array('i' => array(), 'v' => array(new VariableNode($yyVals[0+$yyTop]))); } break; - case 136: #line 601 "grammar/xp.jay" + case 145: #line 622 "grammar/xp.jay" { $v= new VariableNode($yyVals[-2+$yyTop]); $yyVal= array('i' => array($yyLex->create(new AssignmentNode(array('op' => '=', 'variable' => $v, 'expression' => $yyVals[0+$yyTop])))), 'v' => array($v)); } break; - case 137: #line 608 "grammar/xp.jay" + case 146: #line 629 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 138: #line 609 "grammar/xp.jay" + case 147: #line 630 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])); } break; - case 139: #line 613 "grammar/xp.jay" + case 148: #line 634 "grammar/xp.jay" { $yyVal= $yyLex->create(new AssignmentNode(array('op' => '=', 'variable' => new VariableNode($yyVals[-2+$yyTop]), 'expression' => $yyVals[0+$yyTop]))); } break; - case 140: #line 619 "grammar/xp.jay" + case 149: #line 640 "grammar/xp.jay" { $yyVal= array('value' => $yyVals[0+$yyTop]); } break; - case 141: #line 620 "grammar/xp.jay" + case 150: #line 641 "grammar/xp.jay" { $yyVal= array('key' => $yyVals[-2+$yyTop], 'value' => $yyVals[0+$yyTop]); } break; - case 142: #line 624 "grammar/xp.jay" + case 151: #line 645 "grammar/xp.jay" { $yyVal= NULL; } break; - case 144: #line 629 "grammar/xp.jay" + case 153: #line 650 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 145: #line 630 "grammar/xp.jay" + case 154: #line 651 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-1+$yyTop], array($yyVals[0+$yyTop])); } break; - case 146: #line 634 "grammar/xp.jay" + case 155: #line 655 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new CaseNode()); } break; - case 147: #line 634 "grammar/xp.jay" + case 156: #line 655 "grammar/xp.jay" { $yyVals[-4+$yyTop]->expression= $yyVals[-2+$yyTop]; $yyVals[-4+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 148: #line 638 "grammar/xp.jay" + case 157: #line 659 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new DefaultNode()); } break; - case 149: #line 638 "grammar/xp.jay" + case 158: #line 659 "grammar/xp.jay" { $yyVals[-3+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 150: #line 644 "grammar/xp.jay" + case 159: #line 665 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 151: #line 645 "grammar/xp.jay" + case 160: #line 666 "grammar/xp.jay" { $yyVal= $yyVals[-1+$yyTop]; } break; - case 152: #line 649 "grammar/xp.jay" + case 161: #line 670 "grammar/xp.jay" { $yyVal= NULL; } break; - case 153: #line 650 "grammar/xp.jay" + case 162: #line 671 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ElseNode()); } break; - case 154: #line 650 "grammar/xp.jay" + case 163: #line 671 "grammar/xp.jay" { $yyVals[-2+$yyTop]->statements= $yyVals[0+$yyTop]; } break; - case 155: #line 655 "grammar/xp.jay" + case 164: #line 676 "grammar/xp.jay" { $yyVals[0+$yyTop] === NULL || $yyVal= array_merge($yyVals[-1+$yyTop], array($yyVals[0+$yyTop])); } break; - case 156: #line 656 "grammar/xp.jay" + case 165: #line 677 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 157: #line 660 "grammar/xp.jay" + case 166: #line 681 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 158: #line 661 "grammar/xp.jay" + case 167: #line 682 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-1+$yyTop], $yyVals[0+$yyTop]); } break; - case 159: #line 665 "grammar/xp.jay" + case 168: #line 686 "grammar/xp.jay" { $p= $yyLex->position; } break; - case 160: #line 665 "grammar/xp.jay" + case 169: #line 686 "grammar/xp.jay" { $yyVal= array(); foreach ($yyVals[-5+$yyTop] as $type) { @@ -2214,36 +2245,36 @@ public function yyparse($yyLex) { } } break; - case 161: #line 679 "grammar/xp.jay" + case 170: #line 700 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 162: #line 680 "grammar/xp.jay" + case 171: #line 701 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])); } break; - case 163: #line 684 "grammar/xp.jay" + case 172: #line 705 "grammar/xp.jay" { $yyVal= NULL; } break; - case 165: #line 689 "grammar/xp.jay" + case 174: #line 710 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new FinallyNode()); } break; - case 166: #line 689 "grammar/xp.jay" + case 175: #line 710 "grammar/xp.jay" { $yyVals[-4+$yyTop]->statements= $yyVals[-1+$yyTop]; } break; - case 167: #line 697 "grammar/xp.jay" + case 176: #line 718 "grammar/xp.jay" { $yyVal= NULL; } break; - case 169: #line 702 "grammar/xp.jay" + case 178: #line 723 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 170: #line 703 "grammar/xp.jay" + case 179: #line 724 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop] ? array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])) : $yyVals[-2+$yyTop]; } break; - case 171: #line 707 "grammar/xp.jay" + case 180: #line 728 "grammar/xp.jay" { $yyVal= NULL; } break; - case 173: #line 712 "grammar/xp.jay" + case 182: #line 733 "grammar/xp.jay" { $yyVal= new InstanceCreationNode(); $yyVal->type= $yyVals[-4+$yyTop]; @@ -2251,44 +2282,44 @@ public function yyparse($yyLex) { $yyVals[0+$yyTop] && $yyVal->body= $yyVals[0+$yyTop]; } break; - case 174: #line 718 "grammar/xp.jay" + case 183: #line 739 "grammar/xp.jay" { $yyVal= new ArrayNode(); $yyVal->type= $yyVals[-3+$yyTop]; $yyVal->values= (array)$yyVals[-1+$yyTop]; } break; - case 175: #line 723 "grammar/xp.jay" + case 184: #line 744 "grammar/xp.jay" { $yyVal= new MapNode(); $yyVal->type= $yyVals[-3+$yyTop]; $yyVal->elements= (array)$yyVals[-1+$yyTop]; } break; - case 176: #line 731 "grammar/xp.jay" + case 185: #line 752 "grammar/xp.jay" { $yyVal= new StaticMemberAccessNode(NULL, $yyVals[0+$yyTop]); } break; - case 177: #line 734 "grammar/xp.jay" + case 186: #line 755 "grammar/xp.jay" { $yyVal= new StaticMethodCallNode(NULL, $yyVals[-3+$yyTop], $yyVals[-1+$yyTop]); } break; - case 178: #line 737 "grammar/xp.jay" + case 187: #line 758 "grammar/xp.jay" { $yyVal= new ConstantAccessNode(NULL, $yyVals[0+$yyTop]); } break; - case 179: #line 740 "grammar/xp.jay" + case 188: #line 761 "grammar/xp.jay" { $yyVal= new ClassAccessNode(NULL); } break; - case 180: #line 746 "grammar/xp.jay" + case 189: #line 767 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new VariableNode($yyVals[0+$yyTop])); } break; - case 181: #line 746 "grammar/xp.jay" + case 190: #line 767 "grammar/xp.jay" { if ($yyVals[0+$yyTop]) { $yyVal= $yyVals[0+$yyTop][0]; @@ -2296,7 +2327,7 @@ public function yyparse($yyLex) { } } break; - case 182: #line 752 "grammar/xp.jay" + case 191: #line 773 "grammar/xp.jay" { if ($yyVals[0+$yyTop]) { $yyVal= $yyVals[0+$yyTop][0]; @@ -2304,10 +2335,10 @@ public function yyparse($yyLex) { } } break; - case 183: #line 758 "grammar/xp.jay" + case 192: #line 779 "grammar/xp.jay" { $p= $yyLex->position; } break; - case 184: #line 758 "grammar/xp.jay" + case 193: #line 779 "grammar/xp.jay" { $yyVals[-1+$yyTop]->position= $p; if ($yyVals[0+$yyTop]) { @@ -2318,10 +2349,10 @@ public function yyparse($yyLex) { } } break; - case 185: #line 767 "grammar/xp.jay" + case 194: #line 788 "grammar/xp.jay" { $p= $yyLex->position; } break; - case 186: #line 767 "grammar/xp.jay" + case 195: #line 788 "grammar/xp.jay" { $yyVals[-1+$yyTop]->position= $p; $yyVals[-1+$yyTop]->type= new TypeName($yyVals[-4+$yyTop]); @@ -2333,10 +2364,10 @@ public function yyparse($yyLex) { } } break; - case 187: #line 777 "grammar/xp.jay" + case 196: #line 798 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new InvocationNode($yyVals[-1+$yyTop])); } break; - case 188: #line 777 "grammar/xp.jay" + case 197: #line 798 "grammar/xp.jay" { $yyVals[-4+$yyTop]->arguments= $yyVals[-2+$yyTop]; if ($yyVals[0+$yyTop]) { @@ -2347,43 +2378,43 @@ public function yyparse($yyLex) { } } break; - case 189: #line 786 "grammar/xp.jay" + case 198: #line 807 "grammar/xp.jay" { $yyVal= $yyLex->create(new CloneNode($yyVals[0+$yyTop])); break; } break; - case 190: #line 789 "grammar/xp.jay" + case 199: #line 810 "grammar/xp.jay" { $yyVal= $yyLex->create(new CastNode(array_merge($yyVals[0+$yyTop], array('expression' => $yyVals[-2+$yyTop])))); } break; - case 191: #line 792 "grammar/xp.jay" + case 200: #line 813 "grammar/xp.jay" { $yyVal= $yyLex->create(new AssignmentNode($yyVals[0+$yyTop])); } break; - case 192: #line 795 "grammar/xp.jay" + case 201: #line 816 "grammar/xp.jay" { $yyVal= $yyLex->create(new ComparisonNode($yyVals[0+$yyTop])); } break; - case 193: #line 798 "grammar/xp.jay" + case 202: #line 819 "grammar/xp.jay" { $yyVal= $yyLex->create(new BinaryOpNode($yyVals[0+$yyTop])); } break; - case 194: #line 801 "grammar/xp.jay" + case 203: #line 822 "grammar/xp.jay" { $yyVal= $yyLex->create(new UnaryOpNode($yyVals[0+$yyTop])); } break; - case 195: #line 804 "grammar/xp.jay" + case 204: #line 825 "grammar/xp.jay" { $yyVal= $yyLex->create(new UnaryOpNode($yyVals[0+$yyTop])); $yyVal->postfix= TRUE; } break; - case 196: #line 808 "grammar/xp.jay" + case 205: #line 829 "grammar/xp.jay" { $yyVal= $yyLex->create(new TernaryNode()); $yyVal->condition= $yyVals[-4+$yyTop]; @@ -2391,7 +2422,7 @@ public function yyparse($yyLex) { $yyVal->conditional= $yyVals[0+$yyTop]; } break; - case 197: #line 814 "grammar/xp.jay" + case 206: #line 835 "grammar/xp.jay" { $yyVal= $yyLex->create(new BinaryOpNode()); $yyVal->lhs= $yyVals[-2+$yyTop]; @@ -2399,7 +2430,7 @@ public function yyparse($yyLex) { $yyVal->op= '||'; } break; - case 198: #line 820 "grammar/xp.jay" + case 207: #line 841 "grammar/xp.jay" { $yyVal= $yyLex->create(new BinaryOpNode()); $yyVal->lhs= $yyVals[-2+$yyTop]; @@ -2407,17 +2438,17 @@ public function yyparse($yyLex) { $yyVal->op= '&&'; } break; - case 199: #line 826 "grammar/xp.jay" + case 208: #line 847 "grammar/xp.jay" { $yyVal= $yyLex->create(new InstanceOfNode()); $yyVal->expression= $yyVals[-2+$yyTop]; $yyVal->type= $yyVals[0+$yyTop]; } break; - case 200: #line 831 "grammar/xp.jay" + case 209: #line 852 "grammar/xp.jay" { $yyVals[-5+$yyTop]= $yyLex->create(new LambdaNode($yyVals[-3+$yyTop], $yyVals[-1+$yyTop])); } break; - case 201: #line 831 "grammar/xp.jay" + case 210: #line 852 "grammar/xp.jay" { if ($yyVals[0+$yyTop]) { $yyVal= $yyVals[0+$yyTop][0]; @@ -2425,7 +2456,7 @@ public function yyparse($yyLex) { } } break; - case 202: #line 837 "grammar/xp.jay" + case 211: #line 858 "grammar/xp.jay" { if ($yyVals[0+$yyTop]) { $yyVal= $yyVals[0+$yyTop][0]; @@ -2435,32 +2466,32 @@ public function yyparse($yyLex) { } } break; - case 203: #line 848 "grammar/xp.jay" + case 212: #line 869 "grammar/xp.jay" { $yyVal= array(new ReturnNode($yyVals[0+$yyTop])); } break; - case 204: #line 851 "grammar/xp.jay" + case 213: #line 872 "grammar/xp.jay" { $yyVal= (array)$yyVals[-1+$yyTop]; } break; - case 205: #line 857 "grammar/xp.jay" + case 214: #line 878 "grammar/xp.jay" { $yyVal= array(); } break; - case 207: #line 862 "grammar/xp.jay" + case 216: #line 883 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 208: #line 863 "grammar/xp.jay" + case 217: #line 884 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])); } break; - case 209: #line 867 "grammar/xp.jay" + case 218: #line 888 "grammar/xp.jay" { $yyVal= new VariableNode($yyVals[0+$yyTop]); } break; - case 210: #line 868 "grammar/xp.jay" + case 219: #line 889 "grammar/xp.jay" { $yyVal= new VariableNode($yyVals[0+$yyTop]); } break; - case 211: #line 872 "grammar/xp.jay" + case 220: #line 893 "grammar/xp.jay" { switch ($yyVals[0+$yyTop]) { case 'true': $yyVal= $yyLex->create(new BooleanNode(TRUE)); break; case 'false': $yyVal= $yyLex->create(new BooleanNode(FALSE)); break; @@ -2468,279 +2499,279 @@ public function yyparse($yyLex) { default: $yyVal= $yyLex->create(new ConstantNode($yyVals[0+$yyTop])); break; }} break; - case 212: #line 878 "grammar/xp.jay" + case 221: #line 899 "grammar/xp.jay" { $p= $yyLex->position; } break; - case 213: #line 878 "grammar/xp.jay" + case 222: #line 899 "grammar/xp.jay" { $yyVals[-1+$yyTop]->position= $p; $yyVals[-1+$yyTop]->type= NULL; $yyVal= $yyVals[-1+$yyTop]; } break; - case 214: #line 879 "grammar/xp.jay" + case 223: #line 900 "grammar/xp.jay" { $yyVal= $yyLex->create(new IntegerNode($yyVals[0+$yyTop])); } break; - case 215: #line 880 "grammar/xp.jay" + case 224: #line 901 "grammar/xp.jay" { $yyVal= $yyLex->create(new HexNode($yyVals[0+$yyTop])); } break; - case 216: #line 881 "grammar/xp.jay" + case 225: #line 902 "grammar/xp.jay" { $yyVal= $yyLex->create(new OctalNode($yyVals[0+$yyTop])); } break; - case 217: #line 882 "grammar/xp.jay" + case 226: #line 903 "grammar/xp.jay" { $yyVal= $yyLex->create(new DecimalNode($yyVals[0+$yyTop])); } break; - case 218: #line 883 "grammar/xp.jay" + case 227: #line 904 "grammar/xp.jay" { $yyVal= $yyLex->create(new StringNode($yyVals[0+$yyTop])); } break; - case 219: #line 887 "grammar/xp.jay" + case 228: #line 908 "grammar/xp.jay" { $yyVal= $yyLex->create(new ArrayNode(array('values' => (array)$yyVals[0+$yyTop]))); } break; - case 220: #line 890 "grammar/xp.jay" + case 229: #line 911 "grammar/xp.jay" { $yyVal= $yyLex->create(new MapNode(array('elements' => (array)$yyVals[0+$yyTop]))); } break; - case 221: #line 896 "grammar/xp.jay" + case 230: #line 917 "grammar/xp.jay" { $yyVal= NULL; } break; - case 223: #line 901 "grammar/xp.jay" + case 232: #line 922 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 224: #line 902 "grammar/xp.jay" + case 233: #line 923 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop] ? array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])) : $yyVals[-2+$yyTop]; } break; - case 225: #line 906 "grammar/xp.jay" + case 234: #line 927 "grammar/xp.jay" { $yyVal= NULL; } break; - case 227: #line 911 "grammar/xp.jay" + case 236: #line 932 "grammar/xp.jay" { $yyVal= array(new StringNode($yyVals[-2+$yyTop]), $yyVals[0+$yyTop]); } break; - case 228: #line 912 "grammar/xp.jay" + case 237: #line 933 "grammar/xp.jay" { $yyVal= array(new StringNode($yyVals[-2+$yyTop]), $yyVals[0+$yyTop]); } break; - case 229: #line 916 "grammar/xp.jay" + case 238: #line 937 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 230: #line 917 "grammar/xp.jay" + case 239: #line 938 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 231: #line 918 "grammar/xp.jay" + case 240: #line 939 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 232: #line 919 "grammar/xp.jay" + case 241: #line 940 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 233: #line 920 "grammar/xp.jay" + case 242: #line 941 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 234: #line 921 "grammar/xp.jay" + case 243: #line 942 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 235: #line 922 "grammar/xp.jay" + case 244: #line 943 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 236: #line 923 "grammar/xp.jay" + case 245: #line 944 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 237: #line 924 "grammar/xp.jay" + case 246: #line 945 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 238: #line 925 "grammar/xp.jay" + case 247: #line 946 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 239: #line 926 "grammar/xp.jay" + case 248: #line 947 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-3+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 240: #line 927 "grammar/xp.jay" + case 249: #line 948 "grammar/xp.jay" { $yyVal= array('variable' => $yyVals[-3+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 241: #line 931 "grammar/xp.jay" + case 250: #line 952 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 242: #line 932 "grammar/xp.jay" + case 251: #line 953 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 243: #line 933 "grammar/xp.jay" + case 252: #line 954 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 244: #line 934 "grammar/xp.jay" + case 253: #line 955 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 245: #line 935 "grammar/xp.jay" + case 254: #line 956 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 246: #line 936 "grammar/xp.jay" + case 255: #line 957 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 247: #line 937 "grammar/xp.jay" + case 256: #line 958 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].'='); } break; - case 248: #line 938 "grammar/xp.jay" + case 257: #line 959 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].'='); } break; - case 249: #line 942 "grammar/xp.jay" + case 258: #line 963 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 250: #line 943 "grammar/xp.jay" + case 259: #line 964 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 251: #line 944 "grammar/xp.jay" + case 260: #line 965 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 252: #line 945 "grammar/xp.jay" + case 261: #line 966 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 253: #line 946 "grammar/xp.jay" + case 262: #line 967 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 254: #line 947 "grammar/xp.jay" + case 263: #line 968 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 255: #line 948 "grammar/xp.jay" + case 264: #line 969 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 256: #line 949 "grammar/xp.jay" + case 265: #line 970 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 257: #line 950 "grammar/xp.jay" + case 266: #line 971 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 258: #line 951 "grammar/xp.jay" + case 267: #line 972 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 259: #line 952 "grammar/xp.jay" + case 268: #line 973 "grammar/xp.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 260: #line 956 "grammar/xp.jay" + case 269: #line 977 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 261: #line 957 "grammar/xp.jay" + case 270: #line 978 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 262: #line 958 "grammar/xp.jay" + case 271: #line 979 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 263: #line 959 "grammar/xp.jay" + case 272: #line 980 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 264: #line 960 "grammar/xp.jay" + case 273: #line 981 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 265: #line 961 "grammar/xp.jay" + case 274: #line 982 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 266: #line 965 "grammar/xp.jay" + case 275: #line 986 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[-1+$yyTop], 'op' => $yyVals[0+$yyTop]); } break; - case 267: #line 966 "grammar/xp.jay" + case 276: #line 987 "grammar/xp.jay" { $yyVal= array('expression' => $yyVals[-1+$yyTop], 'op' => $yyVals[0+$yyTop]); } break; - case 268: #line 971 "grammar/xp.jay" + case 277: #line 992 "grammar/xp.jay" { $yyVal= NULL; } break; - case 270: #line 976 "grammar/xp.jay" + case 279: #line 997 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop], $yyVals[0+$yyTop]); } break; - case 271: #line 977 "grammar/xp.jay" + case 280: #line 998 "grammar/xp.jay" { $yyVals[0+$yyTop][1]->target= $yyVals[-1+$yyTop]; $yyVal= array($yyVals[0+$yyTop][0], $yyVals[-1+$yyTop]); } break; - case 272: #line 981 "grammar/xp.jay" + case 281: #line 1002 "grammar/xp.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ArrayAccessNode(NULL)); } break; - case 273: #line 981 "grammar/xp.jay" + case 282: #line 1002 "grammar/xp.jay" { $yyVals[-3+$yyTop]->offset= $yyVals[-1+$yyTop]; } break; - case 274: #line 984 "grammar/xp.jay" + case 283: #line 1005 "grammar/xp.jay" { $yyVal= $yyLex->create(new MemberAccessNode(NULL, $yyVals[0+$yyTop], $yyVals[-1+$yyTop])); } break; - case 275: #line 987 "grammar/xp.jay" + case 284: #line 1008 "grammar/xp.jay" { $yyVals[-2+$yyTop]= $yyLex->create(new MethodCallNode(NULL, $yyVals[-1+$yyTop], NULL, $yyVals[-2+$yyTop])); } break; - case 276: #line 987 "grammar/xp.jay" + case 285: #line 1008 "grammar/xp.jay" { $yyVals[-5+$yyTop]->arguments= $yyVals[-1+$yyTop]; } break; - case 277: #line 990 "grammar/xp.jay" + case 286: #line 1011 "grammar/xp.jay" { $yyVals[-1+$yyTop]= $yyLex->create(new InstanceCallNode(NULL, NULL, $yyVals[-1+$yyTop])); } break; - case 278: #line 990 "grammar/xp.jay" + case 287: #line 1011 "grammar/xp.jay" { $yyVals[-4+$yyTop]->arguments= $yyVals[-1+$yyTop]; } break; - case 279: #line 996 "grammar/xp.jay" + case 288: #line 1017 "grammar/xp.jay" { $yyVal= FALSE; } break; - case 280: #line 997 "grammar/xp.jay" + case 289: #line 1018 "grammar/xp.jay" { $yyVal= TRUE; } break; - case 287: #line 1015 "grammar/xp.jay" + case 296: #line 1036 "grammar/xp.jay" { $yyVal= new TypeName($yyVals[0+$yyTop]); } break; - case 288: #line 1016 "grammar/xp.jay" + case 297: #line 1037 "grammar/xp.jay" { $yyVal= new TypeName($yyVals[-3+$yyTop], $yyVals[-1+$yyTop]); } break; - case 289: #line 1020 "grammar/xp.jay" + case 298: #line 1041 "grammar/xp.jay" { $yyVal= new TypeName($yyVals[-2+$yyTop]->compoundName().'[]'); } break; - case 290: #line 1024 "grammar/xp.jay" + case 299: #line 1045 "grammar/xp.jay" { $yyVal= new TypeName('[:'.$yyVals[-1+$yyTop]->compoundName().']'); } break; - case 291: #line 1028 "grammar/xp.jay" + case 300: #line 1049 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 292: #line 1029 "grammar/xp.jay" + case 301: #line 1050 "grammar/xp.jay" { $yyVal= array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])); } break; - case 294: #line 1034 "grammar/xp.jay" + case 303: #line 1055 "grammar/xp.jay" { $yyVal= new TypeName($yyVals[0+$yyTop].'+'); } break; - case 295: #line 1038 "grammar/xp.jay" + case 304: #line 1059 "grammar/xp.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 296: #line 1039 "grammar/xp.jay" + case 305: #line 1060 "grammar/xp.jay" { $yyVal= array_merge(array($yyVals[-2+$yyTop]), $yyVals[0+$yyTop]); } break; - case 297: #line 1045 "grammar/xp.jay" + case 306: #line 1066 "grammar/xp.jay" { $yyVal= 0; } break; - case 298: #line 1046 "grammar/xp.jay" + case 307: #line 1067 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 299: #line 1050 "grammar/xp.jay" + case 308: #line 1071 "grammar/xp.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 300: #line 1051 "grammar/xp.jay" + case 309: #line 1072 "grammar/xp.jay" { $yyVal= $yyVals[-1+$yyTop] | $yyVals[0+$yyTop]; } break; - case 301: #line 1055 "grammar/xp.jay" + case 310: #line 1076 "grammar/xp.jay" { $yyVal= MODIFIER_PUBLIC; } break; - case 302: #line 1056 "grammar/xp.jay" + case 311: #line 1077 "grammar/xp.jay" { $yyVal= MODIFIER_PROTECTED; } break; - case 303: #line 1057 "grammar/xp.jay" + case 312: #line 1078 "grammar/xp.jay" { $yyVal= MODIFIER_PRIVATE; } break; - case 304: #line 1058 "grammar/xp.jay" + case 313: #line 1079 "grammar/xp.jay" { $yyVal= MODIFIER_PACKAGE; } break; - case 305: #line 1059 "grammar/xp.jay" + case 314: #line 1080 "grammar/xp.jay" { $yyVal= MODIFIER_STATIC; } break; - case 306: #line 1060 "grammar/xp.jay" + case 315: #line 1081 "grammar/xp.jay" { $yyVal= MODIFIER_ABSTRACT; } break; - case 307: #line 1061 "grammar/xp.jay" + case 316: #line 1082 "grammar/xp.jay" { $yyVal= MODIFIER_FINAL; } break; - case 308: #line 1062 "grammar/xp.jay" + case 317: #line 1083 "grammar/xp.jay" { $yyVal= MODIFIER_INLINE; } break; -#line 2744 "-" +#line 2775 "-" } $yyTop-= self::$yyLen[$yyN]; diff --git a/compiler/src/main/php/xp/compiler/types/GenericType.class.php b/compiler/src/main/php/xp/compiler/types/GenericType.class.php index 33d869ed4..ae9ddeccc 100644 --- a/compiler/src/main/php/xp/compiler/types/GenericType.class.php +++ b/compiler/src/main/php/xp/compiler/types/GenericType.class.php @@ -180,7 +180,12 @@ public function hasConstructor() { * @return xp.compiler.types.Constructor */ public function getConstructor() { - return $this->definition->getConstructor(); + if (null === ($constructor= $this->definition->getConstructor())) return null; + + foreach ($constructor->parameters as $name => $param) { + $param['type'] && $constructor->parameters[$name]['type']= $this->rewrite($param['type']); + } + return $constructor; } /** @@ -216,12 +221,13 @@ protected function typeNameOf($t) { * @return xp.compiler.types.Method */ public function getMethod($name) { - if (null !== ($method= $this->definition->getMethod($name))) { - $method->returns= $method->returns ? $this->rewrite($method->returns) : null; - $method->parameters= $this->rewriteAll($method->parameters); - return $method; + if (null === ($method= $this->definition->getMethod($name))) return null; + + $method->returns= $method->returns ? $this->rewrite($method->returns) : null; + foreach ($method->parameters as $name => $param) { + $param['type'] && $method->parameters[$name]['type']= $this->rewrite($param['type']); } - return null; + return $method; } /** diff --git a/compiler/src/main/php/xp/compiler/types/TypeDeclaration.class.php b/compiler/src/main/php/xp/compiler/types/TypeDeclaration.class.php index 61da943f6..feddc20ee 100644 --- a/compiler/src/main/php/xp/compiler/types/TypeDeclaration.class.php +++ b/compiler/src/main/php/xp/compiler/types/TypeDeclaration.class.php @@ -127,7 +127,10 @@ public function getConstructor() { $c= new Constructor(); $c->modifiers= $member->modifiers; foreach ($member->parameters as $p) { - $c->parameters[]= $p['type']; + $c->parameters[$p['name']]= array( + 'type' => $p['type'], + 'default' => isset($p['default']) ? $p['default'] : null + ); } $c->holder= $this; return $c; @@ -163,7 +166,10 @@ public function getMethod($name) { $m->returns= $member->returns; $m->modifiers= $member->modifiers; foreach ((array)$member->parameters as $p) { - $m->parameters[]= $p['type']; + $m->parameters[$p['name']]= array( + 'type' => $p['type'], + 'default' => isset($p['default']) ? $p['default'] : null + ); } $m->holder= $this; return $m; @@ -188,7 +194,10 @@ public function getExtensions() { $m->returns= $member->returns; $m->modifiers= $member->modifiers; foreach ((array)$member->parameters as $p) { - $m->parameters[]= $p['type']; + $m->parameters[$p['name']]= array( + 'type' => $p['type'], + 'default' => isset($p['default']) ? $p['default'] : null + ); } $m->holder= $this; @@ -225,7 +234,10 @@ public function getOperator($symbol) { $m->returns= $member->returns; $m->modifiers= $member->modifiers; foreach ($member->parameters as $p) { - $m->parameters[]= $p->type; + $m->parameters[$p['name']]= array( + 'type' => $p['type'], + 'default' => isset($p['default']) ? $p['default'] : null + ); } $m->holder= $this; return $m; diff --git a/compiler/src/main/php/xp/compiler/types/TypeReflection.class.php b/compiler/src/main/php/xp/compiler/types/TypeReflection.class.php index 3c90f849f..07ea7d1b9 100644 --- a/compiler/src/main/php/xp/compiler/types/TypeReflection.class.php +++ b/compiler/src/main/php/xp/compiler/types/TypeReflection.class.php @@ -1,7 +1,10 @@ class->getName()); - } else if (0 == strncmp($t, 'array', 5)) { + } else if (0 === strncmp($t, 'array', 5)) { return new TypeName('var[]'); + } else { + return new TypeName($t); + } + } + + /** + * Maps default values + * + * @param var value + * @return xp.compiler.ast.Node + * @throws lang.IllegalArgumentException + */ + protected function nodeOf($value) { + + // Primitives + if (null === $value) { + return new \xp\compiler\ast\NullNode(); + } else if (Primitive::$STRING->isInstance($value)) { + return new \xp\compiler\ast\StringNode($value); + } else if (Primitive::$INT->isInstance($value)) { + return new \xp\compiler\ast\IntegerNode($value); + } else if (Primitive::$DOUBLE->isInstance($value)) { + return new \xp\compiler\ast\DecimalNode($value); + } else if (Primitive::$BOOL->isInstance($value)) { + return new \xp\compiler\ast\BooleanNode($value); + } + + // Arrays and maps + $type= typeof($value); + if ($type instanceof ArrayType) { + $r= new \xp\compiler\ast\ArrayNode(); + foreach ($value as $element) { + $r->values[]= $this->nodeOf($element); + } + return $r; + } else if ($type instanceof MapType) { + $r= new \xp\compiler\ast\MapNode(); + foreach ($value as $key => $member) { + $r->elements[]= array($this->nodeOf($key), $this->nodeOf($member)); + } + return $r; } - return new TypeName($t); + + // Other types of default values shouldn't appear here + throw new \lang\IllegalArgumentException('Cannot map '.$type->toString().' to a creation node'); } /** @@ -162,7 +208,10 @@ public function getConstructor() { $c->modifiers= $constructor->getModifiers(); $c->parameters= array(); foreach ($constructor->getParameters() as $p) { - $c->parameters[]= $this->typeNameOf($p->getTypeName()); + $c->parameters[$p->getName()]= array( + 'type' => $this->typeNameOf($p->getTypeName()), + 'default' => $p->isOptional() ? $this->nodeOf($p->getDefaultValue()) : NULL + ); } $c->holder= $this; return $c; @@ -195,7 +244,10 @@ public function getMethod($name) { $m->modifiers= $method->getModifiers(); $m->parameters= array(); foreach ($method->getParameters() as $p) { - $m->parameters[]= $this->typeNameOf($p->getTypeName()); + $m->parameters[$p->getName()]= array( + 'type' => $this->typeNameOf($p->getTypeName()), + 'default' => $p->isOptional() ? $this->nodeOf($p->getDefaultValue()) : NULL + ); } $m->holder= $this; return $m; @@ -286,7 +338,10 @@ public function getOperator($symbol) { $m->modifiers= $method->getModifiers(); $m->parameters= array(); foreach ($method->getParameters() as $p) { - $m->parameters[]= $this->typeNameOf($p->getTypeName()); + $m->parameters[$p->getName()]= array( + 'type' => $this->typeNameOf($p->getTypeName()), + 'default' => $p->isOptional() ? $this->nodeOf($p->getDefaultValue()) : NULL + ); } $m->holder= $this; return $m; diff --git a/compiler/src/test/config/execution.ini b/compiler/src/test/config/execution.ini index f9d696696..c047f0792 100755 --- a/compiler/src/test/config/execution.ini +++ b/compiler/src/test/config/execution.ini @@ -119,3 +119,6 @@ class="net.xp_lang.tests.execution.source.CompactSyntaxTest" [source.NavigationOperatorTest] class="net.xp_lang.tests.execution.source.NavigationOperatorTest" + +[source.NamedArgsTest] +class="net.xp_lang.tests.execution.source.NamedArgsTest" diff --git a/compiler/src/test/php/net/xp_lang/tests/execution/source/NamedArgsTest.class.php b/compiler/src/test/php/net/xp_lang/tests/execution/source/NamedArgsTest.class.php new file mode 100755 index 000000000..6a3980c14 --- /dev/null +++ b/compiler/src/test/php/net/xp_lang/tests/execution/source/NamedArgsTest.class.php @@ -0,0 +1,124 @@ +define('class', $this->name, NULL, '{ + public [:var] fixture(string $url= null, [:string] $params= [:], [:string] $headers= [:]) { + return [ url: $url, params: $params, headers: $headers]; + } + + public [:var] run() { + return $this.fixture('.$arguments.'); + } + }'); + return $fixture->newInstance()->run(); + } + + /** + * Test + * + */ + #[@test] + public function pass_all_without_names() { + $this->assertEquals( + array('url' => '/', 'params' => array('a' => 'b'), 'headers' => array('X' => 'Y')), + $this->pass('"/", [ a: "b" ], [ X: "Y"]') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_first_without_name() { + $this->assertEquals( + array('url' => '/', 'params' => array(), 'headers' => array()), + $this->pass('"/"') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_all_with_names() { + $this->assertEquals( + array('url' => '/', 'params' => array('a' => 'b'), 'headers' => array('X' => 'Y')), + $this->pass('url: "/", params: [ a: "b" ], headers: [ X: "Y"]') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_all_with_names_divergent_order() { + $this->assertEquals( + array('url' => '/', 'params' => array('a' => 'b'), 'headers' => array('X' => 'Y')), + $this->pass('url: "/", headers: [ X: "Y"], params: [ a: "b" ]') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_first_with_name() { + $this->assertEquals( + array('url' => '/', 'params' => array(), 'headers' => array()), + $this->pass('url: "/"') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_first_with_quoted_name() { + $this->assertEquals( + array('url' => '/', 'params' => array(), 'headers' => array()), + $this->pass('"url": "/"') + ); + } + + /** + * Test + * + */ + #[@test] + public function pass_first_two_with_names() { + $this->assertEquals( + array('url' => '/', 'params' => array('a' => 'b'), 'headers' => array()), + $this->pass('url: "/", params: [ a: "b" ]') + ); + } + + /** + * Test + * + */ + #[@test] + public function omit_one_in_the_middle_with_names() { + $this->assertEquals( + array('url' => '/', 'params' => array(), 'headers' => array('X' => 'Y')), + $this->pass('url: "/", headers: [ X: "Y"]') + ); + } +} diff --git a/compiler/src/test/php/net/xp_lang/tests/types/GenericTypeTest.class.php b/compiler/src/test/php/net/xp_lang/tests/types/GenericTypeTest.class.php index 9953f9ab4..64138e424 100644 --- a/compiler/src/test/php/net/xp_lang/tests/types/GenericTypeTest.class.php +++ b/compiler/src/test/php/net/xp_lang/tests/types/GenericTypeTest.class.php @@ -180,7 +180,10 @@ public function hashTableGetMethodType() { */ #[@test] public function hashTableGetMethodParameters() { - $this->assertEquals(array(new TypeName('string')), $this->newGenericHashTableType()->getMethod('get')->parameters); + $this->assertEquals( + array('key' => array('type' => new TypeName('string'), 'default' => null)), + $this->newGenericHashTableType()->getMethod('get')->parameters + ); } /** @@ -225,6 +228,9 @@ public function vectorGetMethodType() { */ #[@test] public function vectorGetMethodParameters() { - $this->assertEquals(array(new TypeName('int')), $this->newGenericVectorType()->getMethod('get')->parameters); + $this->assertEquals( + array('index' => array('type' => new TypeName('int'), 'default' => null)), + $this->newGenericVectorType()->getMethod('get')->parameters + ); } -} +} \ No newline at end of file diff --git a/compiler/src/test/php/net/xp_lang/tests/types/TypeDeclarationTest.class.php b/compiler/src/test/php/net/xp_lang/tests/types/TypeDeclarationTest.class.php index d2329f73e..efc8ffb10 100644 --- a/compiler/src/test/php/net/xp_lang/tests/types/TypeDeclarationTest.class.php +++ b/compiler/src/test/php/net/xp_lang/tests/types/TypeDeclarationTest.class.php @@ -143,14 +143,15 @@ protected function stringClass() { 'modifiers' => MODIFIER_PUBLIC, 'parameters' => array( array( - 'name' => 'start', - 'type' => new TypeName('int'), - 'check' => true + 'name' => 'start', + 'type' => new TypeName('int'), + 'check' => true ), array( - 'name' => 'end', - 'type' => new TypeName('int'), - 'check' => true + 'name' => 'end', + 'type' => new TypeName('int'), + 'check' => true, + 'default' => new IntegerNode(0) ) ) )), @@ -363,7 +364,13 @@ public function stringClassSubstringMethod() { $method= $this->stringClass()->getMethod('substring'); $this->assertEquals(new TypeName('lang.types.String'), $method->returns); $this->assertEquals('substring', $method->name); - $this->assertEquals(array(new TypeName('int'), new TypeName('int')), $method->parameters); + $this->assertEquals( + array( + 'start' => array('type' => new TypeName('int'), 'default' => NULL), + 'end' => array('type' => new TypeName('int'), 'default' => new IntegerNode(0)) + ), + $method->parameters + ); $this->assertEquals(MODIFIER_PUBLIC, $method->modifiers); } diff --git a/compiler/src/test/php/net/xp_lang/tests/types/TypeReflectionTest.class.php b/compiler/src/test/php/net/xp_lang/tests/types/TypeReflectionTest.class.php index 56544a1d3..40b2f3c19 100644 --- a/compiler/src/test/php/net/xp_lang/tests/types/TypeReflectionTest.class.php +++ b/compiler/src/test/php/net/xp_lang/tests/types/TypeReflectionTest.class.php @@ -143,7 +143,13 @@ public function stringClassSubstringMethod() { $method= create(new TypeReflection(XPClass::forName('lang.types.String')))->getMethod('substring'); $this->assertEquals(new TypeName('lang.types.String'), $method->returns); $this->assertEquals('substring', $method->name); - $this->assertEquals(array(new TypeName('int'), new TypeName('int')), $method->parameters); + $this->assertEquals( + array( + 'start' => array('type' => new TypeName('int'), 'default' => NULL), + 'length' => array('type' => new TypeName('int'), 'default' => new \xp\compiler\ast\IntegerNode(0)) + ), + $method->parameters + ); $this->assertEquals(MODIFIER_PUBLIC, $method->modifiers); } @@ -309,7 +315,7 @@ public function selfParameterType() { $builder= create(new TypeReflection(XPClass::forName('net.xp_lang.tests.types.Builder'))); $this->assertEquals( new TypeName('net.xp_lang.tests.types.Builder'), - $builder->getMethod('create')->parameters[0] + $builder->getMethod('create')->parameters['self']['type'] ); } @@ -351,4 +357,4 @@ public function code() { return 98; } create(new TypeReflection($cl))->getField('a')->type ); } -} \ No newline at end of file +}