diff --git a/.arclint b/.arclint index d6233a0f..7080c039 100644 --- a/.arclint +++ b/.arclint @@ -36,7 +36,19 @@ "exclude": "(^resources/spelling/.*\\.json$)" }, "text": { - "type": "text" + "type": "text", + "exclude": [ + "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))" + ] + }, + "text-without-length": { + "type": "text", + "include": [ + "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))" + ], + "severity": { + "3": "disabled" + } }, "xhpast": { "type": "xhpast", diff --git a/.gitignore b/.gitignore index 824a9e89..53eeb426 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,22 @@ # User extensions /externals/includes/* /src/extensions/* + +# XHPAST +/support/xhpast/*.a +/support/xhpast/*.o +/support/xhpast/parser.yacc.output +/support/xhpast/node_names.hpp +/support/xhpast/xhpast +/support/xhpast/xhpast.exe +/src/parser/xhpast/bin/xhpast + +## NOTE: Don't .gitignore these files! Even though they're build artifacts, we +## want to check them in so users can build xhpast without flex/bison. +# /support/xhpast/parser.yacc.cpp +# /support/xhpast/parser.yacc.hpp +# /support/xhpast/scanner.lex.cpp +# /support/xhpast/scanner.lex.hpp + +# This is an OS X build artifact. +/support/xhpast/xhpast.dSYM diff --git a/externals/jsonlint/LICENSE b/externals/jsonlint/LICENSE new file mode 100644 index 00000000..c2344874 --- /dev/null +++ b/externals/jsonlint/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/externals/jsonlint/src/Seld/JsonLint/JsonParser.php b/externals/jsonlint/src/Seld/JsonLint/JsonParser.php new file mode 100644 index 00000000..7100abfa --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/JsonParser.php @@ -0,0 +1,488 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Parser class + * + * Example: + * + * $parser = new JsonParser(); + * // returns null if it's valid json, or an error object + * $parser->lint($json); + * // returns parsed json, like json_decode does, but slower, throws exceptions on failure. + * $parser->parse($json); + * + * Ported from https://github.com/zaach/jsonlint + */ +class JsonLintJsonParser +{ + const DETECT_KEY_CONFLICTS = 1; + const ALLOW_DUPLICATE_KEYS = 2; + const PARSE_TO_ASSOC = 4; + + private $lexer; + + private $flags; + private $stack; + private $vstack; // semantic value stack + private $lstack; // location stack + + private $symbols = array( + 'error' => 2, + 'JSONString' => 3, + 'STRING' => 4, + 'JSONNumber' => 5, + 'NUMBER' => 6, + 'JSONNullLiteral' => 7, + 'NULL' => 8, + 'JSONBooleanLiteral' => 9, + 'TRUE' => 10, + 'FALSE' => 11, + 'JSONText' => 12, + 'JSONValue' => 13, + 'EOF' => 14, + 'JSONObject' => 15, + 'JSONArray' => 16, + '{' => 17, + '}' => 18, + 'JSONMemberList' => 19, + 'JSONMember' => 20, + ':' => 21, + ',' => 22, + '[' => 23, + ']' => 24, + 'JSONElementList' => 25, + '$accept' => 0, + '$end' => 1, + ); + + private $terminals_ = array( + 2 => "error", + 4 => "STRING", + 6 => "NUMBER", + 8 => "NULL", + 10 => "TRUE", + 11 => "FALSE", + 14 => "EOF", + 17 => "{", + 18 => "}", + 21 => ":", + 22 => ",", + 23 => "[", + 24 => "]", + ); + + private $productions_ = array( + 0, + array(3, 1), + array(5, 1), + array(7, 1), + array(9, 1), + array(9, 1), + array(12, 2), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(15, 2), + array(15, 3), + array(20, 3), + array(19, 1), + array(19, 3), + array(16, 2), + array(16, 3), + array(25, 1), + array(25, 3) + ); + + private $table = array(array(3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 12 => 1, 13 => 2, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 1 => array(3)), array( 14 => array(1,16)), array( 14 => array(2,7), 18 => array(2,7), 22 => array(2,7), 24 => array(2,7)), array( 14 => array(2,8), 18 => array(2,8), 22 => array(2,8), 24 => array(2,8)), array( 14 => array(2,9), 18 => array(2,9), 22 => array(2,9), 24 => array(2,9)), array( 14 => array(2,10), 18 => array(2,10), 22 => array(2,10), 24 => array(2,10)), array( 14 => array(2,11), 18 => array(2,11), 22 => array(2,11), 24 => array(2,11)), array( 14 => array(2,12), 18 => array(2,12), 22 => array(2,12), 24 => array(2,12)), array( 14 => array(2,3), 18 => array(2,3), 22 => array(2,3), 24 => array(2,3)), array( 14 => array(2,4), 18 => array(2,4), 22 => array(2,4), 24 => array(2,4)), array( 14 => array(2,5), 18 => array(2,5), 22 => array(2,5), 24 => array(2,5)), array( 14 => array(2,1), 18 => array(2,1), 21 => array(2,1), 22 => array(2,1), 24 => array(2,1)), array( 14 => array(2,2), 18 => array(2,2), 22 => array(2,2), 24 => array(2,2)), array( 3 => 20, 4 => array(1,12), 18 => array(1,17), 19 => 18, 20 => 19 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 23, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15), 24 => array(1,21), 25 => 22 ), array( 1 => array(2,6)), array( 14 => array(2,13), 18 => array(2,13), 22 => array(2,13), 24 => array(2,13)), array( 18 => array(1,24), 22 => array(1,25)), array( 18 => array(2,16), 22 => array(2,16)), array( 21 => array(1,26)), array( 14 => array(2,18), 18 => array(2,18), 22 => array(2,18), 24 => array(2,18)), array( 22 => array(1,28), 24 => array(1,27)), array( 22 => array(2,20), 24 => array(2,20)), array( 14 => array(2,14), 18 => array(2,14), 22 => array(2,14), 24 => array(2,14)), array( 3 => 20, 4 => array(1,12), 20 => 29 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 30, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 14 => array(2,19), 18 => array(2,19), 22 => array(2,19), 24 => array(2,19)), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 31, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 18 => array(2,17), 22 => array(2,17)), array( 18 => array(2,15), 22 => array(2,15)), array( 22 => array(2,21), 24 => array(2,21)), + ); + + private $defaultActions = array( + 16 => array(2, 6) + ); + + /** + * @param string $input JSON string + * @return null|JsonLintParsingException null if no error is found, a JsonLintParsingException containing all details otherwise + */ + public function lint($input) + { + try { + $this->parse($input); + } catch (JsonLintParsingException $e) { + return $e; + } + } + + /** + * @param string $input JSON string + * @return mixed + * @throws JsonLintParsingException + */ + public function parse($input, $flags = 0) + { + $this->failOnBOM($input); + + $this->flags = $flags; + + $this->stack = array(0); + $this->vstack = array(null); + $this->lstack = array(); + + $yytext = ''; + $yylineno = 0; + $yyleng = 0; + $recovering = 0; + $TERROR = 2; + $EOF = 1; + + $this->lexer = new JsonLintLexer(); + $this->lexer->setInput($input); + + $yyloc = $this->lexer->yylloc; + $this->lstack[] = $yyloc; + + $symbol = null; + $preErrorSymbol = null; + $state = null; + $action = null; + $a = null; + $r = null; + $yyval = new stdClass; + $p = null; + $len = null; + $newState = null; + $expected = null; + $errStr = null; + + while (true) { + // retrieve state number from top of stack + $state = $this->stack[count($this->stack)-1]; + + // use default actions if available + if (isset($this->defaultActions[$state])) { + $action = $this->defaultActions[$state]; + } else { + if ($symbol == null) { + $symbol = $this->lex(); + } + // read action for current state and first input + $action = isset($this->table[$state][$symbol]) ? $this->table[$state][$symbol] : false; + } + + // handle parse error + if (!$action || !$action[0]) { + if (!$recovering) { + // Report error + $expected = array(); + foreach ($this->table[$state] as $p => $ignore) { + if (isset($this->terminals_[$p]) && $p > 2) { + $expected[] = "'" . $this->terminals_[$p] . "'"; + } + } + + $message = null; + if (in_array("'STRING'", $expected) && in_array(substr($this->lexer->match, 0, 1), array('"', "'"))) { + $message = "Invalid string"; + if ("'" === substr($this->lexer->match, 0, 1)) { + $message .= ", it appears you used single quotes instead of double quotes"; + } elseif (preg_match('{".+?(\\\\[^"bfnrt/\\\\u])}', $this->lexer->getUpcomingInput(), $match)) { + $message .= ", it appears you have an unescaped backslash at: ".$match[1]; + } elseif (preg_match('{"(?:[^"]+|\\\\")*$}m', $this->lexer->getUpcomingInput())) { + $message .= ", it appears you forgot to terminate the string, or attempted to write a multiline string which is invalid"; + } + } + + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + if ($message) { + $errStr .= $message; + } else { + $errStr .= (count($expected) > 1) ? "Expected one of: " : "Expected: "; + $errStr .= implode(', ', $expected); + } + + if (',' === substr(trim($this->lexer->getPastInput()), -1)) { + $errStr .= " - It appears you have an extra trailing comma"; + } + + $this->parseError($errStr, array( + 'text' => $this->lexer->match, + 'token' => !empty($this->terminals_[$symbol]) ? $this->terminals_[$symbol] : $symbol, + 'line' => $this->lexer->yylineno, + 'loc' => $yyloc, + 'expected' => $expected, + )); + } + + // just recovered from another error + if ($recovering == 3) { + if ($symbol == $EOF) { + throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.'); + } + + // discard current lookahead and grab another + $yyleng = $this->lexer->yyleng; + $yytext = $this->lexer->yytext; + $yylineno = $this->lexer->yylineno; + $yyloc = $this->lexer->yylloc; + $symbol = $this->lex(); + } + + // try to recover from error + while (true) { + // check for error recovery rule in this state + if (array_key_exists($TERROR, $this->table[$state])) { + break; + } + if ($state == 0) { + throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.'); + } + $this->popStack(1); + $state = $this->stack[count($this->stack)-1]; + } + + $preErrorSymbol = $symbol; // save the lookahead token + $symbol = $TERROR; // insert generic error symbol as new lookahead + $state = $this->stack[count($this->stack)-1]; + $action = isset($this->table[$state][$TERROR]) ? $this->table[$state][$TERROR] : false; + $recovering = 3; // allow 3 real symbols to be shifted before reporting a new error + } + + // this shouldn't happen, unless resolve defaults are off + if (is_array($action[0]) && count($action) > 1) { + throw new JsonLintParsingException('Parse Error: multiple actions possible at state: ' . $state . ', token: ' . $symbol); + } + + switch ($action[0]) { + case 1: // shift + $this->stack[] = $symbol; + $this->vstack[] = $this->lexer->yytext; + $this->lstack[] = $this->lexer->yylloc; + $this->stack[] = $action[1]; // push state + $symbol = null; + if (!$preErrorSymbol) { // normal execution/no error + $yyleng = $this->lexer->yyleng; + $yytext = $this->lexer->yytext; + $yylineno = $this->lexer->yylineno; + $yyloc = $this->lexer->yylloc; + if ($recovering > 0) { + $recovering--; + } + } else { // error just occurred, resume old lookahead f/ before error + $symbol = $preErrorSymbol; + $preErrorSymbol = null; + } + break; + + case 2: // reduce + $len = $this->productions_[$action[1]][1]; + + // perform semantic action + $yyval->token = $this->vstack[count($this->vstack) - $len]; // default to $$ = $1 + // default location, uses first token for firsts, last for lasts + $yyval->store = array( // _$ = store + 'first_line' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_line'], + 'last_line' => $this->lstack[count($this->lstack) - 1]['last_line'], + 'first_column' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_column'], + 'last_column' => $this->lstack[count($this->lstack) - 1]['last_column'], + ); + $r = $this->performAction($yyval, $yytext, $yyleng, $yylineno, $action[1], $this->vstack, $this->lstack); + + if (!$r instanceof JsonLintUndefined) { + return $r; + } + + if ($len) { + $this->popStack($len); + } + + $this->stack[] = $this->productions_[$action[1]][0]; // push nonterminal (reduce) + $this->vstack[] = $yyval->token; + $this->lstack[] = $yyval->store; + $newState = $this->table[$this->stack[count($this->stack)-2]][$this->stack[count($this->stack)-1]]; + $this->stack[] = $newState; + break; + + case 3: // accept + + return true; + } + } + + return true; + } + + protected function parseError($str, $hash) + { + throw new JsonLintParsingException($str, $hash); + } + + // $$ = $tokens // needs to be passed by ref? + // $ = $token + // _$ removed, useless? + private function performAction(stdClass $yyval, $yytext, $yyleng, $yylineno, $yystate, &$tokens) + { + // $0 = $len + $len = count($tokens) - 1; + switch ($yystate) { + case 1: + $yytext = preg_replace_callback('{(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4})}', array($this, 'stringInterpolation'), $yytext); + $yyval->token = $yytext; + break; + case 2: + if (strpos($yytext, 'e') !== false || strpos($yytext, 'E') !== false) { + $yyval->token = floatval($yytext); + } else { + $yyval->token = strpos($yytext, '.') === false ? intval($yytext) : floatval($yytext); + } + break; + case 3: + $yyval->token = null; + break; + case 4: + $yyval->token = true; + break; + case 5: + $yyval->token = false; + break; + case 6: + return $yyval->token = $tokens[$len-1]; + case 13: + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token = array(); + } else { + $yyval->token = new stdClass; + } + break; + case 14: + $yyval->token = $tokens[$len-1]; + break; + case 15: + $yyval->token = array($tokens[$len-2], $tokens[$len]); + break; + case 16: + $property = $tokens[$len][0]; + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token = array(); + $yyval->token[$property] = $tokens[$len][1]; + } else { + $yyval->token = new stdClass; + $yyval->token->$property = $tokens[$len][1]; + } + break; + case 17: + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token =& $tokens[$len-2]; + $key = $tokens[$len][0]; + if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2][$key])) { + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + $errStr .= "Duplicate key: ".$tokens[$len][0]; + throw new JsonLintParsingException($errStr); + } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2][$key])) { + // Forget about it... + } + $tokens[$len-2][$key] = $tokens[$len][1]; + } else { + $yyval->token = $tokens[$len-2]; + $key = $tokens[$len][0]; + if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2]->{$key})) { + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + $errStr .= "Duplicate key: ".$tokens[$len][0]; + throw new JsonLintParsingException($errStr); + } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2]->{$key})) { + $duplicateCount = 1; + do { + $duplicateKey = $key . '.' . $duplicateCount++; + } while (isset($tokens[$len-2]->$duplicateKey)); + $key = $duplicateKey; + } + $tokens[$len-2]->$key = $tokens[$len][1]; + } + break; + case 18: + $yyval->token = array(); + break; + case 19: + $yyval->token = $tokens[$len-1]; + break; + case 20: + $yyval->token = array($tokens[$len]); + break; + case 21: + $tokens[$len-2][] = $tokens[$len]; + $yyval->token = $tokens[$len-2]; + break; + } + + return new JsonLintUndefined(); + } + + private function stringInterpolation($match) + { + switch ($match[0]) { + case '\\\\': + return '\\'; + case '\"': + return '"'; + case '\b': + return chr(8); + case '\f': + return chr(12); + case '\n': + return "\n"; + case '\r': + return "\r"; + case '\t': + return "\t"; + case '\/': + return "/"; + default: + return html_entity_decode('&#x'.ltrim(substr($match[0], 2), '0').';', 0, 'UTF-8'); + } + } + + private function popStack($n) + { + $this->stack = array_slice($this->stack, 0, - (2 * $n)); + $this->vstack = array_slice($this->vstack, 0, - $n); + $this->lstack = array_slice($this->lstack, 0, - $n); + } + + private function lex() + { + $token = $this->lexer->lex(); + if (!$token) { + $token = 1; + } + // if token isn't its numeric value, convert + if (!is_numeric($token)) { + $token = isset($this->symbols[$token]) ? $this->symbols[$token] : $token; + } + + return $token; + } + + private function failOnBOM($input) + { + // UTF-8 ByteOrderMark sequence + $bom = "\xEF\xBB\xBF"; + + if (substr($input, 0, 3) === $bom) { + $this->parseError("BOM detected, make sure your input does not include a Unicode Byte-Order-Mark", array()); + } + } +} \ No newline at end of file diff --git a/externals/jsonlint/src/Seld/JsonLint/Lexer.php b/externals/jsonlint/src/Seld/JsonLint/Lexer.php new file mode 100644 index 00000000..4197afe1 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/Lexer.php @@ -0,0 +1,215 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Lexer class + * + * Ported from https://github.com/zaach/jsonlint + */ +class JsonLintLexer +{ + private $EOF = 1; + private $rules = array( + 0 => '/^\s+/', + 1 => '/^-?([0-9]|[1-9][0-9]+)(\.[0-9]+)?([eE][+-]?[0-9]+)?\b/', + 2 => '{^"(?>\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x1f\\\\"]++)*+"}', + 3 => '/^\{/', + 4 => '/^\}/', + 5 => '/^\[/', + 6 => '/^\]/', + 7 => '/^,/', + 8 => '/^:/', + 9 => '/^true\b/', + 10 => '/^false\b/', + 11 => '/^null\b/', + 12 => '/^$/', + 13 => '/^./', + ); + + private $conditions = array( + "INITIAL" => array( + "rules" => array(0,1,2,3,4,5,6,7,8,9,10,11,12,13), + "inclusive" => true, + ), + ); + + private $conditionStack; + private $input; + private $more; + private $done; + private $matched; + + public $match; + public $yylineno; + public $yyleng; + public $yytext; + public $yylloc; + + public function lex() + { + $r = $this->next(); + if (!$r instanceof JsonLintUndefined) { + return $r; + } + + return $this->lex(); + } + + public function setInput($input) + { + $this->input = $input; + $this->more = false; + $this->done = false; + $this->yylineno = $this->yyleng = 0; + $this->yytext = $this->matched = $this->match = ''; + $this->conditionStack = array('INITIAL'); + $this->yylloc = array('first_line' => 1, 'first_column' => 0, 'last_line' => 1, 'last_column' => 0); + + return $this; + } + + public function showPosition() + { + $pre = str_replace("\n", '', $this->getPastInput()); + $c = str_repeat('-', max(0, strlen($pre) - 1)); // new Array(pre.length + 1).join("-"); + + return $pre . str_replace("\n", '', $this->getUpcomingInput()) . "\n" . $c . "^"; + } + + public function getPastInput() + { + $past = substr($this->matched, 0, strlen($this->matched) - strlen($this->match)); + + return (strlen($past) > 20 ? '...' : '') . substr($past, -20); + } + + public function getUpcomingInput() + { + $next = $this->match; + if (strlen($next) < 20) { + $next .= substr($this->input, 0, 20 - strlen($next)); + } + + return substr($next, 0, 20) . (strlen($next) > 20 ? '...' : ''); + } + + protected function parseError($str, $hash) + { + throw new Exception($str); + } + + private function next() + { + if ($this->done) { + return $this->EOF; + } + if (!$this->input) { + $this->done = true; + } + + $token = null; + $match = null; + $col = null; + $lines = null; + + if (!$this->more) { + $this->yytext = ''; + $this->match = ''; + } + + $rules = $this->getCurrentRules(); + $rulesLen = count($rules); + + for ($i=0; $i < $rulesLen; $i++) { + if (preg_match($this->rules[$rules[$i]], $this->input, $match)) { + preg_match_all('/\n.*/', $match[0], $lines); + $lines = $lines[0]; + if ($lines) { + $this->yylineno += count($lines); + } + + $this->yylloc = array( + 'first_line' => $this->yylloc['last_line'], + 'last_line' => $this->yylineno+1, + 'first_column' => $this->yylloc['last_column'], + 'last_column' => $lines ? strlen($lines[count($lines) - 1]) - 1 : $this->yylloc['last_column'] + strlen($match[0]), + ); + $this->yytext .= $match[0]; + $this->match .= $match[0]; + $this->yyleng = strlen($this->yytext); + $this->more = false; + $this->input = substr($this->input, strlen($match[0])); + $this->matched .= $match[0]; + $token = $this->performAction($rules[$i], $this->conditionStack[count($this->conditionStack)-1]); + if ($token) { + return $token; + } + + return new JsonLintUndefined(); + } + } + + if ($this->input === "") { + return $this->EOF; + } + + $this->parseError( + 'Lexical error on line ' . ($this->yylineno+1) . ". Unrecognized text.\n" . $this->showPosition(), + array( + 'text' => "", + 'token' => null, + 'line' => $this->yylineno, + ) + ); + } + + private function getCurrentRules() + { + return $this->conditions[$this->conditionStack[count($this->conditionStack)-1]]['rules']; + } + + private function performAction($avoiding_name_collisions, $YY_START) + { + switch ($avoiding_name_collisions) { + case 0:/* skip whitespace */ + break; + case 1: + return 6; + break; + case 2: + $this->yytext = substr($this->yytext, 1, $this->yyleng-2); + + return 4; + case 3: + return 17; + case 4: + return 18; + case 5: + return 23; + case 6: + return 24; + case 7: + return 22; + case 8: + return 21; + case 9: + return 10; + case 10: + return 11; + case 11: + return 8; + case 12: + return 14; + case 13: + return 'INVALID'; + } + } +} \ No newline at end of file diff --git a/externals/jsonlint/src/Seld/JsonLint/ParsingException.php b/externals/jsonlint/src/Seld/JsonLint/ParsingException.php new file mode 100644 index 00000000..2351cf60 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/ParsingException.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class JsonLintParsingException extends Exception +{ + protected $details; + + public function __construct($message, $details = array()) + { + $this->details = $details; + parent::__construct($message); + } + + public function getDetails() + { + return $this->details; + } +} diff --git a/externals/jsonlint/src/Seld/JsonLint/Undefined.php b/externals/jsonlint/src/Seld/JsonLint/Undefined.php new file mode 100644 index 00000000..f6aa678e --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/Undefined.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class JsonLintUndefined +{ +} diff --git a/resources/php/symbol-information.json b/resources/php/symbol-information.json new file mode 100644 index 00000000..0432cb7a --- /dev/null +++ b/resources/php/symbol-information.json @@ -0,0 +1,64365 @@ +{ + "@generated": true, + "params": { + "array_keys": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "array_slice": [ + "4.0.0", + "4.0.0", + "4.0.0", + "5.0.2" + ], + "assert": [ + "4.0.0", + "5.4.8" + ], + "class_exists": [ + "4.0.0", + "5.0.0" + ], + "clearstatcache": [ + "5.3.0", + "5.3.0" + ], + "copy": [ + "4.0.0", + "4.0.0", + "5.3.0" + ], + "debug_backtrace": [ + "4.3.0", + "5.4.0" + ], + "debug_print_backtrace": [ + "5.0.0", + "5.4.0" + ], + "fgetss": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "file": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "file_get_contents": [ + "4.3.0", + "4.3.0", + "4.3.0", + "5.1.0", + "5.1.0" + ], + "get_browser": [ + "4.0.0", + "4.3.2" + ], + "getopt": [ + "4.3.0", + "5.3.0" + ], + "gettimeofday": [ + "5.1.0" + ], + "htmlentities": [ + "4.0.0", + "4.0.3", + "4.1.0", + "5.2.3" + ], + "htmlspecialchars": [ + "4.0.0", + "4.0.0", + "4.1.0", + "5.2.3" + ], + "idn_to_ascii": [ + "5.2.4", + "5.2.4", + "5.4.0RC3", + "5.4.0RC3" + ], + "idn_to_utf8": [ + "5.2.4", + "5.2.4", + "5.4.0RC3", + "5.4.0RC3" + ], + "ini_get_all": [ + "4.2.0", + "5.3.0" + ], + "is_a": [ + "4.2.0", + "4.2.0", + "5.3.9" + ], + "jdtojewish": [ + "4.0.0", + "4.3.0", + "5.0.0" + ], + "json_decode": [ + "5.2.0", + "5.2.0", + "5.3.0", + "5.4.0" + ], + "json_encode": [ + "5.2.0", + "5.3.0", + "5.5.0" + ], + "ldap_read": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.2", + "4.0.2", + "4.0.2", + "4.0.2" + ], + "ldap_search": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.2", + "4.0.2", + "4.0.2", + "4.0.2" + ], + "md5": [ + "4.0.0", + "5.0.0" + ], + "md5_file": [ + "4.2.0", + "5.0.0" + ], + "memory_get_usage": [ + "5.2.0" + ], + "microtime": [ + "5.0.0" + ], + "mkdir": [ + "4.0.0", + "4.0.0", + "5.0.0", + "5.0.0" + ], + "nl2br": [ + "4.0.0", + "5.3.0" + ], + "opendir": [ + "4.0.0", + "5.3.0" + ], + "openssl_sign": [ + "4.0.4", + "4.0.4", + "4.0.4", + "5.0.0" + ], + "parse_url": [ + "4.0.0", + "5.1.2" + ], + "preg_replace": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.1", + "5.1.0" + ], + "preg_replace_callback": [ + "4.0.5", + "4.0.5", + "4.0.5", + "4.0.5", + "5.1.0" + ], + "scandir": [ + "5.0.0", + "5.4.0", + "5.4.0" + ], + "sem_acquire": [ + "4.0.0", + "5.6.1RC1" + ], + "session_regenerate_id": [ + "5.1.0" + ], + "sha1": [ + "4.3.0", + "5.0.0" + ], + "sha1_file": [ + "4.3.0", + "5.0.0" + ], + "sqlite_fetch_column_types": [ + "5.0.0", + "5.0.0", + "5.1.0" + ], + "str_replace": [ + "4.0.0", + "4.0.0", + "4.0.0", + "5.0.0" + ], + "stream_copy_to_stream": [ + "5.0.0", + "5.0.0", + "5.0.0", + "5.1.0" + ], + "stream_get_contents": [ + "5.0.0", + "5.0.0", + "5.1.0" + ], + "substr_count": [ + "4.0.0", + "4.0.0", + "5.1.0", + "5.1.0" + ] + }, + "functions": { + "_": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__uopz_exit_overload": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "abs": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "acos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "acosh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "addcslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "addslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_add": { + "ext.name": "apc", + "ext.min": "3.0.13", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_bin_dump": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_dumpfile": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_load": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_loadfile": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_cache_info": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_cas": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_clear_cache": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_compile_file": { + "ext.name": "apc", + "ext.min": "3.0.13", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_dec": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_define_constants": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_delete": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_delete_file": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_exists": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_fetch": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_inc": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_load_constants": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_sma_info": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_store": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apcu_add": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_dump": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_dumpfile": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_load": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_loadfile": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_cache_info": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_cas": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_clear_cache": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_dec": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_delete": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_enabled": { + "ext.name": "apcu", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_exists": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_fetch": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_inc": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_key_info": { + "ext.name": "apcu", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_sma_info": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_store": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_change_key_case": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_chunk": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_column": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "array_combine": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_count_values": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_diff": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_diff_assoc": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "array_diff_key": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_diff_uassoc": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_diff_ukey": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_fill": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_fill_keys": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "array_filter": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "array_flip": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_intersect": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_intersect_assoc": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "array_intersect_key": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_intersect_uassoc": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_intersect_ukey": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_key_exists": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "array_keys": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_map": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "array_merge": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_merge_recursive": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_multisort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_pad": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_pop": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_product": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_push": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_reduce": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "array_replace": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_replace_recursive": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_reverse": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_search": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "array_shift": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_slice": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_splice": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_sum": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "array_udiff": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_udiff_assoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_udiff_uassoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect_assoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect_uassoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_unique": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_unshift": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_values": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_walk": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_walk_recursive": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "arsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "asin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "asinh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "asort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "assert": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "assert_options": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atan": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atan2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atanh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "base64_decode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "base64_encode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "base_convert": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "basename": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcadd": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bccomp": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcdiv": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcmod": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcmul": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcpow": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcpowmod": { + "ext.name": "bcmath", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "bcscale": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcsqrt": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcsub": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bin2hex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bind_textdomain_codeset": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "bindec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bindtextdomain": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "boolval": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "bson_decode": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "bson_encode": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "bzclose": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzcompress": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzdecompress": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerrno": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerror": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerrstr": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzflush": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzopen": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzread": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzwrite": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "cal_days_in_month": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_from_jd": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_info": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_to_jd": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "call_user_func": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "call_user_func_array": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "call_user_method": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "call_user_method_array": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ceil": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "checkdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "checkdnsrr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chgrp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chmod": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chop": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chown": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chroot": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "chunk_split": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "class_alias": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "class_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "class_implements": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "class_parents": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "class_uses": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "clearstatcache": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cli_get_process_title": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "cli_set_process_title": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "closedir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "closelog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "collator_asort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_compare": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_sort_key": { + "ext.name": "intl", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "collator_get_strength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_set_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_set_strength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_sort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_sort_with_sort_keys": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "compact": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_aborted": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_status": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_timeout": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "4.0.4" + }, + "constant": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "convert_cyr_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "convert_uudecode": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "convert_uuencode": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "copy": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cosh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "count": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "count_chars": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "crc32": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "create_function": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "crypt": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ctype_alnum": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_alpha": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_cntrl": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_digit": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_graph": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_lower": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_print": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_punct": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_space": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_upper": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_xdigit": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "curl_close": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_copy_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_errno": { + "ext.name": "curl", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "curl_error": { + "ext.name": "curl", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "curl_escape": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_exec": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_file_create": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_getinfo": { + "ext.name": "curl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "curl_init": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_multi_add_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_close": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_exec": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_getcontent": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_info_read": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_init": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_remove_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_select": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_setopt": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_multi_strerror": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_pause": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_reset": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_setopt": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_setopt_array": { + "ext.name": "curl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curl_share_close": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_share_init": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_share_setopt": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_strerror": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_unescape": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_version": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "current": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "date": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "date_add": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_create": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_create_from_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_create_immutable": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "date_create_immutable_from_format": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "date_date_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_default_timezone_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "date_default_timezone_set": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "date_diff": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_format": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_get_last_errors": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_interval_create_from_date_string": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_interval_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_isodate_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_modify": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_offset_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_parse": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_parse_from_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_sub": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_sun_info": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "date_sunrise": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "date_sunset": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "date_time_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_timestamp_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_timestamp_set": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_timezone_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_timezone_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "datefmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_format_object": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_calendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_calendar_object": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_datetype": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_timetype": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_timezone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_timezone_id": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_is_lenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_localtime": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_calendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_lenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_timezone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_set_timezone_id": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "dcgettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dcngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "debug_backtrace": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "debug_print_backtrace": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "debug_zval_dump": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "decbin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dechex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "decoct": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "define": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "define_syslog_variables": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "defined": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "deg2rad": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dgettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dirname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "disk_free_space": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "disk_total_space": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "diskfreespace": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "dl": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "dns_check_record": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dns_get_mx": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dns_get_record": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dom_import_simplexml": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "doubleval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "each": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "easter_date": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "easter_days": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "empty": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "enchant_broker_describe": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_dict_exists": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_free": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_free_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_get_dict_path": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_get_error": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_init": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_list_dicts": { + "ext.name": "enchant", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_request_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_request_pwl_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_set_dict_path": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_set_ordering": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_add_to_personal": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_add_to_session": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_check": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_describe": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_get_error": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_is_in_session": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_quick_check": { + "ext.name": "enchant", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_store_replacement": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_suggest": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "end": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ereg": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ereg_replace": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "eregi": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "eregi_replace": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "error_get_last": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "error_log": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "error_reporting": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "escapeshellarg": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "escapeshellcmd": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "event_add": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loop": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loopbreak": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loopexit": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_priority_init": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_reinit": { + "ext.name": "libevent", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_base_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_disable": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_enable": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_fd_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_priority_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_read": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_set_callback": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_timeout_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_watermark_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_write": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_del": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_priority_set": { + "ext.name": "libevent", + "ext.min": "0.0.5", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_add": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_del": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_pending": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "exec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "exif_imagetype": { + "ext.name": "exif", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "exif_read_data": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exif_tagname": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exif_thumbnail": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "explode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "expm1": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "extension_loaded": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "extract": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ezmlm_hash": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "fclose": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "feof": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fflush": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "fgetc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgetcsv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgets": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgetss": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file_exists": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file_get_contents": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "file_put_contents": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "fileatime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filectime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filegroup": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileinode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filemtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileowner": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileperms": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filesize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filetype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filter_data": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "filter_has_var": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_id": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_input": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_input_array": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_list": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_var": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_var_array": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "finfo_buffer": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_close": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_file": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_open": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_set_flags": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "floatval": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "flock": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "floor": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fmod": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "fnmatch": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "fopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "forward_static_call": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "forward_static_call_array": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "fpassthru": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fprintf": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "fputcsv": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fputs": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fread": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "frenchtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fscanf": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "fseek": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fsockopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fstat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftell": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftok": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_alloc": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_cdup": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_chdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_chmod": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_close": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_connect": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_delete": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_exec": { + "ext.name": "ftp", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "ftp_fget": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_fput": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_get": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_get_option": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_login": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_mdtm": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_mkdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_nb_continue": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_fget": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_fput": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_get": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_put": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nlist": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_pasv": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_put": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_pwd": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_quit": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_raw": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_rawlist": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_rename": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_rmdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_set_option": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_site": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_size": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_ssl_connect": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_systype": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftruncate": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_get_arg": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_get_args": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_num_args": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "function_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fwrite": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gc_collect_cycles": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_disable": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_enable": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_enabled": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gd_info": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_asnum_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_continent_code_by_name": { + "ext.name": "geoip", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_code3_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_code_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_name_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_database_info": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_avail": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_filename": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_get_all_info": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_domain_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_id_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_isp_by_name": { + "ext.name": "geoip", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_netspeedcell_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_org_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_record_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_region_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_region_name_by_code": { + "ext.name": "geoip", + "ext.min": "1.0.5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_setup_custom_directory": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_time_zone_by_country_and_region": { + "ext.name": "geoip", + "ext.min": "1.0.5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_browser": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_called_class": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get_cfg_var": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class_methods": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class_vars": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_current_user": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_declared_classes": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_declared_interfaces": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get_declared_traits": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "get_defined_constants": { + "ext.name": "Core", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "get_defined_functions": { + "ext.name": "Core", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "get_defined_vars": { + "ext.name": "Core", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "get_extension_funcs": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_headers": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get_html_translation_table": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_included_files": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_loaded_extensions": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_magic_quotes_gpc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_meta_tags": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_object_vars": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_parent_class": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_required_files": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_resource_type": { + "ext.name": "Core", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "getcwd": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getenv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbyaddr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbynamel": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostname": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getimagesize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getimagesizefromstring": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "getlastmod": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmxrr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmygid": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "getmyinode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmypid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmyuid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getopt": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "getprotobyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getprotobynumber": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getrandmax": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getrusage": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getservbyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getservbyport": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettimeofday": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "glob": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "gmdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gmmktime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gmp_abs": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_add": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_and": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_clrbit": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_cmp": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_com": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_q": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_qr": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_r": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_divexact": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_export": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "gmp_fact": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_gcd": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_gcdext": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_hamdist": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_import": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "gmp_init": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_intval": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_invert": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_jacobi": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_legendre": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_mod": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_mul": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_neg": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_nextprime": { + "ext.name": "gmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "gmp_or": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_perfect_square": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_popcount": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_pow": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_powm": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_prob_prime": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_random": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_random_bits": { + "ext.name": "gmp", + "ext.min": "5.6.3RC1", + "ext.max": null, + "php.min": "5.6.3RC1", + "php.max": null + }, + "gmp_random_range": { + "ext.name": "gmp", + "ext.min": "5.6.3RC1", + "ext.max": null, + "php.min": "5.6.3RC1", + "php.max": null + }, + "gmp_root": { + "ext.name": "gmp", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "gmp_rootrem": { + "ext.name": "gmp", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "gmp_scan0": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_scan1": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_setbit": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sign": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sqrt": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sqrtrem": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_strval": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sub": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_testbit": { + "ext.name": "gmp", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gmp_xor": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmstrftime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "grapheme_extract": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_stripos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_stristr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strlen": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strpos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strripos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strrpos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strstr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_substr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "gregoriantojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzclose": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzcompress": { + "ext.name": "zlib", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "gzdecode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "gzdeflate": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzencode": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzeof": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzfile": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgetc": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgets": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgetss": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzinflate": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzopen": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzpassthru": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzputs": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzread": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzrewind": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzseek": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gztell": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzuncompress": { + "ext.name": "zlib", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "gzwrite": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_algos": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_copy": { + "ext.name": "hash", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hash_equals": { + "ext.name": "hash", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "hash_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_final": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_hmac": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_hmac_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_init": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_pbkdf2": { + "ext.name": "hash", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "hash_update": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_update_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_update_stream": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "header": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "header_register_callback": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "header_remove": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "headers_list": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "headers_sent": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hebrev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hebrevc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hex2bin": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "hexdec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "highlight_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "highlight_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "html_entity_decode": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "htmlentities": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "htmlspecialchars": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "htmlspecialchars_decode": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "http_build_cookie": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_build_query": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "http_build_str": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_build_url": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_cache_etag": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_cache_last_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_chunked_decode": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_date": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_deflate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_body": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_body_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_headers": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_head": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_inflate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_etag": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_request_header": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_charset": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_content_type": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_language": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_cookie": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_headers": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_message": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_params": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_clean": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_count": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_ident": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_post_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_post_fields": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_file": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_redirect": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_body_encode": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_exists": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_name": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_register": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_unregister": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_response_code": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "http_send_content_disposition": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_content_type": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_file": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_last_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_status": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_support": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_throttle": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "hypot": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "iconv": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_get_encoding": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_mime_decode": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_mime_decode_headers": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_mime_encode": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_set_encoding": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_strlen": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_strpos": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_strrpos": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_substr": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "idate": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "idn_to_ascii": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "idn_to_utf8": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "igbinary_serialize": { + "ext.name": "igbinary", + "ext.min": "1.1.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "igbinary_unserialize": { + "ext.name": "igbinary", + "ext.min": "1.1.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ignore_user_abort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "image2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "image_type_to_extension": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "image_type_to_mime_type": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageaffine": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imageaffinematrixconcat": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imageaffinematrixget": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagealphablending": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imageantialias": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagearc": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagechar": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecharup": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorallocate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorallocatealpha": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagecolorat": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorclosest": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorclosestalpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolorclosesthwb": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecolordeallocate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorexact": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorexactalpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolormatch": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imagecolorresolve": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorresolvealpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolorset": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorsforindex": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorstotal": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolortransparent": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageconvolution": { + "ext.name": "gd", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "imagecopy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecopymerge": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecopymergegray": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecopyresampled": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecopyresized": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromgd": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgd2": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgd2part": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgif": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromjpeg": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefrompng": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromstring": { + "ext.name": "gd", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "imagecreatefromwbmp": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatefromwebp": { + "ext.name": "gd", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "imagecreatefromxbm": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatefromxpm": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatetruecolor": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecrop": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagecropauto": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagedashedline": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagedestroy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageellipse": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefill": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilledarc": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefilledellipse": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefilledpolygon": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilledrectangle": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilltoborder": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilter": { + "ext.name": "gd", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imageflip": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagefontheight": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefontwidth": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageftbbox": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagefttext": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegammacorrect": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagegd": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegd2": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegif": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagegrabscreen": { + "ext.name": "gd", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "imagegrabwindow": { + "ext.name": "gd", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "imageinterlace": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageistruecolor": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagejpeg": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagelayereffect": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imageline": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageloadfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepalettecopy": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagepalettetotruecolor": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagepng": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepolygon": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsbbox": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsencodefont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsextendfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsfreefont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsloadfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsslantfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepstext": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagerectangle": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagerotate": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imagesavealpha": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagescale": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagesetbrush": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesetinterpolation": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagesetpixel": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesetstyle": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesetthickness": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesettile": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagestring": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagestringup": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesx": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagetruecolortopalette": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagettfbbox": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagettftext": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagetypes": { + "ext.name": "gd", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "imagewbmp": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagewebp": { + "ext.name": "gd", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "imagexbm": { + "ext.name": "gd", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imap_8bit": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_alerts": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_append": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_base64": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_binary": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_body": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_bodystruct": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_check": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_clearflag_full": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_close": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_create": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_createmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_delete": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_deletemailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_errors": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_expunge": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetch_overview": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchbody": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchheader": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchmime": { + "ext.name": "imap", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "imap_fetchstructure": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchtext": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_gc": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "imap_get_quota": { + "ext.name": "imap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "imap_get_quotaroot": { + "ext.name": "imap", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imap_getacl": { + "ext.name": "imap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imap_getmailboxes": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_getsubscribed": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_header": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_headerinfo": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_headers": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_last_error": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_list": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listscan": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listsubscribed": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_lsub": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_compose": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_copy": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_move": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mailboxmsginfo": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mime_header_decode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_msgno": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mutf7_to_utf8": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "imap_num_msg": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_num_recent": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_open": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_ping": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_qprint": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rename": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_renamemailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_reopen": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_parse_adrlist": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_parse_headers": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_write_address": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_savebody": { + "ext.name": "imap", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "imap_scan": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_scanmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_search": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_set_quota": { + "ext.name": "imap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "imap_setacl": { + "ext.name": "imap", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imap_setflag_full": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_sort": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_status": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_subscribe": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_thread": { + "ext.name": "imap", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imap_timeout": { + "ext.name": "imap", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "imap_uid": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_undelete": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_unsubscribe": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf7_decode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf7_encode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf8": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf8_to_mutf7": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "implode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "import_request_variables": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": "5.3.29" + }, + "in_array": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "inclued_get_data": { + "ext.name": "inclued", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "inet_ntop": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "inet_pton": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ini_alter": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_get": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_get_all": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ini_restore": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_set": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "input_filters_list": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_get": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_get_args": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "input_has_variable": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_name_to_filter": { + "ext.name": "filter", + "ext.min": "0.9.2", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "interface_exists": { + "ext.name": "Core", + "ext.min": "5.0.2", + "ext.max": null, + "php.min": "5.0.2", + "php.max": null + }, + "intl_error_name": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_is_failure": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intlcal_add": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_after": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_before": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_clear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_create_instance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_equals": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_field_difference": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_from_date_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_actual_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_actual_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_available_locales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_day_of_week_type": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_error_code": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_error_message": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_first_day_of_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_greatest_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_keyword_values_for_locale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_least_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_locale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_minimal_days_in_first_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_now": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_repeated_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_skipped_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_type": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_weekend_transition": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_in_daylight_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_equivalent_to": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_lenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_weekend": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_roll": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_first_day_of_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_lenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_minimal_days_in_first_week": { + "ext.name": "intl", + "ext.min": "5.5.1", + "ext.max": null, + "php.min": "5.5.1", + "php.max": null + }, + "intlcal_set_repeated_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_skipped_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_to_date_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_create_instance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_get_gregorian_change": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_is_leap_year": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_set_gregorian_change": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_count_equivalent_ids": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_default": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_enumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_time_zone_id_enumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_from_date_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_canonical_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_display_name": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_dst_savings": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_equivalent_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_error_code": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_error_message": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_gmt": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_offset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_raw_offset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_region": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_tz_data_version": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_unknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_has_same_rules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_to_date_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_use_daylight_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ip2long": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iptcembed": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iptcparse": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_a": { + "ext.name": "Core", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_array": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_bool": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_callable": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "is_dir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_double": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_executable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_finite": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_float": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_infinite": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_int": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_integer": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_link": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_long": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_nan": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_null": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "is_numeric": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_object": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_readable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_real": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_resource": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_scalar": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "is_soap_fault": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "is_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_subclass_of": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_uploaded_file": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "is_writable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_writeable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "isset": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iterator_apply": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "iterator_count": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "iterator_to_array": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "jddayofweek": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdmonthname": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtofrench": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtogregorian": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtojewish": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtojulian": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtounix": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jewishtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "join": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jpeg2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "jsmin": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "jsmin_last_error": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "jsmin_last_error_msg": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "json_decode": { + "ext.name": "json", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "json_encode": { + "ext.name": "json", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "json_last_error": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "json_last_error_msg": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "juliantojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "key": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "key_exists": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "krsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ksort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lcfirst": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lcg_value": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lchgrp": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "lchown": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ldap_add": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_bind": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_close": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_compare": { + "ext.name": "ldap", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "ldap_connect": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_control_paged_result": { + "ext.name": "ldap", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ldap_control_paged_result_response": { + "ext.name": "ldap", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ldap_count_entries": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_delete": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_dn2ufn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_err2str": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_errno": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_error": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_escape": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "ldap_explode_dn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_attribute": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_entry": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_free_result": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_attributes": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_dn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_entries": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_option": { + "ext.name": "ldap", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ldap_get_values": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_values_len": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_list": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_add": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_del": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_replace": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_modify": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_modify_batch": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "ldap_next_attribute": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_next_entry": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_next_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_parse_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_parse_result": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_read": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_rename": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_sasl_bind": { + "ext.name": "ldap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ldap_search": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_set_option": { + "ext.name": "ldap", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ldap_set_rebind_proc": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_sort": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_start_tls": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_unbind": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "levenshtein": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "libxml_clear_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_disable_entity_loader": { + "ext.name": "libxml", + "ext.min": "5.2.11", + "ext.max": null, + "php.min": "5.2.11", + "php.max": null + }, + "libxml_get_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_get_last_error": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_set_external_entity_loader": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "libxml_set_streams_context": { + "ext.name": "libxml", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "libxml_use_internal_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "link": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "linkinfo": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "list": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "locale_accept_from_http": { + "ext.name": "intl", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "locale_canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_compose": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_filter_matches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_all_variants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_default": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_language": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_name": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_region": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_script": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_variant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_keywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_primary_language": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_region": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_script": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_set_default": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "localeconv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "localtime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log10": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log1p": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "long2ip": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lstat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ltrim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_compress": { + "ext.name": "lzf", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_decompress": { + "ext.name": "lzf", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_optimized_for": { + "ext.name": "lzf", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mail": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mailparse_determine_best_xfer_encoding": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_create": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_part": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_part_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_whole_part_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_free": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_part": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_part_data": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_structure": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_parse": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_parse_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_rfc822_parse_addresses": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_stream_encode": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_test": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_uudecode_all": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "max": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mb_check_encoding": { + "ext.name": "mbstring", + "ext.min": "4.4.3", + "ext.max": null, + "php.min": "4.4.3", + "php.max": null + }, + "mb_convert_case": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_convert_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_convert_kana": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_convert_variables": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_decode_mimeheader": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_decode_numericentity": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_detect_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_detect_order": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encode_mimeheader": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encode_numericentity": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encoding_aliases": { + "ext.name": "mbstring", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mb_ereg": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_match": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_replace_callback": { + "ext.name": "mbstring", + "ext.min": "5.4.1", + "ext.max": null, + "php.min": "5.4.1", + "php.max": null + }, + "mb_ereg_search": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_getpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_getregs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_init": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_pos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_regs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_setpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_eregi": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_eregi_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_get_info": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_http_input": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_http_output": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_internal_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_language": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_list_encodings": { + "ext.name": "mbstring", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mb_output_handler": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_parse_str": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_preferred_mime_name": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_regex_encoding": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_regex_set_options": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_send_mail": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_split": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_strcut": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strimwidth": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_stripos": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_stristr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strlen": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strpos": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strrchr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strrichr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strripos": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strrpos": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strstr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strtolower": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_strtoupper": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_strwidth": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substitute_character": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substr": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substr_count": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mbereg": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_match": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_getpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_getregs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_init": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_pos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_regs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_setpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mberegi": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mberegi_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbregex_encoding": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbsplit": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mcrypt_cbc": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_cfb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_create_iv": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_decrypt": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_ecb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_enc_get_algorithms_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_iv_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_modes_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_supported_key_sizes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_algorithm": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_algorithm_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_self_test": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_encrypt": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic_deinit": { + "ext.name": "mcrypt", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mcrypt_generic_end": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic_init": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_get_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_get_cipher_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_get_iv_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_get_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_list_algorithms": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_list_modes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_close": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_algo_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_algo_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_supported_key_sizes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_algorithm": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_algorithm_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_open": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_self_test": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_ofb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "md5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "md5_file": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mdecrypt_generic": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "memcache_add": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_add_server": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_append": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_cas": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_close": { + "ext.name": "memcache", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_connect": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_debug": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_decrement": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_delete": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_flush": { + "ext.name": "memcache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_extended_stats": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_server_status": { + "ext.name": "memcache", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_stats": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_version": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_increment": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_pconnect": { + "ext.name": "memcache", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_prepend": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_replace": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set_compress_threshold": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set_failure_callback": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_set_server_params": { + "ext.name": "memcache", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memory_get_peak_usage": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "memory_get_usage": { + "ext.name": "standard", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "metaphone": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "method_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_count": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_get_block_size": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_get_hash_name": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_keygen_s2k": { + "ext.name": "mhash", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "microtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mime_content_type": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "min": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mkdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mktime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "money_format": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "move_uploaded_file": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "msg_get_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_queue_exists": { + "ext.name": "sysvmsg", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "msg_receive": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_remove_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_send": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_set_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_stat_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msgfmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_format_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_parse_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgpack_pack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_serialize": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_unpack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_unserialize": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mssql_bind": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_close": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_connect": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_data_seek": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_execute": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_fetch_array": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_assoc": { + "ext.name": "mssql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mssql_fetch_batch": { + "ext.name": "mssql", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "mssql_fetch_field": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_object": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_row": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_length": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_name": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_seek": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_type": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_free_result": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_free_statement": { + "ext.name": "mssql", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "mssql_get_last_message": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_guid_string": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_init": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_min_error_severity": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_min_message_severity": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_next_result": { + "ext.name": "mssql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mssql_num_fields": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_num_rows": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_pconnect": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_query": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_result": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_rows_affected": { + "ext.name": "mssql", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "mssql_select_db": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_getrandmax": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_srand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_affected_rows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_client_encoding": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_close": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_connect": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_create_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_data_seek": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_db_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_db_query": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_dbname": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_drop_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_errno": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_error": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_escape_string": { + "ext.name": "mysql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "mysql_fetch_array": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_assoc": { + "ext.name": "mysql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "mysql_fetch_field": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_lengths": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_object": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_row": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_flags": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_len": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_seek": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_table": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_type": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldflags": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldlen": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldname": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldtable": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldtype": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_free_result": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_freeresult": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_get_client_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_host_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_proto_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_server_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_info": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_insert_id": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_dbs": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_fields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_processes": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_list_tables": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listdbs": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listfields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listtables": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_num_fields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_num_rows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_numfields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_numrows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_pconnect": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_ping": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_query": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_real_escape_string": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_result": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_select_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_selectdb": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_set_charset": { + "ext.name": "mysql", + "ext.min": "5.2.3", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "mysql_stat": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_table_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_tablename": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_thread_id": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_unbuffered_query": { + "ext.name": "mysql", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mysqli_affected_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_autocommit": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_begin_transaction": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_bind_param": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_bind_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_change_user": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_character_set_name": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_client_encoding": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_close": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_commit": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_data_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_debug": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_disable_reads_from_master": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_disable_rpl_parse": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_dump_debug_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_embedded_server_end": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_embedded_server_start": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_enable_reads_from_master": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_enable_rpl_parse": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_error_list": { + "ext.name": "mysqli", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "mysqli_escape_string": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_execute": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_fetch_all": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_array": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_assoc": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_field": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_field_direct": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_fields": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_lengths": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_object": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_row": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_tell": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_free_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_cache_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_charset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_version": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_connection_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_host_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_links_stats": { + "ext.name": "mysqli", + "ext.min": "5.6.0alpha2", + "ext.max": null, + "php.min": "5.6.0alpha2", + "php.max": null + }, + "mysqli_get_metadata": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_get_proto_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_server_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_server_version": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_warnings": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_init": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_insert_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_kill": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_master_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_more_results": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_multi_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_next_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_num_fields": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_num_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_options": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_param_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_ping": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_poll": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_prepare": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_connect": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_escape_string": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_reap_async_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_refresh": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mysqli_release_savepoint": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_report": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_rollback": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_rpl_parse_enabled": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_rpl_probe": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_rpl_query_type": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_savepoint": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_select_db": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_send_long_data": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_send_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_set_charset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_local_infile_default": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_local_infile_handler": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_opt": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_slave_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_sqlstate": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_ssl_set": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stat": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_affected_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_attr_get": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_attr_set": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_bind_param": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_bind_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_close": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_data_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_error_list": { + "ext.name": "mysqli", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "mysqli_stmt_execute": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_fetch": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_field_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_free_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_get_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_get_warnings": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_init": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_insert_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_more_results": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_next_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_num_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_param_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_prepare": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_reset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_result_metadata": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_send_long_data": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_sqlstate": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_store_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_store_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_thread_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_thread_safe": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_use_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_warning_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "natcasesort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "natsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "next": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "nl2br": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "nl_langinfo": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "normalizer_is_normalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "normalizer_normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "number_format": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "numfmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_format_currency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_symbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_text_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_parse_currency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_symbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_text_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "oauth_get_sbs": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "oauth_urlencode": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ob_clean": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_deflatehandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_end_clean": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_end_flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_etaghandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_flush": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_get_clean": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_get_contents": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_get_flush": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_get_length": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "ob_get_level": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_get_status": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_gzhandler": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ob_iconv_handler": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": "5.3.29" + }, + "ob_implicit_flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_inflatehandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_list_handlers": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_start": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_tidyhandler": { + "ext.name": "tidy", + "ext.min": "2.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "octdec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_autocommit": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_binmode": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_close": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_close_all": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_columnprivileges": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_columns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_commit": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_connect": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_cursor": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_data_source": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_do": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_error": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_errormsg": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_exec": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_execute": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_fetch_array": { + "ext.name": "odbc", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "odbc_fetch_into": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_fetch_object": { + "ext.name": "odbc", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "odbc_fetch_row": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_len": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_name": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_num": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_precision": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_scale": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_type": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_foreignkeys": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_free_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_gettypeinfo": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_longreadlen": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_next_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_num_fields": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_num_rows": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_pconnect": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_prepare": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_primarykeys": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_procedurecolumns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_procedures": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_result_all": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_rollback": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_setoption": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_specialcolumns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_statistics": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_tableprivileges": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_tables": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "opcache_compile_file": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_get_configuration": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_get_status": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_invalidate": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_is_script_cached": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_reset": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opendir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "openlog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "openssl_cipher_iv_length": { + "ext.name": "openssl", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "openssl_csr_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_get_public_key": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_csr_get_subject": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_csr_new": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_sign": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_decrypt": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_dh_compute_key": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_digest": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_encrypt": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_error_string": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_free_key": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_get_cert_locations": { + "ext.name": "openssl", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "openssl_get_cipher_methods": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_get_md_methods": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_get_privatekey": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_get_publickey": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_open": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_pbkdf2": { + "ext.name": "openssl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "openssl_pkcs12_export": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs12_export_to_file": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs12_read": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs7_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_sign": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_verify": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkey_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_free": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_get_details": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_pkey_get_private": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_get_public": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_new": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_private_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_private_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_public_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_public_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_random_pseudo_bytes": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_seal": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_sign": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_spki_export": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_export_challenge": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_new": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_verify": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_verify": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_x509_check_private_key": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_checkpurpose": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_fingerprint": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_x509_free": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_parse": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_read": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "ord": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "output_add_rewrite_var": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "output_reset_rewrite_vars": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pack": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_ini_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_ini_string": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse_str": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_url": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "passthru": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "password_get_info": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_hash": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_needs_rehash": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_verify": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "pathinfo": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pclose": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pcntl_alarm": { + "ext.name": "pcntl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pcntl_errno": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_exec": { + "ext.name": "pcntl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pcntl_fork": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_get_last_error": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_getpriority": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_setpriority": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_signal": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_signal_dispatch": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigprocmask": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigtimedwait": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigwaitinfo": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_strerror": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_wait": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_waitpid": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wexitstatus": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifexited": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifsignaled": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifstopped": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wstopsig": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wtermsig": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pdf_activate_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_launchlink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_locallink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_nameddest": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_note": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_path_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_pdflink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_portfolio_file": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_portfolio_folder": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_table_cell": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_textflow": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_thumbnail": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_weblink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_align": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_arc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_arcn": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_attach_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_glyph_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_mc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_pattern_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_template_ext": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_circle": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_circular_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_clip": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_font": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_concat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_continue_text": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_convert_to_unicode": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_3dview": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_action": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_annotation": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_field": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_fieldgroup": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_curveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_define_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_draw_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_ellipse": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_elliptical_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_encoding_set_char": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_mc": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_template_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_endpath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_graphicsblock": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_imageblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_pdfblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_textblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_findfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_buffer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_pdi_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_pdi_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_string": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_font": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_image": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_matchbox": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_pdi_page": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_pvf": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_textline": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_initgraphics": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_lineto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_3ddata": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_asset": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_iccprofile": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_makespotcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_mc_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_moveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_new": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_ccitt": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_image_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_number": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_stream": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_string": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_place_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_place_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_delete": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_insert": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_new": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_remove": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_process_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_rect": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_restore": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_resume_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_rotate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_save": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_scale": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_color": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_dash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_style": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_graphics_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_info": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_layer_dependency": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_text_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_text_pos": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setdash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setdashpattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setflat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinecap": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinejoin": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinewidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setmatrix": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setmiterlimit": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setpolydash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shading": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shading_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shfill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show_boxed": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show_xy": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_skew": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_stringwidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_suspend_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_translate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf16_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf16_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf32_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.1.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf32_to_utf8": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf8_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf8_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdo_drivers": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pfsockopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_affected_rows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_cancel_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_client_encoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_clientencoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_close": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_cmdtuples": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connect": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_connect_poll": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_connection_busy": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connection_reset": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connection_status": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_consume_input": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_convert": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_copy_from": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_copy_to": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_dbname": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_delete": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_end_copy": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_errormessage": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_escape_bytea": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_escape_identifier": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "pg_escape_literal": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "pg_escape_string": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_exec": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_execute": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fetch_all": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_fetch_all_columns": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fetch_array": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_fetch_assoc": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_fetch_object": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_fetch_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fetch_row": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_field_is_null": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_name": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_num": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_prtlen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_size": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_table": { + "ext.name": "pgsql", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pg_field_type": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_type_oid": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fieldisnull": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldname": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldnum": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldprtlen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldsize": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldtype": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_flush": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_free_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_freeresult": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_get_notify": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_get_pid": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_get_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_getlastoid": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_host": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_insert": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_last_error": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_last_notice": { + "ext.name": "pgsql", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "pg_last_oid": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_close": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_create": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_export": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_import": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_open": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_read": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_read_all": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_seek": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_tell": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_truncate": { + "ext.name": "pgsql", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "pg_lo_unlink": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_write": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loclose": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_locreate": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loexport": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loimport": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loopen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loread": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loreadall": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lounlink": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lowrite": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_meta_data": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_num_fields": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_num_rows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_numfields": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_numrows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_options": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_parameter_status": { + "ext.name": "pgsql", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pg_pconnect": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_ping": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_port": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_prepare": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_put_line": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_query_params": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_result_error": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_result_error_field": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_result_seek": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_result_status": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_select": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_send_execute": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_send_prepare": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_send_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_send_query_params": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_set_client_encoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_set_error_verbosity": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_setclientencoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_socket": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_trace": { + "ext.name": "pgsql", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "pg_transaction_status": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_tty": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_unescape_bytea": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_untrace": { + "ext.name": "pgsql", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "pg_update": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_version": { + "ext.name": "pgsql", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_check_syntax": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.0.4" + }, + "php_egg_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": "5.4.45" + }, + "php_ini_loaded_file": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "php_ini_scanned_files": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "php_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "php_real_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "php_sapi_name": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "php_strip_whitespace": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_uname": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "phpcredits": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "phpinfo": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "phpversion": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pi": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "png2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "popen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_access": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "posix_ctermid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_errno": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_get_last_error": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_getcwd": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getegid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_geteuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgrgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgrnam": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgroups": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getlogin": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpgrp": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getppid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpwnam": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpwuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getrlimit": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getsid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_initgroups": { + "ext.name": "posix", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "posix_isatty": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_kill": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_mkfifo": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_mknod": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "posix_setegid": { + "ext.name": "posix", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "posix_seteuid": { + "ext.name": "posix", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "posix_setgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setpgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setsid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_strerror": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_times": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_ttyname": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_uname": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pow": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_filter": { + "ext.name": "pcre", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "preg_grep": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_last_error": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "preg_match": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_match_all": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_quote": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_replace": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_replace_callback": { + "ext.name": "pcre", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "preg_split": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "prev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "print_r": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "printf": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "proc_close": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "proc_get_status": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "proc_nice": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "proc_open": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "proc_terminate": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "property_exists": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "putenv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "quoted_printable_decode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "quoted_printable_encode": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "quotemeta": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rad2deg": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "random_int": { + "ext.name": "standard", + "ext.min": "7.0.0", + "ext.max": null, + "php.min": "7.0.0", + "php.max": null + }, + "random_bytes": { + "ext.name": "standard", + "ext.min": "7.0.0", + "ext.max": null, + "php.min": "7.0.0", + "php.max": null + }, + "range": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rar_allow_broken_set": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_broken_is": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_close": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_comment_get": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_entry_get": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_list": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_solid_is": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_wrapper_cache_stats": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rawurldecode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rawurlencode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "read_exif_data": { + "ext.name": "exif", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "readdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readfile": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readgzfile": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_add_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_callback_handler_install": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_callback_handler_remove": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_callback_read_char": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_clear_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_completion_function": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_info": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_list_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_on_new_line": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_read_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_redisplay": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_write_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "realpath": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "realpath_cache_get": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "realpath_cache_size": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "recode": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "recode_file": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "recode_string": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "register_shutdown_function": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "register_tick_function": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "rename": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "reset": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "resourcebundle_count": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get_error_code": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get_error_message": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_locales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "restore_error_handler": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "restore_exception_handler": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "restore_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "rewind": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rewinddir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rmdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "round": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rtrim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "scandir": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sem_acquire": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_get": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_release": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_remove": { + "ext.name": "sysvsem", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "serialize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_abort": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "session_cache_expire": { + "ext.name": "session", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "session_cache_limiter": { + "ext.name": "session", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "session_commit": { + "ext.name": "session", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "session_decode": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_destroy": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_encode": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_gc": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": "5.6.0alpha3", + "php.min": "5.6.0alpha1", + "php.max": "5.6.0alpha3" + }, + "session_get_cookie_params": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_id": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_is_registered": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_module_name": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_name": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_regenerate_id": { + "ext.name": "session", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "session_register": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_register_shutdown": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "session_reset": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "session_save_path": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_serializer_name": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": "5.6.0alpha3", + "php.min": "5.6.0alpha1", + "php.max": "5.6.0alpha3" + }, + "session_set_cookie_params": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_set_save_handler": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_start": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_status": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "session_unregister": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_unset": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_write_close": { + "ext.name": "session", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "set_error_handler": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "set_exception_handler": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "set_file_buffer": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "set_magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_socket_blocking": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_time_limit": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setcookie": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setlocale": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setrawcookie": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "settype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sha1": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "sha1_file": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "shell_exec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_attach": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_detach": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_get_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_has_var": { + "ext.name": "sysvshm", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shm_put_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_remove": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_remove_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shmop_close": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_delete": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_open": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_read": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_size": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_write": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "show_source": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shuffle": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "similar_text": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "simplexml_import_dom": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "simplexml_load_file": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "simplexml_load_string": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sinh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "sizeof": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sleep": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp2_get": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_getnext": { + "ext.name": "snmp", + "ext.min": "5.0.4", + "ext.max": null, + "php.min": "5.0.4", + "php.max": null + }, + "snmp2_real_walk": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_set": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_walk": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp3_get": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_getnext": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmp3_real_walk": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_set": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_walk": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_get_quick_print": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp_get_valueretrieval": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "snmp_read_mib": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmp_set_enum_print": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_set_oid_numeric_print": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_set_oid_output_format": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "snmp_set_quick_print": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp_set_valueretrieval": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "snmpget": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpgetnext": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmprealwalk": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpset": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpwalk": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpwalkoid": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_accept": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_bind": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_clear_error": { + "ext.name": "sockets", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "socket_close": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_cmsg_space": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_connect": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create_listen": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create_pair": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_get_option": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "socket_get_status": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_getopt": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_getpeername": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_getsockname": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_import_stream": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "socket_last_error": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_listen": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_read": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recv": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recvfrom": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recvmsg": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_select": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_send": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_sendmsg": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_sendto": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_set_block": { + "ext.name": "sockets", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "socket_set_blocking": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_set_nonblock": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_set_option": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "socket_set_timeout": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_setopt": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_shutdown": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_strerror": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_write": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "solr_get_version": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "soundex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "spl_autoload": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_call": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_extensions": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_functions": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_register": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_unregister": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_classes": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "spl_object_hash": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "split": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "spliti": { + "ext.name": "ereg", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "sprintf": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sql_regcase": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sqlite_array_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_busy_timeout": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_changes": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_close": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_column": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_create_aggregate": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_create_function": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_current": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_error_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_escape_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_exec": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_factory": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_all": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_array": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_column_types": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_object": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_single": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_field_name": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_has_more": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_has_prev": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_last_error": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_last_insert_rowid": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_libencoding": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_libversion": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_next": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_num_fields": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_num_rows": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_open": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_popen": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_prev": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_rewind": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_seek": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_single_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_udf_decode_binary": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_udf_encode_binary": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_unbuffered_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_valid": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqrt": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "srand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sscanf": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "ssh2_auth_agent": { + "ext.name": "ssh2", + "ext.min": "0.12", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_hostbased_file": { + "ext.name": "ssh2", + "ext.min": "0.7", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_none": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_password": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_pubkey_file": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_connect": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_exec": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_fetch_stream": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_fingerprint": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_forward_accept": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_forward_listen": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_methods_negotiated": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_poll": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_add": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_init": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_list": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_remove": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_scp_recv": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_scp_send": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_chmod": { + "ext.name": "ssh2", + "ext.min": "0.12", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_lstat": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_mkdir": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_readlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_realpath": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_rename": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_rmdir": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_stat": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_symlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_unlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_shell": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_tunnel": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stomp_abort": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_ack": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_begin": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_close": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_commit": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_connect": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_connect_error": { + "ext.name": "stomp", + "ext.min": "0.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_error": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_get_read_timeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_get_session_id": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_has_frame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_nack": { + "ext.name": "stomp", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_read_frame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_send": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_set_read_timeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_subscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_unsubscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_version": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "str_getcsv": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "str_ireplace": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "str_pad": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "str_repeat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "str_replace": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "str_rot13": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "str_shuffle": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "str_split": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "str_word_count": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "strcasecmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strchr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strcmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strcoll": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "strcspn": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stream_bucket_append": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_make_writeable": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_new": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_prepend": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_context_create": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_get_default": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_context_get_options": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_get_params": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_context_set_default": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_context_set_option": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_set_params": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_copy_to_stream": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_filter_append": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_filter_prepend": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_filter_register": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_filter_remove": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_get_contents": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_filters": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_line": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_meta_data": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_get_transports": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_wrappers": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_is_local": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "stream_register_wrapper": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_resolve_include_path": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "stream_select": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_blocking": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_chunk_size": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "stream_set_read_buffer": { + "ext.name": "standard", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "stream_set_timeout": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_write_buffer": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_socket_accept": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_client": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_enable_crypto": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_socket_get_name": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_pair": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_socket_recvfrom": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_sendto": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_server": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_shutdown": { + "ext.name": "standard", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "stream_supports_lock": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_wrapper_register": { + "ext.name": "standard", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "stream_wrapper_restore": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_wrapper_unregister": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "strftime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strip_tags": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stripcslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stripos": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stripslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stristr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strlen": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strnatcasecmp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strnatcmp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strncasecmp": { + "ext.name": "Core", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "strncmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strpbrk": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "strpos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strptime": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "strrchr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strrev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strripos": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "strrpos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strspn": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strstr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtok": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtolower": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtotime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtoupper": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr_compare": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "substr_count": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr_replace": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_add": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_auth_get_parameter": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_auth_set_parameter": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_blame": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_cat": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_checkout": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_cleanup": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_client_version": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_commit": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_config_ensure": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_copy": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_delete": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_diff": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_export": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_abort_txn": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_apply_text": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_begin_txn2": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_change_node_prop": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_check_path": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_contents_changed": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_copy": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_delete": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_dir_entries": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_file_contents": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_file_length": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_is_dir": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_is_file": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_make_dir": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_make_file": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_node_created_rev": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_node_prop": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_props_changed": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_revision_prop": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_revision_root": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_txn_root": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_youngest_rev": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_import": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_info": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_lock": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_log": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_ls": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_mkdir": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_move": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_propget": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_proplist": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_create": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs_begin_txn_for_commit": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs_commit_txn": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_hotcopy": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_open": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_recover": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_resolved": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_revert": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_status": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_switch": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_unlock": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_update": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "symlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sys_get_temp_dir": { + "ext.name": "standard", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "sys_getloadavg": { + "ext.name": "standard", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "syslog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "system": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tan": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tanh": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tempnam": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "textdomain": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tidy_access_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_clean_repair": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_config_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_create": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "0.5.3", + "php.min": "4.3.0", + "php.max": null + }, + "tidy_diagnose": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_error_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_body": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_config": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_error_buffer": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_head": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_html": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_html_ver": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_opt_doc": { + "ext.name": "tidy", + "ext.min": "2.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "tidy_get_output": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_release": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_root": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_status": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_getopt": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_is_xhtml": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_is_xml": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_load_config": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_load_config_enc": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": null + }, + "tidy_parse_file": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_parse_string": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_repair_file": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_repair_string": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_reset_config": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_save_config": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_set_encoding": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_setopt": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_warning_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "time": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "time_nanosleep": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "time_sleep_until": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_abbreviations_list": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_identifiers_list": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_location_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "timezone_name_from_abbr": { + "ext.name": "date", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "timezone_name_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_offset_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_open": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_transitions_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "timezone_version_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "tmpfile": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "token_get_all": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "token_name": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "touch": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "trait_exists": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "transliterator_create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_create_from_rules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_create_inverse": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_get_error_code": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_get_error_message": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_list_ids": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_transliterate": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "trigger_error": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "trim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uasort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ucfirst": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ucwords": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uksort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "umask": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uniqid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unixtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unpack": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unregister_tick_function": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "unserialize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uopz_backup": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_compose": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_copy": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_delete": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_extend": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_flags": { + "ext.name": "uopz", + "ext.min": "2.0.2", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_function": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_implement": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_overload": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_redefine": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_rename": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_restore": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_undefine": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uploadprogress_get_contents": { + "ext.name": "uploadprogress", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "uploadprogress_get_info": { + "ext.name": "uploadprogress", + "ext.min": "0.3.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "urldecode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "urlencode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "use_soap_error_handler": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "user_error": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "usleep": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "usort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "utf8_decode": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "utf8_encode": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "var_dump": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "var_export": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "version_compare": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "vfprintf": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "vprintf": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "vsprintf": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "wddx_add_vars": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_deserialize": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_packet_end": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_packet_start": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_serialize_value": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_serialize_vars": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wordwrap": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "xcache_clear_cache": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_coredump": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_count": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_coverager_decode": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_get": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_start": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_stop": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_dasm_file": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_dasm_string": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_dec": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_data_type": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_isref": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_op_type": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_opcode": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_opcode_spec": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_refcount": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_special_value": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_type": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_inc": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_info": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_is_autoglobal": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_isset": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_list": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_set": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_unset": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_unset_by_prefix": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xdebug_break": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_class": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_file": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_function": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_line": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_clear_aggr_profiling_data": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta6", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_code_coverage_started": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "xdebug_debug_zval": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_debug_zval_stdout": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta4", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_disable": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_aggr_profiling_data": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta6", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_function_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "1.3.2", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_superglobals": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_enable": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_collected_errors": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_declared_vars": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_formatted_function_stack": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_function_count": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_function_stack": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_function_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "1.3.2", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_headers": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_profiler_filename": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta4", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_stack_depth": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_tracefile_name": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_is_enabled": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_memory_usage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_peak_memory_usage": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_print_function_stack": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_set_error_handler": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "2.0.0beta6", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_start_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_start_error_collection": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_start_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_stop_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_stop_error_collection": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_stop_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_time_index": { + "ext.name": "xdebug", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_var_dump": { + "ext.name": "xdebug", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xhprof_disable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_enable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_sample_disable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_sample_enable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xml_error_string": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_byte_index": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_column_number": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_line_number": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_error_code": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parse": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parse_into_struct": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_create": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_create_ns": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_parser_free": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_get_option": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_set_option": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_character_data_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_default_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_element_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_end_namespace_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_set_external_entity_ref_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_notation_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_object": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_processing_instruction_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_start_namespace_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_set_unparsed_entity_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xmlrpc_decode": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_decode_request": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_encode": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_encode_request": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_get_type": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_is_fault": { + "ext.name": "xmlrpc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xmlrpc_parse_method_descriptions": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_add_introspection_data": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_call_method": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_create": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_destroy": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_register_introspection_callback": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_register_method": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_set_type": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlwriter_end_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_document": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_flush": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_full_end_element": { + "ext.name": "xmlwriter", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xmlwriter_open_memory": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_open_uri": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_output_memory": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_set_indent": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_set_indent_string": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_attribute_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_document": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_element_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_text": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_attribute_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_element_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_raw": { + "ext.name": "xmlwriter", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_emit": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_emit_file": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse_file": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse_url": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zend_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "zend_thread_id": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "zend_version": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "zip_close": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_close": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_compressedsize": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_compressionmethod": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_filesize": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_name": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_open": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_read": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_open": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_read": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zlib_decode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "zlib_encode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "zlib_get_coding_type": { + "ext.name": "zlib", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + } + }, + "classes": { + "AMQPChannel": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPChannelException": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPConnection": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPConnectionException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPEnvelope": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPExchange": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPExchangeException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPQueue": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPQueueException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "APCIterator": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "AppendIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ArrayIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ArrayObject": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "BadFunctionCallException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "BadMethodCallException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFile": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CachingIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CallbackFilterIterator": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "Closure": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Collator": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Collectable": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Cond": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DOMAttr": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMCdataSection": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMCharacterData": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMComment": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMConfiguration": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDocument": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDocumentFragment": { + "ext.name": "dom", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DOMDocumentType": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDomError": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMElement": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMEntity": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMEntityReference": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMErrorHandler": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMException": { + "ext.name": "dom", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DOMImplementation": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMImplementationList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMImplementationSource": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMLocator": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNameList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNameSpaceNode": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNamedNodeMap": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNode": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNodeList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNotation": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMProcessingInstruction": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMStringExtend": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMStringList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMText": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMTypeinfo": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMUserDataHandler": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMXPath": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DateInterval": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DatePeriod": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DateTime": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "DateTimeImmutable": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "DateTimeZone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Directory": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DirectoryIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DomainException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "EmptyIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ErrorException": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Exception": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "FilesystemIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FilterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Gender\\Gender": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Generator": { + "ext.name": "Core", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "GlobIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "HaruAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruDoc": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruException": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruOutline": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HttpDeflateStream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpEncodingException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpHeaderException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpInflateStream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpInvalidParamException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMalformedHeadersException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMessage": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMessageTypeException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpQueryString": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpQueryStringException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequest": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestDataShare": { + "ext.name": "http", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestMethodException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestPool": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestPoolException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpResponse": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpResponseException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRuntimeException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpSocketException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpUrlException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpUtil": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "Imagick": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickDraw": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickDrawException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickKernel": { + "ext.name": "imagick", + "ext.min": "3.3.0RC1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickKernelException": { + "ext.name": "imagick", + "ext.min": "3.3.0RC1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixel": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelIterator": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelIteratorException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "InfiniteIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "IntlBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlCalendar": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlCodePointBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlDateFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IntlException": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlGregorianCalendar": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlPartsIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlRuleBasedBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "InvalidArgumentException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "IteratorIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LengthException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LibXMLError": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LimitIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "LogicException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Memcache": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MemcachePool": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "Memcached": { + "ext.name": "memcached", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MemcachedException": { + "ext.name": "memcached", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MemcachedServer": { + "ext.name": "memcached", + "ext.min": "2.2.0b1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MessageFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MessagePack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MessagePackUnpacker": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Mongo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoBinData": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoClient": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoCode": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCommandCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoConnectionException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursor": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursorException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursorTimeoutException": { + "ext.name": "mongo", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoDB": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDeleteBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoDuplicateKeyException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoExecutionTimeoutException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoGridFS": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSCursor": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSFile": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoId": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoInsertBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoInt32": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoInt64": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoLog": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoMaxKey": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoMinKey": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoPool": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoProtocolException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoRegex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoResultException": { + "ext.name": "mongo", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoTimestamp": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoUpdateBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoUtil": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": "0.9.0", + "php.min": "5.0.0", + "php.max": null + }, + "MongoWriteBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoWriteConcernException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MultipleIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Mutex": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "NoRewindIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Normalizer": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "NumberFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OAuth": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAuthException": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAuthProvider": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OutOfBoundsException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OutOfRangeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OverflowException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDFlib": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PDFlibException": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PDO": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDOException": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDORow": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDOStatement": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ParentIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Phar": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharData": { + "ext.name": "phar", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharException": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharFileInfo": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Pool": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RangeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RarArchive": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RarEntry": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RarException": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RecursiveArrayIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveCachingIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveCallbackFilterIterator": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "RecursiveDirectoryIterator": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "RecursiveFilterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveIteratorIterator": { + "ext.name": "spl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "RecursiveRegexIterator": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RecursiveTreeIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Redis": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RedisArray": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RedisException": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Reflection": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionException": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionFunction": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionFunctionAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionObject": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionParameter": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionZendExtension": { + "ext.name": "Reflection", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "RegexIterator": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ResourceBundle": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "Riak\\Bucket": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\BucketPropertyList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Connection": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Counter": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Input\\GetInput": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Input\\UpdateInput": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\BadArgumentsException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\CommunicationException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\ConnectionException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\NonUniqueException": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\RiakException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\UnexpectedResponseException": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\UnresolvedConflictException": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\DeleteInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\GetInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\GetResolverInput": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\IndexInput": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\Input": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\PutInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Link": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\BaseFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\ErlangFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\BucketInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\Input": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\KeyDataListInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\KeyListInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\MapReduce": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\MapPhase": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\Phase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\ReducePhase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Object": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\ObjectList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\GetOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexOutput": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexResult": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexResultList": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\PutOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\YoungestSiblingResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\PoolInfo": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\CommitHook": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\CommitHookList": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ModuleFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\Disabled": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\FullSyncOnly": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\RealTimeAndFullSync": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\RealTimeOnly": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Query\\IndexQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Input\\ParameterBag": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Output\\DocumentOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Search": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\ServerInfo": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RuntimeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SNMP": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMPException": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SQLite3": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLite3Result": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLite3Stmt": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLiteDatabase": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteException": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteResult": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteUnbuffered": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SessionHandler": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SimpleXMLElement": { + "ext.name": "SimpleXML", + "ext.min": "5.0.1", + "ext.max": null, + "php.min": "5.0.1", + "php.max": null + }, + "SimpleXMLIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "SoapClient": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapFault": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapHeader": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapParam": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapServer": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapVar": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SolrClient": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrClientException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrCollapseFunction": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrDisMaxQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrDocumentField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrGenericResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrIllegalArgumentException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrIllegalOperationException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrInputDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrMissingMandatoryParameterException": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrModifiableParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrObject": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrPingResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrQueryResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrServerException": { + "ext.name": "solr", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrUpdateResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrUtils": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SphinxClient": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SplDoublyLinkedList": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplFileInfo": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SplFileObject": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplFixedArray": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplMaxHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplMinHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplObjectStorage": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplPriorityQueue": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplQueue": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplStack": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplTempFileObject": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "Spoofchecker": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "Stomp": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "StompException": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "StompFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "Svn": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnNode": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnWc": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnWcSchedule": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SyncEvent": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncMutex": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncReaderWriter": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncSemaphore": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Thread": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Threaded": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Transliterator": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "UConverter": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "UnderflowException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "UnexpectedValueException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "VarnishAdmin": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishException": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishLog": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishStat": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Worker": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Base": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\DOM": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Exception": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\File": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Memory": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLReader": { + "ext.name": "xmlreader", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XMLWriter": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "XSLTProcessor": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Yac": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ZipArchive": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__PHP_Incomplete_Class": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "http\\Client": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Request": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Response": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Cookie": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Dechunk": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Deflate": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Inflate": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env\\Request": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env\\Response": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadConversionException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadHeaderException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadMessageException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadMethodCallException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadQueryStringException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadUrlException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\InvalidArgumentException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\RuntimeException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\UnexpectedValueException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Header": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Header\\Parser": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message\\Body": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message\\Parser": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Params": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\QueryString": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Url": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mimemessage": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysqli": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_driver": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_sql_exception": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_warning": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "parent": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_user_filter": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "self": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stackable": { + "ext.name": "pthreads", + "ext.min": "0.0.36", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "static": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stdClass": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tidy": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidyNode": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.0.1", + "php.max": null + } + }, + "interfaces": { + "ArrayAccess": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "Countable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DateTimeInterface": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "Iterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "IteratorAggregate": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "JsonSerializable": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MongoCursorInterface": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "OuterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Reflector": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Riak\\MapReduce\\Output\\StreamOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\ConflictResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\KeyStreamOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\ReplicationMode": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SeekableIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Serializable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "SessionHandlerInterface": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SessionIdInterface": { + "ext.name": "session", + "ext.min": "5.5.1", + "ext.max": null, + "php.min": "5.5.1", + "php.max": null + }, + "SplObserver": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplSubject": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Traversable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "http\\Exception": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "constants": { + "ABDAY_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_10": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_11": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_12": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_8": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_9": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_INET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_INET6": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_UNIX": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ALT_DIGITS": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AMQP_AUTOACK": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_AUTODELETE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_DURABLE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EXCLUSIVE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_DIRECT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_FANOUT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_HEADERS": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_TOPIC": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IFEMPTY": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IFUNUSED": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IMMEDIATE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_INTERNAL": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_MANDATORY": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_MULTIPLE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOLOCAL": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOPARAM": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOWAIT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_OS_SOCKET_TIMEOUT_ERRNO": { + "ext.name": "amqp", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_PASSIVE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_REQUEUE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AM_STR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "APACHE_MAP": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "APCU_APC_FULL_BC": { + "ext.name": "apcu", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "APC_BIN_VERIFY_CRC32": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_BIN_VERIFY_MD5": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_ALL": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_ATIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_CTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_DEVICE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_DTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_FILENAME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_INODE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_KEY": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MD5": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MEM_SIZE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_NONE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_NUM_HITS": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_REFCOUNT": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_TTL": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_TYPE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_VALUE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_LIST_ACTIVE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_LIST_DELETED": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ARRAY_FILTER_USE_BOTH": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "ARRAY_FILTER_USE_KEY": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "ASSERT_ACTIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_BAIL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_CALLBACK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_QUIET_EVAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_WARNING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "BUS_ADRALN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "BUS_ADRERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "BUS_OBJERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CAL_DOW_DAYNO": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_DOW_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_DOW_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_EASTER_ALWAYS_GREGORIAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_ALWAYS_JULIAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_DEFAULT": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_ROMAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_FRENCH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_GREGORIAN": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_JEWISH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_ALAFIM": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_ALAFIM_GERESH": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_GERESHAYIM": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JULIAN": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_FRENCH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_GREGORIAN_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_GREGORIAN_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JEWISH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JULIAN_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JULIAN_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_NUM_CALS": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CASE_LOWER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CASE_UPPER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CHAR_MAX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CLD_CONTINUED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_DUMPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_EXITED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_KILLED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_STOPPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_TRAPPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CL_EXPUNGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CODESET": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "CONNECTION_ABORTED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CONNECTION_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CONNECTION_TIMEOUT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "COUNT_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "COUNT_RECURSIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CP_MOVE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CP_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_DOCS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_FULLPAGE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_GENERAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_GROUP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_MODULES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_QA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_SAPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRNCYSTR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "CRYPT_BLOWFISH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_EXT_DES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_MD5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_SALT_LENGTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_SHA256": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CRYPT_SHA512": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CRYPT_STD_DES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CURLAUTH_ANY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_ANYSAFE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_BASIC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_DIGEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_DIGEST_IE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLAUTH_GSSNEGOTIATE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLAUTH_NTLM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_ONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLCLOSEPOLICY_CALLBACK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_LEAST_RECENTLY_USED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_LEAST_TRAFFIC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_OLDEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_SLOWEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLE_ABORTED_BY_CALLBACK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_CALLING_ORDER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_CONTENT_ENCODING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_DOWNLOAD_RESUME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_BAD_FUNCTION_ARGUMENT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_PASSWORD_ENTERED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_CONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_RESOLVE_HOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_RESOLVE_PROXY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FAILED_INIT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FILESIZE_EXCEEDED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FILE_COULDNT_READ_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_ACCESS_DENIED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_BAD_DOWNLOAD_RESUME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_CANT_GET_HOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_CANT_RECONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_GET_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_RETR_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_SET_ASCII": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_SET_BINARY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_STOR_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_USE_REST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_PARTIAL_FILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_FTP_PORT_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_QUOTE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_SSL_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_USER_PASSWORD_INCORRECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_227_FORMAT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_PASS_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_PASV_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_SERVER_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_USER_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WRITE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FUNCTION_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_GOT_NOTHING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_PORT_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_POST_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_RANGE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_RETURNED_ERROR": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_LDAP_CANNOT_BIND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LDAP_INVALID_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LDAP_SEARCH_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LIBRARY_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_MALFORMAT_USER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OBSOLETE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OPERATION_TIMEDOUT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_OPERATION_TIMEOUTED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OUT_OF_MEMORY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_PARTIAL_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_READ_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_RECV_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SEND_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SHARE_IN_USE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSH": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLE_SSL_CACERT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CERTPROBLEM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CIPHER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CONNECT_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_ENGINE_NOTFOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_ENGINE_SETFAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_PEER_CERTIFICATE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_TELNET_OPTION_SYNTAX": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_TOO_MANY_REDIRECTS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_UNKNOWN_TELNET_OPTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_UNSUPPORTED_PROTOCOL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_URL_MALFORMAT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_URL_MALFORMAT_USER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_WRITE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLFTPAUTH_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPAUTH_SSL": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPAUTH_TLS": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPMETHOD_MULTICWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPMETHOD_NOCWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPMETHOD_SINGLECWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPSSL_ALL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_CCC_ACTIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CCC_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CCC_PASSIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CONTROL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_NONE": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_TRY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLGSSAPI_DELEGATION_FLAG": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLGSSAPI_DELEGATION_POLICY_FLAG": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_APPCONNECT_TIME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_CERTINFO": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLINFO_CONDITION_UNMET": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_CONNECT_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_LENGTH_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_LENGTH_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_TYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_COOKIELIST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_EFFECTIVE_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_FILETIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_FTP_ENTRY_PATH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_HEADER_OUT": { + "ext.name": "curl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "CURLINFO_HEADER_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_HTTPAUTH_AVAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_HTTP_CODE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_HTTP_CONNECTCODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_LASTONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_LOCAL_IP": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_LOCAL_PORT": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_NAMELOOKUP_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_NUM_CONNECTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_OS_ERRNO": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_PRETRANSFER_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_PRIMARY_IP": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_PRIMARY_PORT": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_PRIVATE": { + "ext.name": "curl", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "CURLINFO_PROXYAUTH_AVAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_REDIRECT_COUNT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_REDIRECT_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_REDIRECT_URL": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLINFO_REQUEST_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_RESPONSE_CODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_CLIENT_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_CSEQ_RECV": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_SERVER_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_SESSION_ID": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_SIZE_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SIZE_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SPEED_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SPEED_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SSL_ENGINES": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_SSL_VERIFYRESULT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_STARTTRANSFER_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_TOTAL_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLMOPT_MAXCONNECTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLMOPT_PIPELINING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLMSG_DONE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_BAD_EASY_HANDLE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_BAD_HANDLE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_CALL_MULTI_PERFORM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_INTERNAL_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_OK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_OUT_OF_MEMORY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_ACCEPTTIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_ACCEPT_ENCODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_ADDRESS_SCOPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_APPEND": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_AUTOREFERER": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_BINARYTRANSFER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_BUFFERSIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CAINFO": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CAPATH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CERTINFO": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_CLOSEPOLICY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLOPT_CONNECTTIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CONNECTTIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CONNECT_ONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_COOKIE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIEFILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIEJAR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIELIST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_COOKIESESSION": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_CRLF": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CRLFILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_CUSTOMREQUEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_DIRLISTONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_DNS_CACHE_TIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_DNS_SERVERS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_DNS_USE_GLOBAL_CACHE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_EGDSOCKET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_ENCODING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FAILONERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FILETIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FNMATCH_FUNCTION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FOLLOWLOCATION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FORBID_REUSE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FRESH_CONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPAPPEND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPLISTONLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPPORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPSSLAUTH": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_FTP_ACCOUNT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_ALTERNATIVE_TO_USER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_CREATE_MISSING_DIRS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_FILEMETHOD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_FTP_RESPONSE_TIMEOUT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_SKIP_PASV_IP": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_FTP_SSL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLOPT_FTP_SSL_CCC": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_USE_EPRT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_USE_EPSV": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_USE_PRET": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_GSSAPI_DELEGATION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HEADERFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTP200ALIASES": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPAUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPGET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPHEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPPROXYTUNNEL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTP_CONTENT_DECODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HTTP_TRANSFER_DECODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HTTP_VERSION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_IGNORE_CONTENT_LENGTH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_INFILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_INFILESIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_INTERFACE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_IPRESOLVE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_ISSUERCERT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_KEYPASSWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_KRB4LEVEL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_KRBLEVEL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOCALPORT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOCALPORTRANGE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOW_SPEED_LIMIT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_LOW_SPEED_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAIL_AUTH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAIL_FROM": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAIL_RCPT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAXCONNECTS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAXFILESIZE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAXREDIRS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAX_RECV_SPEED_LARGE": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLOPT_MAX_SEND_SPEED_LARGE": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLOPT_MUTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NETRC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NETRC_FILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NEW_DIRECTORY_PERMS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NEW_FILE_PERMS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NOBODY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NOPROGRESS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NOPROXY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NOSIGNAL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PASSWDFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTFIELDS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTQUOTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTREDIR": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_PREQUOTE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PRIVATE": { + "ext.name": "curl", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "CURLOPT_PROGRESSFUNCTION": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_PROTOCOLS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYAUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYPASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PROXYPORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYUSERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PROXYUSERPWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXY_TRANSFER_MODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_QUOTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RANDOM_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RANGE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_READDATA": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_READFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_REDIR_PROTOCOLS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_REFERER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RESOLVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RESUME_FROM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RETURNTRANSFER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RTSP_CLIENT_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_REQUEST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_SERVER_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_SESSION_ID": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_STREAM_URI": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_TRANSPORT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SAFE_UPLOAD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SOCKS5_GSSAPI_NEC": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SOCKS5_GSSAPI_SERVICE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSH_AUTH_TYPES": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_HOST_PUBLIC_KEY_MD5": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_KNOWNHOSTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSH_PRIVATE_KEYFILE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_PUBLIC_KEYFILE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSLCERT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLCERTPASSWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLCERTTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLENGINE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLENGINE_DEFAULT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEYPASSWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEYTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLVERSION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_CIPHER_LIST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_OPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSL_SESSIONID_CACHE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSL_VERIFYHOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_VERIFYPEER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_STDERR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TCP_KEEPALIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_KEEPIDLE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_KEEPINTVL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_NODELAY": { + "ext.name": "curl", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "CURLOPT_TELNETOPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TFTP_BLKSIZE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TIMECONDITION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEVALUE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TLSAUTH_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TLSAUTH_TYPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TLSAUTH_USERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TRANSFERTEXT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TRANSFER_ENCODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_UNRESTRICTED_AUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USERAGENT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_USERPWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USE_SSL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_VERBOSE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_WILDCARDMATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_WRITEFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_WRITEHEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPAUSE_ALL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_RECV": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_RECV_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_SEND": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_SEND_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_ALL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_DICT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FTPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_GOPHER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_HTTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_HTTPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_IMAP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_IMAPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_LDAP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_LDAPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_POP3": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_POP3S": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPTE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTSP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_SCP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_SFTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_SMTP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_SMTPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_TELNET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_TFTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_HTTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_SOCKS4": { + "ext.name": "curl", + "ext.min": "5.2.10", + "ext.max": null, + "php.min": "5.2.10", + "php.max": null + }, + "CURLPROXY_SOCKS4A": { + "ext.name": "curl", + "ext.min": "5.5.23RC1", + "ext.max": null, + "php.min": "5.5.23RC1", + "php.max": null + }, + "CURLPROXY_SOCKS5": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_SOCKS5_HOSTNAME": { + "ext.name": "curl", + "ext.min": "5.5.23RC1", + "ext.max": null, + "php.min": "5.5.23RC1", + "php.max": null + }, + "CURLSHOPT_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSHOPT_SHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSHOPT_UNSHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSSH_AUTH_ANY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSSH_AUTH_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_HOST": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_KEYBOARD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_NONE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_PUBLICKEY": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSLOPT_ALLOW_BEAST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_ALL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_CONTROL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_TRY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLVERSION_NOW": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_FNMATCHFUNC_FAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_FNMATCHFUNC_MATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_FNMATCHFUNC_NOMATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_HTTP_VERSION_1_0": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_HTTP_VERSION_1_1": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_HTTP_VERSION_2_0": { + "ext.name": "curl", + "ext.min": "5.5.24RC1", + "ext.max": null, + "php.min": "5.5.24RC1", + "php.max": null + }, + "CURL_HTTP_VERSION_NONE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_IPRESOLVE_V4": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_IPRESOLVE_V6": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_IPRESOLVE_WHATEVER": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_LOCK_DATA_COOKIE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_LOCK_DATA_DNS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_LOCK_DATA_SSL_SESSION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_NETRC_IGNORED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_NETRC_OPTIONAL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_NETRC_REQUIRED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_READFUNC_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_ANNOUNCE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_DESCRIBE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_GET_PARAMETER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_OPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_PLAY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_RECEIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_RECORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_SETUP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_SET_PARAMETER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_TEARDOWN": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_SSLv2": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_SSLv3": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_0": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_1": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_2": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_TIMECOND_IFMODSINCE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_IFUNMODSINCE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_LASTMOD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_TLSAUTH_SRP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_VERSION_HTTP2": { + "ext.name": "curl", + "ext.min": "5.5.24RC1", + "ext.max": null, + "php.min": "5.5.24RC1", + "php.max": null + }, + "CURL_VERSION_IPV6": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_KERBEROS4": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_LIBZ": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_SSL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_WRITEFUNC_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "DATE_ATOM": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_COOKIE": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_ISO8601": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC1036": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC1123": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC2822": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC3339": { + "ext.name": "date", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "DATE_RFC822": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC850": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RSS": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_W3C": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DAY_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DEBUG_BACKTRACE_IGNORE_ARGS": { + "ext.name": "Core", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "DEBUG_BACKTRACE_PROVIDE_OBJECT": { + "ext.name": "Core", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "DEFAULT_INCLUDE_PATH": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DIRECTORY_SEPARATOR": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "DNS_A": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_A6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_AAAA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_ANY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_CNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_HINFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_MX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_NAPTR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_NS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_PTR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_SOA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_SRV": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_TXT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DOMSTRING_SIZE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_HIERARCHY_REQUEST_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INDEX_SIZE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INUSE_ATTRIBUTE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_ACCESS_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_CHARACTER_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_MODIFICATION_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_STATE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NAMESPACE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NOT_FOUND_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NOT_SUPPORTED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NO_DATA_ALLOWED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NO_MODIFICATION_ALLOWED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_PHP_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_SYNTAX_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_VALIDATION_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_WRONG_DOCUMENT_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "D_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "D_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ENC7BIT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENC8BIT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCBASE64": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCBINARY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCHANT_ISPELL": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ENCHANT_MYSPELL": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ENCOTHER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCQUOTEDPRINTABLE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_COMPAT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_DISALLOWED": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_HTML401": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_HTML5": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_IGNORE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ENT_NOQUOTES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_QUOTES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_SUBSTITUTE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_XHTML": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_XML1": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ERA": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_D_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_D_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "EVBUFFER_EOF": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_ERROR": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_READ": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_TIMEOUT": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_WRITE": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVLOOP_NONBLOCK": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVLOOP_ONCE": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_PERSIST": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_READ": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_SIGNAL": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_TIMEOUT": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_WRITE": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EXIF_USE_MBSTRING": { + "ext.name": "exif", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "EXTR_IF_EXISTS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_OVERWRITE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_IF_EXISTS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_INVALID": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_SAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_REFS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_SKIP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_ALL": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_COMPILE_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_COMPILE_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_CORE_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_CORE_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_DEPRECATED": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "E_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_NOTICE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_PARSE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_RECOVERABLE_ERROR": { + "ext.name": "Core", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "E_STRICT": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "E_USER_DEPRECATED": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "E_USER_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_USER_NOTICE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_USER_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FALSE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_COMPRESS": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.2.17" + }, + "FILEINFO_CONTINUE": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_DEVICES": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_MIME": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_MIME_ENCODING": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FILEINFO_MIME_TYPE": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FILEINFO_NONE": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_PRESERVE_ATIME": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_RAW": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_SYMLINK": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_APPEND": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_BINARY": { + "ext.name": "standard", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "FILE_IGNORE_NEW_LINES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_NO_DEFAULT_CONTEXT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_SKIP_EMPTY_LINES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_TEXT": { + "ext.name": "standard", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "FILE_USE_INCLUDE_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_CALLBACK": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_DEFAULT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_FRACTION": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_HEX": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_OCTAL": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_SCIENTIFIC": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_THOUSAND": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ARRAY": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_FLAG_EMPTY_STRING_NULL": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_AMP": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_HIGH": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_LOW": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_HOST_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_IPV4": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_IPV6": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NONE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_ENCODE_QUOTES": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_PRIV_RANGE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_RES_RANGE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_PATH_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_QUERY_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_SCALAR": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_FLAG_SCHEME_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_STRIP_BACKTICK": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "FILTER_FLAG_STRIP_HIGH": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_STRIP_LOW": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FORCE_ARRAY": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_NULL_ON_FAILURE": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_REQUIRE_ARRAY": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_REQUIRE_SCALAR": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_SANITIZE_ALL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_EMAIL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_ENCODED": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_FULL_SPECIAL_CHARS": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "FILTER_SANITIZE_MAGIC_QUOTES": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_NUMBER_FLOAT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_NUMBER_INT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_SPECIAL_CHARS": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_STRING": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_STRIPPED": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_URL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_UNSAFE_RAW": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_ALL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_BOOLEAN": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_EMAIL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_FLOAT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_INT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_IP": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_MAC": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "FILTER_VALIDATE_REGEXP": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_URL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_CASEFOLD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_NOESCAPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_PATHNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_PERIOD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FORCE_DEFLATE": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FORCE_GZIP": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FPE_FLTDIV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTINV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTOVF": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTRES": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTSUB": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTUND": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_INTDIV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_INTOVF": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FTP_ASCII": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_AUTORESUME": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_AUTOSEEK": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_BINARY": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_FAILED": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_FINISHED": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_IMAGE": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_MOREDATA": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_TEXT": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_TIMEOUT_SEC": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_INTERNAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_NOT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_PEEK": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_PREFETCHTEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GD_BUNDLED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GD_EXTRA_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_MAJOR_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_MINOR_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_RELEASE_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GEOIP_ASNUM_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CABLEDSL_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CITY_EDITION_REV0": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CITY_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CORPORATE_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_COUNTRY_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_DIALUP_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_DOMAIN_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_ISP_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_NETSPEED_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_NETSPEED_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_ORG_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_PROXY_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_REGION_EDITION_REV0": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_REGION_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_UNKNOWN_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GLOB_AVAILABLE_FLAGS": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GLOB_BRACE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_MARK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOCHECK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOESCAPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOSORT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_ONLYDIR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GMP_BIG_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_LITTLE_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_LSW_FIRST": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_MPIR_VERSION": { + "ext.name": "gmp", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "GMP_MSW_FIRST": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_NATIVE_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_ROUND_MINUSINF": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_ROUND_PLUSINF": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_ROUND_ZERO": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_VERSION": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GRAPHEME_EXTR_COUNT": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GRAPHEME_EXTR_MAXBYTES": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GRAPHEME_EXTR_MAXCHARS": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "HASH_HMAC": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTML_ENTITIES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTML_SPECIALCHARS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTTP_AUTH_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_BASIC": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_DIGEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_DIGEST_IE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_GSSNEG": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_NTLM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_HTTPONLY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_PARSE_RAW": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_SECURE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_DEF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_MAX": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_MIN": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_DEF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_FILT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_FIXED": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_HUFF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_RLE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_GZIP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_RAW": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_ZLIB": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_FULL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_SYNC": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_ENCODING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_HEADER": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_INVALID_PARAM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_MALFORMED_HEADERS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_MESSAGE_TYPE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_QUERYSTRING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST_METHOD": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST_POOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_RESPONSE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_RUNTIME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_SOCKET": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_URL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_V4": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_V6": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_ACL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_BASELINE_CONTROL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CHECKIN": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CHECKOUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CONNECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_COPY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_DELETE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_GET": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_HEAD": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_LABEL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_LOCK": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MERGE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKACTIVITY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKCOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKWORKSPACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MOVE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_OPTIONS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_POST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PROPFIND": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PROPPATCH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_REPORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_TRACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UNCHECKOUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UNLOCK": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UPDATE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_VERSION_CONTROL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_REQUEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_RESPONSE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_ALLOW_COMMA": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_ALLOW_FAILURE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_DEFAULT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_RAISE_ERROR": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_301": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_302": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_ALL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_HTTP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_HTTP_1_0": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS4": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS4A": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS5": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS5_HOSTNAME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_ARRAY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_BOOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_FLOAT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_INT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_OBJECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_STRING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_FOUND": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_PERM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_POST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_PROXY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_TEMP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_SSLv2": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_SSLv3": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_TLSv1": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_ENCODINGS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_EVENTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_MAGICMIME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_REQUESTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_SSLREQUESTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_FROM_ENV": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_JOIN_PATH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_JOIN_QUERY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_REPLACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_ALL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_AUTH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_FRAGMENT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PASS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PATH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_QUERY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_USER": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_1_0": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_1_1": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ICONV_IMPL": { + "ext.name": "iconv", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ICONV_MIME_DECODE_CONTINUE_ON_ERROR": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ICONV_MIME_DECODE_STRICT": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ICONV_VERSION": { + "ext.name": "iconv", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "IDNA_ALLOW_UNASSIGNED": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_CHECK_BIDI": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_CHECK_CONTEXTJ": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_DEFAULT": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_BIDI": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_CONTEXTJ": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_DISALLOWED": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_DOMAIN_NAME_TOO_LONG": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_EMPTY_LABEL": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_HYPHEN_3_4": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_INVALID_ACE_LABEL": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LABEL_HAS_DOT": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LABEL_TOO_LONG": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LEADING_COMBINING_MARK": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LEADING_HYPHEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_PUNYCODE": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_TRAILING_HYPHEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_NONTRANSITIONAL_TO_ASCII": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_NONTRANSITIONAL_TO_UNICODE": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_USE_STD3_RULES": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "ILL_BADSTK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_COPROC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLADR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLOPC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLOPN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLTRP": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_PRVOPC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_PRVREG": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_BMP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_COUNT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_GIF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_ICO": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_IFF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JB2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JP2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPEG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPEG2000": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_PNG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_PSD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_SWC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_SWF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_TIFF_II": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_TIFF_MM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_UNKNOWN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_WBMP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_XBM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_CLOSETIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_GC_ELT": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_GC_ENV": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_GC_TEXTS": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_OPENTIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_READTIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_WRITETIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_AFFINE_ROTATE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SCALE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SHEAR_HORIZONTAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SHEAR_VERTICAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_TRANSLATE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_ARC_CHORD": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_EDGED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_NOFILL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_PIE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_ROUNDED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_BELL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BESSEL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BICUBIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BICUBIC_FIXED": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BILINEAR_FIXED": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BLACKMAN": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BOX": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BSPLINE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CATMULLROM": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_COLOR_BRUSHED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_STYLED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_STYLEDBRUSHED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_TILED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_TRANSPARENT": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_CROP_BLACK": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_DEFAULT": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_SIDES": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_THRESHOLD": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_TRANSPARENT": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_WHITE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_EFFECT_ALPHABLEND": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_NORMAL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_OVERLAY": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_REPLACE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_BRIGHTNESS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_COLORIZE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_CONTRAST": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_EDGEDETECT": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_EMBOSS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_GAUSSIAN_BLUR": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_GRAYSCALE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_MEAN_REMOVAL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_NEGATE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_PIXELATE": { + "ext.name": "gd", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMG_FILTER_SELECTIVE_BLUR": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_SMOOTH": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FLIP_BOTH": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_FLIP_HORIZONTAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_FLIP_VERTICAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GAUSSIAN": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GD2_COMPRESSED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_GD2_RAW": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_GENERALIZED_CUBIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GIF": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_HAMMING": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_HANNING": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_HERMITE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_JPEG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_JPG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_MITCHELL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_NEAREST_NEIGHBOUR": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_PNG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_POWER": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_QUADRATIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_SINC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_TRIANGLE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_WBMP": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_WEIGHTED4": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_XPM": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_CONFIGURATION": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_CREDITS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_ENVIRONMENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_GENERAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_LICENSE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_MODULES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_VARIABLES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_PERDIR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_SCANNER_NORMAL": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "INI_SCANNER_RAW": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "INI_SCANNER_TYPED": { + "ext.name": "standard", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "INI_SYSTEM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_COOKIE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_ENV": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_GET": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_POST": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_REQUEST": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "INPUT_SERVER": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_SESSION": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INTL_ICU_DATA_VERSION": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "INTL_ICU_VERSION": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "INTL_IDNA_VARIANT_2003": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "INTL_IDNA_VARIANT_UTS46": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "INTL_MAX_LOCALE_LEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IPPROTO_IP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPPROTO_IPV6": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_HOPLIMIT": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_MULTICAST_HOPS": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_MULTICAST_IF": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_MULTICAST_LOOP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_PKTINFO": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVHOPLIMIT": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVPKTINFO": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVTCLASS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_TCLASS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_UNICAST_HOPS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IP_MULTICAST_IF": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IP_MULTICAST_LOOP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IP_MULTICAST_TTL": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSMIN_ERROR_NONE": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_COMMENT": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_REGEX": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_STRING": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSON_BIGINT_AS_STRING": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_ERROR_CTRL_CHAR": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_DEPTH": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_INF_OR_NAN": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_NONE": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_RECURSION": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_STATE_MISMATCH": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_SYNTAX": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_UNSUPPORTED_TYPE": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_UTF8": { + "ext.name": "json", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "JSON_FORCE_OBJECT": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_AMP": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_APOS": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_QUOT": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_TAG": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_NUMERIC_CHECK": { + "ext.name": "json", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "JSON_OBJECT_AS_ARRAY": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_PARTIAL_OUTPUT_ON_ERROR": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_PRESERVE_ZERO_FRACTION": { + "ext.name": "json", + "ext.min": "5.6.6RC1", + "ext.max": null, + "php.min": "5.6.6RC1", + "php.max": null + }, + "JSON_PRETTY_PRINT": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_UNESCAPED_SLASHES": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_UNESCAPED_UNICODE": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LATT_HASCHILDREN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_HASNOCHILDREN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_MARKED": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_NOINFERIORS": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_NOSELECT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_REFERRAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_UNMARKED": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_COLLATE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_CTYPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_MESSAGES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_MONETARY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_NUMERIC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_TIME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_ALWAYS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_FINDING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_NEVER": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_SEARCHING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_ESCAPE_DN": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "LDAP_ESCAPE_FILTER": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "LDAP_MODIFY_BATCH_ADD": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_ATTRIB": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_MODTYPE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REMOVE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REMOVE_ALL": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REPLACE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_VALUES": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_OPT_CLIENT_CONTROLS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DEBUG_LEVEL": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DEREF": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DIAGNOSTIC_MESSAGE": { + "ext.name": "ldap", + "ext.min": "5.6.11RC1", + "ext.max": null, + "php.min": "5.6.11RC1", + "php.max": null + }, + "LDAP_OPT_ERROR_NUMBER": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_ERROR_STRING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_HOST_NAME": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_MATCHED_DN": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_NETWORK_TIMEOUT": { + "ext.name": "ldap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "LDAP_OPT_PROTOCOL_VERSION": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_REFERRALS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_RESTART": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_SERVER_CONTROLS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_SIZELIMIT": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_TIMELIMIT": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_TIMEOUT": { + "ext.name": "ldap", + "ext.min": "5.6.14RC1", + "ext.max": null, + "php.min": "5.6.14RC1", + "php.max": null + }, + "LDAP_OPT_X_SASL_AUTHCID": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_AUTHZID": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_MECH": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_REALM": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LIBEXSLT_DOTTED_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBEXSLT_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBXML_COMPACT": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DOTTED_VERSION": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDATTR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDLOAD": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDVALID": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_ERROR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_FATAL": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_NONE": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_WARNING": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_HTML_NODEFDTD": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_HTML_NOIMPLIED": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_LOADED_VERSION": { + "ext.name": "libxml", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "LIBXML_NOBLANKS": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOCDATA": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOEMPTYTAG": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOENT": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOERROR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NONET": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOWARNING": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOXMLDECL": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NSCLEAN": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_PARSEHUGE": { + "ext.name": "libxml", + "ext.min": "5.2.12", + "ext.max": null, + "php.min": "5.2.12", + "php.max": null + }, + "LIBXML_PEDANTIC": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_SCHEMA_CREATE": { + "ext.name": "libxml", + "ext.min": "5.5.2", + "ext.max": null, + "php.min": "5.5.2", + "php.max": null + }, + "LIBXML_VERSION": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_XINCLUDE": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXSLT_DOTTED_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBXSLT_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LOCK_EX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_NB": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_SH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_UN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ALERT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_AUTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_AUTHPRIV": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CONS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CRIT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CRON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_DAEMON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_DEBUG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_EMERG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_INFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_KERN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL0": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL1": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL3": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL4": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL7": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LPR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_MAIL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NDELAY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NEWS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NOTICE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NOWAIT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ODELAY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_PERROR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_PID": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_SYSLOG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_UUCP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_WARNING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_OUTPUT": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_RETURN": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_STREAM": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MB_CASE_LOWER": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_CASE_TITLE": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_CASE_UPPER": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_MAIL": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_REGEX": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_STRING": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MCAST_BLOCK_SOURCE": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_JOIN_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_JOIN_SOURCE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_LEAVE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_LEAVE_SOURCE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_UNBLOCK_SOURCE": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCRYPT_3DES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ARCFOUR": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ARCFOUR_IV": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_BLOWFISH": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CAST_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CAST_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DECRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DES_COMPAT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DEV_RANDOM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DEV_URANDOM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ENCRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ENIGNA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_GOST": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_IDEA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_LOKI97": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MARS": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_CBC": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_CFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_ECB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_NOFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_OFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_STREAM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_PANAMA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RAND": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC2": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC4": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFER128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFER64": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFERPLUS": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SKIPJACK": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TEAN": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_THREEWAY": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TRIPLEDES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_WAKE": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_XTEA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MEMCACHE_COMPRESSED": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_HAVE_SESSION": { + "ext.name": "memcache", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_SERIALIZED": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": "0.2", + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_USER1": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER2": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER3": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER4": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MHASH_ADLER32": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_CRC32": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_CRC32B": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_FNV132": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV164": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV1A32": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV1A64": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_GOST": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL192": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL224": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_JOAAT": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_MD2": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_MD4": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_MD5": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD320": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA1": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA224": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA384": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA512": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SNEFRU128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SNEFRU256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_WHIRLPOOL": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MONGO_STREAMS": { + "ext.name": "mongo", + "ext.min": "1.4.2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_COMPLETED": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_PROGRESS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_READ": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_WRITE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_BATCHINSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_DELETE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_INSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_UPDATE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_DELETE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_GETMORE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_INSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_KILLCURSOR": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_QUERY": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_RESPONSE_HEADER": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_UPDATE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_WRITE_BATCH": { + "ext.name": "mongo", + "ext.min": "1.5.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_WRITE_REPLY": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_TYPE_IO_INIT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_TYPE_LOG": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_GSSAPI": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_CR": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_X509": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_PLAIN": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_SCRAM_SHA1": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MONGO_SUPPORTS_SSL": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_STREAMS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MON_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_10": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_11": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_12": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_8": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_9": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_CMSG_CLOEXEC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_CONFIRM": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_CTRUNC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_DONTROUTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_DONTWAIT": { + "ext.name": "sockets", + "ext.min": "5.2.10", + "ext.max": null, + "php.min": "5.2.10", + "php.max": null + }, + "MSG_EAGAIN": { + "ext.name": "sysvmsg", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MSG_ENOMSG": { + "ext.name": "sysvmsg", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MSG_EOF": { + "ext.name": "sockets", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "MSG_EOR": { + "ext.name": "sockets", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "MSG_ERRQUEUE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_EXCEPT": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_IPC_NOWAIT": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_MORE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_NOERROR": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_NOSIGNAL": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_OOB": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_PEEK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_TRUNC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_WAITALL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_WAITFORONE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSSQL_ASSOC": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MSSQL_BOTH": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MSSQL_NUM": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQLI_ASSOC": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ASYNC": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_AUTO_INCREMENT_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_BINARY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_BLOB_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_BOTH": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS": { + "ext.name": "mysqli", + "ext.min": "5.6.0RC3", + "ext.max": null, + "php.min": "5.6.0RC3", + "php.max": null + }, + "MYSQLI_CLIENT_COMPRESS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_FOUND_ROWS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_IGNORE_SPACE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_INTERACTIVE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_NO_SCHEMA": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_SSL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_FOR_UPDATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_NO_CURSOR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_READ_ONLY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_SCROLLABLE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_DATA_TRUNCATED": { + "ext.name": "mysqli", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MYSQLI_DEBUG_TRACE_ENABLED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_ENUM_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_GROUP_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_INIT_COMMAND": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_MULTIPLE_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NOT_NULL_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NO_DATA": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NO_DEFAULT_VALUE_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_NUM": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NUM_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ON_UPDATE_NOW_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS": { + "ext.name": "mysqli", + "ext.min": "5.4.12", + "ext.max": null, + "php.min": "5.4.12", + "php.max": null + }, + "MYSQLI_OPT_CONNECT_TIMEOUT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_OPT_INT_AND_FLOAT_NATIVE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_LOCAL_INFILE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_OPT_NET_CMD_BUFFER_SIZE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_NET_READ_BUFFER_SIZE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_SSL_VERIFY_SERVER_CERT": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_PART_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_PRI_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_READ_DEFAULT_FILE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_READ_DEFAULT_GROUP": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REFRESH_BACKUP_LOG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_GRANT": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_HOSTS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_LOG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_MASTER": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_SLAVE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_STATUS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_TABLES": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_THREADS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REPORT_ALL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_ERROR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_INDEX": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_OFF": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_STRICT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_RPL_ADMIN": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_RPL_MASTER": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_RPL_SLAVE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_SERVER_PS_OUT_PARAMS": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_SERVER_PUBLIC_KEY": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_NO_INDEX_USED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_WAS_SLOW": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SET_CHARSET_DIR": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_SET_CHARSET_NAME": { + "ext.name": "mysqli", + "ext.min": "5.2.5", + "ext.max": null, + "php.min": "5.2.5", + "php.max": null + }, + "MYSQLI_SET_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_CURSOR_TYPE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_PREFETCH_ROWS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STORE_RESULT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STORE_RESULT_COPY_DATA": { + "ext.name": "mysqli", + "ext.min": "5.6.0beta2", + "ext.max": null, + "php.min": "5.6.0beta2", + "php.max": null + }, + "MYSQLI_TIMESTAMP_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_AND_CHAIN": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_AND_NO_CHAIN": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_NO_RELEASE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_RELEASE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_READ_ONLY": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_READ_WRITE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TYPE_BIT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_CHAR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DATETIME": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DECIMAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DOUBLE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_ENUM": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_FLOAT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_GEOMETRY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_INT24": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_INTERVAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONGLONG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONG_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_MEDIUM_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NEWDATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NEWDECIMAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NULL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_SET": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_SHORT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_STRING": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TIME": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TIMESTAMP": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TINY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TINY_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_VAR_STRING": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_YEAR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_UNIQUE_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_UNSIGNED_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_USE_RESULT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ZEROFILL_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQL_ASSOC": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQL_BOTH": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQL_CLIENT_COMPRESS": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_IGNORE_SPACE": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_INTERACTIVE": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_SSL": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_NUM": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_1_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_2_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_2_SQRTPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_EULER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LN10": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LN2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LNPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LOG10E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LOG2E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI_2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI_4": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT1_2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT3": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRTPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NAN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NIL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NOEXPR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "NULL": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_AUTHORIZATION": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_FORM": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_NONE": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_URI": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_BAD_NONCE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_BAD_TIMESTAMP": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_CONSUMER_KEY_REFUSED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_CONSUMER_KEY_UNKNOWN": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_DELETE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_GET": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_HEAD": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_POST": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_PUT": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_INVALID_SIGNATURE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_OK": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_PARAMETER_ABSENT": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_REQENGINE_CURL": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_REQENGINE_STREAMS": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIGNATURE_METHOD_REJECTED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_HMACSHA1": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_HMACSHA256": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_PLAINTEXT": { + "ext.name": "OAuth", + "ext.min": "1.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_RSASHA1": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_BOTH": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_HOST": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_NONE": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_PEER": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_EXPIRED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_REJECTED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_REVOKED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_USED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_VERIFIER_INVALID": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ODBC_BINMODE_CONVERT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_BINMODE_PASSTHRU": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_BINMODE_RETURN": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_TYPE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OPENSSL_ALGO_DSS1": { + "ext.name": "openssl", + "ext.min": "5.2.8", + "ext.max": null, + "php.min": "5.2.8", + "php.max": null + }, + "OPENSSL_ALGO_MD2": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_MD4": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_MD5": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_RMD160": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA1": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_SHA224": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA256": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA384": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA512": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_CIPHER_3DES": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_128_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_192_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_256_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_DES": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_128": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_40": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_64": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_DEFAULT_STREAM_CIPHERS": { + "ext.name": "openssl", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "OPENSSL_KEYTYPE_DH": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_DSA": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_EC": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_RSA": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_NO_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_PKCS1_OAEP_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_PKCS1_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_RAW_DATA": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_SSLV23_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_TLSEXT_SERVER_NAME": { + "ext.name": "openssl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "OPENSSL_VERSION_NUMBER": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OPENSSL_VERSION_TEXT": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OPENSSL_ZERO_PADDING": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OP_ANONYMOUS": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_DEBUG": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_EXPUNGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_HALFOPEN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_PROTOTYPE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_READONLY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SECURE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SHORTCACHE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SILENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PASSWORD_BCRYPT": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PASSWORD_BCRYPT_DEFAULT_COST": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PASSWORD_DEFAULT": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PATHINFO_BASENAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_DIRNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_EXTENSION": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_FILENAME": { + "ext.name": "standard", + "ext.min": "5.2.0RC1", + "ext.max": null, + "php.min": "5.2.0RC1", + "php.max": null + }, + "PATH_SEPARATOR": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PCNTL_E2BIG": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EACCES": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EAGAIN": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ECHILD": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EFAULT": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EINTR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EINVAL": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EIO": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EISDIR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ELIBBAD": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ELOOP": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EMFILE": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENAMETOOLONG": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENFILE": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOENT": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOEXEC": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOMEM": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOTDIR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EPERM": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ESRCH": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ETXTBSY": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCRE_VERSION": { + "ext.name": "pcre", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "PEAR_EXTENSION_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PEAR_INSTALL_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ASSOC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_BAD_RESPONSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_BOTH": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COMMAND_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_AUTH_OK": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_AWAITING_RESPONSE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_BAD": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_MADE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_SETENV": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_SSL_STARTUP": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_STARTED": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECT_ASYNC": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECT_FORCE_NEW": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_FORCE_NULL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_IGNORE_DEFAULT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_IGNORE_NOT_NULL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COPY_IN": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COPY_OUT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_CONTEXT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_INTERNAL_POSITION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_INTERNAL_QUERY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_DETAIL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_HINT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_PRIMARY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SEVERITY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_FILE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_FUNCTION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_LINE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SQLSTATE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_STATEMENT_POSITION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_ASYNC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_ESCAPE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_DML_EXEC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_NO_CONV": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_STRING": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_EMPTY_QUERY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_DEFAULT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_TERSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_VERBOSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_FATAL_ERROR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_LIBPQ_VERSION": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "PGSQL_LIBPQ_VERSION_STR": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "PGSQL_NONFATAL_ERROR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_NUM": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_POLLING_ACTIVE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_FAILED": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_OK": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_READING": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_WRITING": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_SEEK_CUR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_SEEK_END": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_SEEK_SET": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_STATUS_LONG": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_STATUS_STRING": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_TRANSACTION_ACTIVE": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_IDLE": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_INERROR": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_INTRANS": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_UNKNOWN": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TUPLES_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_BINARY": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_BINARY_READ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PHP_BINDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_CONFIG_FILE_PATH": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_CONFIG_FILE_SCAN_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_DATADIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_DEBUG": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_EOL": { + "ext.name": "Core", + "ext.min": "4.3.10", + "ext.max": null, + "php.min": "4.3.10", + "php.max": null + }, + "PHP_EXTENSION_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_EXTRA_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_INT_MAX": { + "ext.name": "Core", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "PHP_INT_SIZE": { + "ext.name": "Core", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "PHP_LIBDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_LOCALSTATEDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_MAJOR_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_MANDIR": { + "ext.name": "Core", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "PHP_MAXPATHLEN": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_MINOR_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_NORMAL_READ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PHP_OS": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CLEAN": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CLEANABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CONT": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_DISABLED": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_END": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FINAL": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FLUSH": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FLUSHABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_REMOVABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_START": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_STARTED": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_STDFLAGS": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_WRITE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_PREFIX": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PHP_QUERY_RFC1738": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_QUERY_RFC3986": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_RELEASE_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_ROUND_HALF_DOWN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_EVEN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_ODD": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_UP": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_SAPI": { + "ext.name": "Core", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "PHP_SESSION_ACTIVE": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SESSION_DISABLED": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SESSION_NONE": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SHLIB_SUFFIX": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PHP_SVN_AUTH_PARAM_IGNORE_SSL_VERIFY_ERRORS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_SYSCONFDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_FRAGMENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_HOST": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PASS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PORT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_QUERY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_SCHEME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_VERSION": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_VERSION_ID": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_WINDOWS_NT_DOMAIN_CONTROLLER": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_NT_SERVER": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_NT_WORKSTATION": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_BUILD": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_MAJOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_MINOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_PLATFORM": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_PRODUCTTYPE": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SP_MAJOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SP_MINOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SUITEMASK": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ZTS": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PKCS7_BINARY": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_DETACHED": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOATTR": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOCERTS": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOCHAIN": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOINTERN": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOSIGS": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOVERIFY": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_TEXT": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PM_STR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PNG_ALL_FILTERS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_AVG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_NONE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_PAETH": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_SUB": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_UP": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_NO_FILTER": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "POLL_ERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_HUP": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_IN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_MSG": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_OUT": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_PRI": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POSIX_F_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_R_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFBLK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFCHR": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFIFO": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFREG": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFSOCK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_W_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_X_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PREG_BACKTRACK_LIMIT_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_BAD_UTF8_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_BAD_UTF8_OFFSET_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.9", + "ext.max": null, + "php.min": "5.2.9", + "php.max": null + }, + "PREG_GREP_INVERT": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_INTERNAL_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_NO_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_OFFSET_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PREG_PATTERN_ORDER": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_RECURSION_LIMIT_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_SET_ORDER": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_SPLIT_DELIM_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "PREG_SPLIT_NO_EMPTY": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_SPLIT_OFFSET_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PRIO_PGRP": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PRIO_PROCESS": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PRIO_USER": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PSFS_ERR_FATAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FEED_ME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_FLUSH_CLOSE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_FLUSH_INC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_PASS_ON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PTHREADS_ALLOW_GLOBALS": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_ALLOW_HEADERS": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_ALL": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_CLASSES": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_COMMENTS": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_CONSTANTS": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_FUNCTIONS": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_INCLUDES": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_INI": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_NONE": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RADIXCHAR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "RAR_HOST_BEOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_MACOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_MSDOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_OS2": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_UNIX": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_WIN32": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "READLINE_LIB": { + "ext.name": "readline", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SA_ALL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_MESSAGES": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_RECENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UIDNEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UIDVALIDITY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UNSEEN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SCANDIR_SORT_ASCENDING": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCANDIR_SORT_DESCENDING": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCANDIR_SORT_NONE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCM_CREDENTIALS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SCM_RIGHTS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SEARCHD_ERROR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_OK": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_RETRY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_WARNING": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEEK_CUR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEEK_END": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEEK_SET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEGV_ACCERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SEGV_MAPERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SE_FREE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SE_NOPREFETCH": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SE_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SID": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SIGABRT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGALRM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGBABY": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGBUS": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCHLD": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCLD": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCONT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGFPE": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGHUP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGILL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGINT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGIO": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGIOT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGKILL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPIPE": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPOLL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPROF": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPWR": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGQUIT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSEGV": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSTKFLT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSTOP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSYS": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTERM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTRAP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTSTP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTTIN": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTTOU": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGURG": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGUSR1": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGUSR2": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGVTALRM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGWINCH": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGXCPU": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGXFSZ": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_BLOCK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SIG_DFL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_ERR": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_IGN": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_SETMASK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SIG_UNBLOCK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_ASYNCIO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_KERNEL": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_MESGQ": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_NOINFO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_QUEUE": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_SIGIO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_TIMER": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_TKILL": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_USER": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SNMP_BIT_STR": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_COUNTER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_COUNTER64": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_INTEGER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_IPADDRESS": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_NULL": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OBJECT_ID": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OCTET_STR": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OID_OUTPUT_FULL": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_MODULE": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_NONE": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_NUMERIC": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_SUFFIX": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_UCD": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OPAQUE": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_TIMETICKS": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_UINTEGER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_UNSIGNED": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_LIBRARY": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_OBJECT": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_PLAIN": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SOAP_1_1": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_1_2": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_NEXT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_NONE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_UNLIMATERECEIVER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_AUTHENTICATION_BASIC": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_AUTHENTICATION_DIGEST": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_ACCEPT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_DEFLATE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_GZIP": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_DOCUMENT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENCODED": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENC_ARRAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENC_OBJECT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_FUNCTIONS_ALL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_LITERAL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_PERSISTENCE_REQUEST": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_PERSISTENCE_SESSION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_RPC": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_SINGLE_ELEMENT_ARRAYS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv2": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv23": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv3": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_TLS": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_USE_XSI_ARRAY_TYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_WAIT_ONE_WAY_CALLS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOCKET_E2BIG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EACCES": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADDRINUSE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADDRNOTAVAIL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EAFNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EAGAIN": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EALREADY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EBADE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EBADFD": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADMSG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADRQC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADSLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBUSY": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECHRNG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECOMM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECONNABORTED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ECONNREFUSED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ECONNRESET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDESTADDRREQ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDISCON": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDQUOT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EEXIST": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EFAULT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EHOSTDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EHOSTUNREACH": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EIDRM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EINPROGRESS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EINTR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EINVAL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EISCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EISDIR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EISNAM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL2HLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL2NSYNC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL3HLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL3RST": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ELNRNG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ELOOP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMEDIUMTYPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EMFILE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMLINK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EMSGSIZE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMULTIHOP": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENAMETOOLONG": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETRESET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETUNREACH": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENFILE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOANO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOBUFS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOCSI": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENODATA": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENODEV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOENT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOLCK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOLINK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMEDIUM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMEM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMSG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENONET": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOPROTOOPT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOSPC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSTR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSYS": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTBLK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTDIR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTEMPTY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTSOCK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTTY": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTUNIQ": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENXIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EOPNOTSUPP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPERM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPFNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPROCLIM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPROTO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPROTONOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPROTOTYPE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EREMCHG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EREMOTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EREMOTEIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ERESTART": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EROFS": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESHUTDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESOCKTNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESRMNT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESTALE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESTRPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ETIME": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ETIMEDOUT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ETOOMANYREFS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EUNATCH": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EUSERS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EWOULDBLOCK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EXDEV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EXFULL": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_HOST_NOT_FOUND": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NOTINITIALISED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_ADDRESS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_DATA": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_RECOVERY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_SYSNOTREADY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_TRY_AGAIN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_VERNOTSUPPORTED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_DGRAM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_RAW": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_RDM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_SEQPACKET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_STREAM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOLR_EXTENSION_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_MAJOR_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_MINOR_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_PATCH_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOL_SOCKET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOL_TCP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOL_UDP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOMAXCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SORTARRIVAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTCC": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTDATE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTFROM": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTSIZE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTSUBJECT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTTO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_ASC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_DESC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_FLAG_CASE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SORT_LOCALE_STRING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_NATURAL": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SORT_NUMERIC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_REGULAR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_STRING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_BINDTODEVICE": { + "ext.name": "sockets", + "ext.min": "5.4.18", + "ext.max": null, + "php.min": "5.4.18", + "php.max": null + }, + "SO_BROADCAST": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_DEBUG": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_DONTROUTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_ERROR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_FREE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_KEEPALIVE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_LINGER": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_NOSERVER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_OOBINLINE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_PASSCRED": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SO_RCVBUF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_RCVLOWAT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_RCVTIMEO": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_REUSEADDR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_REUSEPORT": { + "ext.name": "sockets", + "ext.min": "5.4.10", + "ext.max": null, + "php.min": "5.4.10", + "php.max": null + }, + "SO_SNDBUF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_SNDLOWAT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_SNDTIMEO": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_TYPE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SPH_ATTR_BOOL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_FLOAT": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_INTEGER": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_MULTI": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_ORDINAL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_TIMESTAMP": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_FLOATRANGE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_RANGE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_VALUES": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_ATTR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_ATTRPAIR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_DAY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_MONTH": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_WEEK": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_YEAR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_ALL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_ANY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_BOOLEAN": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_EXTENDED": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_EXTENDED2": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_FULLSCAN": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_PHRASE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_BM25": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_EXPR": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_FIELDMASK": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_MATCHANY": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_NONE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_PROXIMITY": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_PROXIMITY_BM25": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_SPH04": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_TOTAL": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_WORDCOUNT": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_ATTR_ASC": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_ATTR_DESC": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_EXPR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_EXTENDED": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_RELEVANCE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_TIME_SEGMENTS": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SQLBIT": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLCHAR": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLT4": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLT8": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLTN": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT1": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT2": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT4": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLITE3_ASSOC": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_BLOB": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_BOTH": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_FLOAT": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_INTEGER": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_NULL": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_NUM": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_CREATE": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_READONLY": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_READWRITE": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_TEXT": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE_ABORT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ASSOC": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_AUTH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_BOTH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_BUSY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CANTOPEN": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CONSTRAINT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CORRUPT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_DONE": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_EMPTY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ERROR": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_FORMAT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_FULL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_INTERNAL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_INTERRUPT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_IOERR": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_LOCKED": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_MISMATCH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_MISUSE": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOLFS": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOMEM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOTADB": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOTFOUND": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NUM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_OK": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_PERM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_PROTOCOL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_READONLY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ROW": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_SCHEMA": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_TOOBIG": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLTEXT": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLVARCHAR": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BEST_ROWID": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BIGINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BIT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCURRENCY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_LOCK": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_READ_ONLY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_ROWVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_VALUES": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_DYNAMIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_FORWARD_ONLY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_KEYSET_DRIVEN": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_STATIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_TYPE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_DRIVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_IF_NEEDED": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_ODBC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DATE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DECIMAL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DOUBLE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ENSURE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_FETCH_FIRST": { + "ext.name": "odbc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SQL_FETCH_NEXT": { + "ext.name": "odbc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SQL_FLOAT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INDEX_ALL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INDEX_UNIQUE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INTEGER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_KEYSET_SIZE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_LONGVARBINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_LONGVARCHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NO_NULLS": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NULLABLE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NUMERIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ODBC_CURSORS": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_QUICK": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_REAL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ROWVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_CURROW": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_SESSION": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_TRANSACTION": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SMALLINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TIME": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TIMESTAMP": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TINYINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_DATE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_TIME": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_TIMESTAMP": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_VARBINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_VARCHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_WCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SQL_WLONGVARCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SQL_WVARCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SSH2_DEFAULT_TERMINAL": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_HEIGHT": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_UNIT": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_WIDTH": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_HEX": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_MD5": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_RAW": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_SHA1": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLERR": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLEXT": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLHUP": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLIN": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLNVAL": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLOUT": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_CHANNEL_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_LISTENER_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_SESSION_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_STREAM_STDERR": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_STREAM_STDIO": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_TERM_UNIT_CHARS": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_TERM_UNIT_PIXELS": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STDERR": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STDIN": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STDOUT": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STREAM_BUFFER_FULL": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_BUFFER_LINE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_BUFFER_NONE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CAST_AS_STREAM": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CAST_FOR_SELECT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CLIENT_ASYNC_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CLIENT_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CLIENT_PERSISTENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_ANY_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_ANY_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv23_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv23_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv2_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv2_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv3_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv3_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLS_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLS_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_0_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_1_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_2_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_ENFORCE_SAFE_MODE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "STREAM_FILTER_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_FILTER_READ": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_FILTER_WRITE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IGNORE_URL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IPPROTO_ICMP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_IP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IPPROTO_RAW": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_TCP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_UDP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IS_URL": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "STREAM_META_ACCESS": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_GROUP": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_GROUP_NAME": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_OWNER": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_OWNER_NAME": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_TOUCH": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_MKDIR_RECURSIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_MUST_SEEK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_AUTH_REQUIRED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_AUTH_RESULT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_COMPLETED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_FAILURE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_FILE_SIZE_IS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_MIME_TYPE_IS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_PROGRESS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_REDIRECTED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_RESOLVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_INFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_WARN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_OOB": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_OPTION_BLOCKING": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_READ_BUFFER": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_READ_TIMEOUT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_WRITE_BUFFER": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_PEEK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_INET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_INET6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_UNIX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_REPORT_ERRORS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SERVER_BIND": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SERVER_LISTEN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_RD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_RDWR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_WR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_DGRAM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_RAW": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_RDM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_SEQPACKET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_STREAM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_URL_STAT_LINK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_URL_STAT_QUIET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_USE_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_BOTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_LEFT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_RIGHT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_SET": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_SILENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SUNFUNCS_RET_DOUBLE": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SUNFUNCS_RET_STRING": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SUNFUNCS_RET_TIMESTAMP": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SVN_ALL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_CONFIG": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_CONFIG_DIR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DEFAULT_PASSWORD": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DEFAULT_USERNAME": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DONT_STORE_PASSWORDS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_NON_INTERACTIVE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_NO_AUTH_CACHE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SERVER_GROUP": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SSL_SERVER_FAILURES": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_DISCOVER_CHANGED_PATHS": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_CONFIG_FS_TYPE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_TYPE_BDB": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_TYPE_FSFS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_DIR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_FILE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_NONE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_UNKNOWN": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NON_RECURSIVE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NO_IGNORE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_OMIT_MESSAGES": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_AUTHOR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_DATE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_LOG": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_ORIG_DATE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_BASE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_COMMITTED": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_HEAD": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_INITIAL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_PREV": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_UNSPECIFIED": { + "ext.name": "svn", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_SHOW_UPDATES": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_STOP_ON_COPY": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_ADD": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_DELETE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_NORMAL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_REPLACE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_ADDED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_CONFLICTED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_DELETED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_EXTERNAL": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_IGNORED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_INCOMPLETE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MERGED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MISSING": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MODIFIED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_NONE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_NORMAL": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_OBSTRUCTED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_REPLACED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_UNVERSIONED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TCP_NODELAY": { + "ext.name": "sockets", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "THOUSEP": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "TIDY_NODETYPE_ASP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_CDATA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_COMMENT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_DOCTYPE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_END": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_JSTE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_PHP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_PROCINS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_ROOT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_SECTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_START": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_STARTEND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_TEXT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_XMLDECL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_A": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ABBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ACRONYM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ADDRESS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ALIGN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_APPLET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_AREA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_B": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BASE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BASEFONT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BDO": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BGSOUND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BIG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BLINK": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BLOCKQUOTE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BODY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BUTTON": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CAPTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CENTER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CITE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CODE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COLGROUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COMMENT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DEL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DFN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DIR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DIV": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_EM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_EMBED": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FIELDSET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FONT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FORM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FRAME": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FRAMESET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H1": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H2": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H3": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H4": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H5": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H6": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HEAD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HTML": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_I": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_IFRAME": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ILAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_IMG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_INPUT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_INS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ISINDEX": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_KBD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_KEYGEN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LABEL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LEGEND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LI": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LINK": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LISTING": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MAP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MARQUEE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MENU": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_META": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MULTICOL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOEMBED": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOFRAMES": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOLAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOSAVE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOSCRIPT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OBJECT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OPTGROUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OPTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_P": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PARAM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PLAINTEXT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PRE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_Q": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RB": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RBC": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RTC": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RUBY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_S": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SAMP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SCRIPT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SELECT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SERVER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SERVLET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SMALL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SPACER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SPAN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STRIKE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STRONG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STYLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SUB": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TABLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TBODY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TEXTAREA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TFOOT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TH": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_THEAD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TITLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_U": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_UL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_UNKNOWN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_VAR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_WBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_XMP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TRAP_BRKPT": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "TRAP_TRACE": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "TRUE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEAPPLICATION": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEAUDIO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEIMAGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMESSAGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMODEL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMULTIPART": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEOTHER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPETEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEVIDEO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "T_ABSTRACT": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_AND_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ARRAY": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ARRAY_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_AS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BAD_CHARACTER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOLEAN_AND": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOLEAN_OR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOL_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BREAK": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CALLABLE": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_CASE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CATCH": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_CHARACTER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CLASS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CLASS_C": { + "ext.name": "tokenizer", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "T_CLONE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_CLOSE_TAG": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONCAT_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONSTANT_ENCAPSED_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONTINUE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CURLY_OPEN": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DEC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DECLARE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DEFAULT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DIR": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_DIV_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DNUMBER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOC_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOLLAR_OPEN_CURLY_BRACES": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_ARROW": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_COLON": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ECHO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ELLIPSIS": { + "ext.name": "tokenizer", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "T_ELSE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ELSEIF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EMPTY": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENCAPSED_AND_WHITESPACE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDDECLARE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDFOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDFOREACH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDIF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDSWITCH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDWHILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_END_HEREDOC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EVAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EXIT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EXTENDS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FINAL": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_FINALLY": { + "ext.name": "tokenizer", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "T_FMT_AMPM": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "T_FOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FOREACH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FUNCTION": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FUNC_C": { + "ext.name": "tokenizer", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "T_GLOBAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_GOTO": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_HALT_COMPILER": { + "ext.name": "tokenizer", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "T_IF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IMPLEMENTS": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INCLUDE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INCLUDE_ONCE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INLINE_HTML": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INSTANCEOF": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INSTEADOF": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_INTERFACE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INT_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ISSET": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_GREATER_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_IDENTICAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_NOT_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_NOT_IDENTICAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_SMALLER_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LINE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LIST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LNUMBER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_AND": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_OR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_XOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_METHOD_C": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_MINUS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ML_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": "4.4.9" + }, + "T_MOD_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_MUL_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_NAMESPACE": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NEW": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_NS_C": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NS_SEPARATOR": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NUM_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OBJECT_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OBJECT_OPERATOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OLD_FUNCTION": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": "4.4.9" + }, + "T_OPEN_TAG": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OPEN_TAG_WITH_ECHO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PAAMAYIM_NEKUDOTAYIM": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PLUS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_POW": { + "ext.name": "tokenizer", + "ext.min": "5.6.0RC1", + "ext.max": null, + "php.min": "5.6.0RC1", + "php.max": null + }, + "T_POW_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "5.6.0RC1", + "ext.max": null, + "php.min": "5.6.0RC1", + "php.max": null + }, + "T_PRINT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PRIVATE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_PROTECTED": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_PUBLIC": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_REQUIRE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_REQUIRE_ONCE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_RETURN": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SL_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_START_HEREDOC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STATIC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING_VARNAME": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SWITCH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_THROW": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_TRAIT": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_TRAIT_C": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_TRY": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_UNSET": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_UNSET_CAST": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_USE": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_VAR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_VARIABLE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_WHILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_WHITESPACE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_XOR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_YIELD": { + "ext.name": "tokenizer", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "ULOC_ACTUAL_LOCALE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ULOC_VALID_LOCALE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "UNKNOWN_TYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "UPLOAD_ERR_CANT_WRITE": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "UPLOAD_ERR_EXTENSION": { + "ext.name": "Core", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "UPLOAD_ERR_FORM_SIZE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_INI_SIZE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_NO_FILE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_NO_TMP_DIR": { + "ext.name": "Core", + "ext.min": "4.3.10", + "ext.max": null, + "php.min": "4.3.10", + "php.max": null + }, + "UPLOAD_ERR_OK": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_PARTIAL": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "U_AMBIGUOUS_ALIAS_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BAD_VARIABLE_DEFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ASSIGN_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_HEX_DIGITS_EXPECTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_INIT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_INTERNAL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_MALFORMED_RULE_TAG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_MISMATCHED_PAREN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_NEW_LINE_IN_QUOTED_STRING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_RULE_EMPTY_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_RULE_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_SEMICOLON_EXPECTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNCLOSED_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNDEFINED_VARIABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNRECOGNIZED_OPTION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_VARIABLE_REDFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BUFFER_OVERFLOW_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_CE_NOT_FOUND_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_COLLATOR_VERSION_MISMATCH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_DIFFERENT_UCA_VERSION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ENUM_OUT_OF_SYNC_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_WARNING_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_WARNING_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FILE_ACCESS_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FMT_PARSE_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FMT_PARSE_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ACE_PREFIX_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_CHECK_BIDI_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "U_IDNA_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_LABEL_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_PROHIBITED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_STD3_ASCII_RULES_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_UNASSIGNED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_VERIFICATION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ZERO_LENGTH_LABEL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_ARGUMENT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHARACTER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHAR_IN_SEGMENT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_PAD_POSITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INDEX_OUTOFBOUNDS_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INTERNAL_PROGRAM_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INTERNAL_TRANSLITERATOR_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_FORMAT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_FUNCTION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_ID": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_PROPERTY_PATTERN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_RBT_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_STATE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_TABLE_FILE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_TABLE_FORMAT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVARIANT_CONVERSION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_EXPONENTIAL_PATTERN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_PRAGMA": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_RULE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_SYMBOL_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_UNICODE_ESCAPE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_VARIABLE_DEFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_VARIABLE_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MEMORY_ALLOCATION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MESSAGE_PARSE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISMATCHED_SEGMENT_DELIMITERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_ANCHOR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_COMPOUND_FILTER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_CURSOR_OFFSET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_QUANTIFIER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_OPERATOR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_RESOURCE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_SEGMENT_CLOSE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_ANTE_CONTEXTS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_COMPOUND_FILTERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_CURSORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_DECIMAL_SEPARATORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_DECIMAL_SEPERATORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_EXPONENTIAL_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PAD_SPECIFIERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PERCENT_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PERMILL_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_POST_CONTEXTS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_NO_SPACE_AVAILABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_NO_WRITE_PERMISSION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PATTERN_SYNTAX_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PRIMARY_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_BAD_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_BAD_INTERVAL": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INTERNAL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_BACK_REF": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_FLAG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_STATE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_LOOK_BEHIND_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_MAX_LT_MIN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_MISMATCHED_PAREN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_NUMBER_TOO_BIG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_PROPERTY_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_RULE_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_SET_CONTAINS_STRING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_UNIMPLEMENTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_RESOURCE_TYPE_MISMATCH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_RULE_MASK_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_SAFECLONE_ALLOCATED_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_SORT_KEY_TOO_SHORT_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STANDARD_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STATE_OLD_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STATE_TOO_OLD_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_CHECK_BIDI_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_PROHIBITED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_UNASSIGNED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRING_NOT_TERMINATED_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TOO_MANY_ALIASES_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TRAILING_BACKSLASH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TRUNCATED_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNCLOSED_SEGMENT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNDEFINED_SEGMENT_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNDEFINED_VARIABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNEXPECTED_TOKEN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNMATCHED_BRACES": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNQUOTED_SPECIAL": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ATTRIBUTE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_PROPERTY": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNTERMINATED_QUOTE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USELESS_COLLATOR_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USING_DEFAULT_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USING_FALLBACK_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_VARIABLE_RANGE_EXHAUSTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_VARIABLE_RANGE_OVERLAP": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ZERO_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "VARNISH_COMPAT_2": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_COMPAT_3": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_COMPAT": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_HOST": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_IDENT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_PORT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_SECRET": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_TIMEOUT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_AUTH": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_CANT": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_CLOSE": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_COMMS": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_OK": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_PARAM": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_SYNTAX": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_TOOFEW": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_TOOMANY": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_UNIMPL": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_UNKNOWN": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "WNOHANG": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "WSDL_CACHE_BOTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_DISK": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_MEMORY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_NONE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WUNTRACED": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "X509_PURPOSE_ANY": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_CRL_SIGN": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_NS_SSL_SERVER": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SMIME_ENCRYPT": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SMIME_SIGN": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SSL_CLIENT": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SSL_SERVER": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "XCACHE_MODULES": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XCACHE_VERSION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_ARRAY_ELEMENT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_CHAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_INTERFACE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_TRAIT": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_ADD_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_ADD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_AND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_OR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_CONCAT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_DIM": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_DIV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_MOD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_MUL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_POW": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_ASSIGN_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SUB": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BEGIN_SILENCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BIND_TRAITS": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_BOOL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BOOL_NOT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BOOL_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BRK": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_AND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_NOT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_OR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CASE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CAST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CATCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CLONE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CONCAT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CONT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_CONST": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DECLARE_FUNCTION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_INHERITED_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_INHERITED_CLASS_DELAYED": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DECLARE_LAMBDA_FUNCTION": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DISCARD_EXCEPTION": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_DIV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DO_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DO_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ECHO": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_END_SILENCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_FCALL_BEGIN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_FCALL_END": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_NOP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_STMT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FAST_CALL": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_FAST_RET": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_FETCH_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_CONSTANT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_TMP_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FE_FETCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FE_RESET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FREE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_GENERATOR_RETURN": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_GOTO": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_HANDLE_EXCEPTION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INCLUDE_OR_EVAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_METHOD_CALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_NS_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_INIT_STATIC_METHOD_CALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INSTANCEOF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_DIM_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_PROP_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_BOOL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONSTANT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONSTANT_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_DOUBLE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_IDENTICAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_LONG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NOT_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NOT_IDENTICAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NULL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_OBJECT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_RESOURCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_SMALLER": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_SMALLER_OR_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_TMP_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_UNICODE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_UNUSED": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPNZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPNZ_EX": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZNZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZ_EX": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMP_SET": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_JMP_SET_VAR": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_MOD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_MUL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NEW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NOP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NULL?": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_BIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_BRK": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CAST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CONT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_DECLARE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FCLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FETCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_IFACE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_INCLUDE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_INIT_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ISSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_JMPADDR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_OPLINE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_SEND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_SEND_NOREF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_STD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_TMP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_UCLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_UNUSED": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OP_DATA": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_DEC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_DEC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_INC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_INC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POW": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_PRE_DEC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_DEC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_INC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_INC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRINT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_QM_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_QM_ASSIGN_VAR": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_RAISE_ABSTRACT_ERROR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV_INIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV_VARIADIC": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_RETURN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RETURN_BY_REF": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_SEND_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_UNPACK": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_SEND_VAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_VAR_NO_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEPARATE": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_SIZEOF_TEMP_VARIABLE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SUB": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SWITCH_FREE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_THROW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TICKS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TYPE_PHP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TYPE_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNDEF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_DIM": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_USER_OPCODE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_VERIFY_ABSTRACT_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_YIELD": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XDEBUG_CC_BRANCH_CHECK": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XDEBUG_CC_DEAD_CODE": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_CC_UNUSED": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_STACK_NO_DESC": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XDEBUG_TRACE_APPEND": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_COMPUTERIZED": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_HTML": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_NAKED_FILENAME": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XHPROF_FLAGS_CPU": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XHPROF_FLAGS_MEMORY": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XHPROF_FLAGS_NO_BUILTINS": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XML_ATTRIBUTE_CDATA": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ENTITY": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ENUMERATION": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ID": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_IDREF": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_IDREFS": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NMTOKEN": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NMTOKENS": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NOTATION": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_CDATA_SECTION_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_COMMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_FRAG_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_TYPE_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DTD_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ELEMENT_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ELEMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_REF_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ERROR_ASYNC_ENTITY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_BAD_CHAR_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_BINARY_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_DUPLICATE_ATTRIBUTE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_EXTERNAL_ENTITY_HANDLING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_INCORRECT_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_INVALID_TOKEN": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_JUNK_AFTER_DOC_ELEMENT": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_MISPLACED_XML_PI": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NONE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NO_ELEMENTS": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NO_MEMORY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_PARAM_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_PARTIAL_CHAR": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_RECURSIVE_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_SYNTAX": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_TAG_MISMATCH": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNCLOSED_CDATA_SECTION": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNCLOSED_TOKEN": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNDEFINED_ENTITY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNKNOWN_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_HTML_DOCUMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_LOCAL_NAMESPACE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_NAMESPACE_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_NOTATION_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_OPTION_CASE_FOLDING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_SKIP_TAGSTART": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_SKIP_WHITE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_TARGET_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_PI_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_SAX_IMPL": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_TEXT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_1999_NAMESPACE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_1999_TIMEINSTANT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYTYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYURI": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYXML": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BASE64BINARY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BOOLEAN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BYTE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DATE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DATETIME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DECIMAL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DOUBLE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DURATION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ENTITIES": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ENTITY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_FLOAT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GDAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GMONTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GMONTHDAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GYEAR": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GYEARMONTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_HEXBINARY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ID": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_IDREF": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_IDREFS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_INT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_INTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_LANGUAGE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_LONG": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NAMESPACE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NCNAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NEGATIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NMTOKEN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NMTOKENS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NONNEGATIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NONPOSITIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NORMALIZEDSTRING": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NOTATION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_POSITIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_QNAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_SHORT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_STRING": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_TIME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_TOKEN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDBYTE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDINT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDLONG": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDSHORT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_ALWAYS": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_AUTO": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_NEVER": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_SECPREF_CREATE_DIRECTORY": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_DEFAULT": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_NONE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_READ_FILE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_READ_NETWORK": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_WRITE_FILE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_WRITE_NETWORK": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "YAC_MAX_KEY_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_MAX_RAW_COMPRESSED_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_MAX_VALUE_RAW_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_SERIALIZER": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_VERSION": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_BINARY_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_BOOL_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_CRLN_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_CR_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_DOUBLE_QUOTED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_FLOAT_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_FOLDED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_INT_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_LITERAL_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_LN_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_MAP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_MERGE_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_NULL_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_PHP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_PLAIN_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_SEQ_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_SINGLE_QUOTED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_STR_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_TIMESTAMP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF16BE_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF16LE_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF8_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YESEXPR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ZEND_ACC_ABSTRACT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_CLASS": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_FETCH": { + "ext.name": "uopz", + "ext.min": "2.0.2", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_FINAL": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_INTERFACE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PPP_MASK": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PRIVATE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PROTECTED": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PUBLIC": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_STATIC": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_TRAIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ADD_INTERFACE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ADD_TRAIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_DEBUG_BUILD": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ZEND_EXIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_FETCH_CLASS": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_INSTANCEOF": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_MULTIBYTE": { + "ext.name": "Core", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": "5.3.29" + }, + "ZEND_NEW": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_THREAD_SAFE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ZEND_THROW": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_CONTINUE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_DISPATCH": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_DISPATCH_TO": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_ENTER": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_LEAVE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_RETURN": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_DEFLATE": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_GZIP": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_RAW": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "__CLASS__": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "__COMPILER_HALT_OFFSET__": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__DIR__": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__FILE__": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__FUNCTION__": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "__LINE__": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__METHOD__": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__NAMESPACE__": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__TRAIT__": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_BASIC": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_DIGEST": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_DIGEST_IE": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_GSSNEG": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_NTLM": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_SPNEGO": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_0": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_1": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_2_0": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_V4": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_V6": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_301": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_302": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_303": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_ALL": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_HTTP": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_HTTP_1_0": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS4": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS4A": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS5": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS5_HOSTNAME": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv2": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv3": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_0": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_1": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_2": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "methods": { + "AMQPChannel": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "commitTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannelId": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrefetchCount": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrefetchSize": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "qos": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rollbackTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPrefetchCount": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPrefetchSize": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "startTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPChannelException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPConnection": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "connect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "disconnect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHost": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLogin": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPassword": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPort": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getVhost": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getWriteTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pconnect": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdisconnect": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "reconnect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setHost": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setLogin": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPassword": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPort": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setReadTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setVhost": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setWriteTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPConnectionException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPEnvelope": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAppId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getBody": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getContentEncoding": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getContentType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCorrelationId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDeliveryMode": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDeliveryTag": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExchangeName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExpiration": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHeader": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHeaders": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessageId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPriority": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReplyTo": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRoutingKey": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getUserId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isRedelivery": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPExchange": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declare": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declareExchange": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannel": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "publish": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPExchangeException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPQueue": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ack": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "cancel": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "consume": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declare": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declareQueue": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannel": { + "ext.name": "amqp", + "ext.min": "1.4.0beta1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "amqp", + "ext.min": "0.3.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "nack": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "purge": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "reject": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unbind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPQueueException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "DateInterval": { + "__construct": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromDateString": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DatePeriod": { + "__construct": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDateInterval": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + }, + "getEndDate": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + }, + "getStartDate": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + } + }, + "DateTime": { + "__construct": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "add": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromImmutable": { + "ext.name": "date", + "ext.min": "5.6.8RC1", + "ext.max": null, + "php.min": "5.6.8RC1", + "php.max": null + }, + "diff": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": "5.4.37" + }, + "format": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getTimestamp": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getTimezone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "modify": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDate": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setISODate": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTime": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTimezone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sub": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTimeImmutable": { + "__construct": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "add": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromMutable": { + "ext.name": "date", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "modify": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setDate": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setISODate": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTime": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimezone": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "sub": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeInterface": { + "__wakeup": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "diff": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "format": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimezone": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeZone": { + "__construct": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocation": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTransitions": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listAbbreviations": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listIdentifiers": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Gender\\Gender": { + "__construct": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": "0.7.0", + "php.min": "5.3.0", + "php.max": null + }, + "connect": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "country": { + "ext.name": "gender", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isNick": { + "ext.name": "gender", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "similarNames": { + "ext.name": "gender", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trace": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "HaruAnnotation": { + "setBorderStyle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHighlightMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIcon": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpened": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruDestination": { + "setFit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitB": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitBH": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitBV": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitH": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitR": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitV": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setXYZ": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruDoc": { + "__construct": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addPageLabel": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createOutline": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getInfoAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPageLayout": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPageMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getStreamSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "insertPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadJPEG": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadPNG": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadRaw": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadTTC": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadTTF": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadType1": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "output": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "readFromStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetError": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "save": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "saveToStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCompressionMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCurrentEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setEncryptionMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setInfoAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setInfoDateAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpenAction": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPageLayout": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPageMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPagesConfiguration": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPassword": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPermission": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNSEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNSFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNTEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNTFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useJPEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useJPFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useKREncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useKRFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruEncoder": { + "getByteType": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getType": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getUnicode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWritingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruException": { + "__construct": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__toString": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFile": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getMessage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPrevious": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTrace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruFont": { + "MeasureText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getAscent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCapHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getDescent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getEncodingName": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFontName": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getUnicodeWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getXHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruImage": { + "addSMask": { + "ext.name": "haru", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getBitsPerComponent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setColorMask": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMaskImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruOutline": { + "setDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpened": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruPage": { + "Concat": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "MeasureText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "arc": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "beginText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "circle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "closePath": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createLinkAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createTextAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createURLAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo2": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo3": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "drawImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ellipse": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "endPath": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "endText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "eoFillStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "eofill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "fill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "fillStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCMYKFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCMYKStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCharSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentFontSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentTextPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getDash": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFillingColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFlatness": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGrayFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGrayStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHorizontalScaling": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineCap": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineJoin": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getMiterLimit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getRGBFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getRGBStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getStrokingColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextLeading": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextRenderingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextRise": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTransMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWordSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "lineTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveTextPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveToNextLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "rectangle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCMYKFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCMYKStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCharSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setDash": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFlatness": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFontAndSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGrayFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGrayStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHorizontalScaling": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineCap": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineJoin": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMiterLimit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRGBFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRGBStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRotate": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSlideShow": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextLeading": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextRenderingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextRise": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setWordSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setZoom": { + "ext.name": "haru", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "showText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "showTextNextLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "stroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "textOut": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "textRect": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "http\\Env\\Request": { + "getCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Env\\Response": { + "setCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Header\\Parser": { + "getState": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Message\\Parser": { + "configure": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableConfiguration": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableOptions": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Collator": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "asort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "compare": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSortKey": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStrength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setStrength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortWithSortKeys": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "IntlBreakIterator": { + "createCharacterInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createCodePointInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createLineInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createSentenceInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTitleInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createWordInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "current": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "first": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "following": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getPartsIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isBoundary": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "last": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "next": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "preceding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "previous": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCalendar": { + "add": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "after": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "before": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "clear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "equals": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fieldDifference": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "get": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getActualMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getActualMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailableLocales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDayOfWeekType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getFirstDayOfWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGreatestMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getKeywordValuesForLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLeastMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMinimalDaysInFirstWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getNow": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRepeatedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSkippedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getWeekendTransition": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "inDaylightTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isEquivalentTo": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isLenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isSet": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isWeekend": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "roll": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setFirstDayOfWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setLenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setMinimalDaysInFirstWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setRepeatedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSkippedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCodePointBreakIterator": { + "getLastCodePoint": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlDateFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "formatObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getCalendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getCalendarObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getDateType": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeType": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeZone": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeZoneId": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "isLenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "localtime": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setCalendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setLenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setTimeZone": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setTimeZoneId": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "IntlGregorianCalendar": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGregorianChange": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isLeapYear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setGregorianChange": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlPartsIterator": { + "getBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlRuleBasedBreakIterator": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getBinaryRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRuleStatus": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRuleStatusVec": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlTimeZone": { + "countEquivalentIDs": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createDefault": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZoneIDEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getCanonicalID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDSTSavings": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getEquivalentID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGMT": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getOffset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRawOffset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTZDataVersion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getUnknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "hasSameRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "useDaylightTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Locale": { + "acceptFromHttp": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "composeLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "filterMatches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAllVariants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayVariant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrimaryLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "MessageFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Normalizer": { + "isNormalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + } + }, + "NumberFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatCurrency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSymbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTextAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseCurrency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setSymbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTextAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ResourceBundle": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "count": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "get": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Spoofchecker": { + "__construct": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "areConfusable": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "isSuspicious": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setAllowedLocales": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setChecks": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Transliterator": { + "create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createFromRules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createInverse": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "listIDs": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterate": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "UConverter": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "convert": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromUCallback": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAliases": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailable": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDestinationEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDestinationType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSourceEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSourceType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getStandards": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSubstChars": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "reasonText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setDestinationEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSourceEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSubstChars": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toUCallback": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "transcode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "mimemessage": { + "add_child": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "enum_uue": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_body": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_headers": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_uue": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_child": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_child_count": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_parent": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mimemessage": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "remove": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + } + }, + "Mongo": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "forceError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlave": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "lastError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "poolDebug": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "prevError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "resetError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "switchSlave": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoBinData": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoClient": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "close": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "connect": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "dropDB": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getConnections": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getHosts": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "killCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "listDBs": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "selectCollection": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "selectDB": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCode": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCollection": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "aggregate": { + "ext.name": "mongo", + "ext.min": "1.3.0beta2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "aggregateCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "batchInsert": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "count": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createIndex": { + "ext.name": "mongo", + "ext.min": "1.5.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "deleteIndex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "deleteIndexes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "distinct": { + "ext.name": "mongo", + "ext.min": "1.2.12", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "drop": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ensureIndex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "find": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "findAndModify": { + "ext.name": "mongo", + "ext.min": "1.3.0beta2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "findOne": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getIndexInfo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "group": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "insert": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "parallelCollectionScan": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "remove": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "save": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "toIndexString": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "update": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "validate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCommandCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "createFromDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "addOption": { + "ext.name": "mongo", + "ext.min": "1.0.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "awaitData": { + "ext.name": "mongo", + "ext.min": "1.2.12", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "count": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "explain": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fields": { + "ext.name": "mongo", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getNext": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasNext": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hint": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "immortal": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "limit": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "maxTimeMS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "partial": { + "ext.name": "mongo", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reset": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setFlag": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "skip": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "slaveOkay": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "snapshot": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "sort": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "tailable": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoCursorException": { + "getHost": { + "ext.name": "mongo", + "ext.min": "1.2.5", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCursorInterface": { + "batchSize": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "dead": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "timeout": { + "ext.name": "mongo", + "ext.min": "1.6.0RC3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoDB": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "authenticate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "command": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "drop": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dropCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "execute": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "forceError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCollectionInfo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCollectionNames": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getGridFS": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProfilingLevel": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "lastError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "listCollections": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "prevError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "repair": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "resetError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "selectCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setProfilingLevel": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDBRef": { + "create": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDate": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "toDateTime": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoDeleteBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoGridFS": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "delete": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "put": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeBytes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeFile": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeUpload": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoGridFSCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoGridFSFile": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getBytes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFilename": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getResource": { + "ext.name": "mongo", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "write": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoId": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getHostname": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getInc": { + "ext.name": "mongo", + "ext.min": "1.0.11", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getPID": { + "ext.name": "mongo", + "ext.min": "1.0.11", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "mongo", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isValid": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoInsertBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoInt32": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoInt64": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoLog": { + "getCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoPool": { + "getSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoRegex": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoResultException": { + "getDocument": { + "ext.name": "mongo", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getHost": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoTimestamp": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoUpdateBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoWriteBatch": { + "add": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "execute": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getBatchInfo": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getItemCount": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoWriteConcernException": { + "getDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MessagePack": { + "__construct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setOption": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "unpack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "unpacker": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MessagePackUnpacker": { + "__construct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__destruct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "data": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "execute": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "feed": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "reset": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setOption": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "OAuth": { + "__construct": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__destruct": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableDebug": { + "ext.name": "OAuth", + "ext.min": "0.99.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableRedirects": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableSSLChecks": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableDebug": { + "ext.name": "OAuth", + "ext.min": "0.99.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableRedirects": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableSSLChecks": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fetch": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "generateSignature": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getAccessToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getCAPath": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponse": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponseHeaders": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponseInfo": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getRequestHeader": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getRequestToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setAuthType": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCAPath": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setNonce": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRSACertificate": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRequestEngine": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSSLChecks": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setVersion": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "OAuthProvider": { + "__construct": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "addRequiredParameter": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "callTimestampNonceHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "callconsumerHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "calltokenHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "checkOAuthRequest": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "consumerHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "generateToken": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "is2LeggedEndpoint": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isRequestTokenEndpoint": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "removeRequiredParameter": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reportProblem": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setParam": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRequestTokenPath": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timestampNonceHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "tokenHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "PDFlib": { + "__construct": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "activate_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_nameddest": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_path_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_portfolio_file": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_portfolio_folder": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_table_cell": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_thumbnail": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "align": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "arc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "arcn": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_glyph_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_mc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_pattern_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_template_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "circle": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "circular_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "clip": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_font": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "concat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "continue_text": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "convert_to_unicode": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_3dview": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_action": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_annotation": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_field": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_fieldgroup": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "curveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "define_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "draw_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ellipse": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "elliptical_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "encoding_set_char": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_mc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_template_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "endpath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_graphicsblock": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_imageblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_pdfblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_textblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_buffer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_pdi_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_pdi_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_string": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_image": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_matchbox": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_pdi_page": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_pvf": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "initgraphics": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lineto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_3ddata": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_asset": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_iccprofile": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "makespotcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mc_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "moveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_number": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_stream": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_string": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_delete": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_insert": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_new": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_remove": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "process_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rect": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "restore": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "resume_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rotate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scale": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_graphics_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_info": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_layer_dependency": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_text_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_text_pos": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setdash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setdashpattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setflat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinecap": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinejoin": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinewidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setmatrix": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setmiterlimit": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setpolydash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shading": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shading_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shfill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show_boxed": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show_xy": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "skew": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "stringwidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "suspend_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "translate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf16_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf16_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf32_to_utf16": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf32_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf8_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf8_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "PDFlibException": { + "get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Collectable": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isGarbage": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGarbage": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Cond": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "broadcast": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "signal": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Mutex": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trylock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Pool": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "collect": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "resize": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shutdown": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "submit": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "submitTo": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Thread": { + "__destruct": { + "ext.name": "pthreads", + "ext.min": "3.0.0", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "chunk": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "detach": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCount": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCreatorId": { + "ext.name": "pthreads", + "ext.min": "0.0.36", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMax": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPeak": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThread": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThreadId": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isBusy": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJoined": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isStarted": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "join": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "kill": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Threaded": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Worker": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "detach": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCreatorId": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getStacked": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThreadId": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJoined": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isShutdown": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isStarted": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWorking": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "join": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "kill": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shutdown": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stack": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unstack": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "RarArchive": { + "__toString": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getComment": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getEntries": { + "ext.name": "rar", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getEntry": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isBroken": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isSolid": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAllowBroken": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarEntry": { + "__toString": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "extract": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttr": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCrc": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFileTime": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHostOs": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMethod": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPackedSize": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPosition": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStream": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getUnpackedSize": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getVersion": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isDirectory": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isEncrypted": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarException": { + "isUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Redis": { + "__construct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__destruct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_prefix": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_serialize": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_unserialize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "append": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "auth": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgSave": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgrewriteaof": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitcount": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitpos": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "blPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "brPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "brpoplpush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "clearLastError": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "client": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "config": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "connect": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dbSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "debug": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "decr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "decrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "del": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "discard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dump": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "echo": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "eval": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evalsha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evaluate": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evaluateSha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exec": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exists": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "expire": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "expireAt": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushAll": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushDB": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAuth": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getBit": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDBNum": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHost": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLastError": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMode": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMultiple": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPersistentID": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPort": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hDel": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hExists": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hGet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hGetAll": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hIncrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hIncrByFloat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hKeys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hLen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hMget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hMset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hSetNx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hVals": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incrByFloat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "keys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lGet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lGetRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lInsert": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lLen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPushx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lastSave": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lindex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listTrim": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lrange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lrem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ltrim": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "migrate": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "move": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msetnx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "multi": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "object": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pconnect": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "persist": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pexpire": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pexpireAt": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfadd": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfcount": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfmerge": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ping": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pipeline": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "popen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "psetex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "psubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pttl": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "publish": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pubsub": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "punsubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPushx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "randomKey": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rawCommand": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rename": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameKey": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameNx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "resetStat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "restore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rpoplpush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sAdd": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sContains": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sDiff": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sDiffStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sGetMembers": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sInter": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sInterStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sMembers": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sMove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sRandMember": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sUnion": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sUnionStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "script": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "select": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sendEcho": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setBit": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setnx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sismember": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "slaveof": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "slowlog": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sort": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortAsc": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortAscAlpha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortDesc": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortDescAlpha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "srem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "strlen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "subscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "substr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "time": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ttl": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "type": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unsubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unwatch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "wait": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "watch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zAdd": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zCard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zCount": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDelete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDeleteRangeByRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDeleteRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zIncrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zInter": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRangeByLex": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemRangeByRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemoveRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRevRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRevRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zReverseRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zUnion": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zinterstore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zrevrange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zunionstore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RedisArray": { + "__call": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__construct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_distributor": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_function": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_hosts": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_instance": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_rehash": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_target": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgsave": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "del": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "discard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exec": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushall": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushdb": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMultiple": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "keys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "multi": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ping": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "select": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unwatch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Reflection": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifierNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionClass": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstants": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getEndLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtensionName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFileName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getInterfaceNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getInterfaces": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getMethods": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNamespaceName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getParentClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getShortName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStartLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticPropertyValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraitAliases": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraitNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraits": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "implementsInterface": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "inNamespace": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isCloneable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isFinal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInstance": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInstantiable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInterface": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInternal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isIterateable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isSubclassOf": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isTrait": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isUserDefined": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstance": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstanceArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstanceWithoutConstructor": { + "ext.name": "Reflection", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "setStaticPropertyValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionExtension": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClassNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClasses": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstants": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDependencies": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFunctions": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getINIEntries": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getVersion": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "info": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPersistent": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isTemporary": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunction": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invoke": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invokeArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDisabled": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunctionAbstract": { + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosureScopeClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosureThis": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getEndLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtensionName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFileName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNamespaceName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNumberOfParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNumberOfRequiredParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getShortName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStartLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticVariables": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "inNamespace": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDeprecated": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isGenerator": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInternal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isUserDefined": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isVariadic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "returnsReference": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionMethod": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPrototype": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invoke": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invokeArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isConstructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDestructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isFinal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPrivate": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isProtected": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPublic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isStatic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setAccessible": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionObject": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionParameter": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "allowsNull": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "canBePassedByValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringFunction": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultValueConstantName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPosition": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isArray": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isCallable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefaultValueAvailable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefaultValueConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isOptional": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPassedByReference": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isVariadic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionProperty": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefault": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPrivate": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isProtected": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPublic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isStatic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setAccessible": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionZendExtension": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getAuthor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCopyright": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getURL": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getVersion": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Reflector": { + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Riak\\Bucket": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "counter": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "delete": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConflictResolver": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConnection": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKeyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKeyStream": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPropertyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "index": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "indexQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "put": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setConflictResolver": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPropertyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\BucketPropertyList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAllowMult": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBackend": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBigVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCHashKeyFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastWriteWins": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLinkFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getOldVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPostCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPreCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReplicationMode": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSearchEnabled": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSmallVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getYoungVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setAllowMult": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBackend": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCHashKeyFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setLastWriteWins": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setLinkFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setOldVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPostCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPreCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReplicationMode": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSearchEnabled": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSmallVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setYoungVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Connection": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBucket": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHost": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPort": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getServerInfo": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ping": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Counter": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "increment": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "incrementAndGet": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Input\\GetInput": { + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Input\\UpdateInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\DeleteInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\GetInput": { + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfModifiedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnDeletedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfModifiedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnDeletedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\GetResolverInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConflictResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\IndexInput": { + "getContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMaxResults": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMaxResults": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\PutInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfNoneMatch": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfNotModified": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnBody": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfNoneMatch": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfNotModified": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnBody": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Link": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBucketName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTag": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\BaseFunction": { + "toArray": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\ErlangFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "anon": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "named": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\BucketInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIndexFilter": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\Input": { + "getValue": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\KeyDataListInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "add": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\KeyListInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addArray": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addSingle": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\MapReduce": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addPhase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setInput": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "toArray": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "toJson": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Output\\Output": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPhaseNumber": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Output\\StreamOutput": { + "receive": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\MapPhase": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\Phase": { + "toArray": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\ReducePhase": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Object": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addIndex": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addLink": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addMetadata": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCharset": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContent": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContentEncoding": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContentType": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIndexMap": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastModified": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastModifiedUSecs": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLinkList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMetadataMap": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVTag": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isDeleted": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCharset": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContent": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContentEncoding": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContentType": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\ObjectList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "first": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isEmpty": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "last": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\ConflictResolver": { + "resolve": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\GetOutput": { + "isUnchanged": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexOutput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getResultList": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexResult": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexResultList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\KeyStreamOutput": { + "process": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\Output": { + "getFirstObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getObjectList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasSiblings": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\PoolInfo": { + "getNumActiveConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumActivePersistentConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumReconnect": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\CommitHook": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getErlFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getErlModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getJsName": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isErlang": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJavascript": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\CommitHookList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\ModuleFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Query\\IndexQuery": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExactValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRangeValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRangeQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExactValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRangeValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Input\\ParameterBag": { + "getDefaultField": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDefaultOperation": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFieldLimits": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFilter": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPresort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRowLimit": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getStartOffset": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDefaultField": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDefaultOperation": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFieldLimits": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFilter": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPresort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRowLimit": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setStartOffset": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Output\\DocumentOutput": { + "getFields": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Output\\Output": { + "getDocuments": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMaxScore": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumFound": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasMaxScore": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasNumFound": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Search": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "search": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\ServerInfo": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNode": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getServerVersion": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrClient": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addDocuments": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "commit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteById": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByIds": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getById": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getByIds": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDebug": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getOptions": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "optimize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "ping": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "query": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "request": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "rollback": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setResponseWriter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setServlet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "system": { + "ext.name": "solr", + "ext.min": "1.1.0b", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "threads": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrCollapseFunction": { + "__construct": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__toString": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHint": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMax": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMin": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNullPolicy": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSize": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHint": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMax": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMin": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNullPolicy": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSize": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrDisMaxQuery": { + "__construct": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addBigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addQueryField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addTrigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addUserField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeBigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removePhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeQueryField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeTrigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeUserField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigramPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigramPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBoostFunction": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMinimumMatch": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setQueryAlt": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setQueryPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTieBreaker": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTrigramPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTrigramPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setUserFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "useDisMaxQueryParser": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "useEDisMaxQueryParser": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrDocument": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__get": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__isset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__set": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__unset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "clear": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "fieldExists": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getInputDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "merge": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "reset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toArray": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrDocumentField": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrException": { + "getInternalInfo": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrGenericResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrInputDocument": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "clear": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "fieldExists": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "merge": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "reset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFieldBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toArray": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrModifiableParams": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrObject": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getPropertyNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrParams": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__toString": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "add": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "get": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getPreparedParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "set": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toString": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrPingResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrQuery": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addExpandFilterQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addExpandSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addFacetDateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFilterQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addGroupField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupFunction": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addHighlightField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addMltField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addMltQueryField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addSortField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addStatsFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addStatsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "collapse": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpand": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandFilterQueries": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandRows": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandSortFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateGap": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateHardEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMethod": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMissing": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetOffset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFilterQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getGroup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupCachePercent": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFacet": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFormat": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFunctions": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupLimit": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupMain": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupNGroups": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupOffset": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupQueries": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupSortFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupTruncate": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHighlight": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightAlternateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFormatter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFragmenter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFragsize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightHighlightMultiTerm": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMaxAlternateFieldLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMergeContiguous": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexPattern": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexSlop": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRequireFieldMatch": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSimplePost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSimplePre": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSnippets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightUsePhraseHighlighter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMlt": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxNumQueryTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxNumTokens": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinDocFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinTermFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltQueryFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRows": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSortFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStats": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStatsFacets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStatsFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsIncludeLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsIncludeUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsMaxCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsReturnRaw": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTimeAllowed": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeExpandFilterQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeExpandSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeFacetDateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFilterQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeHighlightField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeMltField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeMltQueryField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeSortField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeStatsFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeStatsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setEchoHandler": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setEchoParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setExpand": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExpandQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExpandRows": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExplainOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateGap": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateHardEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetEnumCacheMinDefaultFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMethod": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMissing": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetOffset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setGroup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupCachePercent": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupFacet": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupFormat": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupLimit": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupMain": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupNGroups": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupOffset": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupTruncate": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHighlight": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightAlternateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFormatter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFragmenter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFragsize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightHighlightMultiTerm": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMaxAlternateFieldLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMergeContiguous": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexPattern": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexSlop": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRequireFieldMatch": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSimplePost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSimplePre": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSnippets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightUsePhraseHighlighter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMlt": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxNumQueryTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxNumTokens": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinDocFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinTermFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setOmitHeader": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setRows": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setShowDebugInfo": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setStats": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsIncludeLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsIncludeUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsMaxCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsReturnRaw": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTimeAllowed": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrQueryResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrResponse": { + "getArrayResponse": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDigestedResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHttpStatus": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHttpStatusMessage": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawRequest": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawRequestHeaders": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawResponseHeaders": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRequestUrl": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setParseMode": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "success": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrUpdateResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrUtils": { + "digestJsonResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "digestXmlResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "escapeQueryChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSolrVersion": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "queryPhrase": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SphinxClient": { + "__construct": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__sleep": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addQuery": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "buildExcerpts": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "buildKeywords": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "close": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "escapeString": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLastError": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLastWarning": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "open": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "query": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetFilters": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetGroupBy": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "runQueries": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setArrayResult": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setConnectTimeout": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFieldWeights": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilter": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilterFloatRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilterRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGeoAnchor": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGroupBy": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGroupDistinct": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIDRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIndexWeights": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLimits": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMatchMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMaxQueryTime": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOverride": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setRankingMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRetries": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSelect": { + "ext.name": "sphinx", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setServer": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSortMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "status": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "updateAttributes": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "Directory": { + "close": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "read": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rewind": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + } + }, + "php_user_filter": { + "filter": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "onClose": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "onCreate": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Stomp": { + "__construct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "__destruct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "abort": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "ack": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "begin": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "commit": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "error": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "getSessionId": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "hasFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "nack": { + "ext.name": "stomp", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "readFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "send": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setReadTimeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "subscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "unsubscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "StompException": { + "getDetails": { + "ext.name": "stomp", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "StompFrame": { + "__construct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "VarnishAdmin": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "auth": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ban": { + "ext.name": "varnish", + "ext.min": "0.6", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "banUrl": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "clearPanic": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "connect": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "disconnect": { + "ext.name": "varnish", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPanic": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getParams": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVclList": { + "ext.name": "varnish", + "ext.min": "0.9.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCompat": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHost": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIdent": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setParam": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPort": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSecret": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stop": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "vclUse": { + "ext.name": "varnish", + "ext.min": "0.9.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "VarnishLog": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "VarnishStat": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "XMLDiff\\Base": { + "__construct": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "diff": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Yac": { + "add": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dump": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flush": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ZipArchive": { + "addEmptyDir": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addFile": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addFromString": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addGlob": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addPattern": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "deleteIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "deleteName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "extractTo": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArchiveComment": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCommentIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCommentName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExternalAttributesIndex": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExternalAttributesName": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFromIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFromName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getNameIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStatusString": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStream": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locateName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArchiveComment": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCommentIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCommentName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCompressionIndex": { + "ext.name": "zip", + "ext.min": "1.13.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCompressionName": { + "ext.name": "zip", + "ext.min": "1.13.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setExternalAttributesIndex": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setExternalAttributesName": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPassword": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "statIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "statName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeAll": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeArchive": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + } + }, + "static_methods": { + "DateInterval": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromDateString": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DatePeriod": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTime": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromImmutable": { + "ext.name": "date", + "ext.min": "5.6.8RC1", + "ext.max": null, + "php.min": "5.6.8RC1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTimeImmutable": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromMutable": { + "ext.name": "date", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeZone": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listAbbreviations": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listIdentifiers": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "http\\Env\\Request": { + "getCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Env\\Response": { + "setCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Header\\Parser": { + "getState": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Message\\Parser": { + "configure": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableConfiguration": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableOptions": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Collator": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "IntlBreakIterator": { + "createCharacterInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createCodePointInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createLineInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createSentenceInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTitleInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createWordInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCalendar": { + "createInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailableLocales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getKeywordValuesForLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getNow": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlDateFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "formatObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "IntlTimeZone": { + "countEquivalentIDs": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createDefault": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZoneIDEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getCanonicalID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getEquivalentID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGMT": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTZDataVersion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getUnknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Locale": { + "acceptFromHttp": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "composeLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "filterMatches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAllVariants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayVariant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrimaryLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "MessageFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Normalizer": { + "isNormalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + } + }, + "NumberFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ResourceBundle": { + "create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Transliterator": { + "create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createFromRules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "listIDs": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "UConverter": { + "getAliases": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailable": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getStandards": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "reasonText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "transcode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Mongo": { + "getPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "poolDebug": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoClient": { + "getConnections": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "killCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCollection": { + "toIndexString": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCommandCursor": { + "createFromDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoDBRef": { + "create": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDate": { + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoId": { + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getHostname": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isValid": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoLog": { + "getCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoPool": { + "getSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "OAuthProvider": { + "generateToken": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reportProblem": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "Collectable": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Cond": { + "broadcast": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "signal": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Mutex": { + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trylock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Thread": { + "__destruct": { + "ext.name": "pthreads", + "ext.min": "3.0.0", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Threaded": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Worker": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "RarArchive": { + "open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarException": { + "isUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Reflection": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifierNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionClass": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionExtension": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunction": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionMethod": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionParameter": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionProperty": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionZendExtension": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Reflector": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "anon": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "named": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\PoolInfo": { + "getNumActiveConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumActivePersistentConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumReconnect": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrUtils": { + "digestJsonResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "digestXmlResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "escapeQueryChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSolrVersion": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "queryPhrase": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + } + }, + "functions_windows": { + "apache_child_terminate": false, + "chroot": false, + "getrusage": false, + "imagecreatefromxpm": false, + "lchgrp": false, + "lchown": false, + "nl_langinfo": false, + "strptime": false, + "sys_getloadavg": false, + "checkdnsrr": "5.3.0", + "dns_get_record": "5.3.0", + "fnmatch": "5.3.0", + "getmxrr": "5.3.0", + "getopt": "5.3.0", + "imagecolorclosesthwb": "5.3.0", + "inet_ntop": "5.3.0", + "inet_pton": "5.3.0", + "link": "5.3.0", + "linkinfo": "5.3.0", + "readlink": "5.3.0", + "socket_create_pair": "5.3.0", + "stream_socket_pair": "5.3.0", + "symlink": "5.3.0", + "time_nanosleep": "5.3.0", + "time_sleep_until": "5.3.0" + } +} diff --git a/resources/ssl/README b/resources/ssl/README new file mode 100644 index 00000000..4d5057f5 --- /dev/null +++ b/resources/ssl/README @@ -0,0 +1,45 @@ +This document describes how to set Certificate Authority information. +Usually, you need to do this only if you're using a self-signed certificate. + + +OSX after Yosemite +================== + +If you're using a version of Mac OSX after Yosemite, you can not configure +certificates from the command line. All libphutil and arcanist options +related to CA configuration are ignored. + +Instead, you need to add them to the system keychain. The easiest way to do this +is to visit the site in Safari and choose to permanently accept the certificate. + +You can also use `security add-trusted-cert` from the command line. + + +All Other Systems +================= + +If "curl.cainfo" is not set (or you are using PHP older than 5.3.7, where the +option was introduced), libphutil uses the "default.pem" certificate authority +bundle when making HTTPS requests with cURL. This bundle is extracted from +Mozilla's certificates by cURL: + + http://curl.haxx.se/docs/caextract.html + +If you want to use a different CA bundle (for example, because you use +self-signed certificates), set "curl.cainfo" if you're using PHP 5.3.7 or newer, +or create a file (or symlink) in this directory named "custom.pem". + +If "custom.pem" is present, that file will be used instead of "default.pem". + +If you receive errors using your "custom.pem" file, you can test it directly +with `curl` by running a command like this: + + curl -v --cacert path/to/your/custom.pem https://phabricator.example.com/ + +Replace "path/to/your/custom.pem" with the path to your "custom.pem" file, +and replace "https://phabricator.example.com" with the real URL of your +Phabricator install. + +The initial lines of output from `curl` should give you information about the +SSL handshake and certificate verification, which may be helpful in resolving +the issue. diff --git a/resources/ssl/default.pem b/resources/ssl/default.pem new file mode 100644 index 00000000..76adf834 --- /dev/null +++ b/resources/ssl/default.pem @@ -0,0 +1,3893 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Jan 20 04:12:04 2016 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.25. +## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg +QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe +Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt +IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by +X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b +gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr +eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ +TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy +Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn +uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI +qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm +ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 +Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW +Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t +FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm +zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k +XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT +bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU +RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK +1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt +2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ +Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 +AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 +MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM +LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo +ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ +wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH +Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a +SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS +NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab +mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY +Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 +qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu +MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO +v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ +82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz +o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs +a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx +OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW +mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o ++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC +rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE +BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl +cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN +MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT +HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg +Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz +o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy +Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti +GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li +qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH +Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG +alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa +m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox +bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi +xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB +bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL +j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU +wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 +XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH +59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ +23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq +J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA +HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi +uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- diff --git a/scripts/__init_script__.php b/scripts/__init_script__.php index 377b1b4c..f6cdcc31 100644 --- a/scripts/__init_script__.php +++ b/scripts/__init_script__.php @@ -1,58 +1,3 @@ setLocale(PhutilLocale::loadLocale('en_US')) - ->setTranslations(PhutilTranslation::getTranslationMapForLocale('en_US')); +require_once dirname(dirname(__FILE__)).'/scripts/init/init-script.php'; diff --git a/scripts/arcanist.php b/scripts/arcanist.php index b950dbbf..df2a573d 100755 --- a/scripts/arcanist.php +++ b/scripts/arcanist.php @@ -81,7 +81,6 @@ try { csprintf('%Ls', $original_argv)); $libraries = array( - 'phutil', 'arcanist', ); @@ -621,7 +620,7 @@ function arcanist_load_libraries( $error = null; try { - phutil_load_library($location); + require_once $location.'/__phutil_library_init__.php'; } catch (PhutilBootloaderException $ex) { $error = pht( "Failed to load phutil library at location '%s'. This library ". diff --git a/scripts/init/init-script.php b/scripts/init/init-script.php new file mode 100644 index 00000000..3609a178 --- /dev/null +++ b/scripts/init/init-script.php @@ -0,0 +1,100 @@ + 0) { + ob_end_clean(); + } + + error_reporting(E_ALL | E_STRICT); + + $config_map = array( + // Always display script errors. Without this, they may not appear, which is + // unhelpful when users encounter a problem. On the web this is a security + // concern because you don't want to expose errors to clients, but in a + // script context we always want to show errors. + 'display_errors' => true, + + // Send script error messages to the server's `error_log` setting. + 'log_errors' => true, + + // Set the error log to the default, so errors go to stderr. Without this + // errors may end up in some log, and users may not know where the log is + // or check it. + 'error_log' => null, + + // XDebug raises a fatal error if the call stack gets too deep, but the + // default setting is 100, which we may exceed legitimately with module + // includes (and in other cases, like recursive filesystem operations + // applied to 100+ levels of directory nesting). Stop it from triggering: + // we explicitly limit recursive algorithms which should be limited. + // + // After Feb 2014, XDebug interprets a value of 0 to mean "do not allow any + // function calls". Previously, 0 effectively disabled this check. For + // context, see T5027. + 'xdebug.max_nesting_level' => PHP_INT_MAX, + + // Don't limit memory, doing so just generally just prevents us from + // processing large inputs without many tangible benefits. + 'memory_limit' => -1, + + // See T13296. On macOS under PHP 7.3.x, PCRE currently segfaults after + // "fork()" if "pcre.jit" is enabled. + 'pcre.jit' => 0, + ); + + foreach ($config_map as $config_key => $config_value) { + ini_set($config_key, $config_value); + } + + if (!ini_get('date.timezone')) { + // If the timezone isn't set, PHP issues a warning whenever you try to parse + // a date (like those from Git or Mercurial logs), even if the date contains + // timezone information (like "PST" or "-0700") which makes the + // environmental timezone setting is completely irrelevant. We never rely on + // the system timezone setting in any capacity, so prevent PHP from flipping + // out by setting it to a safe default (UTC) if it isn't set to some other + // value. + date_default_timezone_set('UTC'); + } + + // Adjust `include_path`. + ini_set('include_path', implode(PATH_SEPARATOR, array( + dirname(dirname(__FILE__)).'/externals/includes', + ini_get('include_path'), + ))); + + // Disable the insanely dangerous XML entity loader by default. + if (function_exists('libxml_disable_entity_loader')) { + libxml_disable_entity_loader(true); + } + + $root = dirname(dirname(dirname(__FILE__))); + require_once $root.'/src/init/init-library.php'; + + PhutilErrorHandler::initialize(); + $router = PhutilSignalRouter::initialize(); + + $handler = new PhutilBacktraceSignalHandler(); + $router->installHandler('phutil.backtrace', $handler); + + $handler = new PhutilConsoleMetricsSignalHandler(); + $router->installHandler('phutil.winch', $handler); +} + +__phutil_init_script__(); diff --git a/src/__phutil_library_init__.php b/src/__phutil_library_init__.php index c5168d8d..44d51b82 100644 --- a/src/__phutil_library_init__.php +++ b/src/__phutil_library_init__.php @@ -1,3 +1,3 @@ 2, 'class' => array( + 'AASTNode' => 'parser/aast/api/AASTNode.php', + 'AASTNodeList' => 'parser/aast/api/AASTNodeList.php', + 'AASTToken' => 'parser/aast/api/AASTToken.php', + 'AASTTree' => 'parser/aast/api/AASTTree.php', + 'AbstractDirectedGraph' => 'utils/AbstractDirectedGraph.php', + 'AbstractDirectedGraphTestCase' => 'utils/__tests__/AbstractDirectedGraphTestCase.php', 'ArcanistAbstractMethodBodyXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractMethodBodyXHPASTLinterRule.php', 'ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase.php', 'ArcanistAbstractPrivateMethodXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractPrivateMethodXHPASTLinterRule.php', @@ -418,22 +424,466 @@ phutil_register_library_map(array( 'ArcanistXMLLinter' => 'lint/linter/ArcanistXMLLinter.php', 'ArcanistXMLLinterTestCase' => 'lint/linter/__tests__/ArcanistXMLLinterTestCase.php', 'ArcanistXUnitTestResultParser' => 'unit/parser/ArcanistXUnitTestResultParser.php', + 'BaseHTTPFuture' => 'future/http/BaseHTTPFuture.php', 'CSharpToolsTestEngine' => 'unit/engine/CSharpToolsTestEngine.php', + 'CaseInsensitiveArray' => 'utils/CaseInsensitiveArray.php', + 'CaseInsensitiveArrayTestCase' => 'utils/__tests__/CaseInsensitiveArrayTestCase.php', + 'CommandException' => 'future/exec/CommandException.php', + 'ConduitClient' => 'conduit/ConduitClient.php', + 'ConduitClientException' => 'conduit/ConduitClientException.php', + 'ConduitClientTestCase' => 'conduit/__tests__/ConduitClientTestCase.php', + 'ConduitFuture' => 'conduit/ConduitFuture.php', + 'ExecFuture' => 'future/exec/ExecFuture.php', + 'ExecFutureTestCase' => 'future/exec/__tests__/ExecFutureTestCase.php', + 'ExecPassthruTestCase' => 'future/exec/__tests__/ExecPassthruTestCase.php', + 'FileFinder' => 'filesystem/FileFinder.php', + 'FileFinderTestCase' => 'filesystem/__tests__/FileFinderTestCase.php', + 'FileList' => 'filesystem/FileList.php', + 'Filesystem' => 'filesystem/Filesystem.php', + 'FilesystemException' => 'filesystem/FilesystemException.php', + 'FilesystemTestCase' => 'filesystem/__tests__/FilesystemTestCase.php', + 'Future' => 'future/Future.php', + 'FutureIterator' => 'future/FutureIterator.php', + 'FutureIteratorTestCase' => 'future/__tests__/FutureIteratorTestCase.php', + 'FutureProxy' => 'future/FutureProxy.php', + 'HTTPFuture' => 'future/http/HTTPFuture.php', + 'HTTPFutureCURLResponseStatus' => 'future/http/status/HTTPFutureCURLResponseStatus.php', + 'HTTPFutureCertificateResponseStatus' => 'future/http/status/HTTPFutureCertificateResponseStatus.php', + 'HTTPFutureHTTPResponseStatus' => 'future/http/status/HTTPFutureHTTPResponseStatus.php', + 'HTTPFutureParseResponseStatus' => 'future/http/status/HTTPFutureParseResponseStatus.php', + 'HTTPFutureResponseStatus' => 'future/http/status/HTTPFutureResponseStatus.php', + 'HTTPFutureTransportResponseStatus' => 'future/http/status/HTTPFutureTransportResponseStatus.php', + 'HTTPSFuture' => 'future/http/HTTPSFuture.php', + 'ImmediateFuture' => 'future/ImmediateFuture.php', + 'LibphutilUSEnglishTranslation' => 'internationalization/translation/LibphutilUSEnglishTranslation.php', + 'LinesOfALarge' => 'filesystem/linesofalarge/LinesOfALarge.php', + 'LinesOfALargeExecFuture' => 'filesystem/linesofalarge/LinesOfALargeExecFuture.php', + 'LinesOfALargeExecFutureTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php', + 'LinesOfALargeFile' => 'filesystem/linesofalarge/LinesOfALargeFile.php', + 'LinesOfALargeFileTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php', + 'MFilterTestHelper' => 'utils/__tests__/MFilterTestHelper.php', 'NoseTestEngine' => 'unit/engine/NoseTestEngine.php', + 'PHPASTParserTestCase' => 'parser/xhpast/__tests__/PHPASTParserTestCase.php', + 'PhageAction' => 'phage/action/PhageAction.php', + 'PhageAgentAction' => 'phage/action/PhageAgentAction.php', + 'PhageAgentBootloader' => 'phage/bootloader/PhageAgentBootloader.php', + 'PhageAgentTestCase' => 'phage/__tests__/PhageAgentTestCase.php', + 'PhageExecuteAction' => 'phage/action/PhageExecuteAction.php', + 'PhageLocalAction' => 'phage/action/PhageLocalAction.php', + 'PhagePHPAgent' => 'phage/agent/PhagePHPAgent.php', + 'PhagePHPAgentBootloader' => 'phage/bootloader/PhagePHPAgentBootloader.php', + 'PhagePlanAction' => 'phage/action/PhagePlanAction.php', + 'Phobject' => 'object/Phobject.php', + 'PhobjectTestCase' => 'object/__tests__/PhobjectTestCase.php', 'PhpunitTestEngine' => 'unit/engine/PhpunitTestEngine.php', 'PhpunitTestEngineTestCase' => 'unit/engine/__tests__/PhpunitTestEngineTestCase.php', + 'PhutilAWSCloudFormationFuture' => 'future/aws/PhutilAWSCloudFormationFuture.php', + 'PhutilAWSCloudWatchFuture' => 'future/aws/PhutilAWSCloudWatchFuture.php', + 'PhutilAWSEC2Future' => 'future/aws/PhutilAWSEC2Future.php', + 'PhutilAWSException' => 'future/aws/PhutilAWSException.php', + 'PhutilAWSFuture' => 'future/aws/PhutilAWSFuture.php', + 'PhutilAWSManagementWorkflow' => 'future/aws/management/PhutilAWSManagementWorkflow.php', + 'PhutilAWSS3DeleteManagementWorkflow' => 'future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php', + 'PhutilAWSS3Future' => 'future/aws/PhutilAWSS3Future.php', + 'PhutilAWSS3GetManagementWorkflow' => 'future/aws/management/PhutilAWSS3GetManagementWorkflow.php', + 'PhutilAWSS3ManagementWorkflow' => 'future/aws/management/PhutilAWSS3ManagementWorkflow.php', + 'PhutilAWSS3PutManagementWorkflow' => 'future/aws/management/PhutilAWSS3PutManagementWorkflow.php', + 'PhutilAWSv4Signature' => 'future/aws/PhutilAWSv4Signature.php', + 'PhutilAWSv4SignatureTestCase' => 'future/aws/__tests__/PhutilAWSv4SignatureTestCase.php', + 'PhutilAggregateException' => 'error/PhutilAggregateException.php', + 'PhutilAllCapsEnglishLocale' => 'internationalization/locales/PhutilAllCapsEnglishLocale.php', + 'PhutilArgumentParser' => 'parser/argument/PhutilArgumentParser.php', + 'PhutilArgumentParserException' => 'parser/argument/exception/PhutilArgumentParserException.php', + 'PhutilArgumentParserTestCase' => 'parser/argument/__tests__/PhutilArgumentParserTestCase.php', + 'PhutilArgumentSpecification' => 'parser/argument/PhutilArgumentSpecification.php', + 'PhutilArgumentSpecificationException' => 'parser/argument/exception/PhutilArgumentSpecificationException.php', + 'PhutilArgumentSpecificationTestCase' => 'parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php', + 'PhutilArgumentSpellingCorrector' => 'parser/argument/PhutilArgumentSpellingCorrector.php', + 'PhutilArgumentSpellingCorrectorTestCase' => 'parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php', + 'PhutilArgumentUsageException' => 'parser/argument/exception/PhutilArgumentUsageException.php', + 'PhutilArgumentWorkflow' => 'parser/argument/workflow/PhutilArgumentWorkflow.php', + 'PhutilArray' => 'utils/PhutilArray.php', + 'PhutilArrayTestCase' => 'utils/__tests__/PhutilArrayTestCase.php', + 'PhutilArrayWithDefaultValue' => 'utils/PhutilArrayWithDefaultValue.php', + 'PhutilAsanaFuture' => 'future/asana/PhutilAsanaFuture.php', + 'PhutilBacktraceSignalHandler' => 'future/exec/PhutilBacktraceSignalHandler.php', + 'PhutilBallOfPHP' => 'phage/util/PhutilBallOfPHP.php', + 'PhutilBinaryAnalyzer' => 'filesystem/binary/PhutilBinaryAnalyzer.php', + 'PhutilBinaryAnalyzerTestCase' => 'filesystem/binary/__tests__/PhutilBinaryAnalyzerTestCase.php', + 'PhutilBootloader' => 'init/lib/PhutilBootloader.php', + 'PhutilBootloaderException' => 'init/lib/PhutilBootloaderException.php', + 'PhutilBritishEnglishLocale' => 'internationalization/locales/PhutilBritishEnglishLocale.php', + 'PhutilBufferedIterator' => 'utils/PhutilBufferedIterator.php', + 'PhutilBufferedIteratorTestCase' => 'utils/__tests__/PhutilBufferedIteratorTestCase.php', + 'PhutilBugtraqParser' => 'parser/PhutilBugtraqParser.php', + 'PhutilBugtraqParserTestCase' => 'parser/__tests__/PhutilBugtraqParserTestCase.php', + 'PhutilCIDRBlock' => 'ip/PhutilCIDRBlock.php', + 'PhutilCIDRList' => 'ip/PhutilCIDRList.php', + 'PhutilCallbackFilterIterator' => 'utils/PhutilCallbackFilterIterator.php', + 'PhutilCallbackSignalHandler' => 'future/exec/PhutilCallbackSignalHandler.php', + 'PhutilChannel' => 'channel/PhutilChannel.php', + 'PhutilChannelChannel' => 'channel/PhutilChannelChannel.php', + 'PhutilChannelTestCase' => 'channel/__tests__/PhutilChannelTestCase.php', + 'PhutilChunkedIterator' => 'utils/PhutilChunkedIterator.php', + 'PhutilChunkedIteratorTestCase' => 'utils/__tests__/PhutilChunkedIteratorTestCase.php', + 'PhutilClassMapQuery' => 'symbols/PhutilClassMapQuery.php', + 'PhutilCloudWatchMetric' => 'future/aws/PhutilCloudWatchMetric.php', + 'PhutilCommandString' => 'xsprintf/PhutilCommandString.php', + 'PhutilConsole' => 'console/PhutilConsole.php', + 'PhutilConsoleBlock' => 'console/view/PhutilConsoleBlock.php', + 'PhutilConsoleError' => 'console/view/PhutilConsoleError.php', + 'PhutilConsoleFormatter' => 'console/PhutilConsoleFormatter.php', + 'PhutilConsoleInfo' => 'console/view/PhutilConsoleInfo.php', + 'PhutilConsoleList' => 'console/view/PhutilConsoleList.php', + 'PhutilConsoleLogLine' => 'console/view/PhutilConsoleLogLine.php', + 'PhutilConsoleMessage' => 'console/PhutilConsoleMessage.php', + 'PhutilConsoleMetrics' => 'console/PhutilConsoleMetrics.php', + 'PhutilConsoleMetricsSignalHandler' => 'future/exec/PhutilConsoleMetricsSignalHandler.php', + 'PhutilConsoleProgressBar' => 'console/PhutilConsoleProgressBar.php', + 'PhutilConsoleProgressSink' => 'progress/PhutilConsoleProgressSink.php', + 'PhutilConsoleServer' => 'console/PhutilConsoleServer.php', + 'PhutilConsoleServerChannel' => 'console/PhutilConsoleServerChannel.php', + 'PhutilConsoleSkip' => 'console/view/PhutilConsoleSkip.php', + 'PhutilConsoleStdinNotInteractiveException' => 'console/PhutilConsoleStdinNotInteractiveException.php', + 'PhutilConsoleTable' => 'console/view/PhutilConsoleTable.php', + 'PhutilConsoleView' => 'console/view/PhutilConsoleView.php', + 'PhutilConsoleWarning' => 'console/view/PhutilConsoleWarning.php', + 'PhutilConsoleWrapTestCase' => 'console/__tests__/PhutilConsoleWrapTestCase.php', + 'PhutilCowsay' => 'utils/PhutilCowsay.php', + 'PhutilCowsayTestCase' => 'utils/__tests__/PhutilCowsayTestCase.php', + 'PhutilCsprintfTestCase' => 'xsprintf/__tests__/PhutilCsprintfTestCase.php', + 'PhutilCzechLocale' => 'internationalization/locales/PhutilCzechLocale.php', + 'PhutilDOMNode' => 'parser/html/PhutilDOMNode.php', + 'PhutilDeferredLog' => 'filesystem/PhutilDeferredLog.php', + 'PhutilDeferredLogTestCase' => 'filesystem/__tests__/PhutilDeferredLogTestCase.php', + 'PhutilDiffBinaryAnalyzer' => 'filesystem/binary/PhutilDiffBinaryAnalyzer.php', + 'PhutilDirectedScalarGraph' => 'utils/PhutilDirectedScalarGraph.php', + 'PhutilDirectoryFixture' => 'filesystem/PhutilDirectoryFixture.php', + 'PhutilDocblockParser' => 'parser/PhutilDocblockParser.php', + 'PhutilDocblockParserTestCase' => 'parser/__tests__/PhutilDocblockParserTestCase.php', + 'PhutilEditDistanceMatrix' => 'utils/PhutilEditDistanceMatrix.php', + 'PhutilEditDistanceMatrixTestCase' => 'utils/__tests__/PhutilEditDistanceMatrixTestCase.php', + 'PhutilEditorConfig' => 'parser/PhutilEditorConfig.php', + 'PhutilEditorConfigTestCase' => 'parser/__tests__/PhutilEditorConfigTestCase.php', + 'PhutilEmailAddress' => 'parser/PhutilEmailAddress.php', + 'PhutilEmailAddressTestCase' => 'parser/__tests__/PhutilEmailAddressTestCase.php', + 'PhutilEmojiLocale' => 'internationalization/locales/PhutilEmojiLocale.php', + 'PhutilEnglishCanadaLocale' => 'internationalization/locales/PhutilEnglishCanadaLocale.php', + 'PhutilErrorHandler' => 'error/PhutilErrorHandler.php', + 'PhutilErrorHandlerTestCase' => 'error/__tests__/PhutilErrorHandlerTestCase.php', + 'PhutilErrorTrap' => 'error/PhutilErrorTrap.php', + 'PhutilEvent' => 'events/PhutilEvent.php', + 'PhutilEventConstants' => 'events/constant/PhutilEventConstants.php', + 'PhutilEventEngine' => 'events/PhutilEventEngine.php', + 'PhutilEventListener' => 'events/PhutilEventListener.php', + 'PhutilEventType' => 'events/constant/PhutilEventType.php', + 'PhutilExampleBufferedIterator' => 'utils/PhutilExampleBufferedIterator.php', + 'PhutilExecChannel' => 'channel/PhutilExecChannel.php', + 'PhutilExecPassthru' => 'future/exec/PhutilExecPassthru.php', + 'PhutilExecutableFuture' => 'future/exec/PhutilExecutableFuture.php', + 'PhutilExecutionEnvironment' => 'utils/PhutilExecutionEnvironment.php', + 'PhutilFileLock' => 'filesystem/PhutilFileLock.php', + 'PhutilFileLockTestCase' => 'filesystem/__tests__/PhutilFileLockTestCase.php', + 'PhutilFileTree' => 'filesystem/PhutilFileTree.php', + 'PhutilFrenchLocale' => 'internationalization/locales/PhutilFrenchLocale.php', + 'PhutilGermanLocale' => 'internationalization/locales/PhutilGermanLocale.php', + 'PhutilGitBinaryAnalyzer' => 'filesystem/binary/PhutilGitBinaryAnalyzer.php', + 'PhutilGitHubFuture' => 'future/github/PhutilGitHubFuture.php', + 'PhutilGitHubResponse' => 'future/github/PhutilGitHubResponse.php', + 'PhutilGitURI' => 'parser/PhutilGitURI.php', + 'PhutilGitURITestCase' => 'parser/__tests__/PhutilGitURITestCase.php', + 'PhutilHTMLParser' => 'parser/html/PhutilHTMLParser.php', + 'PhutilHTMLParserTestCase' => 'parser/html/__tests__/PhutilHTMLParserTestCase.php', + 'PhutilHTTPEngineExtension' => 'future/http/PhutilHTTPEngineExtension.php', + 'PhutilHTTPResponse' => 'parser/http/PhutilHTTPResponse.php', + 'PhutilHTTPResponseParser' => 'parser/http/PhutilHTTPResponseParser.php', + 'PhutilHTTPResponseParserTestCase' => 'parser/http/__tests__/PhutilHTTPResponseParserTestCase.php', + 'PhutilHashingIterator' => 'utils/PhutilHashingIterator.php', + 'PhutilHashingIteratorTestCase' => 'utils/__tests__/PhutilHashingIteratorTestCase.php', + 'PhutilHelpArgumentWorkflow' => 'parser/argument/workflow/PhutilHelpArgumentWorkflow.php', + 'PhutilHgsprintfTestCase' => 'xsprintf/__tests__/PhutilHgsprintfTestCase.php', + 'PhutilINIParserException' => 'parser/exception/PhutilINIParserException.php', + 'PhutilIPAddress' => 'ip/PhutilIPAddress.php', + 'PhutilIPAddressTestCase' => 'ip/__tests__/PhutilIPAddressTestCase.php', + 'PhutilIPv4Address' => 'ip/PhutilIPv4Address.php', + 'PhutilIPv6Address' => 'ip/PhutilIPv6Address.php', + 'PhutilInteractiveEditor' => 'console/PhutilInteractiveEditor.php', + 'PhutilInvalidRuleParserGeneratorException' => 'parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php', + 'PhutilInvalidStateException' => 'exception/PhutilInvalidStateException.php', + 'PhutilInvalidStateExceptionTestCase' => 'exception/__tests__/PhutilInvalidStateExceptionTestCase.php', + 'PhutilIrreducibleRuleParserGeneratorException' => 'parser/generator/exception/PhutilIrreducibleRuleParserGeneratorException.php', + 'PhutilJSON' => 'parser/PhutilJSON.php', + 'PhutilJSONFragmentLexer' => 'lexer/PhutilJSONFragmentLexer.php', + 'PhutilJSONParser' => 'parser/PhutilJSONParser.php', + 'PhutilJSONParserException' => 'parser/exception/PhutilJSONParserException.php', + 'PhutilJSONParserTestCase' => 'parser/__tests__/PhutilJSONParserTestCase.php', + 'PhutilJSONProtocolChannel' => 'channel/PhutilJSONProtocolChannel.php', + 'PhutilJSONProtocolChannelTestCase' => 'channel/__tests__/PhutilJSONProtocolChannelTestCase.php', + 'PhutilJSONTestCase' => 'parser/__tests__/PhutilJSONTestCase.php', + 'PhutilJavaFragmentLexer' => 'lexer/PhutilJavaFragmentLexer.php', + 'PhutilKoreanLocale' => 'internationalization/locales/PhutilKoreanLocale.php', + 'PhutilLanguageGuesser' => 'parser/PhutilLanguageGuesser.php', + 'PhutilLanguageGuesserTestCase' => 'parser/__tests__/PhutilLanguageGuesserTestCase.php', + 'PhutilLexer' => 'lexer/PhutilLexer.php', + 'PhutilLibraryConflictException' => 'init/lib/PhutilLibraryConflictException.php', + 'PhutilLibraryMapBuilder' => 'moduleutils/PhutilLibraryMapBuilder.php', + 'PhutilLibraryTestCase' => '__tests__/PhutilLibraryTestCase.php', + 'PhutilLocale' => 'internationalization/PhutilLocale.php', + 'PhutilLocaleTestCase' => 'internationalization/__tests__/PhutilLocaleTestCase.php', + 'PhutilLock' => 'filesystem/PhutilLock.php', + 'PhutilLockException' => 'filesystem/PhutilLockException.php', + 'PhutilLogFileChannel' => 'channel/PhutilLogFileChannel.php', + 'PhutilLunarPhase' => 'utils/PhutilLunarPhase.php', + 'PhutilLunarPhaseTestCase' => 'utils/__tests__/PhutilLunarPhaseTestCase.php', + 'PhutilMercurialBinaryAnalyzer' => 'filesystem/binary/PhutilMercurialBinaryAnalyzer.php', + 'PhutilMethodNotImplementedException' => 'error/PhutilMethodNotImplementedException.php', + 'PhutilMetricsChannel' => 'channel/PhutilMetricsChannel.php', + 'PhutilMissingSymbolException' => 'init/lib/PhutilMissingSymbolException.php', + 'PhutilModuleUtilsTestCase' => 'init/lib/__tests__/PhutilModuleUtilsTestCase.php', + 'PhutilNumber' => 'internationalization/PhutilNumber.php', + 'PhutilOAuth1Future' => 'future/oauth/PhutilOAuth1Future.php', + 'PhutilOAuth1FutureTestCase' => 'future/oauth/__tests__/PhutilOAuth1FutureTestCase.php', + 'PhutilOpaqueEnvelope' => 'error/PhutilOpaqueEnvelope.php', + 'PhutilOpaqueEnvelopeKey' => 'error/PhutilOpaqueEnvelopeKey.php', + 'PhutilOpaqueEnvelopeTestCase' => 'error/__tests__/PhutilOpaqueEnvelopeTestCase.php', + 'PhutilPHPFragmentLexer' => 'lexer/PhutilPHPFragmentLexer.php', + 'PhutilPHPFragmentLexerTestCase' => 'lexer/__tests__/PhutilPHPFragmentLexerTestCase.php', + 'PhutilPHPObjectProtocolChannel' => 'channel/PhutilPHPObjectProtocolChannel.php', + 'PhutilPHPObjectProtocolChannelTestCase' => 'channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php', + 'PhutilParserGenerator' => 'parser/PhutilParserGenerator.php', + 'PhutilParserGeneratorException' => 'parser/generator/exception/PhutilParserGeneratorException.php', + 'PhutilParserGeneratorTestCase' => 'parser/__tests__/PhutilParserGeneratorTestCase.php', + 'PhutilPayPalAPIFuture' => 'future/paypal/PhutilPayPalAPIFuture.php', + 'PhutilPerson' => 'internationalization/PhutilPerson.php', + 'PhutilPersonTest' => 'internationalization/__tests__/PhutilPersonTest.php', + 'PhutilPhtTestCase' => 'internationalization/__tests__/PhutilPhtTestCase.php', + 'PhutilPirateEnglishLocale' => 'internationalization/locales/PhutilPirateEnglishLocale.php', + 'PhutilPortugueseBrazilLocale' => 'internationalization/locales/PhutilPortugueseBrazilLocale.php', + 'PhutilPortuguesePortugalLocale' => 'internationalization/locales/PhutilPortuguesePortugalLocale.php', + 'PhutilPostmarkFuture' => 'future/postmark/PhutilPostmarkFuture.php', + 'PhutilPregsprintfTestCase' => 'xsprintf/__tests__/PhutilPregsprintfTestCase.php', + 'PhutilProcessQuery' => 'filesystem/PhutilProcessQuery.php', + 'PhutilProcessRef' => 'filesystem/PhutilProcessRef.php', + 'PhutilProcessRefTestCase' => 'filesystem/__tests__/PhutilProcessRefTestCase.php', + 'PhutilProgressSink' => 'progress/PhutilProgressSink.php', + 'PhutilProtocolChannel' => 'channel/PhutilProtocolChannel.php', + 'PhutilProxyException' => 'error/PhutilProxyException.php', + 'PhutilProxyIterator' => 'utils/PhutilProxyIterator.php', + 'PhutilPygmentizeBinaryAnalyzer' => 'filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php', + 'PhutilPythonFragmentLexer' => 'lexer/PhutilPythonFragmentLexer.php', + 'PhutilQueryStringParser' => 'parser/PhutilQueryStringParser.php', + 'PhutilQueryStringParserTestCase' => 'parser/__tests__/PhutilQueryStringParserTestCase.php', + 'PhutilRawEnglishLocale' => 'internationalization/locales/PhutilRawEnglishLocale.php', + 'PhutilReadableSerializer' => 'readableserializer/PhutilReadableSerializer.php', + 'PhutilReadableSerializerTestCase' => 'readableserializer/__tests__/PhutilReadableSerializerTestCase.php', + 'PhutilRope' => 'utils/PhutilRope.php', + 'PhutilRopeTestCase' => 'utils/__tests__/PhutilRopeTestCase.php', + 'PhutilServiceProfiler' => 'serviceprofiler/PhutilServiceProfiler.php', + 'PhutilShellLexer' => 'lexer/PhutilShellLexer.php', + 'PhutilShellLexerTestCase' => 'lexer/__tests__/PhutilShellLexerTestCase.php', + 'PhutilSignalHandler' => 'future/exec/PhutilSignalHandler.php', + 'PhutilSignalRouter' => 'future/exec/PhutilSignalRouter.php', + 'PhutilSimpleOptions' => 'parser/PhutilSimpleOptions.php', + 'PhutilSimpleOptionsLexer' => 'lexer/PhutilSimpleOptionsLexer.php', + 'PhutilSimpleOptionsLexerTestCase' => 'lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php', + 'PhutilSimpleOptionsTestCase' => 'parser/__tests__/PhutilSimpleOptionsTestCase.php', + 'PhutilSimplifiedChineseLocale' => 'internationalization/locales/PhutilSimplifiedChineseLocale.php', + 'PhutilSlackFuture' => 'future/slack/PhutilSlackFuture.php', + 'PhutilSocketChannel' => 'channel/PhutilSocketChannel.php', + 'PhutilSortVector' => 'utils/PhutilSortVector.php', + 'PhutilSpanishSpainLocale' => 'internationalization/locales/PhutilSpanishSpainLocale.php', + 'PhutilStreamIterator' => 'utils/PhutilStreamIterator.php', + 'PhutilSubversionBinaryAnalyzer' => 'filesystem/binary/PhutilSubversionBinaryAnalyzer.php', + 'PhutilSymbolLoader' => 'symbols/PhutilSymbolLoader.php', + 'PhutilSystem' => 'utils/PhutilSystem.php', + 'PhutilSystemTestCase' => 'utils/__tests__/PhutilSystemTestCase.php', + 'PhutilTerminalString' => 'xsprintf/PhutilTerminalString.php', 'PhutilTestCase' => 'unit/engine/phutil/PhutilTestCase.php', 'PhutilTestCaseTestCase' => 'unit/engine/phutil/testcase/PhutilTestCaseTestCase.php', + 'PhutilTestPhobject' => 'object/__tests__/PhutilTestPhobject.php', 'PhutilTestSkippedException' => 'unit/engine/phutil/testcase/PhutilTestSkippedException.php', 'PhutilTestTerminatedException' => 'unit/engine/phutil/testcase/PhutilTestTerminatedException.php', + 'PhutilTraditionalChineseLocale' => 'internationalization/locales/PhutilTraditionalChineseLocale.php', + 'PhutilTranslation' => 'internationalization/PhutilTranslation.php', + 'PhutilTranslationTestCase' => 'internationalization/__tests__/PhutilTranslationTestCase.php', + 'PhutilTranslator' => 'internationalization/PhutilTranslator.php', + 'PhutilTranslatorTestCase' => 'internationalization/__tests__/PhutilTranslatorTestCase.php', + 'PhutilTsprintfTestCase' => 'xsprintf/__tests__/PhutilTsprintfTestCase.php', + 'PhutilTwitchFuture' => 'future/twitch/PhutilTwitchFuture.php', + 'PhutilTypeCheckException' => 'parser/exception/PhutilTypeCheckException.php', + 'PhutilTypeExtraParametersException' => 'parser/exception/PhutilTypeExtraParametersException.php', + 'PhutilTypeLexer' => 'lexer/PhutilTypeLexer.php', + 'PhutilTypeMissingParametersException' => 'parser/exception/PhutilTypeMissingParametersException.php', + 'PhutilTypeSpec' => 'parser/PhutilTypeSpec.php', + 'PhutilTypeSpecTestCase' => 'parser/__tests__/PhutilTypeSpecTestCase.php', + 'PhutilURI' => 'parser/PhutilURI.php', + 'PhutilURITestCase' => 'parser/__tests__/PhutilURITestCase.php', + 'PhutilUSEnglishLocale' => 'internationalization/locales/PhutilUSEnglishLocale.php', + 'PhutilUTF8StringTruncator' => 'utils/PhutilUTF8StringTruncator.php', + 'PhutilUTF8TestCase' => 'utils/__tests__/PhutilUTF8TestCase.php', 'PhutilUnitTestEngine' => 'unit/engine/PhutilUnitTestEngine.php', 'PhutilUnitTestEngineTestCase' => 'unit/engine/__tests__/PhutilUnitTestEngineTestCase.php', + 'PhutilUnknownSymbolParserGeneratorException' => 'parser/generator/exception/PhutilUnknownSymbolParserGeneratorException.php', + 'PhutilUnreachableRuleParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableRuleParserGeneratorException.php', + 'PhutilUnreachableTerminalParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableTerminalParserGeneratorException.php', + 'PhutilUrisprintfTestCase' => 'xsprintf/__tests__/PhutilUrisprintfTestCase.php', + 'PhutilUtilsTestCase' => 'utils/__tests__/PhutilUtilsTestCase.php', + 'PhutilVeryWowEnglishLocale' => 'internationalization/locales/PhutilVeryWowEnglishLocale.php', + 'PhutilWordPressFuture' => 'future/wordpress/PhutilWordPressFuture.php', + 'PhutilXHPASTBinary' => 'parser/xhpast/bin/PhutilXHPASTBinary.php', 'PytestTestEngine' => 'unit/engine/PytestTestEngine.php', + 'TempFile' => 'filesystem/TempFile.php', + 'TestAbstractDirectedGraph' => 'utils/__tests__/TestAbstractDirectedGraph.php', + 'XHPASTNode' => 'parser/xhpast/api/XHPASTNode.php', + 'XHPASTNodeTestCase' => 'parser/xhpast/api/__tests__/XHPASTNodeTestCase.php', + 'XHPASTSyntaxErrorException' => 'parser/xhpast/api/XHPASTSyntaxErrorException.php', + 'XHPASTToken' => 'parser/xhpast/api/XHPASTToken.php', + 'XHPASTTree' => 'parser/xhpast/api/XHPASTTree.php', + 'XHPASTTreeTestCase' => 'parser/xhpast/api/__tests__/XHPASTTreeTestCase.php', 'XUnitTestEngine' => 'unit/engine/XUnitTestEngine.php', 'XUnitTestResultParserTestCase' => 'unit/parser/__tests__/XUnitTestResultParserTestCase.php', + 'XsprintfUnknownConversionException' => 'xsprintf/exception/XsprintfUnknownConversionException.php', + ), + 'function' => array( + '__phutil_autoload' => 'init/init-library.php', + 'array_fuse' => 'utils/utils.php', + 'array_interleave' => 'utils/utils.php', + 'array_mergev' => 'utils/utils.php', + 'array_select_keys' => 'utils/utils.php', + 'assert_instances_of' => 'utils/utils.php', + 'assert_same_keys' => 'utils/utils.php', + 'assert_stringlike' => 'utils/utils.php', + 'coalesce' => 'utils/utils.php', + 'csprintf' => 'xsprintf/csprintf.php', + 'exec_manual' => 'future/exec/execx.php', + 'execx' => 'future/exec/execx.php', + 'head' => 'utils/utils.php', + 'head_key' => 'utils/utils.php', + 'hgsprintf' => 'xsprintf/hgsprintf.php', + 'id' => 'utils/utils.php', + 'idx' => 'utils/utils.php', + 'idxv' => 'utils/utils.php', + 'ifilter' => 'utils/utils.php', + 'igroup' => 'utils/utils.php', + 'ipull' => 'utils/utils.php', + 'isort' => 'utils/utils.php', + 'jsprintf' => 'xsprintf/jsprintf.php', + 'last' => 'utils/utils.php', + 'last_key' => 'utils/utils.php', + 'ldap_sprintf' => 'xsprintf/ldapsprintf.php', + 'mfilter' => 'utils/utils.php', + 'mgroup' => 'utils/utils.php', + 'mpull' => 'utils/utils.php', + 'msort' => 'utils/utils.php', + 'msortv' => 'utils/utils.php', + 'newv' => 'utils/utils.php', + 'nonempty' => 'utils/utils.php', + 'phlog' => 'error/phlog.php', + 'pht' => 'internationalization/pht.php', + 'phutil_build_http_querystring' => 'utils/utils.php', + 'phutil_build_http_querystring_from_pairs' => 'utils/utils.php', + 'phutil_censor_credentials' => 'utils/utils.php', + 'phutil_console_confirm' => 'console/format.php', + 'phutil_console_format' => 'console/format.php', + 'phutil_console_get_terminal_width' => 'console/format.php', + 'phutil_console_prompt' => 'console/format.php', + 'phutil_console_require_tty' => 'console/format.php', + 'phutil_console_select' => 'console/format.php', + 'phutil_console_wrap' => 'console/format.php', + 'phutil_count' => 'internationalization/pht.php', + 'phutil_date_format' => 'utils/viewutils.php', + 'phutil_decode_mime_header' => 'utils/utils.php', + 'phutil_deprecated' => 'init/lib/moduleutils.php', + 'phutil_describe_type' => 'utils/utils.php', + 'phutil_error_listener_example' => 'error/phlog.php', + 'phutil_escape_uri' => 'utils/utils.php', + 'phutil_escape_uri_path_component' => 'utils/utils.php', + 'phutil_fnmatch' => 'utils/utils.php', + 'phutil_format_bytes' => 'utils/viewutils.php', + 'phutil_format_relative_time' => 'utils/viewutils.php', + 'phutil_format_relative_time_detailed' => 'utils/viewutils.php', + 'phutil_format_units_generic' => 'utils/viewutils.php', + 'phutil_fwrite_nonblocking_stream' => 'utils/utils.php', + 'phutil_get_current_library_name' => 'init/lib/moduleutils.php', + 'phutil_get_library_name_for_root' => 'init/lib/moduleutils.php', + 'phutil_get_library_root' => 'init/lib/moduleutils.php', + 'phutil_get_library_root_for_path' => 'init/lib/moduleutils.php', + 'phutil_get_signal_name' => 'future/exec/execx.php', + 'phutil_get_system_locale' => 'utils/utf8.php', + 'phutil_hashes_are_identical' => 'utils/utils.php', + 'phutil_http_parameter_pair' => 'utils/utils.php', + 'phutil_ini_decode' => 'utils/utils.php', + 'phutil_is_hiphop_runtime' => 'utils/utils.php', + 'phutil_is_natural_list' => 'utils/utils.php', + 'phutil_is_system_locale_available' => 'utils/utf8.php', + 'phutil_is_utf8' => 'utils/utf8.php', + 'phutil_is_utf8_slowly' => 'utils/utf8.php', + 'phutil_is_utf8_with_only_bmp_characters' => 'utils/utf8.php', + 'phutil_is_windows' => 'utils/utils.php', + 'phutil_json_decode' => 'utils/utils.php', + 'phutil_json_encode' => 'utils/utils.php', + 'phutil_load_library' => 'init/lib/moduleutils.php', + 'phutil_loggable_string' => 'utils/utils.php', + 'phutil_microseconds_since' => 'utils/utils.php', + 'phutil_parse_bytes' => 'utils/viewutils.php', + 'phutil_passthru' => 'future/exec/execx.php', + 'phutil_person' => 'internationalization/pht.php', + 'phutil_register_library' => 'init/lib/core.php', + 'phutil_register_library_map' => 'init/lib/core.php', + 'phutil_set_system_locale' => 'utils/utf8.php', + 'phutil_split_lines' => 'utils/utils.php', + 'phutil_string_cast' => 'utils/utils.php', + 'phutil_unescape_uri_path_component' => 'utils/utils.php', + 'phutil_units' => 'utils/utils.php', + 'phutil_utf8_console_strlen' => 'utils/utf8.php', + 'phutil_utf8_convert' => 'utils/utf8.php', + 'phutil_utf8_encode_codepoint' => 'utils/utf8.php', + 'phutil_utf8_hard_wrap' => 'utils/utf8.php', + 'phutil_utf8_hard_wrap_html' => 'utils/utf8.php', + 'phutil_utf8_is_cjk' => 'utils/utf8.php', + 'phutil_utf8_is_combining_character' => 'utils/utf8.php', + 'phutil_utf8_strlen' => 'utils/utf8.php', + 'phutil_utf8_strtolower' => 'utils/utf8.php', + 'phutil_utf8_strtoupper' => 'utils/utf8.php', + 'phutil_utf8_strtr' => 'utils/utf8.php', + 'phutil_utf8_ucwords' => 'utils/utf8.php', + 'phutil_utf8ize' => 'utils/utf8.php', + 'phutil_utf8v' => 'utils/utf8.php', + 'phutil_utf8v_codepoints' => 'utils/utf8.php', + 'phutil_utf8v_combine_characters' => 'utils/utf8.php', + 'phutil_utf8v_combined' => 'utils/utf8.php', + 'phutil_validate_json' => 'utils/utils.php', + 'phutil_var_export' => 'utils/utils.php', + 'ppull' => 'utils/utils.php', + 'pregsprintf' => 'xsprintf/pregsprintf.php', + 'tsprintf' => 'xsprintf/tsprintf.php', + 'urisprintf' => 'xsprintf/urisprintf.php', + 'vcsprintf' => 'xsprintf/csprintf.php', + 'vjsprintf' => 'xsprintf/jsprintf.php', + 'vurisprintf' => 'xsprintf/urisprintf.php', + 'xhp_parser_node_constants' => 'parser/xhpast/parser_nodes.php', + 'xhpast_parser_token_constants' => 'parser/xhpast/parser_tokens.php', + 'xsprintf' => 'xsprintf/xsprintf.php', + 'xsprintf_callback_example' => 'xsprintf/xsprintf.php', + 'xsprintf_command' => 'xsprintf/csprintf.php', + 'xsprintf_javascript' => 'xsprintf/jsprintf.php', + 'xsprintf_ldap' => 'xsprintf/ldapsprintf.php', + 'xsprintf_mercurial' => 'xsprintf/hgsprintf.php', + 'xsprintf_regex' => 'xsprintf/pregsprintf.php', + 'xsprintf_terminal' => 'xsprintf/tsprintf.php', + 'xsprintf_uri' => 'xsprintf/urisprintf.php', ), - 'function' => array(), 'xmap' => array( + 'AASTNode' => 'Phobject', + 'AASTNodeList' => array( + 'Phobject', + 'Countable', + 'Iterator', + ), + 'AASTToken' => 'Phobject', + 'AASTTree' => 'Phobject', + 'AbstractDirectedGraph' => 'Phobject', + 'AbstractDirectedGraphTestCase' => 'PhutilTestCase', 'ArcanistAbstractMethodBodyXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', 'ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase', 'ArcanistAbstractPrivateMethodXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', @@ -843,18 +1293,350 @@ phutil_register_library_map(array( 'ArcanistXMLLinter' => 'ArcanistLinter', 'ArcanistXMLLinterTestCase' => 'ArcanistLinterTestCase', 'ArcanistXUnitTestResultParser' => 'Phobject', + 'BaseHTTPFuture' => 'Future', 'CSharpToolsTestEngine' => 'XUnitTestEngine', + 'CaseInsensitiveArray' => 'PhutilArray', + 'CaseInsensitiveArrayTestCase' => 'PhutilTestCase', + 'CommandException' => 'Exception', + 'ConduitClient' => 'Phobject', + 'ConduitClientException' => 'Exception', + 'ConduitClientTestCase' => 'PhutilTestCase', + 'ConduitFuture' => 'FutureProxy', + 'ExecFuture' => 'PhutilExecutableFuture', + 'ExecFutureTestCase' => 'PhutilTestCase', + 'ExecPassthruTestCase' => 'PhutilTestCase', + 'FileFinder' => 'Phobject', + 'FileFinderTestCase' => 'PhutilTestCase', + 'FileList' => 'Phobject', + 'Filesystem' => 'Phobject', + 'FilesystemException' => 'Exception', + 'FilesystemTestCase' => 'PhutilTestCase', + 'Future' => 'Phobject', + 'FutureIterator' => array( + 'Phobject', + 'Iterator', + ), + 'FutureIteratorTestCase' => 'PhutilTestCase', + 'FutureProxy' => 'Future', + 'HTTPFuture' => 'BaseHTTPFuture', + 'HTTPFutureCURLResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureCertificateResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureHTTPResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureParseResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureResponseStatus' => 'Exception', + 'HTTPFutureTransportResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPSFuture' => 'BaseHTTPFuture', + 'ImmediateFuture' => 'Future', + 'LibphutilUSEnglishTranslation' => 'PhutilTranslation', + 'LinesOfALarge' => array( + 'Phobject', + 'Iterator', + ), + 'LinesOfALargeExecFuture' => 'LinesOfALarge', + 'LinesOfALargeExecFutureTestCase' => 'PhutilTestCase', + 'LinesOfALargeFile' => 'LinesOfALarge', + 'LinesOfALargeFileTestCase' => 'PhutilTestCase', + 'MFilterTestHelper' => 'Phobject', 'NoseTestEngine' => 'ArcanistUnitTestEngine', + 'PHPASTParserTestCase' => 'PhutilTestCase', + 'PhageAction' => 'Phobject', + 'PhageAgentAction' => 'PhageAction', + 'PhageAgentBootloader' => 'Phobject', + 'PhageAgentTestCase' => 'PhutilTestCase', + 'PhageExecuteAction' => 'PhageAction', + 'PhageLocalAction' => 'PhageAgentAction', + 'PhagePHPAgent' => 'Phobject', + 'PhagePHPAgentBootloader' => 'PhageAgentBootloader', + 'PhagePlanAction' => 'PhageAction', + 'Phobject' => 'Iterator', + 'PhobjectTestCase' => 'PhutilTestCase', 'PhpunitTestEngine' => 'ArcanistUnitTestEngine', 'PhpunitTestEngineTestCase' => 'PhutilTestCase', + 'PhutilAWSCloudFormationFuture' => 'PhutilAWSFuture', + 'PhutilAWSCloudWatchFuture' => 'PhutilAWSFuture', + 'PhutilAWSEC2Future' => 'PhutilAWSFuture', + 'PhutilAWSException' => 'Exception', + 'PhutilAWSFuture' => 'FutureProxy', + 'PhutilAWSManagementWorkflow' => 'PhutilArgumentWorkflow', + 'PhutilAWSS3DeleteManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSS3Future' => 'PhutilAWSFuture', + 'PhutilAWSS3GetManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSS3ManagementWorkflow' => 'PhutilAWSManagementWorkflow', + 'PhutilAWSS3PutManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSv4Signature' => 'Phobject', + 'PhutilAWSv4SignatureTestCase' => 'PhutilTestCase', + 'PhutilAggregateException' => 'Exception', + 'PhutilAllCapsEnglishLocale' => 'PhutilLocale', + 'PhutilArgumentParser' => 'Phobject', + 'PhutilArgumentParserException' => 'Exception', + 'PhutilArgumentParserTestCase' => 'PhutilTestCase', + 'PhutilArgumentSpecification' => 'Phobject', + 'PhutilArgumentSpecificationException' => 'PhutilArgumentParserException', + 'PhutilArgumentSpecificationTestCase' => 'PhutilTestCase', + 'PhutilArgumentSpellingCorrector' => 'Phobject', + 'PhutilArgumentSpellingCorrectorTestCase' => 'PhutilTestCase', + 'PhutilArgumentUsageException' => 'PhutilArgumentParserException', + 'PhutilArgumentWorkflow' => 'Phobject', + 'PhutilArray' => array( + 'Phobject', + 'Countable', + 'ArrayAccess', + 'Iterator', + ), + 'PhutilArrayTestCase' => 'PhutilTestCase', + 'PhutilArrayWithDefaultValue' => 'PhutilArray', + 'PhutilAsanaFuture' => 'FutureProxy', + 'PhutilBacktraceSignalHandler' => 'PhutilSignalHandler', + 'PhutilBallOfPHP' => 'Phobject', + 'PhutilBinaryAnalyzer' => 'Phobject', + 'PhutilBinaryAnalyzerTestCase' => 'PhutilTestCase', + 'PhutilBootloaderException' => 'Exception', + 'PhutilBritishEnglishLocale' => 'PhutilLocale', + 'PhutilBufferedIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilBufferedIteratorTestCase' => 'PhutilTestCase', + 'PhutilBugtraqParser' => 'Phobject', + 'PhutilBugtraqParserTestCase' => 'PhutilTestCase', + 'PhutilCIDRBlock' => 'Phobject', + 'PhutilCIDRList' => 'Phobject', + 'PhutilCallbackFilterIterator' => 'FilterIterator', + 'PhutilCallbackSignalHandler' => 'PhutilSignalHandler', + 'PhutilChannel' => 'Phobject', + 'PhutilChannelChannel' => 'PhutilChannel', + 'PhutilChannelTestCase' => 'PhutilTestCase', + 'PhutilChunkedIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilChunkedIteratorTestCase' => 'PhutilTestCase', + 'PhutilClassMapQuery' => 'Phobject', + 'PhutilCloudWatchMetric' => 'Phobject', + 'PhutilCommandString' => 'Phobject', + 'PhutilConsole' => 'Phobject', + 'PhutilConsoleBlock' => 'PhutilConsoleView', + 'PhutilConsoleError' => 'PhutilConsoleLogLine', + 'PhutilConsoleFormatter' => 'Phobject', + 'PhutilConsoleInfo' => 'PhutilConsoleLogLine', + 'PhutilConsoleList' => 'PhutilConsoleView', + 'PhutilConsoleLogLine' => 'PhutilConsoleView', + 'PhutilConsoleMessage' => 'Phobject', + 'PhutilConsoleMetrics' => 'Phobject', + 'PhutilConsoleMetricsSignalHandler' => 'PhutilSignalHandler', + 'PhutilConsoleProgressBar' => 'Phobject', + 'PhutilConsoleProgressSink' => 'PhutilProgressSink', + 'PhutilConsoleServer' => 'Phobject', + 'PhutilConsoleServerChannel' => 'PhutilChannelChannel', + 'PhutilConsoleSkip' => 'PhutilConsoleLogLine', + 'PhutilConsoleStdinNotInteractiveException' => 'Exception', + 'PhutilConsoleTable' => 'PhutilConsoleView', + 'PhutilConsoleView' => 'Phobject', + 'PhutilConsoleWarning' => 'PhutilConsoleLogLine', + 'PhutilConsoleWrapTestCase' => 'PhutilTestCase', + 'PhutilCowsay' => 'Phobject', + 'PhutilCowsayTestCase' => 'PhutilTestCase', + 'PhutilCsprintfTestCase' => 'PhutilTestCase', + 'PhutilCzechLocale' => 'PhutilLocale', + 'PhutilDOMNode' => 'Phobject', + 'PhutilDeferredLog' => 'Phobject', + 'PhutilDeferredLogTestCase' => 'PhutilTestCase', + 'PhutilDiffBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilDirectedScalarGraph' => 'AbstractDirectedGraph', + 'PhutilDirectoryFixture' => 'Phobject', + 'PhutilDocblockParser' => 'Phobject', + 'PhutilDocblockParserTestCase' => 'PhutilTestCase', + 'PhutilEditDistanceMatrix' => 'Phobject', + 'PhutilEditDistanceMatrixTestCase' => 'PhutilTestCase', + 'PhutilEditorConfig' => 'Phobject', + 'PhutilEditorConfigTestCase' => 'PhutilTestCase', + 'PhutilEmailAddress' => 'Phobject', + 'PhutilEmailAddressTestCase' => 'PhutilTestCase', + 'PhutilEmojiLocale' => 'PhutilLocale', + 'PhutilEnglishCanadaLocale' => 'PhutilLocale', + 'PhutilErrorHandler' => 'Phobject', + 'PhutilErrorHandlerTestCase' => 'PhutilTestCase', + 'PhutilErrorTrap' => 'Phobject', + 'PhutilEvent' => 'Phobject', + 'PhutilEventConstants' => 'Phobject', + 'PhutilEventEngine' => 'Phobject', + 'PhutilEventListener' => 'Phobject', + 'PhutilEventType' => 'PhutilEventConstants', + 'PhutilExampleBufferedIterator' => 'PhutilBufferedIterator', + 'PhutilExecChannel' => 'PhutilChannel', + 'PhutilExecPassthru' => 'PhutilExecutableFuture', + 'PhutilExecutableFuture' => 'Future', + 'PhutilExecutionEnvironment' => 'Phobject', + 'PhutilFileLock' => 'PhutilLock', + 'PhutilFileLockTestCase' => 'PhutilTestCase', + 'PhutilFileTree' => 'Phobject', + 'PhutilFrenchLocale' => 'PhutilLocale', + 'PhutilGermanLocale' => 'PhutilLocale', + 'PhutilGitBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilGitHubFuture' => 'FutureProxy', + 'PhutilGitHubResponse' => 'Phobject', + 'PhutilGitURI' => 'Phobject', + 'PhutilGitURITestCase' => 'PhutilTestCase', + 'PhutilHTMLParser' => 'Phobject', + 'PhutilHTMLParserTestCase' => 'PhutilTestCase', + 'PhutilHTTPEngineExtension' => 'Phobject', + 'PhutilHTTPResponse' => 'Phobject', + 'PhutilHTTPResponseParser' => 'Phobject', + 'PhutilHTTPResponseParserTestCase' => 'PhutilTestCase', + 'PhutilHashingIterator' => array( + 'PhutilProxyIterator', + 'Iterator', + ), + 'PhutilHashingIteratorTestCase' => 'PhutilTestCase', + 'PhutilHelpArgumentWorkflow' => 'PhutilArgumentWorkflow', + 'PhutilHgsprintfTestCase' => 'PhutilTestCase', + 'PhutilINIParserException' => 'Exception', + 'PhutilIPAddress' => 'Phobject', + 'PhutilIPAddressTestCase' => 'PhutilTestCase', + 'PhutilIPv4Address' => 'PhutilIPAddress', + 'PhutilIPv6Address' => 'PhutilIPAddress', + 'PhutilInteractiveEditor' => 'Phobject', + 'PhutilInvalidRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilInvalidStateException' => 'Exception', + 'PhutilInvalidStateExceptionTestCase' => 'PhutilTestCase', + 'PhutilIrreducibleRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilJSON' => 'Phobject', + 'PhutilJSONFragmentLexer' => 'PhutilLexer', + 'PhutilJSONParser' => 'Phobject', + 'PhutilJSONParserException' => 'Exception', + 'PhutilJSONParserTestCase' => 'PhutilTestCase', + 'PhutilJSONProtocolChannel' => 'PhutilProtocolChannel', + 'PhutilJSONProtocolChannelTestCase' => 'PhutilTestCase', + 'PhutilJSONTestCase' => 'PhutilTestCase', + 'PhutilJavaFragmentLexer' => 'PhutilLexer', + 'PhutilKoreanLocale' => 'PhutilLocale', + 'PhutilLanguageGuesser' => 'Phobject', + 'PhutilLanguageGuesserTestCase' => 'PhutilTestCase', + 'PhutilLexer' => 'Phobject', + 'PhutilLibraryConflictException' => 'Exception', + 'PhutilLibraryMapBuilder' => 'Phobject', + 'PhutilLibraryTestCase' => 'PhutilTestCase', + 'PhutilLocale' => 'Phobject', + 'PhutilLocaleTestCase' => 'PhutilTestCase', + 'PhutilLock' => 'Phobject', + 'PhutilLockException' => 'Exception', + 'PhutilLogFileChannel' => 'PhutilChannelChannel', + 'PhutilLunarPhase' => 'Phobject', + 'PhutilLunarPhaseTestCase' => 'PhutilTestCase', + 'PhutilMercurialBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilMethodNotImplementedException' => 'Exception', + 'PhutilMetricsChannel' => 'PhutilChannelChannel', + 'PhutilMissingSymbolException' => 'Exception', + 'PhutilModuleUtilsTestCase' => 'PhutilTestCase', + 'PhutilNumber' => 'Phobject', + 'PhutilOAuth1Future' => 'FutureProxy', + 'PhutilOAuth1FutureTestCase' => 'PhutilTestCase', + 'PhutilOpaqueEnvelope' => 'Phobject', + 'PhutilOpaqueEnvelopeKey' => 'Phobject', + 'PhutilOpaqueEnvelopeTestCase' => 'PhutilTestCase', + 'PhutilPHPFragmentLexer' => 'PhutilLexer', + 'PhutilPHPFragmentLexerTestCase' => 'PhutilTestCase', + 'PhutilPHPObjectProtocolChannel' => 'PhutilProtocolChannel', + 'PhutilPHPObjectProtocolChannelTestCase' => 'PhutilTestCase', + 'PhutilParserGenerator' => 'Phobject', + 'PhutilParserGeneratorException' => 'Exception', + 'PhutilParserGeneratorTestCase' => 'PhutilTestCase', + 'PhutilPayPalAPIFuture' => 'FutureProxy', + 'PhutilPersonTest' => array( + 'Phobject', + 'PhutilPerson', + ), + 'PhutilPhtTestCase' => 'PhutilTestCase', + 'PhutilPirateEnglishLocale' => 'PhutilLocale', + 'PhutilPortugueseBrazilLocale' => 'PhutilLocale', + 'PhutilPortuguesePortugalLocale' => 'PhutilLocale', + 'PhutilPostmarkFuture' => 'FutureProxy', + 'PhutilPregsprintfTestCase' => 'PhutilTestCase', + 'PhutilProcessQuery' => 'Phobject', + 'PhutilProcessRef' => 'Phobject', + 'PhutilProcessRefTestCase' => 'PhutilTestCase', + 'PhutilProgressSink' => 'Phobject', + 'PhutilProtocolChannel' => 'PhutilChannelChannel', + 'PhutilProxyException' => 'Exception', + 'PhutilProxyIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilPygmentizeBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilPythonFragmentLexer' => 'PhutilLexer', + 'PhutilQueryStringParser' => 'Phobject', + 'PhutilQueryStringParserTestCase' => 'PhutilTestCase', + 'PhutilRawEnglishLocale' => 'PhutilLocale', + 'PhutilReadableSerializer' => 'Phobject', + 'PhutilReadableSerializerTestCase' => 'PhutilTestCase', + 'PhutilRope' => 'Phobject', + 'PhutilRopeTestCase' => 'PhutilTestCase', + 'PhutilServiceProfiler' => 'Phobject', + 'PhutilShellLexer' => 'PhutilLexer', + 'PhutilShellLexerTestCase' => 'PhutilTestCase', + 'PhutilSignalHandler' => 'Phobject', + 'PhutilSignalRouter' => 'Phobject', + 'PhutilSimpleOptions' => 'Phobject', + 'PhutilSimpleOptionsLexer' => 'PhutilLexer', + 'PhutilSimpleOptionsLexerTestCase' => 'PhutilTestCase', + 'PhutilSimpleOptionsTestCase' => 'PhutilTestCase', + 'PhutilSimplifiedChineseLocale' => 'PhutilLocale', + 'PhutilSlackFuture' => 'FutureProxy', + 'PhutilSocketChannel' => 'PhutilChannel', + 'PhutilSortVector' => 'Phobject', + 'PhutilSpanishSpainLocale' => 'PhutilLocale', + 'PhutilStreamIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilSubversionBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilSystem' => 'Phobject', + 'PhutilSystemTestCase' => 'PhutilTestCase', + 'PhutilTerminalString' => 'Phobject', 'PhutilTestCase' => 'Phobject', 'PhutilTestCaseTestCase' => 'PhutilTestCase', + 'PhutilTestPhobject' => 'Phobject', 'PhutilTestSkippedException' => 'Exception', 'PhutilTestTerminatedException' => 'Exception', + 'PhutilTraditionalChineseLocale' => 'PhutilLocale', + 'PhutilTranslation' => 'Phobject', + 'PhutilTranslationTestCase' => 'PhutilTestCase', + 'PhutilTranslator' => 'Phobject', + 'PhutilTranslatorTestCase' => 'PhutilTestCase', + 'PhutilTsprintfTestCase' => 'PhutilTestCase', + 'PhutilTwitchFuture' => 'FutureProxy', + 'PhutilTypeCheckException' => 'Exception', + 'PhutilTypeExtraParametersException' => 'Exception', + 'PhutilTypeLexer' => 'PhutilLexer', + 'PhutilTypeMissingParametersException' => 'Exception', + 'PhutilTypeSpec' => 'Phobject', + 'PhutilTypeSpecTestCase' => 'PhutilTestCase', + 'PhutilURI' => 'Phobject', + 'PhutilURITestCase' => 'PhutilTestCase', + 'PhutilUSEnglishLocale' => 'PhutilLocale', + 'PhutilUTF8StringTruncator' => 'Phobject', + 'PhutilUTF8TestCase' => 'PhutilTestCase', 'PhutilUnitTestEngine' => 'ArcanistUnitTestEngine', 'PhutilUnitTestEngineTestCase' => 'PhutilTestCase', + 'PhutilUnknownSymbolParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUnreachableRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUnreachableTerminalParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUrisprintfTestCase' => 'PhutilTestCase', + 'PhutilUtilsTestCase' => 'PhutilTestCase', + 'PhutilVeryWowEnglishLocale' => 'PhutilLocale', + 'PhutilWordPressFuture' => 'FutureProxy', + 'PhutilXHPASTBinary' => 'Phobject', 'PytestTestEngine' => 'ArcanistUnitTestEngine', + 'TempFile' => 'Phobject', + 'TestAbstractDirectedGraph' => 'AbstractDirectedGraph', + 'XHPASTNode' => 'AASTNode', + 'XHPASTNodeTestCase' => 'PhutilTestCase', + 'XHPASTSyntaxErrorException' => 'Exception', + 'XHPASTToken' => 'AASTToken', + 'XHPASTTree' => 'AASTTree', + 'XHPASTTreeTestCase' => 'PhutilTestCase', 'XUnitTestEngine' => 'ArcanistUnitTestEngine', 'XUnitTestResultParserTestCase' => 'PhutilTestCase', + 'XsprintfUnknownConversionException' => 'InvalidArgumentException', ), )); diff --git a/src/__tests__/PhutilLibraryTestCase.php b/src/__tests__/PhutilLibraryTestCase.php new file mode 100644 index 00000000..0e5c6261 --- /dev/null +++ b/src/__tests__/PhutilLibraryTestCase.php @@ -0,0 +1,191 @@ +setLibrary($this->getLibraryName()) + ->selectAndLoadSymbols(); + $this->assertTrue(true); + } + + /** + * This is more of an acceptance test case instead of a unit test. It verifies + * that all the library map is up-to-date. + */ + public function testLibraryMap() { + $root = $this->getLibraryRoot(); + $library = phutil_get_library_name_for_root($root); + + $new_library_map = id(new PhutilLibraryMapBuilder($root)) + ->buildMap(); + + $bootloader = PhutilBootloader::getInstance(); + $old_library_map = $bootloader->getLibraryMapWithoutExtensions($library); + unset($old_library_map[PhutilLibraryMapBuilder::LIBRARY_MAP_VERSION_KEY]); + + $identical = ($new_library_map === $old_library_map); + if (!$identical) { + $differences = $this->getMapDifferences( + $old_library_map, + $new_library_map); + sort($differences); + } else { + $differences = array(); + } + + $this->assertTrue( + $identical, + pht( + "The library map is out of date. Rebuild it with `%s`.\n". + "These entries differ: %s.", + 'arc liberate', + implode(', ', $differences))); + } + + + private function getMapDifferences($old, $new) { + $changed = array(); + + $all = $old + $new; + foreach ($all as $key => $value) { + $old_exists = array_key_exists($key, $old); + $new_exists = array_key_exists($key, $new); + + // One map has it and the other does not, so mark it as changed. + if ($old_exists != $new_exists) { + $changed[] = $key; + continue; + } + + $oldv = idx($old, $key); + $newv = idx($new, $key); + if ($oldv === $newv) { + continue; + } + + if (is_array($oldv) && is_array($newv)) { + $child_changed = $this->getMapDifferences($oldv, $newv); + foreach ($child_changed as $child) { + $changed[] = $key.'.'.$child; + } + } else { + $changed[] = $key; + } + } + + return $changed; + } + + + /** + * This is more of an acceptance test case instead of a unit test. It verifies + * that methods in subclasses have the same visibility as the method in the + * parent class. + */ + public function testMethodVisibility() { + $symbols = id(new PhutilSymbolLoader()) + ->setLibrary($this->getLibraryName()) + ->selectSymbolsWithoutLoading(); + + $classes = array(); + foreach ($symbols as $symbol) { + if ($symbol['type'] == 'class') { + $classes[$symbol['name']] = new ReflectionClass($symbol['name']); + } + } + + $failures = array(); + + foreach ($classes as $class_name => $class) { + $parents = array(); + $parent = $class; + while ($parent = $parent->getParentClass()) { + $parents[] = $parent; + } + + $interfaces = $class->getInterfaces(); + + foreach ($class->getMethods() as $method) { + $method_name = $method->getName(); + + foreach (array_merge($parents, $interfaces) as $extends) { + if ($extends->hasMethod($method_name)) { + $xmethod = $extends->getMethod($method_name); + + if (!$this->compareVisibility($xmethod, $method)) { + $failures[] = pht( + 'Class "%s" implements method "%s" with the wrong visibility. '. + 'The method has visibility "%s", but it is defined in parent '. + '"%s" with visibility "%s". In Phabricator, a method which '. + 'overrides another must always have the same visibility.', + $class_name, + $method_name, + $this->getVisibility($method), + $extends->getName(), + $this->getVisibility($xmethod)); + } + + // We found a declaration somewhere, so stop looking. + break; + } + } + } + } + + $this->assertTrue( + empty($failures), + "\n\n".implode("\n\n", $failures)); + } + + /** + * Get the name of the library currently being tested. + */ + protected function getLibraryName() { + return phutil_get_library_name_for_root($this->getLibraryRoot()); + } + + /** + * Get the root directory for the library currently being tested. + */ + protected function getLibraryRoot() { + $caller = id(new ReflectionClass($this))->getFileName(); + return phutil_get_library_root_for_path($caller); + } + + private function compareVisibility( + ReflectionMethod $parent_method, + ReflectionMethod $method) { + + static $bitmask; + + if ($bitmask === null) { + $bitmask = ReflectionMethod::IS_PUBLIC; + $bitmask += ReflectionMethod::IS_PROTECTED; + $bitmask += ReflectionMethod::IS_PRIVATE; + } + + $parent_modifiers = $parent_method->getModifiers(); + $modifiers = $method->getModifiers(); + return !(($parent_modifiers ^ $modifiers) & $bitmask); + } + + private function getVisibility(ReflectionMethod $method) { + if ($method->isPrivate()) { + return 'private'; + } else if ($method->isProtected()) { + return 'protected'; + } else { + return 'public'; + } + } + +} diff --git a/src/channel/PhutilChannel.php b/src/channel/PhutilChannel.php new file mode 100644 index 00000000..65ea544b --- /dev/null +++ b/src/channel/PhutilChannel.php @@ -0,0 +1,426 @@ +obuf = new PhutilRope(); + } + + +/* -( Reading and Writing )------------------------------------------------ */ + + + /** + * Read from the channel. A channel defines the format of data that is read + * from it, so this method may return strings, objects, or anything else. + * + * The default implementation returns bytes. + * + * @return wild Data from the channel, normally bytes. + * + * @task io + */ + public function read() { + $result = $this->ibuf; + $this->ibuf = ''; + return $result; + } + + + /** + * Write to the channel. A channel defines what data format it accepts, + * so this method may take strings, objects, or anything else. + * + * The default implementation accepts bytes. + * + * @param wild Data to write to the channel, normally bytes. + * @return this + * + * @task io + */ + public function write($bytes) { + if (!is_scalar($bytes)) { + throw new Exception( + pht( + '%s may only write strings!', + __METHOD__.'()')); + } + + $this->obuf->append($bytes); + return $this; + } + + +/* -( Waiting for Activity )----------------------------------------------- */ + + + /** + * Wait for any activity on a list of channels. Convenience wrapper around + * @{method:waitForActivity}. + * + * @param list A list of channels to wait for. + * @param dict Options, see above. + * @return void + * + * @task wait + */ + public static function waitForAny(array $channels, array $options = array()) { + return self::waitForActivity($channels, $channels, $options); + } + + + /** + * Wait (using select()) for channels to become ready for reads or writes. + * This method blocks until some channel is ready to be updated. + * + * It does not provide a way to determine which channels are ready to be + * updated. The expectation is that you'll just update every channel. This + * might change eventually. + * + * Available options are: + * + * - 'read' (list) Additional streams to select for read. + * - 'write' (list) Additional streams to select for write. + * - 'except' (list) Additional streams to select for except. + * - 'timeout' (float) Select timeout, defaults to 1. + * + * NOTE: Extra streams must be //streams//, not //sockets//, because this + * method uses `stream_select()`, not `socket_select()`. + * + * @param list List of channels to wait for reads on. + * @param list List of channels to wait for writes on. + * @return void + * + * @task wait + */ + public static function waitForActivity( + array $reads, + array $writes, + array $options = array()) { + + assert_instances_of($reads, __CLASS__); + assert_instances_of($writes, __CLASS__); + + $read = idx($options, 'read', array()); + $write = idx($options, 'write', array()); + $except = idx($options, 'except', array()); + $wait = idx($options, 'timeout', 1); + + // TODO: It would be nice to just be able to categorically reject these as + // unselectable. + foreach (array($reads, $writes) as $channels) { + foreach ($channels as $channel) { + $r_sockets = $channel->getReadSockets(); + $w_sockets = $channel->getWriteSockets(); + + // If any channel has no read sockets and no write sockets, assume it + // isn't selectable and return immediately (effectively degrading to a + // busy wait). + + if (!$r_sockets && !$w_sockets) { + return false; + } + } + } + + foreach ($reads as $channel) { + // If any of the read channels have data in read buffers, return + // immediately. If we don't, we risk running select() on a bunch of + // sockets which won't become readable because the data the application + // expects is already in a read buffer. + + if (!$channel->isReadBufferEmpty()) { + return; + } + + $r_sockets = $channel->getReadSockets(); + foreach ($r_sockets as $socket) { + $read[] = $socket; + $except[] = $socket; + } + } + + foreach ($writes as $channel) { + if ($channel->isWriteBufferEmpty()) { + // If the channel's write buffer is empty, don't select the write + // sockets, since they're writable immediately. + $w_sockets = array(); + } else { + $w_sockets = $channel->getWriteSockets(); + } + + foreach ($w_sockets as $socket) { + $write[] = $socket; + $except[] = $socket; + } + } + + if (!$read && !$write && !$except) { + return false; + } + + $wait_sec = (int)$wait; + $wait_usec = 1000000 * ($wait - $wait_sec); + + @stream_select($read, $write, $except, $wait_sec, $wait_usec); + } + + +/* -( Responding to Activity )--------------------------------------------- */ + + + /** + * Updates the channel, filling input buffers and flushing output buffers. + * Returns false if the channel has closed. + * + * @return bool True if the channel is still open. + * + * @task update + */ + public function update() { + $maximum_read = PHP_INT_MAX; + if ($this->readBufferSize !== null) { + $maximum_read = ($this->readBufferSize - strlen($this->ibuf)); + } + + while ($maximum_read > 0) { + $in = $this->readBytes($maximum_read); + if (!strlen($in)) { + // Reading is blocked for now. + break; + } + $this->ibuf .= $in; + $maximum_read -= strlen($in); + } + + while ($this->obuf->getByteLength()) { + $len = $this->writeBytes($this->obuf->getAnyPrefix()); + if (!$len) { + // Writing is blocked for now. + break; + } + $this->obuf->removeBytesFromHead($len); + } + + return $this->isOpen(); + } + + +/* -( Channel Implementation )--------------------------------------------- */ + + + /** + * Set a channel name. This is primarily intended to allow you to debug + * channel code more easily, by naming channels something meaningful. + * + * @param string Channel name. + * @return this + * + * @task impl + */ + public function setName($name) { + $this->name = $name; + return $this; + } + + + /** + * Get the channel name, as set by @{method:setName}. + * + * @return string Name of the channel. + * + * @task impl + */ + public function getName() { + return coalesce($this->name, get_class($this)); + } + + + /** + * Test if the channel is open: active, can be read from and written to, etc. + * + * @return bool True if the channel is open. + * + * @task impl + */ + abstract public function isOpen(); + + + /** + * Close the channel for writing. + * + * @return void + * @task impl + */ + abstract public function closeWriteChannel(); + + /** + * Test if the channel is open for reading. + * + * @return bool True if the channel is open for reading. + * + * @task impl + */ + public function isOpenForReading() { + return $this->isOpen(); + } + + + /** + * Test if the channel is open for writing. + * + * @return bool True if the channel is open for writing. + * + * @task impl + */ + public function isOpenForWriting() { + return $this->isOpen(); + } + + + /** + * Read from the channel's underlying I/O. + * + * @param int Maximum number of bytes to read. + * @return string Bytes, if available. + * + * @task impl + */ + abstract protected function readBytes($length); + + + /** + * Write to the channel's underlying I/O. + * + * @param string Bytes to write. + * @return int Number of bytes written. + * + * @task impl + */ + abstract protected function writeBytes($bytes); + + + /** + * Get sockets to select for reading. + * + * @return list Read sockets. + * + * @task impl + */ + protected function getReadSockets() { + return array(); + } + + + /** + * Get sockets to select for writing. + * + * @return list Write sockets. + * + * @task impl + */ + protected function getWriteSockets() { + return array(); + } + + + /** + * Set the maximum size of the channel's read buffer. Reads will artificially + * block once the buffer reaches this size until the in-process buffer is + * consumed. + * + * @param int|null Maximum read buffer size, or `null` for a limitless buffer. + * @return this + * @task impl + */ + public function setReadBufferSize($size) { + $this->readBufferSize = $size; + return $this; + } + + + /** + * Test state of the read buffer. + * + * @return bool True if the read buffer is empty. + * + * @task impl + */ + public function isReadBufferEmpty() { + return (strlen($this->ibuf) == 0); + } + + + /** + * Test state of the write buffer. + * + * @return bool True if the write buffer is empty. + * + * @task impl + */ + public function isWriteBufferEmpty() { + return !$this->getWriteBufferSize(); + } + + + /** + * Get the number of bytes we're currently waiting to write. + * + * @return int Number of waiting bytes. + * + * @task impl + */ + public function getWriteBufferSize() { + return $this->obuf->getByteLength(); + } + + + /** + * Wait for any buffered writes to complete. This is a blocking call. When + * the call returns, the write buffer will be empty. + * + * @task impl + */ + public function flush() { + while (!$this->isWriteBufferEmpty()) { + self::waitForAny(array($this)); + if (!$this->update()) { + throw new Exception(pht('Channel closed while flushing output!')); + } + } + return $this; + } + +} diff --git a/src/channel/PhutilChannelChannel.php b/src/channel/PhutilChannelChannel.php new file mode 100644 index 00000000..1ab99e30 --- /dev/null +++ b/src/channel/PhutilChannelChannel.php @@ -0,0 +1,112 @@ +channel = $channel; + $this->didConstruct(); + } + + protected function didConstruct() { + // Hook for subclasses. + } + + public function read() { + return $this->channel->read(); + } + + public function write($message) { + $this->channel->write($message); + return $this; + } + + public function update() { + return $this->channel->update(); + } + + public function isOpen() { + return $this->channel->isOpen(); + } + + public function closeWriteChannel() { + return $this->channel->closeWriteChannel(); + } + + public function isOpenForReading() { + return $this->channel->isOpenForReading(); + } + + public function isOpenForWriting() { + return $this->channel->isOpenForWriting(); + } + + protected function readBytes($length) { + $this->throwOnRawByteOperations(); + } + + protected function writeBytes($bytes) { + $this->throwOnRawByteOperations(); + } + + protected function getReadSockets() { + return $this->channel->getReadSockets(); + } + + protected function getWriteSockets() { + return $this->channel->getWriteSockets(); + } + + public function setReadBufferSize($size) { + $this->channel->setReadBufferSize($size); + return $this; + } + + public function isReadBufferEmpty() { + return $this->channel->isReadBufferEmpty(); + } + + public function isWriteBufferEmpty() { + return $this->channel->isWriteBufferEmpty(); + } + + public function getWriteBufferSize() { + return $this->channel->getWriteBufferSize(); + } + + public function flush() { + $this->channel->flush(); + return $this; + } + + protected function getUnderlyingChannel() { + return $this->channel; + } + + private function throwOnRawByteOperations() { + + // NOTE: You should only be able to end up here if you subclass this class + // and implement your subclass incorrectly, since the byte methods are + // protected. + + throw new Exception( + pht( + 'Do not call %s or %s directly on a %s. Instead, call %s or %s.', + 'readBytes()', + 'writeBytes()', + __CLASS__, + 'read()', + 'write()')); + } + +} diff --git a/src/channel/PhutilExecChannel.php b/src/channel/PhutilExecChannel.php new file mode 100644 index 00000000..0d4e722b --- /dev/null +++ b/src/channel/PhutilExecChannel.php @@ -0,0 +1,173 @@ +write("GET / HTTP/1.0\n\n"); + * while (true) { + * echo $channel->read(); + * + * PhutilChannel::waitForAny(array($channel)); + * if (!$channel->update()) { + * // Break out of the loop when the channel closes. + * break; + * } + * } + * + * This script makes an HTTP request to "example.com". This example is heavily + * contrived. In most cases, @{class:ExecFuture} and other futures constructs + * offer a much easier way to solve problems which involve system commands, and + * @{class:HTTPFuture} and other HTTP constructs offer a much easier way to + * solve problems which involve HTTP. + * + * @{class:PhutilExecChannel} is generally useful only when a program acts like + * a server but performs I/O on stdin/stdout, and you need to act like a client + * or interact with the program at the same time as you manage traditional + * socket connections. Examples are Mercurial operating in "cmdserve" mode, git + * operating in "receive-pack" mode, etc. It is unlikely that any reasonable + * use of this class is concise enough to make a short example out of, so you + * get a contrived one instead. + * + * See also @{class:PhutilSocketChannel}, for a similar channel that uses + * sockets for I/O. + * + * Since @{class:ExecFuture} already supports buffered I/O and socket selection, + * the implementation of this class is fairly straightforward. + * + * @task construct Construction + */ +final class PhutilExecChannel extends PhutilChannel { + + private $future; + private $stderrHandler; + + +/* -( Construction )------------------------------------------------------- */ + + + /** + * Construct an exec channel from a @{class:ExecFuture}. The future should + * **NOT** have been started yet (e.g., with `isReady()` or `start()`), + * because @{class:ExecFuture} closes stdin by default when futures start. + * If stdin has been closed, you will be unable to write on the channel. + * + * @param ExecFuture Future to use as an underlying I/O source. + * @task construct + */ + public function __construct(ExecFuture $future) { + parent::__construct(); + + // Make an empty write to keep the stdin pipe open. By default, futures + // close this pipe when they start. + $future->write('', $keep_pipe = true); + + // Start the future so that reads and writes work immediately. + $future->isReady(); + + $this->future = $future; + } + + public function __destruct() { + if (!$this->future->isReady()) { + $this->future->resolveKill(); + } + } + + public function update() { + $this->future->isReady(); + return parent::update(); + } + + public function isOpen() { + return !$this->future->isReady(); + } + + protected function readBytes($length) { + list($stdout, $stderr) = $this->future->read(); + $this->future->discardBuffers(); + + if (strlen($stderr)) { + if ($this->stderrHandler) { + call_user_func($this->stderrHandler, $this, $stderr); + } else { + throw new Exception( + pht('Unexpected output to stderr on exec channel: %s', $stderr)); + } + } + + return $stdout; + } + + public function write($bytes) { + $this->future->write($bytes, $keep_pipe = true); + } + + public function closeWriteChannel() { + $this->future->write('', $keep_pipe = false); + } + + protected function writeBytes($bytes) { + throw new Exception(pht('%s can not write bytes directly!', 'ExecFuture')); + } + + protected function getReadSockets() { + return $this->future->getReadSockets(); + } + + protected function getWriteSockets() { + return $this->future->getWriteSockets(); + } + + public function isReadBufferEmpty() { + // Check both the channel and future read buffers, since either could have + // data. + return parent::isReadBufferEmpty() && $this->future->isReadBufferEmpty(); + } + + public function setReadBufferSize($size) { + // NOTE: We may end up using 2x the buffer size here, one inside + // ExecFuture and one inside the Channel. We could tune this eventually, but + // it should be fine for now. + parent::setReadBufferSize($size); + $this->future->setReadBufferSize($size); + return $this; + } + + public function isWriteBufferEmpty() { + return $this->future->isWriteBufferEmpty(); + } + + public function getWriteBufferSize() { + return $this->future->getWriteBufferSize(); + } + + /** + * If the wrapped @{class:ExecFuture} outputs data to stderr, we normally + * throw an exception. Instead, you can provide a callback handler that will + * be invoked and passed the data. It should have this signature: + * + * function f(PhutilExecChannel $channel, $stderr) { + * // ... + * } + * + * The `$channel` will be this channel object, and `$stderr` will be a string + * with bytes received over stderr. + * + * You can set a handler which does nothing to effectively ignore and discard + * any output on stderr. + * + * @param callable Handler to invoke when stderr data is received. + * @return this + */ + public function setStderrHandler($handler) { + $this->stderrHandler = $handler; + return $this; + } + +} diff --git a/src/channel/PhutilJSONProtocolChannel.php b/src/channel/PhutilJSONProtocolChannel.php new file mode 100644 index 00000000..30d2a58e --- /dev/null +++ b/src/channel/PhutilJSONProtocolChannel.php @@ -0,0 +1,94 @@ + + * + * ...where is an 8-character, zero-padded integer written as a string. + * For example, this is a valid message: + * + * 00000015{"key":"value"} + * + * @task protocol + */ + protected function encodeMessage($message) { + $message = json_encode($message); + $len = sprintf( + '%0'.self::SIZE_LENGTH.'.'.self::SIZE_LENGTH.'d', + strlen($message)); + return "{$len}{$message}"; + } + + + /** + * Decode a message received from the other end of the channel. Messages are + * decoded as associative arrays. + * + * @task protocol + */ + protected function decodeStream($data) { + $this->buf .= $data; + + $objects = array(); + while (strlen($this->buf) >= $this->byteLengthOfNextChunk) { + switch ($this->mode) { + case self::MODE_LENGTH: + $len = substr($this->buf, 0, self::SIZE_LENGTH); + $this->buf = substr($this->buf, self::SIZE_LENGTH); + + $this->mode = self::MODE_OBJECT; + $this->byteLengthOfNextChunk = (int)$len; + break; + case self::MODE_OBJECT: + $data = substr($this->buf, 0, $this->byteLengthOfNextChunk); + $this->buf = substr($this->buf, $this->byteLengthOfNextChunk); + + try { + $objects[] = phutil_json_decode($data); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Failed to decode JSON object.'), + $ex); + } + + $this->mode = self::MODE_LENGTH; + $this->byteLengthOfNextChunk = self::SIZE_LENGTH; + break; + } + } + + return $objects; + } + +} diff --git a/src/channel/PhutilLogFileChannel.php b/src/channel/PhutilLogFileChannel.php new file mode 100644 index 00000000..ecc9cc17 --- /dev/null +++ b/src/channel/PhutilLogFileChannel.php @@ -0,0 +1,41 @@ +logfile = fopen($path, 'a'); + $this->log('--- '.getmypid().' ---'); + return $this; + } + + public function read() { + $buffer = parent::read(); + + if (strlen($buffer)) { + $this->log('>>> '.phutil_loggable_string($buffer)); + } + + return $buffer; + } + + public function write($message) { + if (strlen($message)) { + $this->log('<<< '.phutil_loggable_string($message)); + } + + return parent::write($message); + } + + private function log($message) { + if ($this->logfile) { + fwrite($this->logfile, $message."\n"); + } + } + +} diff --git a/src/channel/PhutilMetricsChannel.php b/src/channel/PhutilMetricsChannel.php new file mode 100644 index 00000000..083e1d1a --- /dev/null +++ b/src/channel/PhutilMetricsChannel.php @@ -0,0 +1,85 @@ +bytesWritten; + } + + /** + * Get the number of bytes that have been read from the channel. This excludes + * any bytes which have been received but not actually read by anything, and + * thus may underreport compared to actual activity on the wire. + * + * @return int Bytes read. + * @task metrics + */ + public function getBytesRead() { + return $this->bytesRead; + } + + + /** + * Get the elapsed wall time since this channel opened. + * + * @return float Wall time, in seconds. + * @task metrics + */ + public function getWallTime() { + return microtime(true) - $this->startTime; + } + + +/* -( Implementation )----------------------------------------------------- */ + + + /** + * @task impl + */ + protected function didConstruct() { + $this->startTime = microtime(true); + } + + + /** + * @task impl + */ + public function read() { + $buffer = parent::read(); + $this->bytesRead += strlen($buffer); + return $buffer; + } + + + /** + * @task impl + */ + public function write($message) { + $this->bytesWritten += strlen($message); + return parent::write($message); + } + +} diff --git a/src/channel/PhutilPHPObjectProtocolChannel.php b/src/channel/PhutilPHPObjectProtocolChannel.php new file mode 100644 index 00000000..d83d1747 --- /dev/null +++ b/src/channel/PhutilPHPObjectProtocolChannel.php @@ -0,0 +1,90 @@ + + * + * ...where is a 4-byte unsigned big-endian integer. + * + * @task protocol + */ + protected function encodeMessage($message) { + $message = serialize($message); + $len = pack('N', strlen($message)); + return "{$len}{$message}"; + } + + + /** + * Decode a message received from the other end of the channel. + * + * @task protocol + */ + protected function decodeStream($data) { + $this->buf .= $data; + + $objects = array(); + while (strlen($this->buf) >= $this->byteLengthOfNextChunk) { + switch ($this->mode) { + case self::MODE_LENGTH: + $len = substr($this->buf, 0, self::SIZE_LENGTH); + $this->buf = substr($this->buf, self::SIZE_LENGTH); + + $this->mode = self::MODE_OBJECT; + $this->byteLengthOfNextChunk = head(unpack('N', $len)); + break; + case self::MODE_OBJECT: + $data = substr($this->buf, 0, $this->byteLengthOfNextChunk); + $this->buf = substr($this->buf, $this->byteLengthOfNextChunk); + + $obj = @unserialize($data); + if ($obj === false) { + throw new Exception(pht('Failed to unserialize object: %s', $data)); + } else { + $objects[] = $obj; + } + + $this->mode = self::MODE_LENGTH; + $this->byteLengthOfNextChunk = self::SIZE_LENGTH; + break; + } + } + + return $objects; + } + +} diff --git a/src/channel/PhutilProtocolChannel.php b/src/channel/PhutilProtocolChannel.php new file mode 100644 index 00000000..2e018fd8 --- /dev/null +++ b/src/channel/PhutilProtocolChannel.php @@ -0,0 +1,139 @@ +decodeStream($data); + foreach ($messages as $message) { + $this->addMessage($message); + } + } + + if (!$this->messages) { + return null; + } + + return array_shift($this->messages); + } + + + /** + * Write a message to the channel. + * + * @param wild Some message. + * @return this + * + * @task io + */ + public function write($message) { + $bytes = $this->encodeMessage($message); + return parent::write($bytes); + } + + + /** + * Add a message to the queue. While you normally do not need to do this, + * you can use it to inject out-of-band messages. + * + * @param wild Some message. + * @return this + * + * @task io + */ + public function addMessage($message) { + $this->messages[] = $message; + return $this; + } + + +/* -( Protocol Implementation )-------------------------------------------- */ + + + /** + * Encode a message for transmission. + * + * @param wild Some message. + * @return string The message serialized into a wire format for + * transmission. + * + * @task protocol + */ + abstract protected function encodeMessage($message); + + + /** + * Decode bytes from the underlying channel into zero or more complete + * messages. The messages should be returned. + * + * This method is called as data is available. It will receive incoming + * data only once, and must buffer any data which represents only part of + * a message. Once a complete message is received, it can return the message + * and discard that part of the buffer. + * + * Generally, a protocol channel should maintain a read buffer, implement + * a parser in this method, and store parser state on the object to be able + * to process incoming data in small chunks. + * + * @param string One or more bytes from the underlying channel. + * @return list Zero or more parsed messages. + * + * @task protocol + */ + abstract protected function decodeStream($data); + + +/* -( Waiting for Activity )----------------------------------------------- */ + + + /** + * Wait for a message, blocking until one is available. + * + * @return wild A message. + * + * @task wait + */ + public function waitForMessage() { + while (true) { + $is_open = $this->update(); + $message = $this->read(); + if ($message !== null) { + return $message; + } + + if (!$is_open) { + break; + } + + self::waitForAny(array($this)); + } + + throw new Exception(pht('Channel closed while waiting for message!')); + } + +} diff --git a/src/channel/PhutilSocketChannel.php b/src/channel/PhutilSocketChannel.php new file mode 100644 index 00000000..4bd2a47a --- /dev/null +++ b/src/channel/PhutilSocketChannel.php @@ -0,0 +1,192 @@ +readSocket = $read_socket; + if ($write_socket) { + $this->writeSocket = $write_socket; + } else { + $this->writeSocket = $read_socket; + $this->isSingleSocket = true; + } + } + + public function __destruct() { + $this->closeSockets(); + } + + + /** + * Creates a pair of socket channels that are connected to each other. This + * is mostly useful for writing unit tests of, e.g., protocol channels. + * + * list($x, $y) = PhutilSocketChannel::newChannelPair(); + * + * @task construct + */ + public static function newChannelPair() { + $sockets = null; + + $domain = phutil_is_windows() ? STREAM_PF_INET : STREAM_PF_UNIX; + $pair = stream_socket_pair($domain, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP); + if (!$pair) { + throw new Exception(pht('%s failed!', 'stream_socket_pair()')); + } + + $x = new PhutilSocketChannel($pair[0]); + $y = new PhutilSocketChannel($pair[1]); + + return array($x, $y); + } + + public function isOpen() { + return ($this->isOpenForReading() || $this->isOpenForWriting()); + } + + public function isOpenForReading() { + return (bool)$this->readSocket; + } + + public function isOpenForWriting() { + return (bool)$this->writeSocket; + } + + protected function readBytes($length) { + $socket = $this->readSocket; + if (!$socket) { + return ''; + } + + $data = @fread($socket, min($length, 64 * 1024)); + + if ($data === false) { + $this->closeReadSocket(); + $data = ''; + } + + // NOTE: fread() continues returning empty string after the socket is + // closed, we need to check for EOF explicitly. + if ($data === '') { + if (feof($socket)) { + $this->closeReadSocket(); + } + } + + return $data; + } + + protected function writeBytes($bytes) { + $socket = $this->writeSocket; + if (!$socket) { + return 0; + } + + $len = phutil_fwrite_nonblocking_stream($socket, $bytes); + if ($len === false) { + $this->closeWriteSocket(); + return 0; + } + return $len; + } + + protected function getReadSockets() { + if ($this->readSocket) { + return array($this->readSocket); + } + return array(); + } + + protected function getWriteSockets() { + if ($this->writeSocket) { + return array($this->writeSocket); + } else { + return array(); + } + } + + private function closeReadSocket() { + $this->closeOneSocket($this->readSocket); + $this->readSocket = null; + if ($this->isSingleSocket) { + $this->writeSocket = null; + } + } + + private function closeWriteSocket() { + $this->closeOneSocket($this->writeSocket); + $this->writeSocket = null; + if ($this->isSingleSocket) { + $this->readSocket = null; + } + } + + public function closeWriteChannel() { + $this->closeWriteSocket(); + } + + private function closeOneSocket($socket) { + if (!$socket) { + return; + } + // We should also stream_socket_shutdown() here but HHVM throws errors + // with it (for example 'Unexpected object type PlainFile'). We depend + // just on fclose() until it is fixed. + @fclose($socket); + } + + private function closeSockets() { + $this->closeReadSocket(); + $this->closeWriteSocket(); + } + +} diff --git a/src/channel/__tests__/PhutilChannelTestCase.php b/src/channel/__tests__/PhutilChannelTestCase.php new file mode 100644 index 00000000..3b7ccbab --- /dev/null +++ b/src/channel/__tests__/PhutilChannelTestCase.php @@ -0,0 +1,45 @@ +write($str_len_8); + while (true) { + $x->update(); + $y->update(); + $read = $y->read(); + if (strlen($read)) { + break; + } + } + + // We expect to read the entire message. + $this->assertEqual($str_len_8, $read); + + + // Again, with a read buffer limit. + + $y->setReadBufferSize(4); + $x->write($str_len_8); + + while (true) { + $x->update(); + $y->update(); + $read = $y->read(); + if (strlen($read)) { + break; + } + } + + // We expect to see only the first 4 bytes of the message. + $this->assertEqual($str_len_4, $read); + } + +} diff --git a/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php b/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php new file mode 100644 index 00000000..3bd0c124 --- /dev/null +++ b/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php @@ -0,0 +1,26 @@ + mt_rand(), + 'list' => array(1, 2, 3), + 'null' => null, + ); + + $xp->write($dict); + $xp->flush(); + $result = $yp->waitForMessage(); + + $this->assertEqual( + $dict, + $result, + pht('Values are identical.')); + } + +} diff --git a/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php b/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php new file mode 100644 index 00000000..c9373918 --- /dev/null +++ b/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php @@ -0,0 +1,66 @@ + mt_rand(), + ); + + $xp->write($object); + $xp->flush(); + $result = $yp->waitForMessage(); + + $this->assertTrue( + (array)$object === (array)$result, + pht('Values are identical.')); + + $this->assertFalse( + $object === $result, + pht('Objects are not the same.')); + } + + public function testCloseSocketWriteChannel() { + list($x, $y) = PhutilSocketChannel::newChannelPair(); + $xp = new PhutilPHPObjectProtocolChannel($x); + $yp = new PhutilPHPObjectProtocolChannel($y); + + $yp->closeWriteChannel(); + $yp->update(); + + // NOTE: This test is more broad than the implementation needs to be. A + // better test would be to verify that this throws an exception: + // + // $xp->waitForMessage(); + // + // However, if the test breaks, that method will hang forever instead of + // returning, which would be hard to diagnose. Since the current + // implementation shuts down the entire channel, just test for that. + + $this->assertFalse($xp->update(), pht('Expected channel to close.')); + } + + public function testCloseExecWriteChannel() { + $future = new ExecFuture('cat'); + + // If this test breaks, we want to explode, not hang forever. + $future->setTimeout(5); + + $exec_channel = new PhutilExecChannel($future); + $exec_channel->write('quack'); + $exec_channel->closeWriteChannel(); + + // If `closeWriteChannel()` did what it is supposed to, this will just + // echo "quack" and exit with no error code. If the channel did not close, + // this will time out after 5 seconds and throw. + $future->resolvex(); + + $this->assertTrue(true); + } + + +} diff --git a/src/conduit/ConduitClient.php b/src/conduit/ConduitClient.php new file mode 100644 index 00000000..065a42ab --- /dev/null +++ b/src/conduit/ConduitClient.php @@ -0,0 +1,395 @@ +connectionID; + } + + public function __construct($uri) { + $this->uri = new PhutilURI($uri); + if (!strlen($this->uri->getDomain())) { + throw new Exception( + pht("Conduit URI '%s' must include a valid host.", $uri)); + } + $this->host = $this->uri->getDomain(); + } + + /** + * Override the domain specified in the service URI and provide a specific + * host identity. + * + * This can be used to connect to a specific node in a cluster environment. + */ + public function setHost($host) { + $this->host = $host; + return $this; + } + + public function getHost() { + return $this->host; + } + + public function setConduitToken($conduit_token) { + $this->conduitToken = $conduit_token; + return $this; + } + + public function getConduitToken() { + return $this->conduitToken; + } + + public function setOAuthToken($oauth_token) { + $this->oauthToken = $oauth_token; + return $this; + } + + public function callMethodSynchronous($method, array $params) { + return $this->callMethod($method, $params)->resolve(); + } + + public function didReceiveResponse($method, $data) { + if ($method == 'conduit.connect') { + $this->sessionKey = idx($data, 'sessionKey'); + $this->connectionID = idx($data, 'connectionID'); + } + return $data; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function setSigningKeys( + $public_key, + PhutilOpaqueEnvelope $private_key) { + + $this->publicKey = $public_key; + $this->privateKey = $private_key; + return $this; + } + + public function callMethod($method, array $params) { + + $meta = array(); + + if ($this->sessionKey) { + $meta['sessionKey'] = $this->sessionKey; + } + + if ($this->connectionID) { + $meta['connectionID'] = $this->connectionID; + } + + if ($method == 'conduit.connect') { + $certificate = idx($params, 'certificate'); + if ($certificate) { + $token = time(); + $params['authToken'] = $token; + $params['authSignature'] = sha1($token.$certificate); + } + unset($params['certificate']); + } + + if ($this->privateKey && $this->publicKey) { + $meta['auth.type'] = self::AUTH_ASYMMETRIC; + $meta['auth.key'] = $this->publicKey; + $meta['auth.host'] = $this->getHostStringForSignature(); + + $signature = $this->signRequest($method, $params, $meta); + $meta['auth.signature'] = $signature; + } + + if ($this->conduitToken) { + $meta['token'] = $this->conduitToken; + } + + if ($this->oauthToken) { + $meta['access_token'] = $this->oauthToken; + } + + if ($meta) { + $params['__conduit__'] = $meta; + } + + $uri = id(clone $this->uri)->setPath('/api/'.$method); + + $data = array( + 'params' => json_encode($params), + 'output' => 'json', + + // This is a hint to Phabricator that the client expects a Conduit + // response. It is not necessary, but provides better error messages in + // some cases. + '__conduit__' => true, + ); + + // Always use the cURL-based HTTPSFuture, for proxy support and other + // protocol edge cases that HTTPFuture does not support. + $core_future = new HTTPSFuture($uri, $data); + $core_future->addHeader('Host', $this->getHostStringForHeader()); + + $core_future->setMethod('POST'); + $core_future->setTimeout($this->timeout); + + if ($this->username !== null) { + $core_future->setHTTPBasicAuthCredentials( + $this->username, + $this->password); + } + + return id(new ConduitFuture($core_future)) + ->setClient($this, $method); + } + + public function setBasicAuthCredentials($username, $password) { + $this->username = $username; + $this->password = new PhutilOpaqueEnvelope($password); + return $this; + } + + private function getHostStringForHeader() { + return $this->newHostString(false); + } + + private function getHostStringForSignature() { + return $this->newHostString(true); + } + + /** + * Build a string describing the host for this request. + * + * This method builds strings in two modes: with explicit ports for request + * signing (which always include the port number) and with implicit ports + * for use in the "Host:" header of requests (which omit the port number if + * the port is the same as the default port for the protocol). + * + * This implicit port behavior is similar to what browsers do, so it is less + * likely to get us into trouble with webserver configurations. + * + * @param bool True to include the port explicitly. + * @return string String describing the host for the request. + */ + private function newHostString($with_explicit_port) { + $host = $this->getHost(); + + $uri = new PhutilURI($this->uri); + $protocol = $uri->getProtocol(); + $port = $uri->getPort(); + + $implicit_ports = array( + 'https' => 443, + ); + $default_port = 80; + + $implicit_port = idx($implicit_ports, $protocol, $default_port); + + if ($with_explicit_port) { + if (!$port) { + $port = $implicit_port; + } + } else { + if ($port == $implicit_port) { + $port = null; + } + } + + if (!$port) { + $result = $host; + } else { + $result = $host.':'.$port; + } + + return $result; + } + + private function signRequest( + $method, + array $params, + array $meta) { + + $input = self::encodeRequestDataForSignature( + $method, + $params, + $meta); + + $signature = null; + $result = openssl_sign( + $input, + $signature, + $this->privateKey->openEnvelope()); + if (!$result) { + throw new Exception( + pht('Unable to sign Conduit request with signing key.')); + } + + return self::SIGNATURE_CONSIGN_1.base64_encode($signature); + } + + public static function verifySignature( + $method, + array $params, + array $meta, + $openssl_public_key) { + + $auth_type = idx($meta, 'auth.type'); + switch ($auth_type) { + case self::AUTH_ASYMMETRIC: + break; + default: + throw new Exception( + pht( + 'Unable to verify request signature, specified "%s" '. + '("%s") is unknown.', + 'auth.type', + $auth_type)); + } + + $public_key = idx($meta, 'auth.key'); + if (!strlen($public_key)) { + throw new Exception( + pht( + 'Unable to verify request signature, no "%s" present in '. + 'request protocol information.', + 'auth.key')); + } + + $signature = idx($meta, 'auth.signature'); + if (!strlen($signature)) { + throw new Exception( + pht( + 'Unable to verify request signature, no "%s" present '. + 'in request protocol information.', + 'auth.signature')); + } + + $prefix = self::SIGNATURE_CONSIGN_1; + if (strncmp($signature, $prefix, strlen($prefix)) !== 0) { + throw new Exception( + pht( + 'Unable to verify request signature, signature format is not '. + 'known.')); + } + $signature = substr($signature, strlen($prefix)); + + $input = self::encodeRequestDataForSignature( + $method, + $params, + $meta); + + $signature = base64_decode($signature); + + $trap = new PhutilErrorTrap(); + $result = @openssl_verify( + $input, + $signature, + $openssl_public_key); + $err = $trap->getErrorsAsString(); + $trap->destroy(); + + if ($result === 1) { + // Signature is good. + return true; + } else if ($result === 0) { + // Signature is bad. + throw new Exception( + pht( + 'Request signature verification failed: signature is not correct.')); + } else { + // Some kind of error. + if (strlen($err)) { + throw new Exception( + pht( + 'OpenSSL encountered an error verifying the request signature: %s', + $err)); + } else { + throw new Exception( + pht( + 'OpenSSL encountered an unknown error verifying the request: %s', + $err)); + } + } + } + + private static function encodeRequestDataForSignature( + $method, + array $params, + array $meta) { + + unset($meta['auth.signature']); + + $structure = array( + 'method' => $method, + 'protocol' => $meta, + 'parameters' => $params, + ); + + return self::encodeRawDataForSignature($structure); + } + + public static function encodeRawDataForSignature($data) { + $out = array(); + + if (is_array($data)) { + if (phutil_is_natural_list($data)) { + $out[] = 'A'; + $out[] = count($data); + $out[] = ':'; + foreach ($data as $value) { + $out[] = self::encodeRawDataForSignature($value); + } + } else { + ksort($data); + $out[] = 'O'; + $out[] = count($data); + $out[] = ':'; + foreach ($data as $key => $value) { + $out[] = self::encodeRawDataForSignature($key); + $out[] = self::encodeRawDataForSignature($value); + } + } + } else if (is_string($data)) { + $out[] = 'S'; + $out[] = strlen($data); + $out[] = ':'; + $out[] = $data; + } else if (is_int($data)) { + $out[] = 'I'; + $out[] = strlen((string)$data); + $out[] = ':'; + $out[] = (string)$data; + } else if (is_null($data)) { + $out[] = 'N'; + $out[] = ':'; + } else if ($data === true) { + $out[] = 'B1:'; + } else if ($data === false) { + $out[] = 'B0:'; + } else { + throw new Exception( + pht( + 'Unexpected data type in request data: %s.', + gettype($data))); + } + + return implode('', $out); + } + +} diff --git a/src/conduit/ConduitClientException.php b/src/conduit/ConduitClientException.php new file mode 100644 index 00000000..87d93c88 --- /dev/null +++ b/src/conduit/ConduitClientException.php @@ -0,0 +1,16 @@ +errorCode = $code; + } + + public function getErrorCode() { + return $this->errorCode; + } + +} diff --git a/src/conduit/ConduitFuture.php b/src/conduit/ConduitFuture.php new file mode 100644 index 00000000..f6c192b6 --- /dev/null +++ b/src/conduit/ConduitFuture.php @@ -0,0 +1,76 @@ +client = $client; + $this->conduitMethod = $method; + return $this; + } + + public function isReady() { + if ($this->profilerCallID === null) { + $profiler = PhutilServiceProfiler::getInstance(); + + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'conduit', + 'method' => $this->conduitMethod, + 'size' => $this->getProxiedFuture()->getHTTPRequestByteLength(), + )); + } + + return parent::isReady(); + } + + protected function didReceiveResult($result) { + if ($this->profilerCallID !== null) { + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerCallID, + array()); + } + + list($status, $body, $headers) = $result; + if ($status->isError()) { + throw $status; + } + + $raw = $body; + + $shield = 'for(;;);'; + if (!strncmp($raw, $shield, strlen($shield))) { + $raw = substr($raw, strlen($shield)); + } + + $data = null; + try { + $data = phutil_json_decode($raw); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Host returned HTTP/200, but invalid JSON data in response to '. + 'a Conduit method call.'), + $ex); + } + + if ($data['error_code']) { + throw new ConduitClientException( + $data['error_code'], + $data['error_info']); + } + + $result = $data['result']; + + $result = $this->client->didReceiveResponse( + $this->conduitMethod, + $result); + + return $result; + } + +} diff --git a/src/conduit/__tests__/ConduitClientTestCase.php b/src/conduit/__tests__/ConduitClientTestCase.php new file mode 100644 index 00000000..1a0d3100 --- /dev/null +++ b/src/conduit/__tests__/ConduitClientTestCase.php @@ -0,0 +1,34 @@ + array( + 'nothing' => null, + 'emptystring' => '', + ), + 'empty' => array( + ), + 'list' => array( + 15, + 'quack', + true, + false, + ), + 'a' => array( + 'key' => 'value', + 'key2' => 'value2', + ), + ); + + $expect = + 'O4:S1:aO2:S3:keyS5:valueS4:key2S6:value2S5:emptyA0:S4:listA4:I2:15'. + 'S5:quackB1:B0:S1:zO2:S11:emptystringS0:S7:nothingN:'; + + $this->assertEqual( + $expect, + ConduitClient::encodeRawDataForSignature($input)); + } + +} diff --git a/src/console/PhutilConsole.php b/src/console/PhutilConsole.php new file mode 100644 index 00000000..5d646f7c --- /dev/null +++ b/src/console/PhutilConsole.php @@ -0,0 +1,295 @@ +disabledTypes = new PhutilArrayWithDefaultValue(); + } + + + /** + * Get the current console. If there's no active console, a new local console + * is created (see @{method:newLocalConsole} for details). You can change the + * active console with @{method:setConsole}. + * + * @return PhutilConsole Active console. + * @task construct + */ + public static function getConsole() { + if (empty(self::$console)) { + self::setConsole(self::newLocalConsole()); + } + return self::$console; + } + + + /** + * Set the active console. + * + * @param PhutilConsole + * @return void + * @task construct + */ + public static function setConsole(PhutilConsole $console) { + self::$console = $console; + } + + + /** + * Create a new console attached to stdin/stdout/stderr of this process. + * This is how consoles normally work -- for instance, writing output with + * @{method:writeOut} prints directly to stdout. If you don't create a + * console explicitly, a new local console is created for you. + * + * @return PhutilConsole A new console which operates on the pipes of this + * process. + * @task construct + */ + public static function newLocalConsole() { + return self::newConsoleForServer(new PhutilConsoleServer()); + } + + + public static function newConsoleForServer(PhutilConsoleServer $server) { + $console = new PhutilConsole(); + $console->server = $server; + return $console; + } + + + public static function newRemoteConsole() { + $io_channel = new PhutilSocketChannel( + fopen('php://stdin', 'r'), + fopen('php://stdout', 'w')); + $protocol_channel = new PhutilPHPObjectProtocolChannel($io_channel); + + $console = new PhutilConsole(); + $console->channel = $protocol_channel; + + return $console; + } + + +/* -( Interfacing with the User )------------------------------------------ */ + + + public function confirm($prompt, $default = false) { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_CONFIRM) + ->setData( + array( + 'prompt' => $prompt, + 'default' => $default, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function prompt($prompt, $history = '') { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_PROMPT) + ->setData( + array( + 'prompt' => $prompt, + 'history' => $history, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function sendMessage($data) { + $message = id(new PhutilConsoleMessage())->setData($data); + return $this->writeMessage($message); + } + + public function writeOut($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_OUT, $args); + } + + public function writeErr($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_ERR, $args); + } + + public function writeLog($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_LOG, $args); + } + + public function beginRedirectOut() { + // We need as small buffer as possible. 0 means infinite, 1 means 4096 in + // PHP < 5.4.0. + ob_start(array($this, 'redirectOutCallback'), 2); + $this->flushing = true; + } + + public function endRedirectOut() { + $this->flushing = false; + ob_end_flush(); + } + + +/* -( Internals )---------------------------------------------------------- */ + + // Must be public because it is called from output buffering. + public function redirectOutCallback($string) { + if (strlen($string)) { + $this->flushing = false; + $this->writeOut('%s', $string); + $this->flushing = true; + } + return ''; + } + + private function writeTextMessage($type, array $argv) { + + $message = id(new PhutilConsoleMessage()) + ->setType($type) + ->setData($argv); + + $this->writeMessage($message); + + return $this; + } + + private function writeMessage(PhutilConsoleMessage $message) { + if ($this->disabledTypes[$message->getType()]) { + return $this; + } + + if ($this->flushing) { + ob_flush(); + } + if ($this->channel) { + $this->channel->write($message); + $this->channel->flush(); + } else { + $response = $this->server->handleMessage($message); + if ($response) { + $this->messages[] = $response; + } + } + return $this; + } + + private function waitForMessage() { + if ($this->channel) { + $message = $this->channel->waitForMessage(); + } else if ($this->messages) { + $message = array_shift($this->messages); + } else { + throw new Exception( + pht( + '%s called with no messages!', + __FUNCTION__.'()')); + } + + return $message; + } + + public function getServer() { + return $this->server; + } + + private function disableMessageType($type) { + $this->disabledTypes[$type] += 1; + return $this; + } + + private function enableMessageType($type) { + if ($this->disabledTypes[$type] == 0) { + throw new Exception(pht("Message type '%s' is already enabled!", $type)); + } + $this->disabledTypes[$type] -= 1; + return $this; + } + + public function disableOut() { + return $this->disableMessageType(PhutilConsoleMessage::TYPE_OUT); + } + + public function enableOut() { + return $this->enableMessageType(PhutilConsoleMessage::TYPE_OUT); + } + + public function isLogEnabled() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_ENABLED) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_LOG, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function isErrATTY() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_TTY) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_ERR, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function getErrCols() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_COLS) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_ERR, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + +} diff --git a/src/console/PhutilConsoleFormatter.php b/src/console/PhutilConsoleFormatter.php new file mode 100644 index 00000000..d380c961 --- /dev/null +++ b/src/console/PhutilConsoleFormatter.php @@ -0,0 +1,98 @@ + 0, + 'red' => 1, + 'green' => 2, + 'yellow' => 3, + 'blue' => 4, + 'magenta' => 5, + 'cyan' => 6, + 'white' => 7, + 'default' => 9, + ); + + private static $disableANSI; + + public static function disableANSI($disable) { + self::$disableANSI = $disable; + } + + public static function getDisableANSI() { + if (self::$disableANSI === null) { + $term = phutil_utf8_strtolower(getenv('TERM')); + // ansicon enables ANSI support on Windows + if (!$term && getenv('ANSICON')) { + $term = 'ansi'; + } + + if (phutil_is_windows() && $term !== 'cygwin' && $term !== 'ansi') { + self::$disableANSI = true; + } else if (!defined('STDOUT')) { + self::$disableANSI = true; + } else if (function_exists('posix_isatty') && !posix_isatty(STDOUT)) { + self::$disableANSI = true; + } else { + self::$disableANSI = false; + } + } + return self::$disableANSI; + } + + public static function formatString($format /* ... */) { + $args = func_get_args(); + $args[0] = self::interpretFormat($args[0]); + return call_user_func_array('sprintf', $args); + } + + public static function replaceColorCode($matches) { + $codes = self::$colorCodes; + $offset = 30 + $codes[$matches[2]]; + $default = 39; + if ($matches[1] == 'bg') { + $offset += 10; + $default += 10; + } + + return chr(27).'['.$offset.'m'.$matches[3].chr(27).'['.$default.'m'; + } + + public static function interpretFormat($format) { + $colors = implode('|', array_keys(self::$colorCodes)); + + // Sequence should be preceded by start-of-string or non-backslash + // escaping. + $bold_re = '/(?(.*)@sU', + '\3', + $format); + } else { + $esc = chr(27); + $bold = $esc.'[1m'.'\\1'.$esc.'[m'; + $underline = $esc.'[4m'.'\\1'.$esc.'[m'; + $invert = $esc.'[7m'.'\\1'.$esc.'[m'; + + $format = preg_replace($bold_re, $bold, $format); + $format = preg_replace($underline_re, $underline, $format); + $format = preg_replace($invert_re, $invert, $format); + $format = preg_replace_callback( + '@<(fg|bg):('.$colors.')>(.*)@sU', + array(__CLASS__, 'replaceColorCode'), + $format); + } + + // Remove backslash escaping + return preg_replace('/\\\\(\*\*.*\*\*|__.*__|##.*##)/sU', '\1', $format); + } + +} diff --git a/src/console/PhutilConsoleMessage.php b/src/console/PhutilConsoleMessage.php new file mode 100644 index 00000000..21debd0e --- /dev/null +++ b/src/console/PhutilConsoleMessage.php @@ -0,0 +1,39 @@ +data = $data; + return $this; + } + + public function getData() { + return $this->data; + } + + public function setType($type) { + $this->type = $type; + return $this; + } + + public function getType() { + return $this->type; + } + +} diff --git a/src/console/PhutilConsoleMetrics.php b/src/console/PhutilConsoleMetrics.php new file mode 100644 index 00000000..6cd30ed7 --- /dev/null +++ b/src/console/PhutilConsoleMetrics.php @@ -0,0 +1,65 @@ +width = false; + + return $this; + } + + public function getTerminalWidth() { + if ($this->width === false) { + $this->width = $this->computeTerminalWidth(); + } + + return $this->width; + } + + private function computeTerminalWidth() { + if (phutil_is_windows()) { + // TODO: Figure out how to do this on Windows. + return null; + } + + $tmp = new TempFile(); + + // NOTE: We can't just execute this because it won't be connected to a TTY + // if we do. + $err = id(new PhutilExecPassthru('tput cols > %s', $tmp)) + ->resolve(); + $stdout = Filesystem::readFile($tmp); + unset($tmp); + + if ($err) { + return null; + } + + $width = (int)trim($stdout); + if ($width > 0) { + return $width; + } + + return null; + } +} diff --git a/src/console/PhutilConsoleProgressBar.php b/src/console/PhutilConsoleProgressBar.php new file mode 100644 index 00000000..17ac2339 --- /dev/null +++ b/src/console/PhutilConsoleProgressBar.php @@ -0,0 +1,179 @@ +setTotal(count($stuff)); + * + * // As you complete the work, update the progress bar. + * foreach ($stuff as $thing) { + * do_stuff($thing); + * $bar->update(1); + * } + * + * // When complete, mark the work done to clear the bar. + * $bar->done(); + * + * The progress bar attempts to account for various special cases, notably: + * + * - If stderr is not a TTY, the bar will not be drawn (for example, if + * it is being piped to a log file). + * - If the Phutil log output is enabled (usually because `--trace` was + * specified), the bar will not be drawn. + * - The bar will be resized to the width of the console if possible. + * + */ +final class PhutilConsoleProgressBar extends Phobject { + + private $work; + private $done; + private $drawn; + private $console; + private $finished; + private $lastUpdate; + private $quiet = false; + + public function setConsole(PhutilConsole $console) { + $this->console = $console; + return $this; + } + + private function getConsole() { + if ($this->console) { + return $this->console; + } + return PhutilConsole::getConsole(); + } + + public function setTotal($work) { + $this->work = $work; + $this->redraw(); + return $this; + } + + public function setQuiet($quiet) { + $this->quiet = $quiet; + return $this; + } + + public function update($work) { + $this->done += $work; + $this->redraw(); + return $this; + } + + private function redraw() { + if ($this->lastUpdate + 0.1 > microtime(true)) { + // We redrew the bar very recently; skip this update. + return $this; + } + + return $this->draw(); + } + + + /** + * Explicitly redraw the bar. + * + * Normally, the progress bar is automatically redrawn periodically, but + * you may want to force it to draw. + * + * For example, we force a draw after pre-filling the bar when resuming + * large file uploads in `arc upload`. Otherwise, the bar may sit at 0% + * until the first chunk completes. + */ + public function draw() { + if ($this->quiet) { + return; + } + + if ($this->finished) { + return; + } + + if (!$this->work) { + // There's no work to be done, so don't draw the bar. + return; + } + + $console = $this->getConsole(); + if ($console->isErrATTY() === false) { + return; + } + + if ($console->isLogEnabled()) { + return; + } + + // Width of the stuff other than the progress bar itself. + $chrome_width = strlen('[] 100.0% '); + + $char_width = $this->getWidth(); + if ($char_width < $chrome_width) { + return; + } + + $this->lastUpdate = microtime(true); + + if (!$this->drawn) { + $this->drawn = true; + } + + $percent = $this->done / $this->work; + + $max_width = $char_width - $chrome_width; + $bar_width = $percent * $max_width; + $bar_int = floor($bar_width); + $bar_frac = $bar_width - $bar_int; + + $frac_map = array( + '', + '-', + '~', + ); + $frac_char = $frac_map[floor($bar_frac * count($frac_map))]; + + $pattern = "[%-{$max_width}.{$max_width}s] % 5s%%"; + $out = sprintf( + $pattern, + str_repeat('=', $bar_int).$frac_char, + sprintf('%.1f', 100 * $percent)); + + $this->eraseLine(); + $console->writeErr('%s', $out); + + return $this; + } + + public function done($clean_exit = true) { + $console = $this->getConsole(); + if ($this->drawn) { + $this->eraseLine(); + if ($clean_exit) { + $console->writeErr("%s\n", pht('Done.')); + } + } + $this->finished = true; + } + + private function eraseLine() { + $string = str_repeat(' ', $this->getWidth()); + + $console = $this->getConsole(); + $console->writeErr("\r%s\r", $string); + } + + private function getWidth() { + $console = $this->getConsole(); + $width = $console->getErrCols(); + return min(nonempty($width, 78), 78); + } + + public function __destruct() { + $this->done($clean_exit = false); + } + +} diff --git a/src/console/PhutilConsoleServer.php b/src/console/PhutilConsoleServer.php new file mode 100644 index 00000000..8ef10026 --- /dev/null +++ b/src/console/PhutilConsoleServer.php @@ -0,0 +1,158 @@ +getData(); + $type = $message->getType(); + + switch ($type) { + + case PhutilConsoleMessage::TYPE_CONFIRM: + $ok = phutil_console_confirm($data['prompt'], !$data['default']); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_INPUT, + $ok); + + case PhutilConsoleMessage::TYPE_PROMPT: + $response = phutil_console_prompt( + $data['prompt'], + idx($data, 'history')); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_INPUT, + $response); + + case PhutilConsoleMessage::TYPE_OUT: + $this->writeText(STDOUT, $data); + return null; + + case PhutilConsoleMessage::TYPE_ERR: + $this->writeText(STDERR, $data); + return null; + + case PhutilConsoleMessage::TYPE_LOG: + if ($this->enableLog) { + $this->writeText(STDERR, $data); + } + return null; + + case PhutilConsoleMessage::TYPE_ENABLED: + switch ($data['which']) { + case PhutilConsoleMessage::TYPE_LOG: + $enabled = $this->enableLog; + break; + default: + $enabled = true; + break; + } + return $this->buildMessage( + PhutilConsoleMessage::TYPE_IS_ENABLED, + $enabled); + + case PhutilConsoleMessage::TYPE_TTY: + case PhutilConsoleMessage::TYPE_COLS: + switch ($data['which']) { + case PhutilConsoleMessage::TYPE_OUT: + $which = STDOUT; + break; + case PhutilConsoleMessage::TYPE_ERR: + $which = STDERR; + break; + } + switch ($type) { + case PhutilConsoleMessage::TYPE_TTY: + if (function_exists('posix_isatty')) { + $is_a_tty = posix_isatty($which); + } else { + $is_a_tty = null; + } + return $this->buildMessage( + PhutilConsoleMessage::TYPE_IS_TTY, + $is_a_tty); + case PhutilConsoleMessage::TYPE_COLS: + // TODO: This is an approximation which might not be perfectly + // accurate. + $width = phutil_console_get_terminal_width(); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_COL_WIDTH, + $width); + } + break; + + default: + if ($this->handler) { + return call_user_func($this->handler, $message); + } else { + throw new Exception( + pht( + "Received unknown console message of type '%s'.", + $type)); + } + + } + } + + /** + * Set handler called for unknown messages. + * + * @param callable Signature: (PhutilConsoleMessage $message). + */ + public function setHandler($callback) { + $this->handler = $callback; + return $this; + } + + private function buildMessage($type, $data) { + $response = new PhutilConsoleMessage(); + $response->setType($type); + $response->setData($data); + return $response; + } + + public function addExecFutureClient(ExecFuture $future) { + $io_channel = new PhutilExecChannel($future); + $protocol_channel = new PhutilPHPObjectProtocolChannel($io_channel); + $server_channel = new PhutilConsoleServerChannel($protocol_channel); + $io_channel->setStderrHandler(array($server_channel, 'didReceiveStderr')); + return $this->addClient($server_channel); + } + + public function addClient(PhutilConsoleServerChannel $channel) { + $this->clients[] = $channel; + return $this; + } + + public function setEnableLog($enable) { + $this->enableLog = $enable; + return $this; + } + + public function run() { + while ($this->clients) { + PhutilChannel::waitForAny($this->clients); + foreach ($this->clients as $key => $client) { + if (!$client->update()) { + // If the client has exited, remove it from the list of clients. + // We still need to process any remaining buffered I/O. + unset($this->clients[$key]); + } + while ($message = $client->read()) { + $response = $this->handleMessage($message); + if ($response) { + $client->write($response); + } + } + } + } + } + + private function writeText($where, array $argv) { + $text = call_user_func_array('phutil_console_format', $argv); + fprintf($where, '%s', $text); + } + +} diff --git a/src/console/PhutilConsoleServerChannel.php b/src/console/PhutilConsoleServerChannel.php new file mode 100644 index 00000000..3bcb3290 --- /dev/null +++ b/src/console/PhutilConsoleServerChannel.php @@ -0,0 +1,12 @@ +setType(PhutilConsoleMessage::TYPE_ERR) + ->setData(array('%s', $stderr)); + $this->getUnderlyingChannel()->addMessage($message); + } + +} diff --git a/src/console/PhutilConsoleStdinNotInteractiveException.php b/src/console/PhutilConsoleStdinNotInteractiveException.php new file mode 100644 index 00000000..5e300b30 --- /dev/null +++ b/src/console/PhutilConsoleStdinNotInteractiveException.php @@ -0,0 +1,18 @@ +setName('shopping_list') + * ->setLineOffset(15) + * ->editInteractively(); + * + * This will launch the user's $EDITOR to edit the specified '$document', and + * return their changes into '$result'. + * + * @task create Creating a New Editor + * @task edit Editing Interactively + * @task config Configuring Options + */ +final class PhutilInteractiveEditor extends Phobject { + + private $name = ''; + private $content = ''; + private $offset = 0; + private $preferred; + private $fallback; + + +/* -( Creating a New Editor )---------------------------------------------- */ + + + /** + * Constructs an interactive editor, using the text of a document. + * + * @param string Document text. + * @return $this + * + * @task create + */ + public function __construct($content) { + $this->setContent($content); + } + + +/* -( Editing Interactively )----------------------------------------------- */ + + + /** + * Launch an editor and edit the content. The edited content will be + * returned. + * + * @return string Edited content. + * @throws Exception The editor exited abnormally or something untoward + * occurred. + * + * @task edit + */ + public function editInteractively() { + $name = $this->getName(); + $content = $this->getContent(); + + if (phutil_is_windows()) { + $content = str_replace("\n", "\r\n", $content); + } + + $tmp = Filesystem::createTemporaryDirectory('edit.'); + $path = $tmp.DIRECTORY_SEPARATOR.$name; + + try { + Filesystem::writeFile($path, $content); + } catch (Exception $ex) { + Filesystem::remove($tmp); + throw $ex; + } + + $editor = $this->getEditor(); + $offset = $this->getLineOffset(); + + $err = $this->invokeEditor($editor, $path, $offset); + + if ($err) { + // See T13297. On macOS, "vi" and "vim" may exit with errors even though + // the edit succeeded. If the binary is "vi" or "vim" and we get an exit + // code, we perform an additional test on the binary. + $vi_binaries = array( + 'vi' => true, + 'vim' => true, + ); + + $binary = basename($editor); + if (isset($vi_binaries[$binary])) { + // This runs "Q" (an invalid command), then "q" (a valid command, + // meaning "quit"). Vim binaries with behavior that makes them poor + // interactive editors will exit "1". + list($diagnostic_err) = exec_manual('%R +Q +q', $binary); + + // If we get an error back, the binary is badly behaved. Ignore the + // original error and assume it's not meaningful, since it just + // indicates the user made a typo in a command when editing + // interactively, which is routine and unconcerning. + if ($diagnostic_err) { + $err = 0; + } + } + } + + if ($err) { + Filesystem::remove($tmp); + throw new Exception(pht('Editor exited with an error code (#%d).', $err)); + } + + try { + $result = Filesystem::readFile($path); + Filesystem::remove($tmp); + } catch (Exception $ex) { + Filesystem::remove($tmp); + throw $ex; + } + + if (phutil_is_windows()) { + $result = str_replace("\r\n", "\n", $result); + } + + $this->setContent($result); + + return $this->getContent(); + } + + private function invokeEditor($editor, $path, $offset) { + // NOTE: Popular Windows editors like Notepad++ and GitPad do not support + // line offsets, so just ignore the offset feature on Windows. We rarely + // use it anyway. + + $offset_flag = ''; + if ($offset && !phutil_is_windows()) { + $offset = (int)$offset; + if (preg_match('/^mate/', $editor)) { + $offset_flag = csprintf('-l %d', $offset); + } else { + $offset_flag = csprintf('+%d', $offset); + } + } + + $cmd = csprintf( + '%C %C %s', + $editor, + $offset_flag, + $path); + + return phutil_passthru('%C', $cmd); + } + + +/* -( Configuring Options )------------------------------------------------- */ + + + /** + * Set the line offset where the cursor should be positioned when the editor + * opens. By default, the cursor will be positioned at the start of the + * content. + * + * @param int Line number where the cursor should be positioned. + * @return $this + * + * @task config + */ + public function setLineOffset($offset) { + $this->offset = (int)$offset; + return $this; + } + + + /** + * Get the current line offset. See setLineOffset(). + * + * @return int Current line offset. + * + * @task config + */ + public function getLineOffset() { + return $this->offset; + } + + + /** + * Set the document name. Depending on the editor, this may be exposed to + * the user and can give them a sense of what they're editing. + * + * @param string Document name. + * @return $this + * + * @task config + */ + public function setName($name) { + $name = preg_replace('/[^A-Z0-9._-]+/i', '', $name); + $this->name = $name; + return $this; + } + + + /** + * Get the current document name. See @{method:setName} for details. + * + * @return string Current document name. + * + * @task config + */ + public function getName() { + if (!strlen($this->name)) { + return 'untitled'; + } + return $this->name; + } + + + /** + * Set the text content to be edited. + * + * @param string New content. + * @return $this + * + * @task config + */ + public function setContent($content) { + $this->content = $content; + return $this; + } + + + /** + * Retrieve the current content. + * + * @return string + * + * @task config + */ + public function getContent() { + return $this->content; + } + + + /** + * Set the fallback editor program to be used if the env variable $EDITOR + * is not available and there is no `editor` binary in PATH. + * + * @param string Command-line editing program (e.g. 'emacs', 'vi') + * @return $this + * + * @task config + */ + public function setFallbackEditor($editor) { + $this->fallback = $editor; + return $this; + } + + + /** + * Set the preferred editor program. If set, this will override all other + * sources of editor configuration, like $EDITOR. + * + * @param string Command-line editing program (e.g. 'emacs', 'vi') + * @return $this + * + * @task config + */ + public function setPreferredEditor($editor) { + $this->preferred = $editor; + return $this; + } + + + /** + * Get the name of the editor program to use. The value of the environmental + * variable $EDITOR will be used if available; otherwise, the `editor` binary + * if present; otherwise the best editor will be selected. + * + * @return string Command-line editing program. + * + * @task config + */ + public function getEditor() { + if ($this->preferred) { + return $this->preferred; + } + + $editor = getenv('EDITOR'); + if ($editor) { + return $editor; + } + + if ($this->fallback) { + return $this->fallback; + } + + $candidates = array('editor', 'nano', 'sensible-editor', 'vi'); + + foreach ($candidates as $cmd) { + if (Filesystem::binaryExists($cmd)) { + return $cmd; + } + } + + throw new Exception( + pht( + 'Unable to launch an interactive text editor. Set the %s '. + 'environment variable to an appropriate editor.', + 'EDITOR')); + } + +} diff --git a/src/console/__tests__/PhutilConsoleWrapTestCase.php b/src/console/__tests__/PhutilConsoleWrapTestCase.php new file mode 100644 index 00000000..98297da4 --- /dev/null +++ b/src/console/__tests__/PhutilConsoleWrapTestCase.php @@ -0,0 +1,48 @@ +assertEqual( + Filesystem::readFile($dir.$file.'.expect'), + phutil_console_wrap(Filesystem::readFile($dir.$file)), + $file); + } + } + } + + public function testConsoleWrap() { + $this->assertEqual( + phutil_console_format( + "** %s ** abc abc abc abc abc abc abc abc abc abc ". + "abc abc abc abc abc abc abc\nabc abc abc abc abc abc abc abc abc ". + "abc abc!", + pht('ERROR')), + phutil_console_wrap( + phutil_console_format( + '** %s ** abc abc abc abc abc abc abc abc abc abc '. + 'abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc '. + 'abc abc!', + pht('ERROR'))), + pht('ANSI escape sequences should not contribute toward wrap width.')); + } + + public function testWrapIndent() { + $turtles = <<assertEqual( + $turtles, + phutil_console_wrap( + rtrim(str_repeat('turtle ', 20)), + $indent = 20)); + } + +} diff --git a/src/console/__tests__/wrap/long.txt b/src/console/__tests__/wrap/long.txt new file mode 100644 index 00000000..e3052232 --- /dev/null +++ b/src/console/__tests__/wrap/long.txt @@ -0,0 +1 @@ +Say MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM every day. diff --git a/src/console/__tests__/wrap/long.txt.expect b/src/console/__tests__/wrap/long.txt.expect new file mode 100644 index 00000000..ecd42dbc --- /dev/null +++ b/src/console/__tests__/wrap/long.txt.expect @@ -0,0 +1,3 @@ +Say +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +every day. diff --git a/src/console/__tests__/wrap/newlines.txt b/src/console/__tests__/wrap/newlines.txt new file mode 100644 index 00000000..a05d75c6 --- /dev/null +++ b/src/console/__tests__/wrap/newlines.txt @@ -0,0 +1,10 @@ +Curabitur gravida lectus odio, nec dictum sapien. +Donec condimentum purus at est aliquam lobortis. +Sed facilisis justo a purus interdum at venenatis eros laoreet. +Quisque ac odio vitae erat congue elementum. +Etiam semper venenatis massa vitae faucibus. +Praesent eget eros tortor. +Vestibulum in pharetra massa. +Integer risus justo, malesuada auctor feugiat venenatis, viverra iaculis est. +Praesent a tortor et dui tempus egestas. +Sed lacinia diam id velit tincidunt sagittis. diff --git a/src/console/__tests__/wrap/newlines.txt.expect b/src/console/__tests__/wrap/newlines.txt.expect new file mode 100644 index 00000000..a05d75c6 --- /dev/null +++ b/src/console/__tests__/wrap/newlines.txt.expect @@ -0,0 +1,10 @@ +Curabitur gravida lectus odio, nec dictum sapien. +Donec condimentum purus at est aliquam lobortis. +Sed facilisis justo a purus interdum at venenatis eros laoreet. +Quisque ac odio vitae erat congue elementum. +Etiam semper venenatis massa vitae faucibus. +Praesent eget eros tortor. +Vestibulum in pharetra massa. +Integer risus justo, malesuada auctor feugiat venenatis, viverra iaculis est. +Praesent a tortor et dui tempus egestas. +Sed lacinia diam id velit tincidunt sagittis. diff --git a/src/console/__tests__/wrap/plain.txt b/src/console/__tests__/wrap/plain.txt new file mode 100644 index 00000000..9d4677a5 --- /dev/null +++ b/src/console/__tests__/wrap/plain.txt @@ -0,0 +1 @@ +Morbi auctor commodo libero, vel interdum leo commodo nec. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum dictum pretium lorem ac commodo. Vivamus ullamcorper neque et velit interdum ornare. Fusce adipiscing metus non sem porttitor scelerisque. Aliquam mattis sem non tortor semper eget fermentum libero faucibus. Nam vulputate mauris at nunc bibendum mollis. Aliquam mattis rutrum turpis a fringilla. Mauris quis nulla eget nunc mollis pharetra id sit amet arcu. Nam ut urna in ligula facilisis scelerisque in nec massa. Morbi posuere, turpis in bibendum fringilla, augue felis gravida est, vitae convallis quam nunc at tellus. diff --git a/src/console/__tests__/wrap/plain.txt.expect b/src/console/__tests__/wrap/plain.txt.expect new file mode 100644 index 00000000..3938db8e --- /dev/null +++ b/src/console/__tests__/wrap/plain.txt.expect @@ -0,0 +1,9 @@ +Morbi auctor commodo libero, vel interdum leo commodo nec. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum +dictum pretium lorem ac commodo. Vivamus ullamcorper neque et velit interdum +ornare. Fusce adipiscing metus non sem porttitor scelerisque. Aliquam mattis +sem non tortor semper eget fermentum libero faucibus. Nam vulputate mauris at +nunc bibendum mollis. Aliquam mattis rutrum turpis a fringilla. Mauris quis +nulla eget nunc mollis pharetra id sit amet arcu. Nam ut urna in ligula +facilisis scelerisque in nec massa. Morbi posuere, turpis in bibendum +fringilla, augue felis gravida est, vitae convallis quam nunc at tellus. diff --git a/src/console/__tests__/wrap/trailing-space-prompt.txt b/src/console/__tests__/wrap/trailing-space-prompt.txt new file mode 100644 index 00000000..8677ea84 --- /dev/null +++ b/src/console/__tests__/wrap/trailing-space-prompt.txt @@ -0,0 +1 @@ +Do you want to do stuff? [y/N] diff --git a/src/console/__tests__/wrap/trailing-space-prompt.txt.expect b/src/console/__tests__/wrap/trailing-space-prompt.txt.expect new file mode 100644 index 00000000..8677ea84 --- /dev/null +++ b/src/console/__tests__/wrap/trailing-space-prompt.txt.expect @@ -0,0 +1 @@ +Do you want to do stuff? [y/N] diff --git a/src/console/__tests__/wrap/utf8.txt b/src/console/__tests__/wrap/utf8.txt new file mode 100644 index 00000000..731d1557 --- /dev/null +++ b/src/console/__tests__/wrap/utf8.txt @@ -0,0 +1 @@ +☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/__tests__/wrap/utf8.txt.expect b/src/console/__tests__/wrap/utf8.txt.expect new file mode 100644 index 00000000..182cf5e3 --- /dev/null +++ b/src/console/__tests__/wrap/utf8.txt.expect @@ -0,0 +1,2 @@ +☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ +☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/format.php b/src/console/format.php new file mode 100644 index 00000000..a4fa98d5 --- /dev/null +++ b/src/console/format.php @@ -0,0 +1,209 @@ += $min && $selection <= $max) { + return $selection; + } + } + } while (true); +} + +function phutil_console_prompt($prompt, $history = '') { + echo "\n\n"; + $prompt = phutil_console_wrap($prompt.' ', 4); + + try { + phutil_console_require_tty(); + } catch (PhutilConsoleStdinNotInteractiveException $ex) { + // Throw after echoing the prompt so the user has some idea what happened. + echo $prompt; + throw $ex; + } + + // `escapeshellarg` makes double quotes in the command below disappear on + // Windows, which breaks prompts when using history. See T6348 + $use_history = !phutil_is_windows(); + if ($history == '') { + $use_history = false; + } else { + // Test if bash is available by seeing if it can run `true`. + list($err) = exec_manual('bash -c %s', 'true'); + if ($err) { + $use_history = false; + } + } + + if (!$use_history) { + echo $prompt; + $response = fgets(STDIN); + } else { + // There's around 0% chance that readline() is available directly in PHP, + // so we're using bash/read/history instead. + $command = csprintf( + 'bash -c %s', + csprintf( + 'history -r %s 2>/dev/null; '. + 'read -e -p %s; '. + 'echo "$REPLY"; '. + 'history -s "$REPLY" 2>/dev/null; '. + 'history -w %s 2>/dev/null', + $history, + $prompt, + $history)); + + // execx() doesn't work with input, phutil_passthru() doesn't return output. + $response = shell_exec($command); + } + + return rtrim($response, "\r\n"); +} + + +/** + * Soft wrap text for display on a console, respecting UTF8 character boundaries + * and ANSI color escape sequences. + * + * @param string Text to wrap. + * @param int Optional indent level. + * @param bool True to also indent the first line. + * @return string Wrapped text. + */ +function phutil_console_wrap($text, $indent = 0, $with_prefix = true) { + $lines = array(); + + $width = (78 - $indent); + $esc = chr(27); + + $break_pos = null; + $len_after_break = 0; + $line_len = 0; + + $line = array(); + $lines = array(); + + $vector = phutil_utf8v($text); + $vector_len = count($vector); + for ($ii = 0; $ii < $vector_len; $ii++) { + $chr = $vector[$ii]; + + // If this is an ANSI escape sequence for a color code, just consume it + // without counting it toward the character limit. This prevents lines + // with bold/color on them from wrapping too early. + if ($chr == $esc) { + for ($ii; $ii < $vector_len; $ii++) { + $line[] = $vector[$ii]; + if ($vector[$ii] == 'm') { + break; + } + } + continue; + } + + $line[] = $chr; + + ++$line_len; + ++$len_after_break; + + if ($line_len > $width) { + if ($break_pos !== null) { + $slice = array_slice($line, 0, $break_pos); + while (count($slice) && end($slice) == ' ') { + array_pop($slice); + } + $slice[] = "\n"; + $lines[] = $slice; + $line = array_slice($line, $break_pos); + + $line_len = $len_after_break; + $len_after_break = 0; + $break_pos = null; + } + } + + if ($chr == ' ') { + $break_pos = count($line); + $len_after_break = 0; + } + + if ($chr == "\n") { + $lines[] = $line; + $line = array(); + + $len_after_break = 0; + $line_len = 0; + $break_pos = null; + } + } + + if ($line) { + if ($line) { + $lines[] = $line; + } + } + + $pre = null; + if ($indent) { + $pre = str_repeat(' ', $indent); + } + + foreach ($lines as $idx => $line) { + if ($idx == 0 && !$with_prefix) { + $prefix = null; + } else { + $prefix = $pre; + } + + $lines[$idx] = $prefix.implode('', $line); + } + + return implode('', $lines); +} + + +function phutil_console_require_tty() { + if (function_exists('posix_isatty') && !posix_isatty(STDIN)) { + throw new PhutilConsoleStdinNotInteractiveException(); + } +} + + +/** + * Determine the width of the terminal, if possible. Returns `null` on failure. + * + * @return int|null Terminal width in characters, or null on failure. + */ +function phutil_console_get_terminal_width() { + return PhutilConsoleMetrics::getDefaultConsole() + ->getTerminalWidth(); +} diff --git a/src/console/view/PhutilConsoleBlock.php b/src/console/view/PhutilConsoleBlock.php new file mode 100644 index 00000000..ae60270b --- /dev/null +++ b/src/console/view/PhutilConsoleBlock.php @@ -0,0 +1,48 @@ +items[] = array( + 'type' => 'paragraph', + 'item' => $item, + ); + return $this; + } + + public function addList(PhutilConsoleList $list) { + $this->items[] = array( + 'type' => 'list', + 'item' => $list, + ); + return $this; + } + + protected function drawView() { + $output = array(); + + foreach ($this->items as $spec) { + $type = $spec['type']; + $item = $spec['item']; + + switch ($type) { + case 'paragraph': + $item = array( + tsprintf('%s', $item)->applyWrap(), + "\n", + ); + break; + case 'list': + $item = $item; + break; + } + + $output[] = $item; + } + + return $this->drawLines($output); + } + +} diff --git a/src/console/view/PhutilConsoleError.php b/src/console/view/PhutilConsoleError.php new file mode 100644 index 00000000..7daa899e --- /dev/null +++ b/src/console/view/PhutilConsoleError.php @@ -0,0 +1,10 @@ +items[] = $item; + return $this; + } + + public function addItems(array $items) { + foreach ($items as $item) { + $this->addItem($item); + } + return $this; + } + + public function getItems() { + return $this->items; + } + + public function setBullet($bullet) { + $this->bullet = $bullet; + return $this; + } + + public function getBullet() { + return $this->bullet; + } + + public function setWrap($wrap) { + $this->wrap = $wrap; + return $this; + } + + protected function drawView() { + $indent_depth = 6; + $indent_string = str_repeat(' ', $indent_depth); + + if ($this->bullet !== null) { + $bullet = $this->bullet.' '; + $indent_depth = $indent_depth + phutil_utf8_console_strlen($bullet); + } else { + $bullet = ''; + } + + $output = array(); + foreach ($this->getItems() as $item) { + if ($this->wrap) { + $item = tsprintf('%s', $item) + ->applyIndent($indent_depth, false); + } + + $output[] = $indent_string.$bullet.$item; + } + + return $this->drawLines($output); + } + +} diff --git a/src/console/view/PhutilConsoleLogLine.php b/src/console/view/PhutilConsoleLogLine.php new file mode 100644 index 00000000..cdbd42a1 --- /dev/null +++ b/src/console/view/PhutilConsoleLogLine.php @@ -0,0 +1,24 @@ +kind = $kind; + $this->message = $message; + } + + protected function drawView() { + $color = $this->getLogLineColor(); + + return tsprintf( + "** %s ** %s\n", + $this->kind, + $this->message); + } + +} diff --git a/src/console/view/PhutilConsoleSkip.php b/src/console/view/PhutilConsoleSkip.php new file mode 100644 index 00000000..b2593133 --- /dev/null +++ b/src/console/view/PhutilConsoleSkip.php @@ -0,0 +1,10 @@ +addColumn('id', array('title' => 'ID', 'align' => 'right')) + * ->addColumn('name', array('title' => 'Username', 'align' => 'center')) + * ->addColumn('email', array('title' => 'Email Address')) + * + * ->addRow(array( + * 'id' => 12345, + * 'name' => 'alicoln', + * 'email' => 'abraham@lincoln.com', + * )) + * ->addRow(array( + * 'id' => 99999999, + * 'name' => 'jbloggs', + * 'email' => 'joe@bloggs.com', + * )) + * + * ->setBorders(true) + * ->draw(); + */ +final class PhutilConsoleTable extends PhutilConsoleView { + + private $columns = array(); + private $data = array(); + private $widths = array(); + private $borders = false; + private $padding = 1; + private $showHeader = true; + + const ALIGN_LEFT = 'left'; + const ALIGN_CENTER = 'center'; + const ALIGN_RIGHT = 'right'; + + +/* -( Configuration )------------------------------------------------------ */ + + + public function setBorders($borders) { + $this->borders = $borders; + return $this; + } + + public function setPadding($padding) { + $this->padding = $padding; + return $this; + } + + public function setShowHeader($show_header) { + $this->showHeader = $show_header; + return $this; + } + + +/* -( Data )--------------------------------------------------------------- */ + + public function addColumn($key, array $column) { + PhutilTypeSpec::checkMap($column, array( + 'title' => 'string', + 'align' => 'optional string', + )); + $this->columns[$key] = $column; + return $this; + } + + public function addColumns(array $columns) { + foreach ($columns as $key => $column) { + $this->addColumn($key, $column); + } + return $this; + } + + public function addRow(array $data) { + $this->data[] = $data; + + foreach ($data as $key => $value) { + $this->widths[$key] = max( + idx($this->widths, $key, 0), + phutil_utf8_console_strlen($value)); + } + + return $this; + } + + +/* -( Drawing )------------------------------------------------------------ */ + + protected function drawView() { + return $this->drawLines( + array_merge( + $this->getHeader(), + $this->getBody(), + $this->getFooter())); + } + + private function getHeader() { + $output = array(); + + if ($this->borders) { + $output[] = $this->formatSeparator('='); + } + + if (!$this->showHeader) { + return $output; + } + + $columns = array(); + foreach ($this->columns as $key => $column) { + $title = tsprintf('**%s**', $column['title']); + + if ($this->shouldAddSpacing($key, $column)) { + $title = $this->alignString( + $title, + $this->getWidth($key), + idx($column, 'align', self::ALIGN_LEFT)); + } + + $columns[] = $title; + } + + $output[] = $this->formatRow($columns); + + if ($this->borders) { + $output[] = $this->formatSeparator('='); + } + + return $output; + } + + private function getBody() { + $output = array(); + + foreach ($this->data as $data) { + $columns = array(); + + foreach ($this->columns as $key => $column) { + if (!$this->shouldAddSpacing($key, $column)) { + $columns[] = idx($data, $key, ''); + } else { + $columns[] = $this->alignString( + idx($data, $key, ''), + $this->getWidth($key), + idx($column, 'align', self::ALIGN_LEFT)); + } + } + + $output[] = $this->formatRow($columns); + } + + return $output; + } + + private function getFooter() { + $output = array(); + + if ($this->borders) { + $columns = array(); + + foreach ($this->getColumns() as $column) { + $columns[] = str_repeat('=', $this->getWidth($column)); + } + + $output[] = array( + '+', + $this->implode('+', $columns), + '+', + ); + } + + return $output; + } + + +/* -( Internals )---------------------------------------------------------- */ + + /** + * Returns if the specified column should have spacing added. + * + * @return bool + */ + private function shouldAddSpacing($key, $column) { + if (!$this->borders) { + if (last_key($this->columns) === $key) { + if (idx($column, 'align', self::ALIGN_LEFT) === self::ALIGN_LEFT) { + // Don't add extra spaces to this column since it's the last column, + // left aligned, and we're not showing borders. This prevents + // unnecessary empty lines from appearing when the extra spaces + // wrap around the terminal. + return false; + } + } + } + + return true; + } + + /** + * Returns the column IDs. + * + * @return list + */ + protected function getColumns() { + return array_keys($this->columns); + } + + /** + * Get the width of a specific column, including padding. + * + * @param string + * @return int + */ + protected function getWidth($key) { + $width = max( + idx($this->widths, $key), + phutil_utf8_console_strlen( + idx(idx($this->columns, $key, array()), 'title', ''))); + + return $width + 2 * $this->padding; + } + + protected function alignString($string, $width, $align) { + $num_padding = $width - + (2 * $this->padding) - phutil_utf8_console_strlen($string); + + switch ($align) { + case self::ALIGN_LEFT: + $num_left_padding = 0; + $num_right_padding = $num_padding; + break; + + case self::ALIGN_CENTER: + $num_left_padding = (int)($num_padding / 2); + $num_right_padding = $num_padding - $num_left_padding; + break; + + case self::ALIGN_RIGHT: + $num_left_padding = $num_padding; + $num_right_padding = 0; + break; + } + + $left_padding = str_repeat(' ', $num_left_padding); + $right_padding = str_repeat(' ', $num_right_padding); + + return array( + $left_padding, + $string, + $right_padding, + ); + } + + /** + * Format cells into an entire row. + * + * @param list + * @return string + */ + protected function formatRow(array $columns) { + $padding = str_repeat(' ', $this->padding); + + if ($this->borders) { + $separator = $padding.'|'.$padding; + return array( + '|'.$padding, + $this->implode($separator, $columns), + $padding.'|', + ); + } else { + return $this->implode($padding, $columns); + } + } + + protected function formatSeparator($string) { + $columns = array(); + + if ($this->borders) { + $separator = '+'; + } else { + $separator = ''; + } + + foreach ($this->getColumns() as $column) { + $columns[] = str_repeat($string, $this->getWidth($column)); + } + + return array( + $separator, + $this->implode($separator, $columns), + $separator, + ); + } + +} diff --git a/src/console/view/PhutilConsoleView.php b/src/console/view/PhutilConsoleView.php new file mode 100644 index 00000000..85f5b8f9 --- /dev/null +++ b/src/console/view/PhutilConsoleView.php @@ -0,0 +1,112 @@ +console = $console; + return $this; + } + + final public function getConsole() { + if ($this->console) { + return $this->console; + } + return PhutilConsole::getConsole(); + } + + + /** + * Draw a view to the console. + * + * @return this + * @task draw + */ + final public function draw() { + $string = $this->drawConsoleString(); + + $console = $this->getConsole(); + $console->writeOut('%s', $string); + + return $this; + } + + + /** + * Draw a view to a string and return it. + * + * @return string Console-printable string. + * @task draw + */ + final public function drawConsoleString() { + $view = $this->drawView(); + $parts = $this->reduceView($view); + + $out = array(); + foreach ($parts as $part) { + $out[] = PhutilTerminalString::escapeStringValue($part, true); + } + + return implode('', $out); + } + + + /** + * Reduce a view to a list of simple, unnested parts. + * + * @param wild Any drawable view. + * @return list List of unnested drawables. + * @task draw + */ + private function reduceView($view) { + if ($view instanceof PhutilConsoleView) { + $view = $view->drawView(); + return $this->reduceView($view); + } + + if (is_array($view)) { + $parts = array(); + foreach ($view as $item) { + foreach ($this->reduceView($item) as $part) { + $parts[] = $part; + } + } + return $parts; + } + + return array($view); + } + +/* -( Drawing Utilities )-------------------------------------------------- */ + + + /** + * @param list List of views, one per line. + * @return wild Each view rendered on a separate line. + */ + final protected function drawLines(array $parts) { + $result = array(); + foreach ($parts as $part) { + if ($part !== null) { + $result[] = $part; + $result[] = "\n"; + } + } + + return $result; + } + + final protected function implode($separator, array $items) { + $result = array(); + foreach ($items as $item) { + $result[] = $item; + $result[] = $separator; + } + array_pop($result); + return $result; + } + +} diff --git a/src/console/view/PhutilConsoleWarning.php b/src/console/view/PhutilConsoleWarning.php new file mode 100644 index 00000000..d6994b5c --- /dev/null +++ b/src/console/view/PhutilConsoleWarning.php @@ -0,0 +1,10 @@ +resolvex(); + +@{class:ExecFuture} is a @{class:Future}, and can be used with constructs like +@{class:FutureIterator} to achieve and manage parallelism. See +@{article:Using Futures} for general information on how to use futures in +libphutil. + +In addition to futures-based parallelism, you can set a timeout on an +@{class:ExecFuture}, which will kill the command if it takes longer than the +specified number of seconds to execute: + + $future->setTimeout(30); + +If the command runs longer than the timeout, the process will be killed and the +future will resolve with a failure code (`ExecFuture::TIMED_OUT_EXIT_CODE`). + +You can also write to the stdin of a process by using the +@{method:ExecFuture::write} method. + + $future = new ExecFuture('bc'); + $future->write('2+2'); + list($stdout) = $future->resolvex(); + +See @{class:ExecFuture} for complete capability documentation. diff --git a/src/docs/article/core_quick_reference.diviner b/src/docs/article/core_quick_reference.diviner new file mode 100644 index 00000000..9f14e2bf --- /dev/null +++ b/src/docs/article/core_quick_reference.diviner @@ -0,0 +1,45 @@ +@title Core Utilities Quick Reference +@group util + +Summary of libphutil core utilities. + += Overview = + +This document provides a brief overview of the libphutil core utilities. + += Language Capabilities = + +Functions @{function:id}, @{function:head} and @{function:newv} address +language grammar and implementation limitations. + +You can efficiently merge a vector of arrays with @{function:array_mergev}. + +Functions @{function:head}, @{function:last}, @{function:head_key} and +@{function:last_key} let you access the first or last elements of an array +without raising warnings. + +You can combine an array with itself safely with @{function:array_fuse}. + += Default Value Selection = + +Functions @{function:idx}, @{function:nonempty} and @{function:coalesce} help +you to select default values when keys or parameters are missing or empty. + += Array and Object Manipulation = + +Functions @{function:ipull}, @{function:igroup}, @{function:isort} and +@{function:ifilter} (**i** stands for **index**) simplify common data +manipulations applied to lists of arrays. + +Functions @{function:mpull}, @{function:mgroup}, @{function:msort} and +@{function:mfilter} (**m** stands for **method**) provide the same capabilities +for lists of objects. + +@{function:array_select_keys} allows you to choose or reorder keys from a +dictionary. + += Lunar Phases = + +@{class:PhutilLunarPhase} calculates lunar phases, allowing you to harden an +application against threats from werewolves, werebears, and other +werecreatures. diff --git a/src/docs/article/developing_xhpast.diviner b/src/docs/article/developing_xhpast.diviner new file mode 100644 index 00000000..119cdedc --- /dev/null +++ b/src/docs/article/developing_xhpast.diviner @@ -0,0 +1,17 @@ +@title Developing XHPAST +@group xhpast + +Instructions for developing XHPAST. + += XHPAST Development Builds = + +To develop XHPAST, you need to install flex and bison. These install out of +most package systems, with the caveat that you need flex 2.3.35 (which is NEWER +than flex 2.3.4) and some package systems don't have it yet. If this is the +case for you, you can grab the source here: + + http://flex.sourceforge.net/ + +When building, run `make scanner parser all` instead of `make` to build the +entire toolchain. By default the scanner and parser are not rebuild, to avoid +requiring normal users to install flex and bison. diff --git a/src/docs/article/overview.diviner b/src/docs/article/overview.diviner new file mode 100644 index 00000000..2933b8db --- /dev/null +++ b/src/docs/article/overview.diviner @@ -0,0 +1,57 @@ +@title libphutil Overview +@group overview + +This document provides a high-level introduction to libphutil. + += Overview = + +**libphutil** (pronounced as "lib-futile", like the English word //futile//) is +a collection of PHP utility classes and functions. Most code in the library is +general-purpose, and makes it easier to build applications in PHP. + +libphutil is principally the shared library for +[[ http://www.phabricator.org | Phabricator ]] and its CLI **Arcanist**, but is +suitable for inclusion in other projects. In particular, some of the classes +provided in this library vastly improve the state of common operations in PHP, +like executing system commands. + +libphutil is developed and maintained by +[[ http://www.phacility.com/ | Phacility ]]. Some of the code in this library +was originally developed at Facebook, and parts of it appear in the core +libraries for . + += Loading libphutil = + +To include libphutil in another project, include the +`src/__phutil_library_init__.php` file: + + require_once 'path/to/libphutil/src/__phutil_library_init__.php'; + +This loads global functions and registers an autoload function with +`spl_autoload_register()`, so you can also use classes. + += Major Components = + +Some of the major components of libphutil are: + + - **Core Utilities**: a collection of useful functions like @{function:ipull} + which simplify common data manipulation; + - **Filesystem**: classes like @{class:Filesystem} which provide a strict API + for filesystem access and throw exceptions on failure, making it easier to + write robust code which interacts with files; + - **Command Execution**: libphutil provides a powerful system command + primitive in @{class:ExecFuture} which makes it far easier to write + command-line scripts which execute system commands + (see @{article:Command Execution}); + - **@{function:xsprintf}**: allows you to define `sprintf()`-style functions + which use custom conversions; and + - **Library System**: an introspectable, inventoried system for organizing + PHP code and managing dependencies, supported by static analysis. + += Extending and Contributing = + +Information on extending and contributing to libphutil is available in the +Phabricator documentation: + + - To get started as a contributor, see @{article@phabcontrib:Contributor + Introduction}. diff --git a/src/docs/article/using_futures.diviner b/src/docs/article/using_futures.diviner new file mode 100644 index 00000000..5df44461 --- /dev/null +++ b/src/docs/article/using_futures.diviner @@ -0,0 +1,90 @@ +@title Using Futures +@group future + +Overview of how futures work in libphutil. + + += Overview = + +Futures (also called "Promises") are objects which represent the result of some +pending computation (like executing a command or making a request to another +server), but don't actually hold that result until the computation finishes. +They are used to simplify parallel programming, since you can pass the future +around as a representation for the real result while the real result is being +computed in the background. When the object is asked to return the actual +result, it blocks until the result is available. + +libphutil provides a number of future-based APIs, as they strike a good balance +between ease of use and power for many of the domains where PHP is a reasonable +language choice. + +Each type of future is used to do a different type of computation (for instance, +@{class:ExecFuture} executes system commands while @{class:HTTPFuture} executes +HTTP requests), but all of them behave in a basically similar way and can be +manipulated with the same top-level constructs. + + += Basics = + +You create a future by instantiating the relevant class and ask it to return the +result by calling `resolve()`: + + $gzip_future = new ExecFuture('gzip %s', $some_file); + $gzip_future->start(); + + // The future is now executing in the background, and you can continue + // doing computation in this process by putting code here. + + list($err, $stdout, $stderr) = $gzip_future->resolve(); + +When you call `resolve()`, the future blocks until the result is ready. You +can test if a future's result is ready by calling `isReady()`: + + $is_ready = $gzip_future->isReady(); + +Being "ready" indicates that the future's computation has completed and it will +not need to block when you call `resolve()`. + +Note that when you instantiate a future, it does not immediately initiate +computation. You must call `start()`, `isReady()` or `resolve()` to +activate it. If you simply call `resolve()` it will start, block until it is +complete, and then return the result, acting in a completely synchronous way. + +See @{article:Command Execution} for more detailed documentation on how to +execute system commands with libphutil. + + += Managing Multiple Futures = + +Commonly, you may have many similar tasks you wish to parallelize: instead of +compressing one file, you want to compress several files. You can use the +@{class:FutureIterator} class to manage multiple futures. + + $futures = array(); + foreach ($files as $file) { + $futures[$file] = new ExecFuture("gzip %s", $file); + } + foreach (new FutureIterator($futures) as $file => $future) { + list($err, $stdout, $stderr) = $future->resolve(); + if (!$err) { + echo "Compressed {$file}...\n"; + } else { + echo "Failed to compress {$file}!\n"; + } + } + +@{class:FutureIterator} takes a list of futures and runs them in parallel, +**returning them in the order they resolve, NOT the original list order**. This +allows your program to begin any follow-up computation as quickly as possible: +if the slowest future in the list happens to be the first one, you can finish +processing all the other futures while waiting for it. + +You can also limit how many futures you want to run at once. For instance, to +process no more than 4 files simultaneously: + + foreach (id(new FutureIterator($futures))->limit(4) as $file => $future) { + // ... + } + +Consult the @{class:FutureIterator} documentation for detailed information on +class capabilities. diff --git a/src/docs/book/libphutil.book b/src/docs/book/libphutil.book new file mode 100644 index 00000000..c37b91a4 --- /dev/null +++ b/src/docs/book/libphutil.book @@ -0,0 +1,87 @@ +{ + "name": "libphutil", + "title": "libphutil Technical Documentation", + "short": "libphutil Tech Docs", + "preface": "Technical documentation for developers using libphutil.", + "root": "../../../", + "uri.source": + "https://secure.phabricator.com/diffusion/PHU/browse/master/%f$%l", + "rules": { + "(\\.diviner$)": "DivinerArticleAtomizer", + "(\\.php$)": "DivinerPHPAtomizer" + }, + "exclude": [ + "(^externals/)", + "(^resources/)", + "(^scripts/)", + "(^support/)" + ], + "groups": { + "overview": { + "name": "libphutil Overview" + }, + "aphront": { + "name": "Aphront", + "include": "(^src/aphront/)" + }, + "auth": { + "name": "Authentication", + "include": "(^src/auth/)" + }, + "conduit": { + "name": "Conduit", + "include": "(^src/conduit/)" + }, + "console": { + "name": "Console", + "include": "(^src/console/)" + }, + "daemon": { + "name": "Daemons", + "include": "(^src/daemon/)" + }, + "error": { + "name": "Errors", + "include": "(^src/error/)" + }, + "filesystem": { + "name": "Filesystem", + "include": "(^src/filesystem/)" + }, + "future": { + "name": "Futures", + "include": "(^src/future/)" + }, + "internationalization": { + "name": "Internationalization", + "include": "(^src/internationalization/)" + }, + "lexer": { + "name": "Lexers", + "include": "(^src/lexer/)" + }, + "library": { + "name": "libphutil Library System", + "include": "(^src/moduleutils/)" + }, + "parser": { + "name": "Parsers", + "include": "(^src/parser/)" + }, + "phage": { + "name": "Phage", + "include": "(^src/phage/)" + }, + "remarkup": { + "name": "Remarkup", + "include": "(^src/markup/)" + }, + "utf8": { + "name": "Handling Unicode and UTF-8" + }, + "util": { + "name": "Core Utilities", + "include": "(^src/utils/)" + } + } +} diff --git a/src/error/PhutilAggregateException.php b/src/error/PhutilAggregateException.php new file mode 100644 index 00000000..c76b7437 --- /dev/null +++ b/src/error/PhutilAggregateException.php @@ -0,0 +1,55 @@ +doSomething(); + * $success = true; + * break; + * } catch (Exception $ex) { + * $exceptions[get_class($engine)] = $ex; + * } + * } + * + * if (!$success) { + * throw new PhutilAggregateException("All engines failed:", $exceptions); + * } + * + * @concrete-extensible + */ +class PhutilAggregateException extends Exception { + + private $exceptions = array(); + + public function __construct($message, array $other_exceptions) { + // We don't call assert_instances_of($other_exceptions, 'Exception') to not + // throw another exception in this exception. + + $this->exceptions = $other_exceptions; + + $full_message = array(); + $full_message[] = $message; + foreach ($other_exceptions as $key => $exception) { + $ex_message = + (is_string($key) ? $key.': ' : ''). + get_class($exception).': '. + $exception->getMessage(); + $ex_message = ' - '.str_replace("\n", "\n ", $ex_message); + + $full_message[] = $ex_message; + } + + parent::__construct(implode("\n", $full_message), count($other_exceptions)); + } + + public function getExceptions() { + return $this->exceptions; + } + +} diff --git a/src/error/PhutilErrorHandler.php b/src/error/PhutilErrorHandler.php new file mode 100644 index 00000000..ca3a3667 --- /dev/null +++ b/src/error/PhutilErrorHandler.php @@ -0,0 +1,595 @@ +getPrevious(); + } + if (method_exists($ex, 'getPreviousException')) { + return $ex->getPreviousException(); + } + return null; + } + + + /** + * Find the most deeply nested exception from a possibly-nested exception. + * + * @param Exception|Throwable A possibly-nested exception. + * @return Exception|Throwable Deepest exception in the nest. + * @task exutil + */ + public static function getRootException($ex) { + $root = $ex; + while (self::getPreviousException($root)) { + $root = self::getPreviousException($root); + } + return $root; + } + + +/* -( Trapping Errors )---------------------------------------------------- */ + + + /** + * Adds an error trap. Normally you should not invoke this directly; + * @{class:PhutilErrorTrap} registers itself on construction. + * + * @param PhutilErrorTrap Trap to add. + * @return void + * @task trap + */ + public static function addErrorTrap(PhutilErrorTrap $trap) { + $key = $trap->getTrapKey(); + self::$traps[$key] = $trap; + } + + + /** + * Removes an error trap. Normally you should not invoke this directly; + * @{class:PhutilErrorTrap} deregisters itself on destruction. + * + * @param PhutilErrorTrap Trap to remove. + * @return void + * @task trap + */ + public static function removeErrorTrap(PhutilErrorTrap $trap) { + $key = $trap->getTrapKey(); + unset(self::$traps[$key]); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Determine if PhutilErrorHandler has been initialized. + * + * @return bool True if initialized. + * @task internal + */ + public static function hasInitialized() { + return self::$initialized; + } + + + /** + * Handles PHP errors and dispatches them forward. This is a callback for + * ##set_error_handler()##. You should not call this function directly; use + * @{function:phlog} to print debugging messages or ##trigger_error()## to + * trigger PHP errors. + * + * This handler converts E_RECOVERABLE_ERROR messages from violated typehints + * into @{class:InvalidArgumentException}s. + * + * This handler converts other E_RECOVERABLE_ERRORs into + * @{class:RuntimeException}s. + * + * This handler converts E_NOTICE messages from uses of undefined variables + * into @{class:RuntimeException}s. + * + * @param int Error code. + * @param string Error message. + * @param string File where the error occurred. + * @param int Line on which the error occurred. + * @param wild Error context information. + * @return void + * @task internal + */ + public static function handleError($num, $str, $file, $line, $ctx) { + + foreach (self::$traps as $trap) { + $trap->addError($num, $str, $file, $line, $ctx); + } + + if ((error_reporting() & $num) == 0) { + // Respect the use of "@" to silence warnings: if this error was + // emitted from a context where "@" was in effect, the + // value returned by error_reporting() will be 0. This is the + // recommended way to check for this, see set_error_handler() docs + // on php.net. + return false; + } + + // Convert typehint failures into exceptions. + if (preg_match('/^Argument (\d+) passed to (\S+) must be/', $str)) { + throw new InvalidArgumentException($str); + } + + // Convert other E_RECOVERABLE_ERRORs into generic runtime exceptions. + if ($num == E_RECOVERABLE_ERROR) { + throw new RuntimeException($str); + } + + // Convert uses of undefined variables into exceptions. + if (preg_match('/^Undefined variable: /', $str)) { + throw new RuntimeException($str); + } + + // Convert uses of undefined properties into exceptions. + if (preg_match('/^Undefined property: /', $str)) { + throw new RuntimeException($str); + } + + // Convert undefined constants into exceptions. Usually this means there + // is a missing `$` and the program is horribly broken. + if (preg_match('/^Use of undefined constant /', $str)) { + throw new RuntimeException($str); + } + + $trace = debug_backtrace(); + array_shift($trace); + self::dispatchErrorMessage( + self::ERROR, + $str, + array( + 'file' => $file, + 'line' => $line, + 'context' => $ctx, + 'error_code' => $num, + 'trace' => $trace, + )); + } + + /** + * Handles PHP exceptions and dispatches them forward. This is a callback for + * ##set_exception_handler()##. You should not call this function directly; + * to print exceptions, pass the exception object to @{function:phlog}. + * + * @param Exception|Throwable Uncaught exception object. + * @return void + * @task internal + */ + public static function handleException($ex) { + self::dispatchErrorMessage( + self::EXCEPTION, + $ex, + array( + 'file' => $ex->getFile(), + 'line' => $ex->getLine(), + 'trace' => self::getExceptionTrace($ex), + 'catch_trace' => debug_backtrace(), + )); + + // Normally, PHP exits with code 255 after an uncaught exception is thrown. + // However, if we install an exception handler (as we have here), it exits + // with code 0 instead. Script execution terminates after this function + // exits in either case, so exit explicitly with the correct exit code. + exit(255); + } + + + /** + * Output a stacktrace to the PHP error log. + * + * @param trace A stacktrace, e.g. from debug_backtrace(); + * @return void + * @task internal + */ + public static function outputStacktrace($trace) { + $lines = explode("\n", self::formatStacktrace($trace)); + foreach ($lines as $line) { + error_log($line); + } + } + + + /** + * Format a stacktrace for output. + * + * @param trace A stacktrace, e.g. from debug_backtrace(); + * @return string Human-readable trace. + * @task internal + */ + public static function formatStacktrace($trace) { + $result = array(); + + $libinfo = self::getLibraryVersions(); + if ($libinfo) { + foreach ($libinfo as $key => $dict) { + $info = array(); + foreach ($dict as $dkey => $dval) { + $info[] = $dkey.'='.$dval; + } + $libinfo[$key] = $key.'('.implode(', ', $info).')'; + } + $result[] = implode(', ', $libinfo); + } + + foreach ($trace as $key => $entry) { + $line = ' #'.$key.' '; + if (!empty($entry['xid'])) { + if ($entry['xid'] != 1) { + $line .= '<#'.$entry['xid'].'> '; + } + } + if (isset($entry['class'])) { + $line .= $entry['class'].'::'; + } + $line .= idx($entry, 'function', ''); + + if (isset($entry['args'])) { + $args = array(); + foreach ($entry['args'] as $arg) { + + // NOTE: Print out object types, not values. Values sometimes contain + // sensitive information and are usually not particularly helpful + // for debugging. + + $type = (gettype($arg) == 'object') + ? get_class($arg) + : gettype($arg); + $args[] = $type; + } + $line .= '('.implode(', ', $args).')'; + } + + if (isset($entry['file'])) { + $file = self::adjustFilePath($entry['file']); + $line .= ' called at ['.$file.':'.$entry['line'].']'; + } + + $result[] = $line; + } + return implode("\n", $result); + } + + + /** + * All different types of error messages come here before they are + * dispatched to the listener; this method also prints them to the PHP error + * log. + * + * @param const Event type constant. + * @param wild Event value. + * @param dict Event metadata. + * @return void + * @task internal + */ + public static function dispatchErrorMessage($event, $value, $metadata) { + $timestamp = strftime('%Y-%m-%d %H:%M:%S'); + + switch ($event) { + case self::ERROR: + $default_message = sprintf( + '[%s] ERROR %d: %s at [%s:%d]', + $timestamp, + $metadata['error_code'], + $value, + $metadata['file'], + $metadata['line']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + self::outputStacktrace($metadata['trace']); + break; + case self::EXCEPTION: + $messages = array(); + $current = $value; + do { + $messages[] = '('.get_class($current).') '.$current->getMessage(); + } while ($current = self::getPreviousException($current)); + $messages = implode(' {>} ', $messages); + + if (strlen($messages) > 4096) { + $messages = substr($messages, 0, 4096).'...'; + } + + $default_message = sprintf( + '[%s] EXCEPTION: %s at [%s:%d]', + $timestamp, + $messages, + self::adjustFilePath(self::getRootException($value)->getFile()), + self::getRootException($value)->getLine()); + + $metadata['default_message'] = $default_message; + error_log($default_message); + self::outputStacktrace($metadata['trace']); + break; + case self::PHLOG: + $default_message = sprintf( + '[%s] PHLOG: %s at [%s:%d]', + $timestamp, + PhutilReadableSerializer::printShort($value), + $metadata['file'], + $metadata['line']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + break; + case self::DEPRECATED: + $default_message = sprintf( + '[%s] DEPRECATED: %s is deprecated; %s', + $timestamp, + $value, + $metadata['why']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + break; + default: + error_log(pht('Unknown event %s', $event)); + break; + } + + if (self::$errorListener) { + static $handling_error; + if ($handling_error) { + error_log( + 'Error handler was reentered, some errors were not passed to the '. + 'listener.'); + return; + } + $handling_error = true; + call_user_func(self::$errorListener, $event, $value, $metadata); + $handling_error = false; + } + } + + public static function adjustFilePath($path) { + // Compute known library locations so we can emit relative paths if the + // file resides inside a known library. This is a little cleaner to read, + // and limits the number of false positives we get about full path + // disclosure via HackerOne. + + $bootloader = PhutilBootloader::getInstance(); + $libraries = $bootloader->getAllLibraries(); + $roots = array(); + foreach ($libraries as $library) { + $root = $bootloader->getLibraryRoot($library); + // For these libraries, the effective root is one level up. + switch ($library) { + case 'arcanist': + case 'phabricator': + $root = dirname($root); + break; + } + + if (!strncmp($root, $path, strlen($root))) { + return '<'.$library.'>'.substr($path, strlen($root)); + } + } + + return $path; + } + + public static function getLibraryVersions() { + $libinfo = array(); + + $bootloader = PhutilBootloader::getInstance(); + foreach ($bootloader->getAllLibraries() as $library) { + $root = phutil_get_library_root($library); + $try_paths = array( + $root, + dirname($root), + ); + $libinfo[$library] = array(); + + $get_refs = array('master'); + foreach ($try_paths as $try_path) { + // Try to read what the HEAD of the repository is pointed at. This is + // normally the name of a branch ("ref"). + $try_file = $try_path.'/.git/HEAD'; + if (@file_exists($try_file)) { + $head = @file_get_contents($try_file); + $matches = null; + if (preg_match('(^ref: refs/heads/(.*)$)', trim($head), $matches)) { + $libinfo[$library]['head'] = trim($matches[1]); + $get_refs[] = trim($matches[1]); + } else { + $libinfo[$library]['head'] = trim($head); + } + break; + } + } + + // Try to read which commit relevant branch heads are at. + foreach (array_unique($get_refs) as $ref) { + foreach ($try_paths as $try_path) { + $try_file = $try_path.'/.git/refs/heads/'.$ref; + if (@file_exists($try_file)) { + $hash = @file_get_contents($try_file); + if ($hash) { + $libinfo[$library]['ref.'.$ref] = substr(trim($hash), 0, 12); + break; + } + } + } + } + + // Look for extension files. + $custom = @scandir($root.'/extensions/'); + if ($custom) { + $count = 0; + foreach ($custom as $custom_path) { + if (preg_match('/\.php$/', $custom_path)) { + $count++; + } + } + if ($count) { + $libinfo[$library]['custom'] = $count; + } + } + } + + ksort($libinfo); + + return $libinfo; + } + + /** + * Get a full trace across all proxied and aggregated exceptions. + * + * This attempts to build a set of stack frames which completely represent + * all of the places an exception came from, even if it came from multiple + * origins and has been aggregated or proxied. + * + * @param Exception|Throwable Exception to retrieve a trace for. + * @return list List of stack frames. + */ + public static function getExceptionTrace($ex) { + $id = 1; + + // Keep track of discovered exceptions which we need to build traces for. + $stack = array( + array($id, $ex), + ); + + $frames = array(); + while ($info = array_shift($stack)) { + list($xid, $ex) = $info; + + // We're going from top-level exception down in bredth-first order, but + // want to build a trace in approximately standard order (deepest part of + // the call stack to most shallow) so we need to reverse each list of + // frames and then reverse everything at the end. + + $ex_frames = array_reverse($ex->getTrace()); + $ex_frames = array_values($ex_frames); + $last_key = (count($ex_frames) - 1); + foreach ($ex_frames as $frame_key => $frame) { + $frame['xid'] = $xid; + + // If this is a child/previous exception and we're on the deepest frame + // and missing file/line data, fill it in from the exception itself. + if ($xid > 1 && ($frame_key == $last_key)) { + if (empty($frame['file'])) { + $frame['file'] = $ex->getFile(); + $frame['line'] = $ex->getLine(); + } + } + + // Since the exceptions are likely to share the most shallow frames, + // try to add those to the trace only once. + if (isset($frame['file']) && isset($frame['line'])) { + $signature = $frame['file'].':'.$frame['line']; + if (empty($frames[$signature])) { + $frames[$signature] = $frame; + } + } else { + $frames[] = $frame; + } + } + + // If this is a proxy exception, add the proxied exception. + $prev = self::getPreviousException($ex); + if ($prev) { + $stack[] = array(++$id, $prev); + } + + // If this is an aggregate exception, add the child exceptions. + if ($ex instanceof PhutilAggregateException) { + foreach ($ex->getExceptions() as $child) { + $stack[] = array(++$id, $child); + } + } + } + + return array_values(array_reverse($frames)); + } + +} diff --git a/src/error/PhutilErrorTrap.php b/src/error/PhutilErrorTrap.php new file mode 100644 index 00000000..94d291d0 --- /dev/null +++ b/src/error/PhutilErrorTrap.php @@ -0,0 +1,83 @@ +getErrorsAsString(); + * $trap->destroy(); + * + * if (!$res) { + * throw new Exception('proc_open() failed: '.$err); + * } + * + * IMPORTANT: You must explicitly destroy traps because they register + * themselves with @{class:PhutilErrorHandler}, and thus will not be destroyed + * when `unset()`. + * + * Some notes on traps: + * + * - Traps catch all errors, including those silenced by `@`. + * - Traps do not prevent errors from reaching other standard handlers. You + * can use `@` to keep errors out of the logs while still trapping them. + * - Traps capture all errors until they are explicitly destroyed. This means + * that you should not create long-lived traps, or they may consume + * unbounded amounts of memory to hold the error log. + */ +final class PhutilErrorTrap extends Phobject { + + private $destroyed; + private $errors = array(); + + public function addError($num, $str, $file, $line, $ctx) { + $this->errors[] = array( + 'num' => $num, + 'str' => $str, + 'file' => $file, + 'line' => $line, + 'ctx' => $ctx, + ); + return $this; + } + + public function getErrorsAsString() { + $out = array(); + foreach ($this->errors as $error) { + $out[] = $error['str']; + } + return implode("\n", $out); + } + + public function destroy() { + if (!$this->destroyed) { + PhutilErrorHandler::removeErrorTrap($this); + $this->errors = array(); + $this->destroyed = true; + } + } + + public function getTrapKey() { + return spl_object_hash($this); + } + + public function __construct() { + PhutilErrorHandler::addErrorTrap($this); + } + + public function __toString() { + return $this->getErrorsAsString(); + } + +} diff --git a/src/error/PhutilMethodNotImplementedException.php b/src/error/PhutilMethodNotImplementedException.php new file mode 100644 index 00000000..2970e34d --- /dev/null +++ b/src/error/PhutilMethodNotImplementedException.php @@ -0,0 +1,34 @@ +openEnvelope(); + * + * Any time you're passing sensitive data into a stack, you should obscure it + * with an envelope to prevent it leaking if something goes wrong. + * + * The key for the envelope is stored elsewhere, in + * @{class:PhutilOpaqueEnvelopeKey}. This prevents it from appearing in + * any sort of logs related to the envelope, even if the logger is very + * aggressive. + * + * @task envelope Using Opaque Envelopes + * @task internal Internals + */ +final class PhutilOpaqueEnvelope extends Phobject { + + private $value; + + +/* -( Using Opaque Envelopes )--------------------------------------------- */ + + + /** + * @task envelope + */ + public function __construct($string) { + $this->value = $this->mask($string, PhutilOpaqueEnvelopeKey::getKey()); + } + + + /** + * @task envelope + */ + public function openEnvelope() { + return $this->mask($this->value, PhutilOpaqueEnvelopeKey::getKey()); + } + + + /** + * @task envelope + */ + public function __toString() { + return pht(''); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + private function mask($string, $noise) { + $result = ''; + for ($ii = 0; $ii < strlen($string); $ii++) { + $s = $string[$ii]; + $n = $noise[$ii % strlen($noise)]; + + $result .= chr(ord($s) ^ ord($n)); + } + return $result; + } + +} diff --git a/src/error/PhutilOpaqueEnvelopeKey.php b/src/error/PhutilOpaqueEnvelopeKey.php new file mode 100644 index 00000000..ea01ee4e --- /dev/null +++ b/src/error/PhutilOpaqueEnvelopeKey.php @@ -0,0 +1,45 @@ + + } + + + /** + * @task internal + */ + public static function getKey() { + if (self::$key === null) { + // NOTE: We're using a weak random source because cryptographic levels + // of security aren't terribly important here and it allows us to use + // envelopes on systems which don't have a strong random source. Notably, + // this lets us make it to the readability check for `/dev/urandom` in + // Phabricator on systems where we can't read it. + self::$key = ''; + for ($ii = 0; $ii < 8; $ii++) { + self::$key .= md5(mt_rand(), $raw_output = true); + } + } + return self::$key; + } + +} diff --git a/src/error/PhutilProxyException.php b/src/error/PhutilProxyException.php new file mode 100644 index 00000000..4f477ae8 --- /dev/null +++ b/src/error/PhutilProxyException.php @@ -0,0 +1,37 @@ +previousException = $previous; + + // This may be an "Exception" or a "Throwable". The "__construct()" method + // for the Exception is documented as taking an Exception, not a Throwable. + // Although passing a Throwable appears to work in PHP 7.3, don't risk it. + $is_exception = ($previous instanceof Exception); + + if (version_compare(PHP_VERSION, '5.3.0', '>=') && $is_exception) { + parent::__construct($message, $code, $previous); + } else { + parent::__construct($message, $code); + } + } + + public function getPreviousException() { + // NOTE: This can not be named "getPrevious()" because that method is final + // after PHP 5.3. Similarly, the property can not be named "previous" + // because HPHP declares a property with the same name and "protected" + // visibility. + return $this->previousException; + } + +} diff --git a/src/error/__tests__/PhutilErrorHandlerTestCase.php b/src/error/__tests__/PhutilErrorHandlerTestCase.php new file mode 100644 index 00000000..760f410a --- /dev/null +++ b/src/error/__tests__/PhutilErrorHandlerTestCase.php @@ -0,0 +1,39 @@ +assertEqual($a, $b->getPrevious()); + $this->assertEqual($a, PhutilErrorHandler::getRootException($b)); + $this->assertEqual($a, PhutilErrorHandler::getPreviousException($b)); + + $this->assertEqual($a, PhutilErrorHandler::getRootException($c)); + $this->assertEqual($b, PhutilErrorHandler::getPreviousException($c)); + } + + public function testSilenceHandler() { + // Errors should normally be logged. + $this->assertTrue(strlen($this->emitError()) > 0); + + // The "@" operator should silence errors. + $this->assertTrue(@strlen($this->emitError()) === 0); + } + + private function emitError() { + $temporary_log = new TempFile(); + + $old_log = ini_get('error_log'); + ini_set('error_log', (string)$temporary_log); + + trigger_error(pht('(A synthetic error emitted during a unit test.)')); + + ini_set('error_log', $old_log); + return Filesystem::readFile($temporary_log); + } + + +} diff --git a/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php b/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php new file mode 100644 index 00000000..2f6c06b2 --- /dev/null +++ b/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php @@ -0,0 +1,47 @@ +assertFalse(strpos(var_export($envelope, true), $secret)); + + $this->assertFalse(strpos(print_r($envelope, true), $secret)); + + ob_start(); + var_dump($envelope); + $dump = ob_get_clean(); + + $this->assertFalse(strpos($dump, $secret)); + + try { + $this->throwTrace($envelope); + } catch (Exception $ex) { + $trace = $ex->getTrace(); + $this->assertFalse(strpos(print_r($trace, true), $secret)); + } + + $backtrace = $this->getBacktrace($envelope); + $this->assertFalse(strpos(print_r($backtrace, true), $secret)); + + $this->assertEqual($secret, $envelope->openEnvelope()); + } + + private function throwTrace($v) { + throw new Exception('!'); + } + + private function getBacktrace($v) { + return debug_backtrace(); + } + +} diff --git a/src/error/phlog.php b/src/error/phlog.php new file mode 100644 index 00000000..105e0740 --- /dev/null +++ b/src/error/phlog.php @@ -0,0 +1,68 @@ + $trace[0]['file'], + 'line' => $trace[0]['line'], + 'trace' => $trace, + ); + + foreach (func_get_args() as $event) { + $data = $metadata; + if (($event instanceof Exception) || ($event instanceof Throwable)) { + $type = PhutilErrorHandler::EXCEPTION; + // If this is an exception, proxy it and generate a composite trace which + // shows both where the phlog() was called and where the exception was + // originally thrown from. + $proxy = new PhutilProxyException('', $event); + $trace = PhutilErrorHandler::getExceptionTrace($proxy); + $data['trace'] = $trace; + } else { + $type = PhutilErrorHandler::PHLOG; + } + + PhutilErrorHandler::dispatchErrorMessage($type, $event, $data); + } + + return $value; +} + +/** + * Example @{class:PhutilErrorHandler} error listener callback. When you call + * `PhutilErrorHandler::setErrorListener()`, you must pass a callback function + * with the same signature as this one. + * + * NOTE: @{class:PhutilErrorHandler} handles writing messages to the error + * log, so you only need to provide a listener if you have some other console + * (like Phabricator's DarkConsole) which you //also// want to send errors to. + * + * NOTE: You will receive errors which were silenced with the `@` operator. If + * you don't want to display these, test for `@` being in effect by checking if + * `error_reporting() === 0` before displaying the error. + * + * @param const A PhutilErrorHandler constant, like PhutilErrorHandler::ERROR, + * which indicates the event type (e.g. error, exception, + * user message). + * @param wild The event value, like the Exception object for an exception + * event, an error string for an error event, or some user object + * for user messages. + * @param dict A dictionary of metadata about the event. The keys 'file', + * 'line' and 'trace' are always available. Other keys may be + * present, depending on the event type. + * @return void + */ +function phutil_error_listener_example($event, $value, array $metadata) { + throw new Exception(pht('This is just an example function!')); +} diff --git a/src/events/PhutilEvent.php b/src/events/PhutilEvent.php new file mode 100644 index 00000000..9297b201 --- /dev/null +++ b/src/events/PhutilEvent.php @@ -0,0 +1,39 @@ +type = $type; + $this->data = $data; + } + + public function getType() { + return $this->type; + } + + public function getValue($key, $default = null) { + return idx($this->data, $key, $default); + } + + public function setValue($key, $value) { + $this->data[$key] = $value; + return $this; + } + + public function stop() { + $this->stop = true; + return $this; + } + + public function isStopped() { + return $this->stop; + } + +} diff --git a/src/events/PhutilEventEngine.php b/src/events/PhutilEventEngine.php new file mode 100644 index 00000000..8c822103 --- /dev/null +++ b/src/events/PhutilEventEngine.php @@ -0,0 +1,75 @@ + + } + + public static function getInstance() { + if (!self::$instance) { + self::$instance = new PhutilEventEngine(); + } + return self::$instance; + } + + public function addListener(PhutilEventListener $listener, $type) { + $this->listeners[$type][] = $listener; + return $this; + } + + /** + * Get all the objects currently listening to any event. + */ + public function getAllListeners() { + $listeners = array_mergev($this->listeners); + $listeners = mpull($listeners, null, 'getListenerID'); + return $listeners; + } + + public static function dispatchEvent(PhutilEvent $event) { + $instance = self::getInstance(); + + $listeners = idx($instance->listeners, $event->getType(), array()); + $global_listeners = idx( + $instance->listeners, + PhutilEventType::TYPE_ALL, + array()); + + // Merge and deduplicate listeners (we want to send the event to each + // listener only once, even if it satisfies multiple criteria for the + // event). + $listeners = array_merge($listeners, $global_listeners); + $listeners = mpull($listeners, null, 'getListenerID'); + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler_id = $profiler->beginServiceCall( + array( + 'type' => 'event', + 'kind' => $event->getType(), + 'count' => count($listeners), + )); + + $caught = null; + try { + foreach ($listeners as $listener) { + if ($event->isStopped()) { + // Do this first so if someone tries to dispatch a stopped event it + // doesn't go anywhere. Silly but less surprising. + break; + } + $listener->handleEvent($event); + } + } catch (Exception $ex) { + $profiler->endServiceCall($profiler_id, array()); + throw $ex; + } + + $profiler->endServiceCall($profiler_id, array()); + } + +} diff --git a/src/events/PhutilEventListener.php b/src/events/PhutilEventListener.php new file mode 100644 index 00000000..e4925e50 --- /dev/null +++ b/src/events/PhutilEventListener.php @@ -0,0 +1,37 @@ + + } + + abstract public function register(); + abstract public function handleEvent(PhutilEvent $event); + + final public function listen($type) { + $engine = PhutilEventEngine::getInstance(); + $engine->addListener($this, $type); + } + + + /** + * Return a scalar ID unique to this listener. This is used to deduplicate + * listeners which match events on multiple rules, so they are invoked only + * once. + * + * @return int A scalar unique to this object instance. + */ + final public function getListenerID() { + if (!$this->listenerID) { + $this->listenerID = self::$nextListenerID; + self::$nextListenerID++; + } + return $this->listenerID; + } + + +} diff --git a/src/events/constant/PhutilEventConstants.php b/src/events/constant/PhutilEventConstants.php new file mode 100644 index 00000000..ede347fb --- /dev/null +++ b/src/events/constant/PhutilEventConstants.php @@ -0,0 +1,3 @@ +callee = $callee; + $this->function = $function; + + parent::__construct( + pht( + 'Call %s before calling %s!', + $this->function.'()', + $this->callee.'()')); + } + + public function getCallee() { + return $this->callee; + } + + public function getFunction() { + return $this->function; + } +} diff --git a/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php b/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php new file mode 100644 index 00000000..6c94487d --- /dev/null +++ b/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php @@ -0,0 +1,17 @@ +assertEqual( + __FUNCTION__, + $ex->getCallee()); + $this->assertEqual( + 'someMethod', + $ex->getFunction()); + } + } +} diff --git a/src/filesystem/FileFinder.php b/src/filesystem/FileFinder.php new file mode 100644 index 00000000..6b1dbbb4 --- /dev/null +++ b/src/filesystem/FileFinder.php @@ -0,0 +1,365 @@ +withType('f') + * ->withSuffix('php') + * ->find(); + * + * @task create Creating a File Query + * @task config Configuring File Queries + * @task exec Executing the File Query + * @task internal Internal + */ +final class FileFinder extends Phobject { + + private $root; + private $exclude = array(); + private $paths = array(); + private $name = array(); + private $suffix = array(); + private $nameGlobs = array(); + private $type; + private $generateChecksums = false; + private $followSymlinks; + private $forceMode; + + /** + * Create a new FileFinder. + * + * @param string Root directory to find files beneath. + * @return this + * @task create + */ + public function __construct($root) { + $this->root = rtrim($root, '/'); + } + + /** + * @task config + */ + public function excludePath($path) { + $this->exclude[] = $path; + return $this; + } + + /** + * @task config + */ + public function withName($name) { + $this->name[] = $name; + return $this; + } + + /** + * @task config + */ + public function withSuffix($suffix) { + $this->suffix[] = $suffix; + return $this; + } + + /** + * @task config + */ + public function withPath($path) { + $this->paths[] = $path; + return $this; + } + + /** + * @task config + */ + public function withType($type) { + $this->type = $type; + return $this; + } + + /** + * @task config + */ + public function withFollowSymlinks($follow) { + $this->followSymlinks = $follow; + return $this; + } + + /** + * @task config + */ + public function setGenerateChecksums($generate) { + $this->generateChecksums = $generate; + return $this; + } + + public function getGenerateChecksums() { + return $this->generateChecksums; + } + + public function withNameGlob($pattern) { + $this->nameGlobs[] = $pattern; + return $this; + } + + /** + * @task config + * @param string Either "php", "shell", or the empty string. + */ + public function setForceMode($mode) { + $this->forceMode = $mode; + return $this; + } + + /** + * @task internal + */ + public function validateFile($file) { + + if ($this->name) { + $matches = false; + foreach ($this->name as $curr_name) { + if (basename($file) === $curr_name) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->nameGlobs) { + $name = basename($file); + + $matches = false; + foreach ($this->nameGlobs as $glob) { + $glob = addcslashes($glob, '\\'); + if (fnmatch($glob, $name)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->suffix) { + $matches = false; + foreach ($this->suffix as $suffix) { + $suffix = addcslashes($suffix, '\\?*'); + $suffix = '*.'.$suffix; + if (fnmatch($suffix, $file)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->paths) { + $matches = false; + foreach ($this->paths as $path) { + if (fnmatch($path, $this->root.'/'.$file)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + $fullpath = $this->root.'/'.ltrim($file, '/'); + if (($this->type == 'f' && is_dir($fullpath)) + || ($this->type == 'd' && !is_dir($fullpath))) { + return false; + } + + return true; + } + + /** + * @task internal + */ + private function getFiles($dir) { + $found = Filesystem::listDirectory($this->root.'/'.$dir, true); + $files = array(); + if (strlen($dir) > 0) { + $dir = rtrim($dir, '/').'/'; + } + foreach ($found as $filename) { + // Only exclude files whose names match relative to the root. + if ($dir == '') { + $matches = true; + foreach ($this->exclude as $exclude_path) { + if (fnmatch(ltrim($exclude_path, './'), $dir.$filename)) { + $matches = false; + break; + } + } + if (!$matches) { + continue; + } + } + + if ($this->validateFile($dir.$filename)) { + $files[] = $dir.$filename; + } + + if (is_dir($this->root.'/'.$dir.$filename)) { + foreach ($this->getFiles($dir.$filename) as $file) { + $files[] = $file; + } + } + } + return $files; + } + + /** + * @task exec + */ + public function find() { + + $files = array(); + + if (!is_dir($this->root) || !is_readable($this->root)) { + throw new Exception( + pht( + "Invalid %s root directory specified ('%s'). Root directory ". + "must be a directory, be readable, and be specified with an ". + "absolute path.", + __CLASS__, + $this->root)); + } + + if ($this->forceMode == 'shell') { + $php_mode = false; + } else if ($this->forceMode == 'php') { + $php_mode = true; + } else { + $php_mode = (phutil_is_windows() || !Filesystem::binaryExists('find')); + } + + if ($php_mode) { + $files = $this->getFiles(''); + } else { + $args = array(); + $command = array(); + + $command[] = 'find'; + if ($this->followSymlinks) { + $command[] = '-L'; + } + $command[] = '.'; + + if ($this->exclude) { + $command[] = $this->generateList('path', $this->exclude).' -prune'; + $command[] = '-o'; + } + + if ($this->type) { + $command[] = '-type %s'; + $args[] = $this->type; + } + + if ($this->name) { + $command[] = $this->generateList('name', $this->name, 'name'); + } + + if ($this->suffix) { + $command[] = $this->generateList('name', $this->suffix, 'suffix'); + } + + if ($this->paths) { + $command[] = $this->generateList('path', $this->paths); + } + + if ($this->nameGlobs) { + $command[] = $this->generateList('name', $this->nameGlobs); + } + + $command[] = '-print0'; + + array_unshift($args, implode(' ', $command)); + list($stdout) = newv('ExecFuture', $args) + ->setCWD($this->root) + ->resolvex(); + + $stdout = trim($stdout); + if (!strlen($stdout)) { + return array(); + } + + $files = explode("\0", $stdout); + + // On OSX/BSD, find prepends a './' to each file. + foreach ($files as $key => $file) { + // When matching directories, we can get "." back in the result set, + // but this isn't an interesting result. + if ($file == '.') { + unset($files[$key]); + continue; + } + + if (substr($files[$key], 0, 2) == './') { + $files[$key] = substr($files[$key], 2); + } + } + } + + if (!$this->generateChecksums) { + return $files; + } else { + $map = array(); + foreach ($files as $line) { + $fullpath = $this->root.'/'.ltrim($line, '/'); + if (is_dir($fullpath)) { + $map[$line] = null; + } else { + $map[$line] = md5_file($fullpath); + } + } + return $map; + } + } + + /** + * @task internal + */ + private function generateList( + $flag, + array $items, + $mode = 'glob') { + + foreach ($items as $key => $item) { + // If the mode is not "glob" mode, we're going to escape glob characters + // in the pattern. Otherwise, we escape only backslashes. + if ($mode === 'glob') { + $item = addcslashes($item, '\\'); + } else { + $item = addcslashes($item, '\\*?'); + } + + if ($mode === 'suffix') { + $item = '*.'.$item; + } + + $item = (string)csprintf('%s %s', '-'.$flag, $item); + + $items[$key] = $item; + } + + $items = implode(' -o ', $items); + return '"(" '.$items.' ")"'; + } +} diff --git a/src/filesystem/FileList.php b/src/filesystem/FileList.php new file mode 100644 index 00000000..656c92de --- /dev/null +++ b/src/filesystem/FileList.php @@ -0,0 +1,92 @@ +contains($file)) { + * do_something_to_this($file); + * } + * } + * + * This sort of construction will allow the user to type "src" in order + * to indicate 'all relevant files underneath "src/"'. + * + * @task create Creating a File List + * @task test Testing File Lists + */ +final class FileList extends Phobject { + + private $files = array(); + private $dirs = array(); + + /** + * Build a new FileList from an array of paths, e.g. from $argv. + * + * @param list List of relative or absolute file paths. + * @return this + * @task create + */ + public function __construct($paths) { + foreach ($paths as $path) { + $path = Filesystem::resolvePath($path); + if (is_dir($path)) { + $path = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + $this->dirs[$path] = true; + } + $this->files[] = $path; + } + } + + + /** + * Determine if a path is one of the paths in the list. Note that an empty + * file list is considered to contain every file. + * + * @param string Relative or absolute system file path. + * @param bool If true, consider the path to be contained in the list if + * the list contains a parent directory. If false, require + * that the path be part of the list explicitly. + * @return bool If true, the file is in the list. + * @task test + */ + public function contains($path, $allow_parent_directory = true) { + + if ($this->isEmpty()) { + return true; + } + + $path = Filesystem::resolvePath($path); + if (is_dir($path)) { + $path .= DIRECTORY_SEPARATOR; + } + + foreach ($this->files as $file) { + if ($file == $path) { + return true; + } + if ($allow_parent_directory) { + $len = strlen($file); + if (isset($this->dirs[$file]) && !strncmp($file, $path, $len)) { + return true; + } + } + } + return false; + } + + + /** + * Check if the file list is empty -- that is, it contains no files. + * + * @return bool If true, the list is empty. + * @task test + */ + public function isEmpty() { + return !$this->files; + } + +} diff --git a/src/filesystem/Filesystem.php b/src/filesystem/Filesystem.php new file mode 100644 index 00000000..a88ed12a --- /dev/null +++ b/src/filesystem/Filesystem.php @@ -0,0 +1,1248 @@ +> 3]; + } + + return $result; + } + + + /** + * Generate a random integer value in a given range. + * + * This method uses less-entropic random sources under older versions of PHP. + * + * @param int Minimum value, inclusive. + * @param int Maximum value, inclusive. + */ + public static function readRandomInteger($min, $max) { + if (!is_int($min)) { + throw new Exception(pht('Minimum value must be an integer.')); + } + + if (!is_int($max)) { + throw new Exception(pht('Maximum value must be an integer.')); + } + + if ($min > $max) { + throw new Exception( + pht( + 'Minimum ("%d") must not be greater than maximum ("%d").', + $min, + $max)); + } + + // Under PHP 7.2.0 and newer, we can just use "random_int()". This function + // is intended to generate cryptographically usable entropy. + if (function_exists('random_int')) { + return random_int($min, $max); + } + + // We could find a stronger source for this, but correctly converting raw + // bytes to an integer range without biases is fairly hard and it seems + // like we're more likely to get that wrong than suffer a PRNG prediction + // issue by falling back to "mt_rand()". + + if (($max - $min) > mt_getrandmax()) { + throw new Exception( + pht('mt_rand() range is smaller than the requested range.')); + } + + $result = mt_rand($min, $max); + if (!is_int($result)) { + throw new Exception(pht('Bad return value from mt_rand().')); + } + + return $result; + } + + + /** + * Identify the MIME type of a file. This returns only the MIME type (like + * text/plain), not the encoding (like charset=utf-8). + * + * @param string Path to the file to examine. + * @param string Optional default mime type to return if the file's mime + * type can not be identified. + * @return string File mime type. + * + * @task file + * + * @phutil-external-symbol function mime_content_type + * @phutil-external-symbol function finfo_open + * @phutil-external-symbol function finfo_file + */ + public static function getMimeType( + $path, + $default = 'application/octet-stream') { + + $path = self::resolvePath($path); + + self::assertExists($path); + self::assertIsFile($path); + self::assertReadable($path); + + $mime_type = null; + + // Fileinfo is the best approach since it doesn't rely on `file`, but + // it isn't builtin for older versions of PHP. + + if (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME); + if ($finfo) { + $result = finfo_file($finfo, $path); + if ($result !== false) { + $mime_type = $result; + } + } + } + + // If we failed Fileinfo, try `file`. This works well but not all systems + // have the binary. + + if ($mime_type === null) { + list($err, $stdout) = exec_manual( + 'file --brief --mime %s', + $path); + if (!$err) { + $mime_type = trim($stdout); + } + } + + // If we didn't get anywhere, try the deprecated mime_content_type() + // function. + + if ($mime_type === null) { + if (function_exists('mime_content_type')) { + $result = mime_content_type($path); + if ($result !== false) { + $mime_type = $result; + } + } + } + + // If we come back with an encoding, strip it off. + if (strpos($mime_type, ';') !== false) { + list($type, $encoding) = explode(';', $mime_type, 2); + $mime_type = $type; + } + + if ($mime_type === null) { + $mime_type = $default; + } + + return $mime_type; + } + + +/* -( Directories )-------------------------------------------------------- */ + + + /** + * Create a directory in a manner similar to mkdir(), but throw detailed + * exceptions on failure. + * + * @param string Path to directory. The parent directory must exist and + * be writable. + * @param int Permission umask. Note that umask is in octal, so you + * should specify it as, e.g., `0777', not `777'. + * @param boolean Recursively create directories. Default to false. + * @return string Path to the created directory. + * + * @task directory + */ + public static function createDirectory( + $path, + $umask = 0755, + $recursive = false) { + + $path = self::resolvePath($path); + + if (is_dir($path)) { + if ($umask) { + self::changePermissions($path, $umask); + } + return $path; + } + + $dir = dirname($path); + if ($recursive && !file_exists($dir)) { + // Note: We could do this with the recursive third parameter of mkdir(), + // but then we loose the helpful FilesystemExceptions we normally get. + self::createDirectory($dir, $umask, true); + } + + self::assertIsDirectory($dir); + self::assertExists($dir); + self::assertWritable($dir); + self::assertNotExists($path); + + if (!mkdir($path, $umask)) { + throw new FilesystemException( + $path, + pht("Failed to create directory '%s'.", $path)); + } + + // Need to change permissions explicitly because mkdir does something + // slightly different. mkdir(2) man page: + // 'The parameter mode specifies the permissions to use. It is modified by + // the process's umask in the usual way: the permissions of the created + // directory are (mode & ~umask & 0777)."' + if ($umask) { + self::changePermissions($path, $umask); + } + + return $path; + } + + + /** + * Create a temporary directory and return the path to it. You are + * responsible for removing it (e.g., with Filesystem::remove()) + * when you are done with it. + * + * @param string Optional directory prefix. + * @param int Permissions to create the directory with. By default, + * these permissions are very restrictive (0700). + * @param string Optional root directory. If not provided, the system + * temporary directory (often "/tmp") will be used. + * @return string Path to newly created temporary directory. + * + * @task directory + */ + public static function createTemporaryDirectory( + $prefix = '', + $umask = 0700, + $root_directory = null) { + $prefix = preg_replace('/[^A-Z0-9._-]+/i', '', $prefix); + + if ($root_directory !== null) { + $tmp = $root_directory; + self::assertExists($tmp); + self::assertIsDirectory($tmp); + self::assertWritable($tmp); + } else { + $tmp = sys_get_temp_dir(); + if (!$tmp) { + throw new FilesystemException( + $tmp, + pht('Unable to determine system temporary directory.')); + } + } + + $base = $tmp.DIRECTORY_SEPARATOR.$prefix; + + $tries = 3; + do { + $dir = $base.substr(base_convert(md5(mt_rand()), 16, 36), 0, 16); + try { + self::createDirectory($dir, $umask); + break; + } catch (FilesystemException $ex) { + // Ignore. + } + } while (--$tries); + + if (!$tries) { + $df = disk_free_space($tmp); + if ($df !== false && $df < 1024 * 1024) { + throw new FilesystemException( + $dir, + pht('Failed to create a temporary directory: the disk is full.')); + } + + throw new FilesystemException( + $dir, + pht("Failed to create a temporary directory in '%s'.", $tmp)); + } + + return $dir; + } + + + /** + * List files in a directory. + * + * @param string Path, absolute or relative to PWD. + * @param bool If false, exclude files beginning with a ".". + * + * @return array List of files and directories in the specified + * directory, excluding `.' and `..'. + * + * @task directory + */ + public static function listDirectory($path, $include_hidden = true) { + $path = self::resolvePath($path); + + self::assertExists($path); + self::assertIsDirectory($path); + self::assertReadable($path); + + $list = @scandir($path); + if ($list === false) { + throw new FilesystemException( + $path, + pht("Unable to list contents of directory '%s'.", $path)); + } + + foreach ($list as $k => $v) { + if ($v == '.' || $v == '..' || (!$include_hidden && $v[0] == '.')) { + unset($list[$k]); + } + } + + return array_values($list); + } + + + /** + * Return all directories between a path and the specified root directory + * (defaulting to "/"). Iterating over them walks from the path to the root. + * + * @param string Path, absolute or relative to PWD. + * @param string The root directory. + * @return list List of parent paths, including the provided path. + * @task directory + */ + public static function walkToRoot($path, $root = null) { + $path = self::resolvePath($path); + + if (is_link($path)) { + $path = realpath($path); + } + + // NOTE: On Windows, paths start like "C:\", so "/" does not contain + // every other path. We could possibly special case "/" to have the same + // meaning on Windows that it does on Linux, but just special case the + // common case for now. See PHI817. + if ($root !== null) { + $root = self::resolvePath($root); + + if (is_link($root)) { + $root = realpath($root); + } + + // NOTE: We don't use `isDescendant()` here because we don't want to + // reject paths which don't exist on disk. + $root_list = new FileList(array($root)); + if (!$root_list->contains($path)) { + return array(); + } + } else { + if (phutil_is_windows()) { + $root = null; + } else { + $root = '/'; + } + } + + $walk = array(); + $parts = explode(DIRECTORY_SEPARATOR, $path); + foreach ($parts as $k => $part) { + if (!strlen($part)) { + unset($parts[$k]); + } + } + + while (true) { + if (phutil_is_windows()) { + $next = implode(DIRECTORY_SEPARATOR, $parts); + } else { + $next = DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $parts); + } + + $walk[] = $next; + if ($next == $root) { + break; + } + + if (!$parts) { + break; + } + + array_pop($parts); + } + + return $walk; + } + + +/* -( Paths )-------------------------------------------------------------- */ + + + /** + * Checks if a path is specified as an absolute path. + * + * @param string + * @return bool + */ + public static function isAbsolutePath($path) { + if (phutil_is_windows()) { + return (bool)preg_match('/^[A-Za-z]+:/', $path); + } else { + return !strncmp($path, DIRECTORY_SEPARATOR, 1); + } + } + + /** + * Canonicalize a path by resolving it relative to some directory (by + * default PWD), following parent symlinks and removing artifacts. If the + * path is itself a symlink it is left unresolved. + * + * @param string Path, absolute or relative to PWD. + * @return string Canonical, absolute path. + * + * @task path + */ + public static function resolvePath($path, $relative_to = null) { + $is_absolute = self::isAbsolutePath($path); + + if (!$is_absolute) { + if (!$relative_to) { + $relative_to = getcwd(); + } + $path = $relative_to.DIRECTORY_SEPARATOR.$path; + } + + if (is_link($path)) { + $parent_realpath = realpath(dirname($path)); + if ($parent_realpath !== false) { + return $parent_realpath.DIRECTORY_SEPARATOR.basename($path); + } + } + + $realpath = realpath($path); + if ($realpath !== false) { + return $realpath; + } + + + // This won't work if the file doesn't exist or is on an unreadable mount + // or something crazy like that. Try to resolve a parent so we at least + // cover the nonexistent file case. + $parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR)); + while (end($parts) !== false) { + array_pop($parts); + if (phutil_is_windows()) { + $attempt = implode(DIRECTORY_SEPARATOR, $parts); + } else { + $attempt = DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $parts); + } + $realpath = realpath($attempt); + if ($realpath !== false) { + $path = $realpath.substr($path, strlen($attempt)); + break; + } + } + + return $path; + } + + /** + * Test whether a path is descendant from some root path after resolving all + * symlinks and removing artifacts. Both paths must exists for the relation + * to obtain. A path is always a descendant of itself as long as it exists. + * + * @param string Child path, absolute or relative to PWD. + * @param string Root path, absolute or relative to PWD. + * @return bool True if resolved child path is in fact a descendant of + * resolved root path and both exist. + * @task path + */ + public static function isDescendant($path, $root) { + try { + self::assertExists($path); + self::assertExists($root); + } catch (FilesystemException $e) { + return false; + } + $fs = new FileList(array($root)); + return $fs->contains($path); + } + + /** + * Convert a canonical path to its most human-readable format. It is + * guaranteed that you can use resolvePath() to restore a path to its + * canonical format. + * + * @param string Path, absolute or relative to PWD. + * @param string Optionally, working directory to make files readable + * relative to. + * @return string Human-readable path. + * + * @task path + */ + public static function readablePath($path, $pwd = null) { + if ($pwd === null) { + $pwd = getcwd(); + } + + foreach (array($pwd, self::resolvePath($pwd)) as $parent) { + $parent = rtrim($parent, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + $len = strlen($parent); + if (!strncmp($parent, $path, $len)) { + $path = substr($path, $len); + return $path; + } + } + + return $path; + } + + /** + * Determine whether or not a path exists in the filesystem. This differs from + * file_exists() in that it returns true for symlinks. This method does not + * attempt to resolve paths before testing them. + * + * @param string Test for the existence of this path. + * @return bool True if the path exists in the filesystem. + * @task path + */ + public static function pathExists($path) { + return file_exists($path) || is_link($path); + } + + + /** + * Determine if an executable binary (like `git` or `svn`) exists within + * the configured `$PATH`. + * + * @param string Binary name, like `'git'` or `'svn'`. + * @return bool True if the binary exists and is executable. + * @task exec + */ + public static function binaryExists($binary) { + return self::resolveBinary($binary) !== null; + } + + + /** + * Locates the full path that an executable binary (like `git` or `svn`) is at + * the configured `$PATH`. + * + * @param string Binary name, like `'git'` or `'svn'`. + * @return string The full binary path if it is present, or null. + * @task exec + */ + public static function resolveBinary($binary) { + if (phutil_is_windows()) { + list($err, $stdout) = exec_manual('where %s', $binary); + $stdout = phutil_split_lines($stdout); + + // If `where %s` could not find anything, check for relative binary + if ($err) { + $path = self::resolvePath($binary); + if (self::pathExists($path)) { + return $path; + } + return null; + } + $stdout = head($stdout); + } else { + list($err, $stdout) = exec_manual('which %s', $binary); + } + + return $err === 0 ? trim($stdout) : null; + } + + + /** + * Determine if two paths are equivalent by resolving symlinks. This is + * different from resolving both paths and comparing them because + * resolvePath() only resolves symlinks in parent directories, not the + * path itself. + * + * @param string First path to test for equivalence. + * @param string Second path to test for equivalence. + * @return bool True if both paths are equivalent, i.e. reference the same + * entity in the filesystem. + * @task path + */ + public static function pathsAreEquivalent($u, $v) { + $u = self::resolvePath($u); + $v = self::resolvePath($v); + + $real_u = realpath($u); + $real_v = realpath($v); + + if ($real_u) { + $u = $real_u; + } + if ($real_v) { + $v = $real_v; + } + return ($u == $v); + } + + +/* -( Assert )------------------------------------------------------------- */ + + + /** + * Assert that something (e.g., a file, directory, or symlink) exists at a + * specified location. + * + * @param string Assert that this path exists. + * @return void + * + * @task assert + */ + public static function assertExists($path) { + if (self::pathExists($path)) { + return; + } + + // Before we claim that the path doesn't exist, try to find a parent we + // don't have "+x" on. If we find one, tailor the error message so we don't + // say "does not exist" in cases where the path does exist, we just don't + // have permission to test its existence. + foreach (self::walkToRoot($path) as $parent) { + if (!self::pathExists($parent)) { + continue; + } + + if (!is_dir($parent)) { + continue; + } + + if (phutil_is_windows()) { + // Do nothing. On Windows, there's no obvious equivalent to the + // check below because "is_executable(...)" always appears to return + // "false" for any directory. + } else if (!is_executable($parent)) { + // On Linux, note that we don't need read permission ("+r") on parent + // directories to determine that a path exists, only execute ("+x"). + throw new FilesystemException( + $path, + pht( + 'Filesystem path "%s" can not be accessed because a parent '. + 'directory ("%s") is not executable (the current process does '. + 'not have "+x" permission).', + $path, + $parent)); + } + } + + throw new FilesystemException( + $path, + pht( + 'Filesystem path "%s" does not exist.', + $path)); + } + + + /** + * Assert that nothing exists at a specified location. + * + * @param string Assert that this path does not exist. + * @return void + * + * @task assert + */ + public static function assertNotExists($path) { + if (file_exists($path) || is_link($path)) { + throw new FilesystemException( + $path, + pht("Path '%s' already exists!", $path)); + } + } + + + /** + * Assert that a path represents a file, strictly (i.e., not a directory). + * + * @param string Assert that this path is a file. + * @return void + * + * @task assert + */ + public static function assertIsFile($path) { + if (!is_file($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not a file.", $path)); + } + } + + + /** + * Assert that a path represents a directory, strictly (i.e., not a file). + * + * @param string Assert that this path is a directory. + * @return void + * + * @task assert + */ + public static function assertIsDirectory($path) { + if (!is_dir($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not a directory.", $path)); + } + } + + + /** + * Assert that a file or directory exists and is writable. + * + * @param string Assert that this path is writable. + * @return void + * + * @task assert + */ + public static function assertWritable($path) { + if (!is_writable($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not writable.", $path)); + } + } + + + /** + * Assert that a file or directory exists and is readable. + * + * @param string Assert that this path is readable. + * @return void + * + * @task assert + */ + public static function assertReadable($path) { + if (!is_readable($path)) { + throw new FilesystemException( + $path, + pht("Path '%s' is not readable.", $path)); + } + } + +} diff --git a/src/filesystem/FilesystemException.php b/src/filesystem/FilesystemException.php new file mode 100644 index 00000000..cc464ff7 --- /dev/null +++ b/src/filesystem/FilesystemException.php @@ -0,0 +1,34 @@ +path = $path; + parent::__construct($message); + } + + + /** + * Retrieve the path associated with the exception. Generally, this is + * something like a path that couldn't be read or written, or a path that + * was expected to exist but didn't. + * + * @return string Path associated with the exception. + */ + public function getPath() { + return $this->path; + } + +} diff --git a/src/filesystem/PhutilDeferredLog.php b/src/filesystem/PhutilDeferredLog.php new file mode 100644 index 00000000..386fa8c1 --- /dev/null +++ b/src/filesystem/PhutilDeferredLog.php @@ -0,0 +1,246 @@ +setData( + * array( + * 'T' => date('c'), + * 'u' => $username, + * )); + * + * The log will be appended when the object's destructor is called, or when you + * invoke @{method:write}. Note that programs can exit without invoking object + * destructors (e.g., in the case of an unhandled exception, memory exhaustion, + * or SIGKILL) so writes are not guaranteed. You can call @{method:write} to + * force an explicit write to disk before the destructor is called. + * + * Log variables will be written with bytes 0x00-0x1F, 0x7F-0xFF, and backslash + * escaped using C-style escaping. Since this range includes tab, you can use + * tabs as field separators to ensure the file format is easily parsable. In + * PHP, you can decode this encoding with `stripcslashes`. + * + * If a variable is included in the log format but a value is never provided + * with @{method:setData}, it will be written as "-". + * + * @task log Logging + * @task write Writing the Log + * @task internal Internals + */ +final class PhutilDeferredLog extends Phobject { + + private $file; + private $format; + private $data; + private $didWrite; + private $failQuietly; + + +/* -( Logging )------------------------------------------------------------ */ + + + /** + * Create a new log entry, which will be written later. The format string + * should use "%x"-style placeholders to represent data which will be added + * later: + * + * $log = new PhutilDeferredLog('/some/file.log', '[%T] %u'); + * + * @param string|null The file the entry should be written to, or null to + * create a log object which does not write anywhere. + * @param string The log entry format. + * @task log + */ + public function __construct($file, $format) { + $this->file = $file; + $this->format = $format; + $this->data = array(); + $this->didWrite = false; + } + + + /** + * Add data to the log. Provide a map of variables to replace in the format + * string. For example, if you use a format string like: + * + * "[%T]\t%u" + * + * ...you might add data like this: + * + * $log->setData( + * array( + * 'T' => date('c'), + * 'u' => $username, + * )); + * + * When the log is written, the "%T" and "%u" variables will be replaced with + * the values you provide. + * + * @param dict Map of variables to values. + * @return this + * @task log + */ + public function setData(array $map) { + $this->data = $map + $this->data; + return $this; + } + + + /** + * Get existing log data. + * + * @param string Log data key. + * @param wild Default to return if data does not exist. + * @return wild Data, or default if data does not exist. + * @task log + */ + public function getData($key, $default = null) { + return idx($this->data, $key, $default); + } + + + /** + * Set the path where the log will be written. You can pass `null` to prevent + * the log from writing. + * + * NOTE: You can not change the file after the log writes. + * + * @param string|null File where the entry should be written to, or null to + * prevent writes. + * @return this + * @task log + */ + public function setFile($file) { + if ($this->didWrite) { + throw new Exception( + pht('You can not change the logfile after a write has occurred!')); + } + $this->file = $file; + return $this; + } + + public function getFile() { + return $this->file; + } + + + /** + * Set quiet (logged) failure, instead of the default loud (exception) + * failure. Throwing exceptions from destructors which exit at the end of a + * request can result in difficult-to-debug behavior. + */ + public function setFailQuietly($fail_quietly) { + $this->failQuietly = $fail_quietly; + return $this; + } + + +/* -( Writing the Log )---------------------------------------------------- */ + + + /** + * When the log object is destroyed, it writes if it hasn't written yet. + * @task write + */ + public function __destruct() { + $this->write(); + } + + + /** + * Write the log explicitly, if it hasn't been written yet. Normally you do + * not need to call this method; it will be called when the log object is + * destroyed. However, you can explicitly force the write earlier by calling + * this method. + * + * A log object will never write more than once, so it is safe to call this + * method even if the object's destructor later runs. + * + * @return this + * @task write + */ + public function write() { + if ($this->didWrite) { + return $this; + } + + // Even if we aren't going to write, format the line to catch any errors + // and invoke possible __toString() calls. + $line = $this->format(); + + try { + if ($this->file !== null) { + $dir = dirname($this->file); + if (!Filesystem::pathExists($dir)) { + Filesystem::createDirectory($dir, 0755, true); + } + + $ok = @file_put_contents( + $this->file, + $line, + FILE_APPEND | LOCK_EX); + + if ($ok === false) { + throw new Exception( + pht( + 'Unable to write to logfile "%s"!', + $this->file)); + } + } + } catch (Exception $ex) { + if ($this->failQuietly) { + phlog($ex); + } else { + throw $ex; + } + } + + $this->didWrite = true; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Format the log string, replacing "%x" variables with values. + * + * @return string Finalized, log string for writing to disk. + * @task internals + */ + private function format() { + + // Always convert '%%' to literal '%'. + $map = array('%' => '%') + $this->data; + + $result = ''; + $saw_percent = false; + foreach (phutil_utf8v($this->format) as $c) { + if ($saw_percent) { + $saw_percent = false; + if (array_key_exists($c, $map)) { + $result .= addcslashes($map[$c], "\0..\37\\\177..\377"); + } else { + $result .= '-'; + } + } else if ($c == '%') { + $saw_percent = true; + } else { + $result .= $c; + } + } + + return rtrim($result)."\n"; + } + +} diff --git a/src/filesystem/PhutilDirectoryFixture.php b/src/filesystem/PhutilDirectoryFixture.php new file mode 100644 index 00000000..8eb4c14a --- /dev/null +++ b/src/filesystem/PhutilDirectoryFixture.php @@ -0,0 +1,50 @@ +getPath(), + Filesystem::resolvePath($archive)); + return $obj; + } + + public static function newEmptyFixture() { + $obj = new PhutilDirectoryFixture(); + $obj->path = Filesystem::createTemporaryDirectory(); + return $obj; + } + + private function __construct() { + // + } + + public function __destruct() { + Filesystem::remove($this->path); + } + + public function getPath($to_file = null) { + return $this->path.'/'.ltrim($to_file, '/'); + } + + public function saveToArchive($path) { + $tmp = new TempFile(); + + execx( + 'tar -C %s -czvvf %s .', + $this->getPath(), + $tmp); + + $ok = rename($tmp, Filesystem::resolvePath($path)); + if (!$ok) { + throw new FilesystemException($path, pht('Failed to overwrite file.')); + } + + return $this; + } + +} diff --git a/src/filesystem/PhutilFileLock.php b/src/filesystem/PhutilFileLock.php new file mode 100644 index 00000000..e8dd07f4 --- /dev/null +++ b/src/filesystem/PhutilFileLock.php @@ -0,0 +1,119 @@ +lock(); + * + * do_contentious_things(); + * + * $lock->unlock(); + * + * For more information on locks, see @{class:PhutilLock}. + * + * @task construct Constructing Locks + * @task impl Implementation + */ +final class PhutilFileLock extends PhutilLock { + + private $lockfile; + private $handle; + + +/* -( Constructing Locks )------------------------------------------------- */ + + + /** + * Create a new lock on a lockfile. The file need not exist yet. + * + * @param string The lockfile to use. + * @return PhutilFileLock New lock object. + * + * @task construct + */ + public static function newForPath($lockfile) { + $lockfile = Filesystem::resolvePath($lockfile); + + $name = 'file:'.$lockfile; + $lock = self::getLock($name); + if (!$lock) { + $lock = new PhutilFileLock($name); + $lock->lockfile = $lockfile; + self::registerLock($lock); + } + + return $lock; + } + +/* -( Locking )------------------------------------------------------------ */ + + + /** + * Acquire the lock. If lock acquisition fails because the lock is held by + * another process, throws @{class:PhutilLockException}. Other exceptions + * indicate that lock acquisition has failed for reasons unrelated to locking. + * + * If the lock is already held, this method throws. You can test the lock + * status with @{method:isLocked}. + * + * @param float Seconds to block waiting for the lock. + * @return void + * + * @task lock + */ + protected function doLock($wait) { + $path = $this->lockfile; + + $handle = @fopen($path, 'a+'); + if (!$handle) { + throw new FilesystemException( + $path, + pht("Unable to open lock '%s' for writing!", $path)); + } + + $start_time = microtime(true); + do { + $would_block = null; + $ok = flock($handle, LOCK_EX | LOCK_NB, $would_block); + if ($ok) { + break; + } else { + usleep(10000); + } + } while ($wait && $wait > (microtime(true) - $start_time)); + + if (!$ok) { + fclose($handle); + throw new PhutilLockException($this->getName()); + } + + $this->handle = $handle; + } + + + /** + * Release the lock. Throws an exception on failure, e.g. if the lock is not + * currently held. + * + * @return void + * + * @task lock + */ + protected function doUnlock() { + $ok = flock($this->handle, LOCK_UN | LOCK_NB); + if (!$ok) { + throw new Exception(pht('Unable to unlock file!')); + } + + $ok = fclose($this->handle); + if (!$ok) { + throw new Exception(pht('Unable to close file!')); + } + + $this->handle = null; + } + +} diff --git a/src/filesystem/PhutilFileTree.php b/src/filesystem/PhutilFileTree.php new file mode 100644 index 00000000..a2486e36 --- /dev/null +++ b/src/filesystem/PhutilFileTree.php @@ -0,0 +1,112 @@ +splitPath($path); + $parts = array_reverse($parts); + $this->insertPath($parts, $data); + return $this; + } + + public function destroy() { + $this->parentNode = null; + foreach ($this->children as $child) { + $child->destroy(); + } + $this->children = array(); + return $this; + } + + /** + * Get the next node, iterating in depth-first order. + */ + public function getNextNode() { + if ($this->children) { + return head($this->children); + } + $cursor = $this; + while ($cursor) { + if ($cursor->getNextSibling()) { + return $cursor->getNextSibling(); + } + $cursor = $cursor->parentNode; + } + return null; + } + + public function getName() { + return $this->name; + } + + public function getFullPath() { + return $this->fullPath; + } + + public function getDepth() { + return $this->depth; + } + + public function getData() { + return $this->data; + } + + protected function insertPath(array $parts, $data) { + $part = array_pop($parts); + if ($part === null) { + if ($this->data) { + $full_path = $this->getFullPath(); + throw new Exception( + pht("Duplicate insertion for path '%s'.", $full_path)); + } + $this->data = $data; + return; + } + + if (empty($this->children[$part])) { + $node = new PhutilFileTree(); + $node->parentNode = $this; + $node->depth = $this->depth + 1; + $node->name = $part; + $node->fullPath = $this->parentNode ? ($this->fullPath.'/'.$part) : $part; + $this->children[$part] = $node; + } + + $this->children[$part]->insertPath($parts, $data); + } + + protected function splitPath($path) { + $path = trim($path, '/'); + $parts = preg_split('@/+@', $path); + return $parts; + } + + protected function getNextSibling() { + if (!$this->parentNode) { + return null; + } + + $found = false; + foreach ($this->parentNode->children as $node) { + if ($found) { + return $node; + } + if ($this->name === $node->name) { + $found = true; + } + } + + return null; + } + +} diff --git a/src/filesystem/PhutilLock.php b/src/filesystem/PhutilLock.php new file mode 100644 index 00000000..f152b521 --- /dev/null +++ b/src/filesystem/PhutilLock.php @@ -0,0 +1,235 @@ +lock(); + * do_contentious_things(); + * $lock->unlock(); + * + * If the lock can't be acquired because it is already held, + * @{class:PhutilLockException} is thrown. Other exceptions indicate + * permanent failure unrelated to locking. + * + * When extending this class, you should call @{method:getLock} to look up + * an existing lock object, and @{method:registerLock} when objects are + * constructed to register for automatic unlock on shutdown. + * + * @task impl Lock Implementation + * @task registry Lock Registry + * @task construct Constructing Locks + * @task status Determining Lock Status + * @task lock Locking + * @task internal Internals + */ +abstract class PhutilLock extends Phobject { + + private static $registeredShutdownFunction = false; + private static $locks = array(); + + private $locked = false; + private $profilerID; + private $name; + +/* -( Constructing Locks )------------------------------------------------- */ + + + /** + * Build a new lock, given a lock name. The name should be globally unique + * across all locks. + * + * @param string Globally unique lock name. + * @task construct + */ + protected function __construct($name) { + $this->name = $name; + } + + +/* -( Lock Implementation )------------------------------------------------ */ + + + /** + * Acquires the lock, or throws @{class:PhutilLockException} if it fails. + * + * @param float Seconds to block waiting for the lock. + * @return void + * @task impl + */ + abstract protected function doLock($wait); + + + /** + * Releases the lock. + * + * @return void + * @task impl + */ + abstract protected function doUnlock(); + + +/* -( Lock Registry )------------------------------------------------------ */ + + + /** + * Returns a globally unique name for this lock. + * + * @return string Globally unique lock name, across all locks. + * @task registry + */ + final public function getName() { + return $this->name; + } + + + /** + * Get a named lock, if it has been registered. + * + * @param string Lock name. + * @task registry + */ + protected static function getLock($name) { + return idx(self::$locks, $name); + } + + + /** + * Register a lock for cleanup when the process exits. + * + * @param PhutilLock Lock to register. + * @task registry + */ + protected static function registerLock(PhutilLock $lock) { + if (!self::$registeredShutdownFunction) { + register_shutdown_function(array(__CLASS__, 'unlockAll')); + self::$registeredShutdownFunction = true; + } + + $name = $lock->getName(); + if (self::getLock($name)) { + throw new Exception( + pht("Lock '%s' is already registered!", $name)); + } + + self::$locks[$name] = $lock; + } + + +/* -( Determining Lock Status )-------------------------------------------- */ + + + /** + * Determine if the lock is currently held. + * + * @return bool True if the lock is held. + * + * @task status + */ + final public function isLocked() { + return $this->locked; + } + + +/* -( Locking )------------------------------------------------------------ */ + + + /** + * Acquire the lock. If lock acquisition fails because the lock is held by + * another process, throws @{class:PhutilLockException}. Other exceptions + * indicate that lock acquisition has failed for reasons unrelated to locking. + * + * If the lock is already held by this process, this method throws. You can + * test the lock status with @{method:isLocked}. + * + * @param float Seconds to block waiting for the lock. By default, do not + * block. + * @return this + * + * @task lock + */ + final public function lock($wait = 0) { + if ($this->locked) { + $name = $this->getName(); + throw new Exception( + pht("Lock '%s' has already been locked by this process.", $name)); + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler_id = $profiler->beginServiceCall( + array( + 'type' => 'lock', + 'name' => $this->getName(), + )); + + try { + $this->doLock((float)$wait); + } catch (Exception $ex) { + $profiler->endServiceCall( + $profiler_id, + array( + 'lock' => false, + )); + throw $ex; + } + + $this->profilerID = $profiler_id; + $this->locked = true; + + return $this; + } + + + /** + * Release the lock. Throws an exception on failure, e.g. if the lock is not + * currently held. + * + * @return this + * + * @task lock + */ + final public function unlock() { + if (!$this->locked) { + $name = $this->getName(); + throw new Exception( + pht("Lock '%s is not locked by this process!", $name)); + } + + $this->doUnlock(); + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerID, + array( + 'lock' => true, + )); + + $this->profilerID = null; + $this->locked = false; + + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * On shutdown, we release all the locks. You should not call this method + * directly. Use @{method:unlock} to release individual locks. + * + * @return void + * + * @task internal + */ + public static function unlockAll() { + foreach (self::$locks as $key => $lock) { + if ($lock->locked) { + $lock->unlock(); + } + } + } + +} diff --git a/src/filesystem/PhutilLockException.php b/src/filesystem/PhutilLockException.php new file mode 100644 index 00000000..6361bc49 --- /dev/null +++ b/src/filesystem/PhutilLockException.php @@ -0,0 +1,16 @@ +hint = $hint; + return $this; + } + + public function getHint() { + return $this->hint; + } + +} diff --git a/src/filesystem/PhutilProcessQuery.php b/src/filesystem/PhutilProcessQuery.php new file mode 100644 index 00000000..558d3379 --- /dev/null +++ b/src/filesystem/PhutilProcessQuery.php @@ -0,0 +1,125 @@ +isOverseer = $is_overseer; + return $this; + } + + public function withInstances(array $instances) { + $this->instances = $instances; + return $this; + } + + public function execute() { + if (phutil_is_windows()) { + throw new Exception( + pht( + 'Querying system processes is not currently supported on '. + 'Windows.')); + } + + // TODO: See T12827. This formulation likely does not work properly on + // Solaris. + + list($processes) = execx('ps -o pid,command -a -x -w -w -w'); + $processes = phutil_split_lines($processes, false); + + $refs = array(); + foreach ($processes as $process) { + $parts = preg_split('/\s+/', trim($process), 2); + list($pid, $command) = $parts; + + $ref = id(new PhutilProcessRef()) + ->setPID((int)$pid); + + $argv = $this->getArgv($pid, $command); + $ref->setArgv($argv); + + // If this is an overseer and the command has a "-l" ("Label") argument, + // the argument contains the "PHABRICATOR_INSTANCE" value for the daemon. + // Parse it out and annotate the process. + $instance = null; + if ($ref->getIsOverseer()) { + $matches = null; + if (preg_match('/-l (\S+)/', $command, $matches)) { + $instance = $matches[1]; + } + } + + $ref->setInstance($instance); + + $refs[] = $ref; + } + + if ($this->isOverseer !== null) { + foreach ($refs as $key => $ref) { + if ($ref->getIsOverseer() !== $this->isOverseer) { + unset($refs[$key]); + } + } + } + + if ($this->instances) { + $instances_map = array_fuse($this->instances); + foreach ($refs as $key => $ref) { + if (!isset($instances_map[$ref->getInstance()])) { + unset($refs[$key]); + } + } + } + + return array_values($refs); + } + + private function getArgv($pid, $command) { + + // In the output of "ps", arguments in process titles are not escaped, so + // we can not distinguish between the processes created by running these + // commands by looking only at the output of "ps": + // + // echo 'a b' + // echo a b + // + // Both commands will have the same process title in the output of "ps". + + // This means we may split the command incorrectly in the general case, + // and this misparsing may be important if the process binary resides in + // a directory with spaces in its path and we're trying to identify which + // binary a process is running. + + // On Ubuntu, and likely most other Linux systems, we can get a raw + // command line from "/proc" with arguments delimited by "\0". + + // On macOS, there's no "/proc" and we don't currently have a robust way + // to split the process command in a way that parses spaces properly, so + // fall back to a best effort based on the output of "ps". This is almost + // always correct, since it is uncommon to put binaries under paths with + // spaces in them. + + $proc_cmdline = sprintf('/proc/%d/cmdline', $pid); + try { + $argv = Filesystem::readFile($proc_cmdline); + $argv = explode("\0", $argv); + + // The output itself is terminated with "\0", so remove the final empty + // argument. + if (last($argv) === '') { + array_pop($argv); + } + + return $argv; + } catch (Exception $ex) { + // If we fail to read "/proc", fall through to less reliable methods. + } + + // If we haven't found a better source, just split the "ps" output on + // spaces. + return preg_split('/\s+/', $command); + } +} diff --git a/src/filesystem/PhutilProcessRef.php b/src/filesystem/PhutilProcessRef.php new file mode 100644 index 00000000..dabc6483 --- /dev/null +++ b/src/filesystem/PhutilProcessRef.php @@ -0,0 +1,85 @@ +pid = $pid; + return $this; + } + + public function getPID() { + return $this->pid; + } + + public function getCommand() { + if (!$this->command) { + $this->command = phutil_string_cast(csprintf('%LR', $this->argv)); + } + + return $this->command; + } + + public function getIsOverseer() { + if ($this->isOverseer === null) { + $this->isOverseer = $this->getCommandMatch( + array( + array('phd-daemon'), + array('php', 'phd-daemon'), + )); + } + + return $this->isOverseer; + } + + public function setInstance($instance) { + $this->instance = $instance; + return $this; + } + + public function getInstance() { + return $this->instance; + } + + private function getCommandMatch(array $patterns) { + $argv = $this->getArgv(); + + foreach ($patterns as $pattern) { + $pattern = array_values($pattern); + $is_match = true; + for ($ii = 0; $ii < count($pattern); $ii++) { + if (!isset($argv[$ii])) { + $is_match = false; + break; + } + + if (basename($argv[$ii]) !== $pattern[$ii]) { + $is_match = false; + break; + } + } + + if ($is_match) { + return true; + } + } + + return false; + } + + public function setArgv(array $argv) { + $this->argv = $argv; + return $this; + } + + public function getArgv() { + return $this->argv; + } + +} diff --git a/src/filesystem/TempFile.php b/src/filesystem/TempFile.php new file mode 100644 index 00000000..895b7a2b --- /dev/null +++ b/src/filesystem/TempFile.php @@ -0,0 +1,116 @@ +dir = Filesystem::createTemporaryDirectory( + '', + 0700, + $root_directory); + if ($filename === null) { + $this->file = tempnam($this->dir, getmypid().'-'); + } else { + $this->file = $this->dir.'/'.$filename; + } + + // If we fatal (e.g., call a method on NULL), destructors are not called. + // Make sure our destructor is invoked. + register_shutdown_function(array($this, '__destruct')); + + Filesystem::writeFile($this, ''); + } + + +/* -( Configuration )------------------------------------------------------ */ + + + /** + * Normally, the file is deleted when this object passes out of scope. You + * can set it to be preserved instead. + * + * @param bool True to preserve the file after object destruction. + * @return this + * @task config + */ + public function setPreserveFile($preserve) { + $this->preserve = $preserve; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Get the path to the temporary file. Normally you can just use the object + * in a string context. + * + * @return string Absolute path to the temporary file. + * @task internal + */ + public function __toString() { + return $this->file; + } + + + /** + * When the object is destroyed, it destroys the temporary file. You can + * change this behavior with @{method:setPreserveFile}. + * + * @task internal + */ + public function __destruct() { + if ($this->destroyed) { + return; + } + + if ($this->preserve) { + return; + } + + Filesystem::remove($this->dir); + + // NOTE: tempnam() doesn't guarantee it will return a file inside the + // directory you passed to the function, so we make sure to nuke the file + // explicitly. + + Filesystem::remove($this->file); + + $this->file = null; + $this->dir = null; + $this->destroyed = true; + } + +} diff --git a/src/filesystem/__tests__/FileFinderTestCase.php b/src/filesystem/__tests__/FileFinderTestCase.php new file mode 100644 index 00000000..f7214bd1 --- /dev/null +++ b/src/filesystem/__tests__/FileFinderTestCase.php @@ -0,0 +1,232 @@ +excludePath('./exclude') + ->excludePath('subdir.txt'); + } + + public function testFinderWithChecksums() { + $this->assertFinder( + pht('Basic Checksums'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withType('f') + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt' => + 'b6cfc9ce9afe12b258ee1c19c235aa27', + 'file.txt' => + '725130ba6441eadb4e5d807898e0beae', + 'include_dir.txt/anotherfile.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'test.txt' => + 'aea46212fa8b8d0e0e6aa34a15c9e2f5', + )); + } + + public function testFinderWithoutChecksums() { + $this->assertFinder( + pht('Basic No Checksums'), + $this->newFinder() + ->withType('f') + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt', + 'file.txt', + 'include_dir.txt/anotherfile.txt', + 'include_dir.txt/subdir.txt/alsoinclude.txt', + 'test.txt', + )); + } + + public function testFinderWithFilesAndDirectories() { + $this->assertFinder( + pht('With Files And Directories'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt' => + 'b6cfc9ce9afe12b258ee1c19c235aa27', + 'file.txt' => + '725130ba6441eadb4e5d807898e0beae', + 'include_dir.txt' => null, + 'include_dir.txt/anotherfile.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'include_dir.txt/subdir.txt' => null, + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'test.txt' => + 'aea46212fa8b8d0e0e6aa34a15c9e2f5', + )); + } + + public function testFinderWithDirectories() { + $this->assertFinder( + pht('Just Directories'), + $this->newFinder() + ->withType('d'), + array( + 'include_dir.txt', + 'include_dir.txt/subdir.txt', + )); + } + + public function testFinderWithPath() { + $this->assertFinder( + pht('With Path'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withType('f') + ->withPath('*/include_dir.txt/subdir.txt/alsoinclude.txt') + ->withSuffix('txt'), + array( + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + )); + } + + public function testFinderWithNames() { + $this->assertFinder( + pht('With Names'), + $this->newFinder() + ->withType('f') + ->withPath('*') + ->withName('test'), + array( + 'include_dir.txt/subdir.txt/test', + 'include_dir.txt/test', + 'test', + )); + } + + public function testFinderWithNameAndSuffix() { + $this->assertFinder( + pht('With Name and Suffix'), + $this->newFinder() + ->withType('f') + ->withName('alsoinclude.txt') + ->withSuffix('txt'), + array( + 'include_dir.txt/subdir.txt/alsoinclude.txt', + )); + } + + public function testFinderWithGlobMagic() { + // Fill a temporary directory with all this magic garbage so we don't have + // to check a bunch of files with backslashes in their names into version + // control. + $tmp_dir = Filesystem::createTemporaryDirectory(); + + $crazy_magic = array( + 'backslash\\.\\*', + 'star-*.*', + 'star-*.txt', + 'star.t*t', + 'star.tesseract', + ); + + foreach ($crazy_magic as $sketchy_path) { + Filesystem::writeFile($tmp_dir.'/'.$sketchy_path, '.'); + } + + $this->assertFinder( + pht('Glob Magic, Literal .t*t'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('t*t'), + array( + 'star.t*t', + )); + + $this->assertFinder( + pht('Glob Magic, .tesseract'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('tesseract'), + array( + 'star.tesseract', + )); + + $this->assertFinder( + pht('Glob Magic, Name'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withName('star-*'), + array()); + + $this->assertFinder( + pht('Glob Magic, Name + Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withName('star-*.*'), + array( + 'star-*.*', + )); + + $this->assertFinder( + pht('Glob Magic, Backslash Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('\\*'), + array( + 'backslash\\.\\*', + )); + + $this->assertFinder( + pht('Glob Magic, With Globs'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withNameGlob('star-*'), + array( + 'star-*.*', + 'star-*.txt', + )); + + $this->assertFinder( + pht('Glob Magic, With Globs + Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withNameGlob('star-*') + ->withSuffix('txt'), + array( + 'star-*.txt', + )); + } + + private function assertFinder($label, FileFinder $finder, $expect) { + $modes = array( + 'php', + 'shell', + ); + foreach ($modes as $mode) { + $actual = id(clone $finder) + ->setForceMode($mode) + ->find(); + + if ($finder->getGenerateChecksums()) { + ksort($actual); + } else { + sort($actual); + } + + $this->assertEqual( + $expect, + $actual, + pht('Test Case "%s" in Mode "%s"', $label, $mode)); + } + } + +} diff --git a/src/filesystem/__tests__/FilesystemTestCase.php b/src/filesystem/__tests__/FilesystemTestCase.php new file mode 100644 index 00000000..b04de456 --- /dev/null +++ b/src/filesystem/__tests__/FilesystemTestCase.php @@ -0,0 +1,216 @@ +assertEqual( + true, + Filesystem::binaryExists($exists)); + + // We don't expect to find this binary on any system. + + $this->assertEqual( + false, + Filesystem::binaryExists('halting-problem-decider')); + } + + public function testResolveBinary() { + // Test to make sure resolveBinary() returns the full path to the `which` + // and `where` binaries. + + if (phutil_is_windows()) { + $binary = 'where'; + } else { + $binary = 'which'; + } + + $path = Filesystem::resolveBinary($binary); + $this->assertFalse(null === $path); + $this->assertTrue(file_exists($path)); + $this->assertFalse(is_dir($path)); + + $this->assertEqual(null, + Filesystem::resolveBinary('halting-problem-decider')); + } + + public function testWriteUniqueFile() { + $tmp = new TempFile(); + $dir = dirname($tmp); + + // Writing an empty file should work. + $f = Filesystem::writeUniqueFile($dir, ''); + $this->assertEqual('', Filesystem::readFile($f)); + + // File name should be unique. + $g = Filesystem::writeUniqueFile($dir, 'quack'); + $this->assertTrue($f != $g); + } + + public function testReadRandomBytes() { + $number_of_bytes = 1024; + $data = Filesystem::readRandomBytes($number_of_bytes); + $this->assertTrue(strlen($data) == $number_of_bytes); + + $data1 = Filesystem::readRandomBytes(128); + $data2 = Filesystem::readRandomBytes(128); + $this->assertFalse($data1 == $data2); + + $caught = null; + try { + Filesystem::readRandomBytes(0); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof Exception); + } + + public function testWalkToRoot() { + $test_cases = array( + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt/test', + dirname(__FILE__), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt/test', + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__).'/data/include_dir.txt', + dirname(__FILE__).'/data', + dirname(__FILE__), + ), + ), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__).'/data/include_dir.txt', + dirname(__FILE__).'/data', + dirname(__FILE__), + ), + ), + + 'root and path are identical' => array( + dirname(__FILE__), + dirname(__FILE__), + array( + dirname(__FILE__), + ), + ), + + 'root is not an ancestor of path' => array( + dirname(__FILE__), + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + array(), + ), + + 'fictional paths work' => array( + '/x/y/z', + '/', + array( + '/x/y/z', + '/x/y', + '/x', + '/', + ), + ), + + ); + + foreach ($test_cases as $test_case) { + list($path, $root, $expected) = $test_case; + + $this->assertEqual( + $expected, + Filesystem::walkToRoot($path, $root)); + } + } + + public function testisDescendant() { + $test_cases = array( + array( + __FILE__, + dirname(__FILE__), + true, + ), + array( + dirname(__FILE__), + dirname(dirname(__FILE__)), + true, + ), + array( + dirname(__FILE__), + phutil_get_library_root_for_path(__FILE__), + true, + ), + array( + dirname(dirname(__FILE__)), + dirname(__FILE__), + false, + ), + array( + dirname(__FILE__).'/quack', + dirname(__FILE__), + false, + ), + ); + + foreach ($test_cases as $test_case) { + list($path, $root, $expected) = $test_case; + + $this->assertEqual( + $expected, + Filesystem::isDescendant($path, $root), + sprintf( + 'Filesystem::isDescendant(%s, %s)', + phutil_var_export($path), + phutil_var_export($root))); + } + } + + public function testRandomIntegers() { + $valid_ranges = array( + array(5, 5), + array(-1, 1), + array(0, 10000), + array(0, 999999999), + array(-65535, 65536), + ); + + foreach ($valid_ranges as $case) { + list($min, $max) = $case; + + $result = Filesystem::readRandomInteger($min, $max); + + $this->assertTrue($min <= $result, pht('%d <= %d', $min, $result)); + $this->assertTrue($max >= $result, pht('%d >= %d', $max, $result)); + } + + $invalid_ranges = array( + array('1', '2'), + array(1.0, 2.0), + array(5, 3), + ); + + foreach ($invalid_ranges as $case) { + list($min, $max) = $case; + + $caught = null; + try { + Filesystem::readRandomInteger($min, $max); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + } + +} diff --git a/src/filesystem/__tests__/PhutilDeferredLogTestCase.php b/src/filesystem/__tests__/PhutilDeferredLogTestCase.php new file mode 100644 index 00000000..3e6c6432 --- /dev/null +++ b/src/filesystem/__tests__/PhutilDeferredLogTestCase.php @@ -0,0 +1,169 @@ +checkLog( + "derp\n", + 'derp', + array()); + + $this->checkLog( + "[20 Aug 1984] alincoln\n", + '[%T] %u', + array( + 'T' => '20 Aug 1984', + 'u' => 'alincoln', + )); + + $this->checkLog( + "%%%%%\n", + '%%%%%%%%%%', + array( + '%' => '%', + )); + + $this->checkLog( + "\\000\\001\\002\n", + '%a%b%c', + array( + 'a' => chr(0), + 'b' => chr(1), + 'c' => chr(2), + )); + + $this->checkLog( + "Download: 100%\n", + 'Download: %C', + array( + 'C' => '100%', + )); + + $this->checkLog( + "- bee -\n", + '%a %b %c', + array( + 'b' => 'bee', + )); + + $this->checkLog( + "\\\\\n", + '%b', + array( + 'b' => '\\', + )); + + $this->checkLog( + "a\t\\t\n", + "%a\t%b", + array( + 'a' => 'a', + 'b' => "\t", + )); + + $this->checkLog( + "\1ab\n", + "\1a%a", + array( + 'a' => 'b', + )); + + $this->checkLog( + "a % xb\n", + '%a %% x%b', + array( + 'a' => 'a', + 'b' => 'b', + )); + } + + public function testLogWriteFailure() { + $caught = null; + try { + if (phutil_is_hiphop_runtime()) { + // In HipHop exceptions thrown in destructors are not normally + // catchable, so call __destruct() explicitly. + $log = new PhutilDeferredLog('/derp/derp/derp/derp/derp', 'derp'); + $log->__destruct(); + } else { + new PhutilDeferredLog('/derp/derp/derp/derp/derp', 'derp'); + } + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof Exception); + } + + public function testManyWriters() { + $root = phutil_get_library_root('arcanist').'/../'; + $bin = $root.'scripts/test/deferred_log.php'; + + $n_writers = 3; + $n_lines = 8; + + $tmp = new TempFile(); + + $futures = array(); + for ($ii = 0; $ii < $n_writers; $ii++) { + $futures[] = new ExecFuture('%s %d %s', $bin, $n_lines, (string)$tmp); + } + + id(new FutureIterator($futures)) + ->resolveAll(); + + $this->assertEqual( + str_repeat("abcdefghijklmnopqrstuvwxyz\n", $n_writers * $n_lines), + Filesystem::readFile($tmp)); + } + + public function testNoWrite() { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, 'xyz'); + $log->setFile(null); + unset($log); + + $this->assertEqual('', Filesystem::readFile($tmp), pht('No Write')); + } + + public function testDoubleWrite() { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, 'xyz'); + $log->write(); + $log->write(); + unset($log); + + $this->assertEqual( + "xyz\n", + Filesystem::readFile($tmp), pht('Double Write')); + } + + public function testSetAfterWrite() { + $tmp1 = new TempFile(); + $tmp2 = new TempFile(); + + $log = new PhutilDeferredLog($tmp1, 'xyz'); + $log->write(); + + $caught = null; + try { + $log->setFile($tmp2); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception, pht('Set After Write')); + } + + private function checkLog($expect, $format, $data) { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, $format); + $log->setData($data); + unset($log); + + $this->assertEqual($expect, Filesystem::readFile($tmp), $format); + } + +} diff --git a/src/filesystem/__tests__/PhutilFileLockTestCase.php b/src/filesystem/__tests__/PhutilFileLockTestCase.php new file mode 100644 index 00000000..17f9632b --- /dev/null +++ b/src/filesystem/__tests__/PhutilFileLockTestCase.php @@ -0,0 +1,184 @@ +assertTrue($this->lockTest($file)); + + $this->assertTrue($this->lockTest($file)); + } + + public function testLockHolding() { + // When a process is holding a lock, other processes should be unable + // to acquire it. + + $file = new TempFile(); + $hold = $this->holdLock($file); + + $this->assertFalse($this->lockTest($file)); + + $hold->resolveKill(); + + $this->assertTrue($this->lockTest($file)); + } + + public function testInProcessLocking() { + // Other processes should be unable to lock a file if we hold the lock. + + $file = new TempFile(); + + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $this->assertFalse($this->lockTest($file)); + + $lock->unlock(); + + $this->assertTrue($this->lockTest($file)); + } + + public function testInProcessHolding() { + // We should be unable to lock a file if another process is holding the + // lock. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $hold = $this->holdLock($file); + $caught = null; + try { + $lock->lock(); + } catch (PhutilLockException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilLockException); + + $hold->resolveKill(); + + $this->assertTrue($this->lockTest($file)); + + $lock->lock(); + $lock->unlock(); + } + + public function testRelock() { + // Trying to lock a file twice should throw an exception. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $caught = null; + try { + $lock->lock(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testExcessiveUnlock() { + // Trying to unlock a file twice should throw an exception. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $lock->unlock(); + + $caught = null; + try { + $lock->unlock(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnlockAll() { + // unlockAll() should release all locks. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $lock->lock(); + + $this->assertFalse($this->lockTest($file)); + + PhutilFileLock::unlockAll(); + + $this->assertTrue($this->lockTest($file)); + + // Calling this again shouldn't do anything bad. + PhutilFileLock::unlockAll(); + + $this->assertTrue($this->lockTest($file)); + + $lock->lock(); + $lock->unlock(); + } + + public function testIsLocked() { + // isLocked() should report lock status accurately. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $this->assertFalse($lock->isLocked()); + + $lock->lock(); + + $this->assertTrue($lock->isLocked()); + + $lock->unlock(); + + $this->assertFalse($lock->isLocked()); + } + + private function lockTest($file) { + list($err) = $this->buildLockFuture('--test', $file)->resolve(); + return ($err == 0); + } + + private function holdLock($file) { + $future = $this->buildLockFuture('--hold', $file); + + // We can't return until we're sure the subprocess has had time to acquire + // the lock. Since actually testing for the lock would be kind of silly + // and guarantee that we loop forever if the locking primitive broke, + // watch stdout for a *claim* that it has acquired the lock instead. + + // Make sure we don't loop forever, no matter how bad things get. + $future->setTimeout(30); + + $buf = ''; + while (!$future->isReady()) { + list($stdout) = $future->read(); + $buf .= $stdout; + if (strpos($buf, 'LOCK ACQUIRED') !== false) { + return $future; + } + } + + throw new Exception(pht('Unable to hold lock in external process!')); + } + + private function buildLockFuture($flags, $file) { + $root = dirname(phutil_get_library_root('arcanist')); + $bin = $root.'/scripts/utils/lock.php'; + + // NOTE: Use `exec` so this passes on Ubuntu, where the default `dash` shell + // will eat any kills we send during the tests. + $future = new ExecFuture('exec php %s %C %s', $bin, $flags, $file); + $future->start(); + return $future; + } + +} diff --git a/src/filesystem/__tests__/PhutilProcessRefTestCase.php b/src/filesystem/__tests__/PhutilProcessRefTestCase.php new file mode 100644 index 00000000..1c542ee7 --- /dev/null +++ b/src/filesystem/__tests__/PhutilProcessRefTestCase.php @@ -0,0 +1,59 @@ +setArgv($argv); + + $actual = $ref->getIsOverseer(); + + $this->assertEqual( + $expect, + $actual, + pht('argv: %s', implode(' ', $argv))); + } + } + +} diff --git a/src/filesystem/__tests__/data/.hidden.txt b/src/filesystem/__tests__/data/.hidden.txt new file mode 100644 index 00000000..f414c299 --- /dev/null +++ b/src/filesystem/__tests__/data/.hidden.txt @@ -0,0 +1 @@ +Hidden included file diff --git a/src/filesystem/__tests__/data/exclude/file.txt b/src/filesystem/__tests__/data/exclude/file.txt new file mode 100644 index 00000000..5c6507c7 --- /dev/null +++ b/src/filesystem/__tests__/data/exclude/file.txt @@ -0,0 +1 @@ +This file is excluded. diff --git a/src/filesystem/__tests__/data/exclude/test b/src/filesystem/__tests__/data/exclude/test new file mode 100644 index 00000000..bce1946c --- /dev/null +++ b/src/filesystem/__tests__/data/exclude/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/file.txt b/src/filesystem/__tests__/data/file.txt new file mode 100644 index 00000000..6e8ebc4f --- /dev/null +++ b/src/filesystem/__tests__/data/file.txt @@ -0,0 +1 @@ +Included file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt b/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt new file mode 100644 index 00000000..2dbbec48 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt @@ -0,0 +1 @@ +Also included. diff --git a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt new file mode 100644 index 00000000..2dbbec48 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt @@ -0,0 +1 @@ +Also included. diff --git a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test new file mode 100644 index 00000000..bce1946c --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/test b/src/filesystem/__tests__/data/include_dir.txt/test new file mode 100644 index 00000000..bce1946c --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/test b/src/filesystem/__tests__/data/test new file mode 100644 index 00000000..bce1946c --- /dev/null +++ b/src/filesystem/__tests__/data/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/test.txt b/src/filesystem/__tests__/data/test.txt new file mode 100644 index 00000000..bce1946c --- /dev/null +++ b/src/filesystem/__tests__/data/test.txt @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/binary/PhutilBinaryAnalyzer.php b/src/filesystem/binary/PhutilBinaryAnalyzer.php new file mode 100644 index 00000000..3ab30909 --- /dev/null +++ b/src/filesystem/binary/PhutilBinaryAnalyzer.php @@ -0,0 +1,67 @@ +getBinaryKey(); + } + + public function getBinaryKey() { + return $this->getPhobjectClassConstant('BINARY'); + } + + public function isBinaryAvailable() { + return Filesystem::binaryExists($this->getBinaryName()); + } + + abstract protected function newBinaryVersion(); + + protected function newBinaryPath() { + return Filesystem::resolveBinary($this->getBinaryName()); + } + + final public function getBinaryVersion() { + return $this->newBinaryVersion(); + } + + final public function requireBinaryVersion() { + $version = $this->getBinaryVersion(); + $binary = $this->getBinaryName(); + if ($version === null) { + throw new Exception( + pht( + 'Unable to determine the installed version of binary "%s". This '. + 'version is required.', + $binary)); + } + return $version; + } + + final public function getBinaryPath() { + return $this->newBinaryPath(); + } + + final public static function getAllBinaries() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getBinaryKey') + ->setSortMethod('getBinaryName') + ->execute(); + } + + final public static function getForBinary($binary) { + $map = self::getAllBinaries(); + + $analyzer = idx($map, $binary); + if (!$analyzer) { + throw new Exception( + pht( + 'No analyzer is available for binary "%s".', + $binary)); + } + + return $analyzer; + } + +} diff --git a/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php b/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php new file mode 100644 index 00000000..4c4cabd8 --- /dev/null +++ b/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php @@ -0,0 +1,31 @@ +setEnv( + array( + 'HGPLAIN' => 1, + )); + + list($err, $stdout) = $future->resolve(); + + if ($err) { + return null; + } + + return self::parseMercurialBinaryVersion($stdout); + } + + public static function parseMercurialBinaryVersion($stdout) { + // NOTE: At least on OSX, recent versions of Mercurial report this + // string in this format: + // + // Mercurial Distributed SCM (version 3.1.1+20140916) + + $matches = null; + $pattern = '/^Mercurial Distributed SCM \(version ([\d.]+)/m'; + if (preg_match($pattern, $stdout, $matches)) { + return $matches[1]; + } + + return null; + } + + /** + * The `locate` command is deprecated as of Mercurial 3.2, to be replaced + * with `files` command, which supports most of the same arguments. This + * determines whether the new `files` command should be used instead of + * the `locate` command. + * + * @return boolean True if the version of Mercurial is new enough to support + * the `files` command, or false if otherwise. + */ + public function isMercurialFilesCommandAvailable() { + return self::versionHasCapability( + $this->requireBinaryVersion(), + self::CAPABILITY_FILES); + } + + public function isMercurialVulnerableToInjection() { + return self::versionHasCapability( + $this->requireBinaryVersion(), + self::CAPABILITY_INJECTION); + } + + + public static function versionHasCapability( + $mercurial_version, + $capability) { + + switch ($capability) { + case self::CAPABILITY_FILES: + return version_compare($mercurial_version, '3.2', '>='); + case self::CAPABILITY_INJECTION: + return version_compare($mercurial_version, '3.2.4', '<'); + default: + throw new Exception( + pht( + 'Unknown Mercurial capability "%s".', + $capability)); + } + + } + + +} diff --git a/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php b/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php new file mode 100644 index 00000000..608be001 --- /dev/null +++ b/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php @@ -0,0 +1,31 @@ + '2.11.0', + 'definitely git 7.0' => null, + ); + + foreach ($map as $input => $expect) { + $actual = PhutilGitBinaryAnalyzer::parseGitBinaryVersion($input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function getParseMercurialBinaryVersions() { + $map = array( + "Mercurial Distributed SCM (version 3.5.2+20151001)\n" + => '3.5.2', + 'This Is Mercurial 22.0' => null, + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilMercurialBinaryAnalyzer::parseMercurialBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParseSubversionBinaryVersions() { + $map = array( + "1.7.20\n" => '1.7.20', + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilSubversionBinaryAnalyzer::parseSubversionBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParseDiffBinaryVersions() { + $diff_version_281 = << '2.8.1', + 'diff version 1.2.3' => null, + ); + + foreach ($map as $input => $expect) { + $actual = PhutilDiffBinaryAnalyzer::parseDiffBinaryVersion($input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParsePygmentizeBinaryVersions() { + $map = array( + "Pygments version 2.0.1, (c) 2006-2014 by Georg Brandl.\n" + => '2.0.1', + 'pygments 3.4' => null, + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilPygmentizeBinaryAnalyzer::parsePygmentizeBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testMercurialFilesCommandVersions() { + $cases = array( + PhutilMercurialBinaryAnalyzer::CAPABILITY_FILES => array( + '2.6.2' => false, + '2.9' => false, + '3.1' => false, + '3.2' => true, + '3.3' => true, + '3.5.2' => true, + ), + PhutilMercurialBinaryAnalyzer::CAPABILITY_INJECTION => array( + '2.0' => true, + '3.2.3' => true, + '3.2.4' => false, + ), + ); + + foreach ($cases as $capability => $map) { + foreach ($map as $input => $expect) { + $actual = PhutilMercurialBinaryAnalyzer::versionHasCapability( + $input, + $capability); + $this->assertEqual( + $expect, + $actual, + pht('%s on %s', $capability, $input)); + } + } + + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALarge.php b/src/filesystem/linesofalarge/LinesOfALarge.php new file mode 100644 index 00000000..94496cdd --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALarge.php @@ -0,0 +1,224 @@ +delimiter = $character; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Hook, called before @{method:rewind()}. Allows a concrete implementation + * to open resources or reset state. + * + * @return void + * @task internals + */ + abstract protected function willRewind(); + + + /** + * Called when the iterator needs more data. The subclass should return more + * data, or empty string to indicate end-of-stream. + * + * @return string Data, or empty string for end-of-stream. + * @task internals + */ + abstract protected function readMore(); + + +/* -( Iterator Interface )------------------------------------------------- */ + + + /** + * @task iterator + */ + final public function rewind() { + $this->willRewind(); + + $this->buf = ''; + $this->pos = 0; + $this->num = 0; + $this->eof = false; + $this->valid = true; + + $this->next(); + } + + + /** + * @task iterator + */ + final public function key() { + return $this->num; + } + + + /** + * @task iterator + */ + final public function current() { + return $this->line; + } + + + /** + * @task iterator + */ + final public function valid() { + return $this->valid; + } + + + /** + * @task iterator + */ + final public function next() { + // Consume the stream a chunk at a time into an internal buffer, then + // read lines out of that buffer. This gives us flexibility (stream sources + // only need to be able to read blocks of bytes) and performance (we can + // read in reasonably-sized chunks of many lines), at the cost of some + // complexity in buffer management. + + // We do this in a loop to avoid recursion when consuming more bytes, in + // case the size of a line is very large compared to the chunk size we + // read. + while (true) { + if (strlen($this->buf)) { + + // If we don't have a delimiter, return the entire buffer. + if ($this->delimiter === null) { + $this->num++; + $this->line = substr($this->buf, $this->pos); + $this->buf = ''; + $this->pos = 0; + return; + } + + // If we already have some data buffered, try to get the next line from + // the buffer. Search through the buffer for a delimiter. This should be + // the common case. + $endl = strpos($this->buf, $this->delimiter, $this->pos); + + if ($endl !== false) { + // We found a delimiter, so return the line it delimits. We leave + // the buffer as-is so we don't need to reallocate it, in case it is + // large relative to the size of a line. Instead, we move our cursor + // within the buffer forward. + $this->num++; + $this->line = substr($this->buf, $this->pos, ($endl - $this->pos)); + $this->pos = $endl + 1; + return; + } + + // We only have part of a line left in the buffer (no delimiter in the + // remaining piece), so throw away the part we've already emitted and + // continue below. + $this->buf = substr($this->buf, $this->pos); + $this->pos = 0; + } + + // We weren't able to produce the next line from the bytes we already had + // buffered, so read more bytes from the input stream. + + if ($this->eof) { + // NOTE: We keep track of EOF (an empty read) so we don't make any more + // reads afterward. Normally, we'll return from the first EOF read, + // emit the line, and then next() will be called again. Without tracking + // EOF, we'll attempt another read. A well-behaved implementation should + // still return empty string, but we can protect against any issues + // here by keeping a flag. + $more = ''; + } else { + $more = $this->readMore(); + } + + if (strlen($more)) { + // We got some bytes, so add them to the buffer and then try again. + $this->buf .= $more; + continue; + } else { + // No more bytes. If we have a buffer, return its contents. We + // potentially return part of a line here if the last line had no + // delimiter, but that currently seems reasonable as a default + // behavior. If we don't have a buffer, we're done. + $this->eof = true; + if (strlen($this->buf)) { + $this->num++; + $this->line = $this->buf; + $this->buf = null; + } else { + $this->valid = false; + } + break; + } + } + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php b/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php new file mode 100644 index 00000000..c54151f1 --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php @@ -0,0 +1,119 @@ +future = $future; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * On destruction, we terminate the subprocess if it hasn't exited already. + * + * @return void + * @task internals + */ + public function __destruct() { + if (!$this->future->isReady()) { + $this->future->resolveKill(); + } + } + + + /** + * The PHP `foreach()` construct calls rewind() once, so we allow the first + * `rewind()`, without effect. Subsequent rewinds mean misuse. + * + * @return void + * @task internals + */ + protected function willRewind() { + if ($this->didRewind) { + throw new Exception( + pht( + "You can not reiterate over a %s object. The entire goal of the ". + "construct is to avoid keeping output in memory. What you are ". + "attempting to do is silly and doesn't make any sense.", + __CLASS__)); + } + $this->didRewind = true; + } + + + /** + * Read more data from the subprocess. + * + * @return string Bytes read from stdout. + * @task internals + */ + protected function readMore() { + $future = $this->future; + + while (true) { + // Read is nonblocking, so we need to sit in this loop waiting for input + // or we'll incorrectly signal EOF to the parent. + $stdout = $future->readStdout(); + $future->discardStdoutBuffer(); + + if (strlen($stdout)) { + return $stdout; + } + + // If we didn't read anything, we can exit the loop if the subprocess + // has exited. + + if ($future->isReady()) { + // Throw if the process exits with a nonzero status code. This makes + // error handling simpler, and prevents us from returning part of a line + // if the process terminates mid-output. + $future->resolvex(); + + // Read and return anything that's left. + $stdout = $future->readStdout(); + $future->discardStdoutBuffer(); + + return $stdout; + } + } + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALargeFile.php b/src/filesystem/linesofalarge/LinesOfALargeFile.php new file mode 100644 index 00000000..e04c4074 --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALargeFile.php @@ -0,0 +1,106 @@ +fileName = Filesystem::resolvePath((string)$file_name); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Closes the file handle. + * + * @return void + * @task internals + */ + public function __destruct() { + $this->closeHandle(); + } + + + /** + * Close the file handle, if it is open. + * + * @return $this + * @task internals + */ + private function closeHandle() { + if ($this->handle) { + fclose($this->handle); + $this->handle = null; + } + return $this; + } + + + /** + * Closes the file handle if it is open, and reopens it. + * + * @return void + * @task internals + */ + protected function willRewind() { + $this->closeHandle(); + $this->handle = @fopen($this->fileName, 'r'); + if (!$this->handle) { + throw new FilesystemException( + $this->fileName, + pht('Failed to open file!')); + } + } + + + /** + * Read the file chunk-by-chunk. + * + * @return string Next chunk of the file. + * @task internals + */ + protected function readMore() { + // NOTE: At least on OSX in reasonably normal test cases, increasing the + // size of this read has no impact on performance. + + $more = @fread($this->handle, 2048); + if ($more === false) { + throw new FilesystemException( + $this->fileName, + pht('Failed to read file!')); + } + return $more; + } + +} diff --git a/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php b/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php new file mode 100644 index 00000000..fc552637 --- /dev/null +++ b/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php @@ -0,0 +1,62 @@ +writeAndRead( + "cat\ndog\nbird\n", + array( + 'cat', + 'dog', + 'bird', + )); + } + + public function testExecLargeFile() { + $line = pht('The quick brown fox jumps over the lazy dog.'); + $n = 100; + + $this->writeAndRead( + str_repeat($line."\n", $n), + array_fill(0, $n, $line)); + } + + public function testExecLongLine() { + $line = str_repeat('x', 64 * 1024); + $this->writeAndRead($line, array($line)); + } + + public function testExecException() { + $caught = null; + try { + $future = new ExecFuture('does-not-exist.exe.sh'); + foreach (new LinesOfALargeExecFuture($future) as $line) { + // ignore + } + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof CommandException); + } + + private function writeAndRead($write, $read) { + $future = new ExecFuture('cat'); + $future->write($write); + + $lines = array(); + foreach (new LinesOfALargeExecFuture($future) as $line) { + $lines[] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + +} diff --git a/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php b/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php new file mode 100644 index 00000000..94fcbb2a --- /dev/null +++ b/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php @@ -0,0 +1,132 @@ +writeAndRead( + 'abcd', + array( + 'abcd', + )); + } + + public function testTerminalDelimiterPresent() { + $this->writeAndRead( + "bat\ncat\ndog\n", + array( + 'bat', + 'cat', + 'dog', + )); + } + + public function testTerminalDelimiterAbsent() { + $this->writeAndRead( + "bat\ncat\ndog", + array( + 'bat', + 'cat', + 'dog', + )); + } + + public function testChangeDelimiter() { + $this->writeAndRead( + "bat\1cat\1dog\1", + array( + 'bat', + 'cat', + 'dog', + ), + "\1"); + } + + public function testEmptyLines() { + $this->writeAndRead( + "\n\nbat\n", + array( + '', + '', + 'bat', + )); + } + + public function testLargeFile() { + $line = pht('The quick brown fox jumps over the lazy dog.'); + $n = 100; + + $this->writeAndRead( + str_repeat($line."\n", $n), + array_fill(0, $n, $line)); + } + + public function testLongLine() { + $line = str_repeat('x', 64 * 1024); + $this->writeAndRead($line, array($line)); + } + + public function testReadFailure() { + $caught = null; + try { + $f = new LinesOfALargeFile('/does/not/exist.void'); + $f->rewind(); + } catch (FilesystemException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof $ex); + } + + public function testLineFilter() { + $write = "bat\ncat\ndog\nBat\nCat\nDog\n"; + $read = array( + 1 => 'cat', + 4 => 'Cat', + ); + + $tmp = new TempFile(); + Filesystem::writeFile($tmp, $write); + + $lines = array(); + $iterator = new PhutilCallbackFilterIterator( + new LinesOfALargeFile($tmp), + array($this, 'allowCatsOnly')); + foreach ($iterator as $n => $line) { + $lines[$n - 1] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + + public function allowCatsOnly($line) { + $line = strtoupper($line); + if ($line != 'CAT') { + return null; + } + return $line; + } + + private function writeAndRead($write, $read, $delimiter = "\n") { + $tmp = new TempFile(); + Filesystem::writeFile($tmp, $write); + + $lines = array(); + $iterator = id(new LinesOfALargeFile($tmp))->setDelimiter($delimiter); + foreach ($iterator as $n => $line) { + $lines[$n - 1] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + +} diff --git a/src/future/Future.php b/src/future/Future.php new file mode 100644 index 00000000..dcc3c25f --- /dev/null +++ b/src/future/Future.php @@ -0,0 +1,189 @@ +getDefaultWait(); + do { + $this->checkException(); + if ($this->isReady()) { + break; + } + + $read = $this->getReadSockets(); + $write = $this->getWriteSockets(); + + if ($timeout !== null) { + $elapsed = microtime(true) - $start; + + if ($elapsed > $timeout) { + $this->checkException(); + return null; + } else { + $wait = $timeout - $elapsed; + } + } + + if ($read || $write) { + self::waitForSockets($read, $write, $wait); + } + } while (true); + + $this->checkException(); + return $this->getResult(); + } + + public function setException(Exception $ex) { + $this->exception = $ex; + return $this; + } + + public function getException() { + return $this->exception; + } + + + /** + * If an exception was set by setException(), throw it. + */ + private function checkException() { + if ($this->exception) { + throw $this->exception; + } + } + + + /** + * Retrieve a list of sockets which we can wait to become readable while + * a future is resolving. If your future has sockets which can be + * `select()`ed, return them here (or in @{method:getWriteSockets}) to make + * the resolve loop do a `select()`. If you do not return sockets in either + * case, you'll get a busy wait. + * + * @return list A list of sockets which we expect to become readable. + */ + public function getReadSockets() { + return array(); + } + + + /** + * Retrieve a list of sockets which we can wait to become writable while a + * future is resolving. See @{method:getReadSockets}. + * + * @return list A list of sockets which we expect to become writable. + */ + public function getWriteSockets() { + return array(); + } + + + /** + * Wait for activity on one of several sockets. + * + * @param list List of sockets expected to become readable. + * @param list List of sockets expected to become writable. + * @param float Timeout, in seconds. + * @return void + */ + public static function waitForSockets( + array $read_list, + array $write_list, + $timeout = 1) { + if (!self::$handlerInstalled) { + // If we're spawning child processes, we need to install a signal handler + // here to catch cases like execing '(sleep 60 &) &' where the child + // exits but a socket is kept open. But we don't actually need to do + // anything because the SIGCHLD will interrupt the stream_select(), as + // long as we have a handler registered. + if (function_exists('pcntl_signal')) { + if (!pcntl_signal(SIGCHLD, array(__CLASS__, 'handleSIGCHLD'))) { + throw new Exception(pht('Failed to install signal handler!')); + } + } + self::$handlerInstalled = true; + } + + $timeout_sec = (int)$timeout; + $timeout_usec = (int)(1000000 * ($timeout - $timeout_sec)); + + $exceptfds = array(); + $ok = @stream_select( + $read_list, + $write_list, + $exceptfds, + $timeout_sec, + $timeout_usec); + + if ($ok === false) { + // Hopefully, means we received a SIGCHLD. In the worst case, we degrade + // to a busy wait. + } + } + + public static function handleSIGCHLD($signo) { + // This function is a dummy, we just need to have some handler registered + // so that PHP will get interrupted during stream_select(). If we don't + // register a handler, stream_select() won't fail. + } + + + /** + * Retrieve the final result of the future. This method will be called after + * the future is ready (as per @{method:isReady}) but before results are + * passed back to the caller. The major use of this function is that you can + * override it in subclasses to do postprocessing or error checking, which is + * particularly useful if building application-specific futures on top of + * primitive transport futures (like @{class:CurlFuture} and + * @{class:ExecFuture}) which can make it tricky to hook this logic into the + * main pipeline. + * + * @return mixed Final resolution of this future. + */ + protected function getResult() { + return $this->result; + } + + /** + * Default amount of time to wait on stream select for this future. Normally + * 1 second is fine, but if the future has a timeout sooner than that it + * should return the amount of time left before the timeout. + */ + public function getDefaultWait() { + return 1; + } + + public function start() { + $this->isReady(); + return $this; + } + +} diff --git a/src/future/FutureIterator.php b/src/future/FutureIterator.php new file mode 100644 index 00000000..ac1eec97 --- /dev/null +++ b/src/future/FutureIterator.php @@ -0,0 +1,327 @@ + new ExecFuture('wc -c a.txt'), + * 'b.txt' => new ExecFuture('wc -c b.txt'), + * 'c.txt' => new ExecFuture('wc -c c.txt'), + * ); + * + * foreach (new FutureIterator($futures) as $key => $future) { + * // IMPORTANT: keys are preserved but the order of elements is not. This + * // construct iterates over the futures in the order they resolve, so the + * // fastest future is the one you'll get first. This allows you to start + * // doing followup processing as soon as possible. + * + * list($err, $stdout) = $future->resolve(); + * do_some_processing($stdout); + * } + * + * For a general overview of futures, see @{article:Using Futures}. + * + * @task basics Basics + * @task config Configuring Iteration + * @task iterator Iterator Interface + * @task internal Internals + */ +final class FutureIterator extends Phobject implements Iterator { + + protected $wait = array(); + protected $work = array(); + protected $futures = array(); + protected $key; + + protected $limit; + + protected $timeout; + protected $isTimeout = false; + + +/* -( Basics )------------------------------------------------------------- */ + + + /** + * Create a new iterator over a list of futures. + * + * @param list List of @{class:Future}s to resolve. + * @task basics + */ + public function __construct(array $futures) { + assert_instances_of($futures, 'Future'); + $this->futures = $futures; + } + + + /** + * Block until all futures resolve. + * + * @return void + * @task basics + */ + public function resolveAll() { + foreach ($this as $future) { + $future->resolve(); + } + } + + /** + * Add another future to the set of futures. This is useful if you have a + * set of futures to run mostly in parallel, but some futures depend on + * others. + * + * @param Future @{class:Future} to add to iterator + * @task basics + */ + public function addFuture(Future $future, $key = null) { + if ($key === null) { + $this->futures[] = $future; + $this->wait[] = last_key($this->futures); + } else if (!isset($this->futures[$key])) { + $this->futures[$key] = $future; + $this->wait[] = $key; + } else { + throw new Exception(pht('Invalid key %s', $key)); + } + + // Start running the future if we don't have $this->limit futures running + // already. updateWorkingSet() won't start running the future if there's no + // limit, so we'll manually poke it here in that case. + $this->updateWorkingSet(); + if (!$this->limit) { + $future->isReady(); + } + return $this; + } + + +/* -( Configuring Iteration )---------------------------------------------- */ + + + /** + * Set a maximum amount of time you want to wait before the iterator will + * yield a result. If no future has resolved yet, the iterator will yield + * null for key and value. Among other potential uses, you can use this to + * show some busy indicator: + * + * $futures = id(new FutureIterator($futures)) + * ->setUpdateInterval(1); + * foreach ($futures as $future) { + * if ($future === null) { + * echo "Still working...\n"; + * } else { + * // ... + * } + * } + * + * This will echo "Still working..." once per second as long as futures are + * resolving. By default, FutureIterator never yields null. + * + * @param float Maximum number of seconds to block waiting on futures before + * yielding null. + * @return this + * + * @task config + */ + public function setUpdateInterval($interval) { + $this->timeout = $interval; + return $this; + } + + + /** + * Limit the number of simultaneously executing futures. + * + * $futures = id(new FutureIterator($futures)) + * ->limit(4); + * foreach ($futures as $future) { + * // Run no more than 4 futures simultaneously. + * } + * + * @param int Maximum number of simultaneous jobs allowed. + * @return this + * + * @task config + */ + public function limit($max) { + $this->limit = $max; + return $this; + } + + +/* -( Iterator Interface )------------------------------------------------- */ + + + /** + * @task iterator + */ + public function rewind() { + $this->wait = array_keys($this->futures); + $this->work = null; + $this->updateWorkingSet(); + $this->next(); + } + + /** + * @task iterator + */ + public function next() { + $this->key = null; + if (!count($this->wait)) { + return; + } + + $read_sockets = array(); + $write_sockets = array(); + + $start = microtime(true); + $timeout = $this->timeout; + $this->isTimeout = false; + + $check = $this->getWorkingSet(); + $resolve = null; + do { + $read_sockets = array(); + $write_sockets = array(); + $can_use_sockets = true; + $wait_time = 1; + foreach ($check as $wait => $key) { + $future = $this->futures[$key]; + try { + if ($future->getException()) { + $resolve = $wait; + continue; + } + if ($future->isReady()) { + if ($resolve === null) { + $resolve = $wait; + } + continue; + } + + $got_sockets = false; + $socks = $future->getReadSockets(); + if ($socks) { + $got_sockets = true; + foreach ($socks as $socket) { + $read_sockets[] = $socket; + } + } + + $socks = $future->getWriteSockets(); + if ($socks) { + $got_sockets = true; + foreach ($socks as $socket) { + $write_sockets[] = $socket; + } + } + + // If any currently active future had neither read nor write sockets, + // we can't wait for the current batch of items using sockets. + if (!$got_sockets) { + $can_use_sockets = false; + } else { + $wait_time = min($wait_time, $future->getDefaultWait()); + } + } catch (Exception $ex) { + $this->futures[$key]->setException($ex); + $resolve = $wait; + break; + } + } + if ($resolve === null) { + + // Check for a setUpdateInterval() timeout. + if ($timeout !== null) { + $elapsed = microtime(true) - $start; + if ($elapsed > $timeout) { + $this->isTimeout = true; + return; + } else { + $wait_time = $timeout - $elapsed; + } + } + + if ($can_use_sockets) { + Future::waitForSockets($read_sockets, $write_sockets, $wait_time); + } else { + usleep(1000); + } + } + } while ($resolve === null); + + $this->key = $this->wait[$resolve]; + unset($this->wait[$resolve]); + $this->updateWorkingSet(); + } + + /** + * @task iterator + */ + public function current() { + if ($this->isTimeout) { + return null; + } + return $this->futures[$this->key]; + } + + /** + * @task iterator + */ + public function key() { + if ($this->isTimeout) { + return null; + } + return $this->key; + } + + /** + * @task iterator + */ + public function valid() { + if ($this->isTimeout) { + return true; + } + return ($this->key !== null); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + protected function getWorkingSet() { + if ($this->work === null) { + return $this->wait; + } + + return $this->work; + } + + /** + * @task internal + */ + protected function updateWorkingSet() { + if (!$this->limit) { + return; + } + + $old = $this->work; + $this->work = array_slice($this->wait, 0, $this->limit, true); + + // If we're using a limit, our futures are sleeping and need to be polled + // to begin execution, so poll any futures which weren't in our working set + // before. + foreach ($this->work as $work => $key) { + if (!isset($old[$work])) { + $this->futures[$key]->isReady(); + } + } + } + +} diff --git a/src/future/FutureProxy.php b/src/future/FutureProxy.php new file mode 100644 index 00000000..0cb6fda9 --- /dev/null +++ b/src/future/FutureProxy.php @@ -0,0 +1,71 @@ +setProxiedFuture($proxied); + } + } + + public function setProxiedFuture(Future $proxied) { + $this->proxied = $proxied; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->proxied) { + throw new Exception(pht('The proxied future has not been provided yet.')); + } + return $this->proxied; + } + + public function isReady() { + return $this->getProxiedFuture()->isReady(); + } + + public function resolve($timeout = null) { + $this->getProxiedFuture()->resolve($timeout); + return $this->getResult(); + } + + public function setException(Exception $ex) { + $this->getProxiedFuture()->setException($ex); + return $this; + } + + public function getException() { + return $this->getProxiedFuture()->getException(); + } + + public function getReadSockets() { + return $this->getProxiedFuture()->getReadSockets(); + } + + public function getWriteSockets() { + return $this->getProxiedFuture()->getWriteSockets(); + } + + protected function getResult() { + if ($this->result === null) { + $result = $this->getProxiedFuture()->resolve(); + $result = $this->didReceiveResult($result); + $this->result = $result; + } + return $this->result; + } + + public function start() { + $this->getProxiedFuture()->start(); + return $this; + } + + abstract protected function didReceiveResult($result); + +} diff --git a/src/future/ImmediateFuture.php b/src/future/ImmediateFuture.php new file mode 100644 index 00000000..a5fe0a33 --- /dev/null +++ b/src/future/ImmediateFuture.php @@ -0,0 +1,17 @@ +result = $result; + } + + public function isReady() { + return true; + } + +} diff --git a/src/future/__tests__/FutureIteratorTestCase.php b/src/future/__tests__/FutureIteratorTestCase.php new file mode 100644 index 00000000..a310ee23 --- /dev/null +++ b/src/future/__tests__/FutureIteratorTestCase.php @@ -0,0 +1,23 @@ +limit(2); + + $results = array(); + foreach ($iterator as $future) { + if ($future === $future1) { + $iterator->addFuture($future2); + } + $results[] = $future->resolve(); + } + + $this->assertEqual(2, count($results)); + } + +} diff --git a/src/future/asana/PhutilAsanaFuture.php b/src/future/asana/PhutilAsanaFuture.php new file mode 100644 index 00000000..32dfa217 --- /dev/null +++ b/src/future/asana/PhutilAsanaFuture.php @@ -0,0 +1,105 @@ +accessToken = $token; + return $this; + } + + public function setRawAsanaQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception( + pht( + 'You must %s!', + 'setRawAsanaQuery()')); + } + + if (!$this->accessToken) { + throw new Exception( + pht( + 'You must %s!', + 'setAccessToken()')); + } + + $uri = new PhutilURI('https://app.asana.com/'); + $uri->setPath('/api/1.0/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->addHeader('Authorization', 'Bearer '.$this->accessToken); + $future->setMethod($this->method); + + $timeout = $this->getTimeout(); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Asana.'), + $ex); + } + + if (idx($data, 'errors')) { + $errors = print_r($data['errors'], true); + throw new Exception( + pht( + 'Received errors from Asana: %s', + $errors)); + } + + return $data['data']; + } + +} diff --git a/src/future/aws/PhutilAWSCloudFormationFuture.php b/src/future/aws/PhutilAWSCloudFormationFuture.php new file mode 100644 index 00000000..084b46fc --- /dev/null +++ b/src/future/aws/PhutilAWSCloudFormationFuture.php @@ -0,0 +1,20 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'cloudformation'; + } + +} diff --git a/src/future/aws/PhutilAWSCloudWatchFuture.php b/src/future/aws/PhutilAWSCloudWatchFuture.php new file mode 100644 index 00000000..d8e02374 --- /dev/null +++ b/src/future/aws/PhutilAWSCloudWatchFuture.php @@ -0,0 +1,19 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'monitoring'; + } + +} diff --git a/src/future/aws/PhutilAWSEC2Future.php b/src/future/aws/PhutilAWSEC2Future.php new file mode 100644 index 00000000..19a56fa3 --- /dev/null +++ b/src/future/aws/PhutilAWSEC2Future.php @@ -0,0 +1,20 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'ec2'; + } + +} diff --git a/src/future/aws/PhutilAWSException.php b/src/future/aws/PhutilAWSException.php new file mode 100644 index 00000000..7646c7b6 --- /dev/null +++ b/src/future/aws/PhutilAWSException.php @@ -0,0 +1,52 @@ +httpStatus = $http_status; + $this->requestID = idx($params, 'RequestID'); + + $this->params = $params; + + $desc = array(); + $desc[] = pht('AWS Request Failed'); + $desc[] = pht('HTTP Status Code: %d', $http_status); + + $found_error = false; + if ($this->requestID) { + $desc[] = pht('AWS Request ID: %s', $this->requestID); + $errors = idx($params, 'Errors'); + + if ($errors) { + $desc[] = pht('AWS Errors:'); + foreach ($errors as $error) { + list($code, $message) = $error; + if ($code) { + $found_error = true; + } + $desc[] = " - {$code}: {$message}\n"; + } + } + } + if (!$found_error) { + $desc[] = pht('Response Body: %s', idx($params, 'body')); + } + + $desc = implode("\n", $desc); + + parent::__construct($desc); + } + + public function getRequestID() { + return $this->requestID; + } + + public function getHTTPStatus() { + return $this->httpStatus; + } + +} diff --git a/src/future/aws/PhutilAWSFuture.php b/src/future/aws/PhutilAWSFuture.php new file mode 100644 index 00000000..16fd3632 --- /dev/null +++ b/src/future/aws/PhutilAWSFuture.php @@ -0,0 +1,170 @@ +accessKey = $access_key; + return $this; + } + + public function getAccessKey() { + return $this->accessKey; + } + + public function setSecretKey(PhutilOpaqueEnvelope $secret_key) { + $this->secretKey = $secret_key; + return $this; + } + + public function getSecretKey() { + return $this->secretKey; + } + + public function getRegion() { + return $this->region; + } + + public function setRegion($region) { + $this->region = $region; + return $this; + } + + public function setEndpoint($endpoint) { + $this->endpoint = $endpoint; + return $this; + } + + public function getEndpoint() { + return $this->endpoint; + } + + public function setHTTPMethod($method) { + $this->httpMethod = $method; + return $this; + } + + public function getHTTPMethod() { + return $this->httpMethod; + } + + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setData($data) { + $this->data = $data; + return $this; + } + + public function getData() { + return $this->data; + } + + protected function getParameters() { + return array(); + } + + public function addHeader($key, $value) { + $this->headers[] = array($key, $value); + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->getParameters(); + $method = $this->getHTTPMethod(); + $host = $this->getEndpoint(); + $path = $this->getPath(); + $data = $this->getData(); + + $uri = id(new PhutilURI("https://{$host}/", $params)) + ->setPath($path); + + $future = id(new HTTPSFuture($uri, $data)) + ->setMethod($method); + + foreach ($this->headers as $header) { + list($key, $value) = $header; + $future->addHeader($key, $value); + } + + $this->signRequest($future); + + $this->future = $future; + } + + return $this->future; + } + + protected function signRequest(HTTPSFuture $future) { + $access_key = $this->getAccessKey(); + $secret_key = $this->getSecretKey(); + + $region = $this->getRegion(); + + id(new PhutilAWSv4Signature()) + ->setRegion($region) + ->setService($this->getServiceName()) + ->setAccessKey($access_key) + ->setSecretKey($secret_key) + ->setSignContent($this->shouldSignContent()) + ->signRequest($future); + } + + protected function shouldSignContent() { + return false; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + try { + $xml = @(new SimpleXMLElement($body)); + } catch (Exception $ex) { + $xml = null; + } + + if ($status->isError() || !$xml) { + if (!($status instanceof HTTPFutureHTTPResponseStatus)) { + throw $status; + } + + $params = array( + 'body' => $body, + ); + if ($xml) { + $params['RequestID'] = $xml->RequestID[0]; + $errors = array($xml->Error); + foreach ($errors as $error) { + $params['Errors'][] = array($error->Code, $error->Message); + } + } + + throw new PhutilAWSException($status->getStatusCode(), $params); + } + + return $xml; + } + +} diff --git a/src/future/aws/PhutilAWSS3Future.php b/src/future/aws/PhutilAWSS3Future.php new file mode 100644 index 00000000..de00a508 --- /dev/null +++ b/src/future/aws/PhutilAWSS3Future.php @@ -0,0 +1,70 @@ +bucket = $bucket; + return $this; + } + + public function getBucket() { + return $this->bucket; + } + + public function setParametersForGetObject($key) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('GET'); + $this->setPath($bucket.'/'.$key); + + return $this; + } + + public function setParametersForPutObject($key, $value) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('PUT'); + $this->setPath($bucket.'/'.$key); + + $this->addHeader('X-Amz-ACL', 'private'); + $this->addHeader('Content-Type', 'application/octet-stream'); + + $this->setData($value); + + return $this; + } + + public function setParametersForDeleteObject($key) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('DELETE'); + $this->setPath($bucket.'/'.$key); + + return $this; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if (!$status->isError()) { + return $body; + } + + if ($status->getStatusCode() === 404) { + return null; + } + + return parent::didReceiveResult($result); + } + + protected function shouldSignContent() { + return true; + } + +} diff --git a/src/future/aws/PhutilAWSv4Signature.php b/src/future/aws/PhutilAWSv4Signature.php new file mode 100644 index 00000000..86c322b8 --- /dev/null +++ b/src/future/aws/PhutilAWSv4Signature.php @@ -0,0 +1,265 @@ +accessKey = $access_key; + return $this; + } + + public function setSecretKey(PhutilOpaqueEnvelope $secret_key) { + $this->secretKey = $secret_key; + return $this; + } + + public function setDate($date) { + $this->date = $date; + return $this; + } + + public function getDate() { + if ($this->date === null) { + $this->date = gmdate('Ymd\THis\Z', time()); + } + return $this->date; + } + + public function setRegion($region) { + $this->region = $region; + return $this; + } + + public function getRegion() { + return $this->region; + } + + public function setService($service) { + $this->service = $service; + return $this; + } + + public function getService() { + return $this->service; + } + + public function setSigningKey($signing_key) { + $this->signingKey = $signing_key; + return $this; + } + + public function getSigningKey() { + if ($this->signingKey === null) { + $this->signingKey = $this->computeSigningKey(); + } + + return $this->signingKey; + } + + private function getAlgorithm() { + return 'AWS4-HMAC-SHA256'; + } + + public function setSignContent($sign_content) { + $this->signContent = $sign_content; + return $this; + } + + public function getSignContent() { + return $this->signContent; + } + + private function getHost(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + return $uri->getDomain(); + } + + private function getPath(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + return $uri->getPath(); + } + + public function signRequest(HTTPSFuture $future) { + $body_signature = $this->getBodySignature($future); + + if ($this->getSignContent()) { + $future->addHeader('X-Amz-Content-sha256', $body_signature); + } + + $future->addHeader('X-Amz-Date', $this->getDate()); + + $request_signature = $this->getCanonicalRequestSignature( + $future, + $body_signature); + + $string_to_sign = $this->getStringToSign($request_signature); + + $signing_key = $this->getSigningKey(); + + $signature = hash_hmac('sha256', $string_to_sign, $signing_key); + + $algorithm = $this->getAlgorithm(); + $credential = $this->getCredential(); + $signed_headers = $this->getSignedHeaderList($future); + + $authorization = + $algorithm.' '. + 'Credential='.$credential.','. + 'SignedHeaders='.$signed_headers.','. + 'Signature='.$signature; + + $future->addHeader('Authorization', $authorization); + + return $future; + } + + private function getBodySignature(HTTPSFuture $future) { + $http_body = $future->getData(); + + if (is_array($http_body)) { + $http_body = ''; + } + + return hash('sha256', $http_body); + } + + private function getCanonicalRequestSignature( + HTTPSFuture $future, + $body_signature) { + + $http_method = $future->getMethod(); + + $path = $this->getPath($future); + $path = rawurlencode($path); + $path = str_replace('%2F', '/', $path); + + $canonical_parameters = $this->getCanonicalParameterList($future); + $canonical_headers = $this->getCanonicalHeaderList($future); + $signed_headers = $this->getSignedHeaderList($future); + + $canonical_request = + $http_method."\n". + $path."\n". + $canonical_parameters."\n". + $canonical_headers."\n". + "\n". + $signed_headers."\n". + $body_signature; + + return hash('sha256', $canonical_request); + } + + private function getStringToSign($request_signature) { + $algorithm = $this->getAlgorithm(); + $date = $this->getDate(); + $scope_parts = $this->getScopeParts(); + $scope = implode('/', $scope_parts); + + $string_to_sign = + $algorithm."\n". + $date."\n". + $scope."\n". + $request_signature; + + return $string_to_sign; + } + + private function getScopeParts() { + return array( + substr($this->getDate(), 0, 8), + $this->getRegion(), + $this->getService(), + 'aws4_request', + ); + } + + private function computeSigningKey() { + $secret_key = $this->secretKey; + if (!$secret_key) { + throw new Exception( + pht( + 'You must either provide a signing key with setSigningKey(), or '. + 'provide a secret key with setSecretKey().')); + } + + // NOTE: This part of the algorithm uses the raw binary hashes, and the + // result is not human-readable. + $raw_hash = true; + + $signing_key = 'AWS4'.$secret_key->openEnvelope(); + + $scope_parts = $this->getScopeParts(); + foreach ($scope_parts as $scope_part) { + $signing_key = hash_hmac('sha256', $scope_part, $signing_key, $raw_hash); + } + + return $signing_key; + } + + private function getCanonicalHeaderList(HTTPSFuture $future) { + $headers = $this->getCanonicalHeaderMap($future); + + $canonical_headers = array(); + foreach ($headers as $header => $header_value) { + $canonical_headers[] = $header.':'.trim($header_value); + } + + return implode("\n", $canonical_headers); + } + + private function getCanonicalHeaderMap(HTTPSFuture $future) { + $headers = $future->getHeaders(); + $headers[] = array( + 'Host', + $this->getHost($future), + ); + + $header_map = array(); + foreach ($headers as $header) { + list($key, $value) = $header; + $key = phutil_utf8_strtolower($key); + $header_map[$key] = $value; + } + + ksort($header_map); + + return $header_map; + } + + private function getSignedHeaderList(HTTPSFuture $future) { + $headers = $this->getCanonicalHeaderMap($future); + return implode(';', array_keys($headers)); + } + + private function getCanonicalParameterList(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + $params = $uri->getQueryParamsAsMap(); + + ksort($params); + $canonical_parameters = phutil_build_http_querystring($params); + + return $canonical_parameters; + } + + private function getCredential() { + $access_key = $this->accessKey; + if (!strlen($access_key)) { + throw new PhutilInvalidStateException('setAccessKey'); + } + + $parts = $this->getScopeParts(); + array_unshift($parts, $access_key); + + return implode('/', $parts); + } + +} diff --git a/src/future/aws/PhutilCloudWatchMetric.php b/src/future/aws/PhutilCloudWatchMetric.php new file mode 100644 index 00000000..2a589393 --- /dev/null +++ b/src/future/aws/PhutilCloudWatchMetric.php @@ -0,0 +1,50 @@ +name = $name; + return $this; + } + + public function getName() { + return $this->name; + } + + public function setValue($value) { + $this->value = $value; + return $this; + } + + public function getValue() { + return $this->value; + } + + public function setUnit($unit) { + $this->unit = $unit; + return $this; + } + + public function getUnit() { + return $this->unit; + } + + public function setDimensions(array $dimensions) { + $this->dimensions = $dimensions; + return $this; + } + + public function getDimensions() { + return $this->dimensions; + } + + public function addDimension($name, $value) { + $this->dimensions[$name] = $value; + return $this; + } + +} diff --git a/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php b/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php new file mode 100644 index 00000000..b6b56b56 --- /dev/null +++ b/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php @@ -0,0 +1,195 @@ +setMethod($method) + ->addHeader('Range', 'bytes=0-9'); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3PutObject() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/test$file.text'; + $method = 'PUT'; + $body = 'Welcome to Amazon S3.'; + + $future = id(new HTTPSFuture($uri, $body)) + ->setMethod($method) + ->addHeader('X-Amz-Storage-Class', 'REDUCED_REDUNDANCY') + ->addHeader('Date', 'Fri, 24 May 2013 00:00:00 GMT'); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3GetBucketLifecycle() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/?lifecycle'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3GetBucket() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/?max-keys=2&prefix=J'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + public function testAWSv4SignaturesVanillaQuery() { + $access_key = 'AKIDEXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'; + $date = '20150830T123600Z'; + $region = 'us-east-1'; + $service = 'service'; + $uri = 'https://example.amazonaws.com/?Param2=value2&Param1=value1'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(false) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + private function assertSignature($expect, HTTPSFuture $signed) { + $authorization = null; + foreach ($signed->getHeaders() as $header) { + list($key, $value) = $header; + if (phutil_utf8_strtolower($key) === 'authorization') { + $authorization = $value; + break; + } + } + + $expect = str_replace("\n\n", ' ', $expect); + $expect = str_replace("\n", '', $expect); + + $this->assertEqual($expect, $authorization); + } + + +} diff --git a/src/future/aws/management/PhutilAWSManagementWorkflow.php b/src/future/aws/management/PhutilAWSManagementWorkflow.php new file mode 100644 index 00000000..b7f56617 --- /dev/null +++ b/src/future/aws/management/PhutilAWSManagementWorkflow.php @@ -0,0 +1,83 @@ +getArgv(); + + $access_key = $argv->getArg('access-key'); + $secret_key = $argv->getArg('secret-key'); + + $has_root = (strlen($access_key) || strlen($secret_key)); + if ($has_root) { + if (!strlen($access_key) || !strlen($secret_key)) { + throw new PhutilArgumentUsageException( + pht( + 'When specifying AWS credentials with --access-key and '. + '--secret-key, you must provide both keys.')); + } + + $template->setAccessKey($access_key); + $template->setSecretKey(new PhutilOpaqueEnvelope($secret_key)); + } + + $has_any = ($has_root); + if (!$has_any) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify AWS credentials. Use --access-key and '. + '--secret-key to provide root credentials.')); + } + + $region = $argv->getArg('region'); + if (!strlen($region)) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify an AWS region with --region.')); + } + + $template->setRegion($region); + + $endpoint = $argv->getArg('endpoint'); + if (!strlen($endpoint)) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify an AWS endpoint with --endpoint.')); + } + + $template->setEndpoint($endpoint); + + return $template; + } + + protected function getAWSArguments() { + return array( + array( + 'name' => 'access-key', + 'param' => 'key', + 'help' => pht('AWS access key.'), + ), + array( + 'name' => 'secret-key', + 'param' => 'file', + 'help' => pht('AWS secret key.'), + ), + array( + 'name' => 'region', + 'param' => 'region', + 'help' => pht('AWS region.'), + ), + array( + 'name' => 'endpoint', + 'param' => 'endpoint', + 'help' => pht('Name of the AWS region to access.'), + ), + ); + } + +} diff --git a/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php new file mode 100644 index 00000000..f2f1e8d6 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php @@ -0,0 +1,45 @@ +setName('delete') + ->setExamples( + '**delete** --key __key__') + ->setSynopsis(pht('Delete an object from S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to delete.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()) + ->setParametersForDeleteObject($key); + + $future->resolve(); + + echo tsprintf( + "%s\n", + pht('Deleted "%s".', $key)); + + return 0; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php new file mode 100644 index 00000000..fab9af10 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php @@ -0,0 +1,57 @@ +setName('get') + ->setExamples( + '**get** --key __key__') + ->setSynopsis(pht('Download content from S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to retrieve.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $bucket = $args->getArg('bucket'); + if (!strlen($bucket)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 bucket to access with --bucket.')); + } + + $endpoint = $args->getArg('endpoint'); + if (!strlen($endpoint)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 endpoint with --endpoint.')); + } + + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()) + ->setBucket($bucket) + ->setEndpoint($endpoint) + ->setParametersForGetObject($key); + + echo $future->resolve(); + + return 0; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php new file mode 100644 index 00000000..35d32538 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php @@ -0,0 +1,27 @@ + 'bucket', + 'param' => 'bucket', + 'help' => pht('Name of the S3 bucket to access.'), + ), + ); + } + + protected function newAWSFuture($future) { + $future = parent::newAWSFuture($future); + + $argv = $this->getArgv(); + $bucket = $argv->getArg('bucket'); + + $future->setBucket($bucket); + + return $future; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php new file mode 100644 index 00000000..199bf125 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php @@ -0,0 +1,52 @@ +setName('put') + ->setExamples( + '**put** --key __key__') + ->setSynopsis(pht('Upload content to S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to upload.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()); + + echo tsprintf( + "%s\n", + pht('Reading data from stdin...')); + + $data = file_get_contents('php://stdin'); + + $future->setParametersForPutObject($key, $data); + + $result = $future->resolve(); + + echo tsprintf( + "%s\n", + pht('Uploaded "%s".', $key)); + + return 0; + } + +} diff --git a/src/future/exec/CommandException.php b/src/future/exec/CommandException.php new file mode 100644 index 00000000..a83b86b5 --- /dev/null +++ b/src/future/exec/CommandException.php @@ -0,0 +1,78 @@ +command = $command; + $this->error = $error; + $this->stdout = $stdout; + $this->stderr = $stderr; + + $summary = array(); + $summary[] = $this->summarize($message); + + $summary[] = 'COMMAND'; + $summary[] = $this->summarize($command); + + $summary[] = null; + $summary[] = 'STDOUT'; + $summary[] = $this->summarize($stdout); + + $summary[] = null; + $summary[] = 'STDERR'; + $summary[] = $this->summarize($stderr); + + $summary = implode("\n", $summary); + + parent::__construct($summary); + } + + public function getCommand() { + return $this->command; + } + + public function getError() { + return $this->error; + } + + public function getStdout() { + return $this->stdout; + } + + public function getStderr() { + return $this->stderr; + } + + private function summarize($string) { + if (!strlen($string)) { + return '(empty)'; + } + + $limit = 1000; + + $len = strlen($string); + if ($len > $limit) { + $cut = $len - $limit; + $suffix = pht('... (%s more byte(s)) ...', new PhutilNumber($cut)); + if ($cut > strlen($suffix)) { + $string = substr($string, 0, $limit).$suffix; + } + } + + // Strip out any credentials for the purpose of building a human readable + // summary of the exception, since these are rarely-if-ever useful when + // debugging, but can expose otherwise sensitive information. + $string = phutil_censor_credentials($string); + + return $string; + } + +} diff --git a/src/future/exec/ExecFuture.php b/src/future/exec/ExecFuture.php new file mode 100644 index 00000000..5e0f0062 --- /dev/null +++ b/src/future/exec/ExecFuture.php @@ -0,0 +1,976 @@ + array('pipe', 'r'), // stdin + 1 => array('pipe', 'w'), // stdout + 2 => array('pipe', 'w'), // stderr + ); + + +/* -( Creating ExecFutures )----------------------------------------------- */ + + + /** + * Create a new ExecFuture. + * + * $future = new ExecFuture('wc -l %s', $file_path); + * + * @param string `sprintf()`-style command string which will be passed + * through @{function:csprintf} with the rest of the arguments. + * @param ... Zero or more additional arguments for @{function:csprintf}. + * @return ExecFuture ExecFuture for running the specified command. + * @task create + */ + public function __construct($command) { + $argv = func_get_args(); + $this->command = call_user_func_array('csprintf', $argv); + $this->stdin = new PhutilRope(); + } + + +/* -( Command Information )------------------------------------------------ */ + + + /** + * Retrieve the raw command to be executed. + * + * @return string Raw command. + * @task info + */ + public function getCommand() { + return $this->command; + } + + + /** + * Retrieve the byte limit for the stderr buffer. + * + * @return int Maximum buffer size, in bytes. + * @task info + */ + public function getStderrSizeLimit() { + return $this->stderrSizeLimit; + } + + + /** + * Retrieve the byte limit for the stdout buffer. + * + * @return int Maximum buffer size, in bytes. + * @task info + */ + public function getStdoutSizeLimit() { + return $this->stdoutSizeLimit; + } + + + /** + * Get the process's pid. This only works after execution is initiated, e.g. + * by a call to start(). + * + * @return int Process ID of the executing process. + * @task info + */ + public function getPID() { + $status = $this->procGetStatus(); + return $status['pid']; + } + + +/* -( Configuring Execution )---------------------------------------------- */ + + + /** + * Set a maximum size for the stdout read buffer. To limit stderr, see + * @{method:setStderrSizeLimit}. The major use of these methods is to use less + * memory if you are running a command which sometimes produces huge volumes + * of output that you don't really care about. + * + * NOTE: Setting this to 0 means "no buffer", not "unlimited buffer". + * + * @param int Maximum size of the stdout read buffer. + * @return this + * @task config + */ + public function setStdoutSizeLimit($limit) { + $this->stdoutSizeLimit = $limit; + return $this; + } + + + /** + * Set a maximum size for the stderr read buffer. + * See @{method:setStdoutSizeLimit} for discussion. + * + * @param int Maximum size of the stderr read buffer. + * @return this + * @task config + */ + public function setStderrSizeLimit($limit) { + $this->stderrSizeLimit = $limit; + return $this; + } + + + /** + * Set the maximum internal read buffer size this future. The future will + * block reads once the internal stdout or stderr buffer exceeds this size. + * + * NOTE: If you @{method:resolve} a future with a read buffer limit, you may + * block forever! + * + * TODO: We should probably release the read buffer limit during + * @{method:resolve}, or otherwise detect this. For now, be careful. + * + * @param int|null Maximum buffer size, or `null` for unlimited. + * @return this + */ + public function setReadBufferSize($read_buffer_size) { + $this->readBufferSize = $read_buffer_size; + return $this; + } + + + /** + * Set whether to use non-blocking streams on Windows. + * + * @param bool Whether to use non-blocking streams. + * @return this + * @task config + */ + public function setUseWindowsFileStreams($use_streams) { + if (phutil_is_windows()) { + $this->useWindowsFileStreams = $use_streams; + } + return $this; + } + + +/* -( Interacting With Commands )------------------------------------------ */ + + + /** + * Read and return output from stdout and stderr, if any is available. This + * method keeps a read cursor on each stream, but the entire streams are + * still returned when the future resolves. You can call read() again after + * resolving the future to retrieve only the parts of the streams you did not + * previously read: + * + * $future = new ExecFuture('...'); + * // ... + * list($stdout) = $future->read(); // Returns output so far + * list($stdout) = $future->read(); // Returns new output since first call + * // ... + * list($stdout) = $future->resolvex(); // Returns ALL output + * list($stdout) = $future->read(); // Returns unread output + * + * NOTE: If you set a limit with @{method:setStdoutSizeLimit} or + * @{method:setStderrSizeLimit}, this method will not be able to read data + * past the limit. + * + * NOTE: If you call @{method:discardBuffers}, all the stdout/stderr data + * will be thrown away and the cursors will be reset. + * + * @return pair <$stdout, $stderr> pair with new output since the last call + * to this method. + * @task interact + */ + public function read() { + $stdout = $this->readStdout(); + + $result = array( + $stdout, + (string)substr($this->stderr, $this->stderrPos), + ); + + $this->stderrPos = strlen($this->stderr); + + return $result; + } + + public function readStdout() { + if ($this->start) { + $this->isReady(); // Sync + } + + $result = (string)substr($this->stdout, $this->stdoutPos); + $this->stdoutPos = strlen($this->stdout); + return $result; + } + + + /** + * Write data to stdin of the command. + * + * @param string Data to write. + * @param bool If true, keep the pipe open for writing. By default, the pipe + * will be closed as soon as possible so that commands which + * listen for EOF will execute. If you want to keep the pipe open + * past the start of command execution, do an empty write with + * `$keep_pipe = true` first. + * @return this + * @task interact + */ + public function write($data, $keep_pipe = false) { + if (strlen($data)) { + if (!$this->stdin) { + throw new Exception(pht('Writing to a closed pipe!')); + } + $this->stdin->append($data); + } + $this->closePipe = !$keep_pipe; + + return $this; + } + + + /** + * Permanently discard the stdout and stderr buffers and reset the read + * cursors. This is basically useful only if you are streaming a large amount + * of data from some process: + * + * $future = new ExecFuture('zcat huge_file.gz'); + * do { + * $done = $future->resolve(0.1); // Every 100ms, + * list($stdout) = $future->read(); // read output... + * echo $stdout; // send it somewhere... + * $future->discardBuffers(); // and then free the buffers. + * } while ($done === null); + * + * Conceivably you might also need to do this if you're writing a client using + * @{class:ExecFuture} and `netcat`, but you probably should not do that. + * + * NOTE: This completely discards the data. It won't be available when the + * future resolves. This is almost certainly only useful if you need the + * buffer memory for some reason. + * + * @return this + * @task interact + */ + public function discardBuffers() { + $this->discardStdoutBuffer(); + + $this->stderr = ''; + $this->stderrPos = 0; + + return $this; + } + + public function discardStdoutBuffer() { + $this->stdout = ''; + $this->stdoutPos = 0; + return $this; + } + + + /** + * Returns true if this future was killed by a timeout configured with + * @{method:setTimeout}. + * + * @return bool True if the future was killed for exceeding its time limit. + */ + public function getWasKilledByTimeout() { + return $this->killedByTimeout; + } + + +/* -( Configuring Execution )---------------------------------------------- */ + + + /** + * Set a hard limit on execution time. If the command runs longer, it will + * be terminated and the future will resolve with an error code. You can test + * if a future was killed by a timeout with @{method:getWasKilledByTimeout}. + * + * The subprocess will be sent a `TERM` signal, and then a `KILL` signal a + * short while later if it fails to exit. + * + * @param int Maximum number of seconds this command may execute for before + * it is signaled. + * @return this + * @task config + */ + public function setTimeout($seconds) { + $this->terminateTimeout = $seconds; + $this->killTimeout = $seconds + min($seconds, 60); + return $this; + } + + +/* -( Resolving Execution )------------------------------------------------ */ + + + /** + * Resolve a command you expect to exit with return code 0. Works like + * @{method:resolve}, but throws if $err is nonempty. Returns only + * $stdout and $stderr. See also @{function:execx}. + * + * list($stdout, $stderr) = $future->resolvex(); + * + * @param float Optional timeout after which resolution will pause and + * execution will return to the caller. + * @return pair <$stdout, $stderr> pair. + * @task resolve + */ + public function resolvex($timeout = null) { + list($err, $stdout, $stderr) = $this->resolve($timeout); + if ($err) { + $cmd = $this->command; + + if ($this->getWasKilledByTimeout()) { + // NOTE: The timeout can be a float and PhutilNumber only handles + // integers, so just use "%s" to render it. + $message = pht( + 'Command killed by timeout after running for more than %s seconds.', + $this->terminateTimeout); + } else { + $message = pht('Command failed with error #%d!', $err); + } + + throw new CommandException( + $message, + $cmd, + $err, + $stdout, + $stderr); + } + return array($stdout, $stderr); + } + + + /** + * Resolve a command you expect to return valid JSON. Works like + * @{method:resolvex}, but also throws if stderr is nonempty, or stdout is not + * valid JSON. Returns a PHP array, decoded from the JSON command output. + * + * @param float Optional timeout after which resolution will pause and + * execution will return to the caller. + * @return array PHP array, decoded from JSON command output. + * @task resolve + */ + public function resolveJSON($timeout = null) { + list($stdout, $stderr) = $this->resolvex($timeout); + if (strlen($stderr)) { + $cmd = $this->command; + throw new CommandException( + pht( + "JSON command '%s' emitted text to stderr when none was expected: %d", + $cmd, + $stderr), + $cmd, + 0, + $stdout, + $stderr); + } + try { + return phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + $cmd = $this->command; + throw new CommandException( + pht( + "JSON command '%s' did not produce a valid JSON object on stdout: %s", + $cmd, + $stdout), + $cmd, + 0, + $stdout, + $stderr); + } + } + + /** + * Resolve the process by abruptly terminating it. + * + * @return list List of results. + * @task resolve + */ + public function resolveKill() { + if (!$this->result) { + $signal = 9; + + if ($this->proc) { + proc_terminate($this->proc, $signal); + } + + $this->result = array( + 128 + $signal, + $this->stdout, + $this->stderr, + ); + $this->closeProcess(); + } + + return $this->result; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Provides read sockets to the future core. + * + * @return list List of read sockets. + * @task internal + */ + public function getReadSockets() { + list($stdin, $stdout, $stderr) = $this->pipes; + $sockets = array(); + if (isset($stdout) && !feof($stdout)) { + $sockets[] = $stdout; + } + if (isset($stderr) && !feof($stderr)) { + $sockets[] = $stderr; + } + return $sockets; + } + + + /** + * Provides write sockets to the future core. + * + * @return list List of write sockets. + * @task internal + */ + public function getWriteSockets() { + list($stdin, $stdout, $stderr) = $this->pipes; + $sockets = array(); + if (isset($stdin) && $this->stdin->getByteLength() && !feof($stdin)) { + $sockets[] = $stdin; + } + return $sockets; + } + + + /** + * Determine if the read buffer is empty. + * + * @return bool True if the read buffer is empty. + * @task internal + */ + public function isReadBufferEmpty() { + return !strlen($this->stdout); + } + + + /** + * Determine if the write buffer is empty. + * + * @return bool True if the write buffer is empty. + * @task internal + */ + public function isWriteBufferEmpty() { + return !$this->getWriteBufferSize(); + } + + + /** + * Determine the number of bytes in the write buffer. + * + * @return int Number of bytes in the write buffer. + * @task internal + */ + public function getWriteBufferSize() { + if (!$this->stdin) { + return 0; + } + return $this->stdin->getByteLength(); + } + + + /** + * Reads some bytes from a stream, discarding output once a certain amount + * has been accumulated. + * + * @param resource Stream to read from. + * @param int Maximum number of bytes to return from $stream. If + * additional bytes are available, they will be read and + * discarded. + * @param string Human-readable description of stream, for exception + * message. + * @param int Maximum number of bytes to read. + * @return string The data read from the stream. + * @task internal + */ + private function readAndDiscard($stream, $limit, $description, $length) { + $output = ''; + + if ($length <= 0) { + return ''; + } + + do { + $data = fread($stream, min($length, 64 * 1024)); + if (false === $data) { + throw new Exception(pht('Failed to read from %s', $description)); + } + + $read_bytes = strlen($data); + + if ($read_bytes > 0 && $limit > 0) { + if ($read_bytes > $limit) { + $data = substr($data, 0, $limit); + } + $output .= $data; + $limit -= strlen($data); + } + + if (strlen($output) >= $length) { + break; + } + } while ($read_bytes > 0); + + return $output; + } + + + /** + * Begin or continue command execution. + * + * @return bool True if future has resolved. + * @task internal + */ + public function isReady() { + // NOTE: We have soft dependencies on PhutilServiceProfiler and + // PhutilErrorTrap here. These dependencies are soft to avoid the need to + // build them into the Phage agent. Under normal circumstances, these + // classes are always available. + + if (!$this->pipes) { + + // NOTE: See note above about Phage. + if (class_exists('PhutilServiceProfiler')) { + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'exec', + 'command' => (string)$this->command, + )); + } + + if (!$this->start) { + // We might already have started the timer via initiating resolution. + $this->start = microtime(true); + } + + $unmasked_command = $this->command; + if ($unmasked_command instanceof PhutilCommandString) { + $unmasked_command = $unmasked_command->getUnmaskedString(); + } + + $pipes = array(); + + if (phutil_is_windows()) { + // See T4395. proc_open under Windows uses "cmd /C [cmd]", which will + // strip the first and last quote when there aren't exactly two quotes + // (and some other conditions as well). This results in a command that + // looks like `command" "path to my file" "something something` which is + // clearly wrong. By surrounding the command string with quotes we can + // be sure this process is harmless. + if (strpos($unmasked_command, '"') !== false) { + $unmasked_command = '"'.$unmasked_command.'"'; + } + } + + if ($this->hasEnv()) { + $env = $this->getEnv(); + } else { + $env = null; + } + + $cwd = $this->getCWD(); + + // NOTE: See note above about Phage. + if (class_exists('PhutilErrorTrap')) { + $trap = new PhutilErrorTrap(); + } else { + $trap = null; + } + + $spec = self::$descriptorSpec; + if ($this->useWindowsFileStreams) { + $this->windowsStdoutTempFile = new TempFile(); + $this->windowsStderrTempFile = new TempFile(); + + $spec = array( + 0 => self::$descriptorSpec[0], // stdin + 1 => fopen($this->windowsStdoutTempFile, 'wb'), // stdout + 2 => fopen($this->windowsStderrTempFile, 'wb'), // stderr + ); + + if (!$spec[1] || !$spec[2]) { + throw new Exception(pht( + 'Unable to create temporary files for '. + 'Windows stdout / stderr streams')); + } + } + + $proc = @proc_open( + $unmasked_command, + $spec, + $pipes, + $cwd, + $env); + + if ($this->useWindowsFileStreams) { + fclose($spec[1]); + fclose($spec[2]); + $pipes = array( + 0 => head($pipes), // stdin + 1 => fopen($this->windowsStdoutTempFile, 'rb'), // stdout + 2 => fopen($this->windowsStderrTempFile, 'rb'), // stderr + ); + + if (!$pipes[1] || !$pipes[2]) { + throw new Exception(pht( + 'Unable to open temporary files for '. + 'reading Windows stdout / stderr streams')); + } + } + + if ($trap) { + $err = $trap->getErrorsAsString(); + $trap->destroy(); + } else { + $err = error_get_last(); + } + + if (!is_resource($proc)) { + throw new Exception( + pht( + 'Failed to `%s`: %s', + 'proc_open()', + $err)); + } + + $this->pipes = $pipes; + $this->proc = $proc; + + list($stdin, $stdout, $stderr) = $pipes; + + if (!phutil_is_windows()) { + + // On Windows, we redirect process standard output and standard error + // through temporary files, and then use stream_select to determine + // if there's more data to read. + + if ((!stream_set_blocking($stdout, false)) || + (!stream_set_blocking($stderr, false)) || + (!stream_set_blocking($stdin, false))) { + $this->__destruct(); + throw new Exception(pht('Failed to set streams nonblocking.')); + } + } + + $this->tryToCloseStdin(); + + return false; + } + + if (!$this->proc) { + return true; + } + + list($stdin, $stdout, $stderr) = $this->pipes; + + while (isset($this->stdin) && $this->stdin->getByteLength()) { + $write_segment = $this->stdin->getAnyPrefix(); + + $bytes = fwrite($stdin, $write_segment); + if ($bytes === false) { + throw new Exception(pht('Unable to write to stdin!')); + } else if ($bytes) { + $this->stdin->removeBytesFromHead($bytes); + } else { + // Writes are blocked for now. + break; + } + } + + $this->tryToCloseStdin(); + + // Read status before reading pipes so that we can never miss data that + // arrives between our last read and the process exiting. + $status = $this->procGetStatus(); + + $read_buffer_size = $this->readBufferSize; + + $max_stdout_read_bytes = PHP_INT_MAX; + $max_stderr_read_bytes = PHP_INT_MAX; + if ($read_buffer_size !== null) { + $max_stdout_read_bytes = $read_buffer_size - strlen($this->stdout); + $max_stderr_read_bytes = $read_buffer_size - strlen($this->stderr); + } + + if ($max_stdout_read_bytes > 0) { + $this->stdout .= $this->readAndDiscard( + $stdout, + $this->getStdoutSizeLimit() - strlen($this->stdout), + 'stdout', + $max_stdout_read_bytes); + } + + if ($max_stderr_read_bytes > 0) { + $this->stderr .= $this->readAndDiscard( + $stderr, + $this->getStderrSizeLimit() - strlen($this->stderr), + 'stderr', + $max_stderr_read_bytes); + } + + $is_done = false; + if (!$status['running']) { + // We may still have unread bytes on stdout or stderr, particularly if + // this future is being buffered and streamed. If we do, we don't want to + // consider the subprocess to have exited until we've read everything. + // See T9724 for context. + if (feof($stdout) && feof($stderr)) { + $is_done = true; + } + } + + if ($is_done) { + if ($this->useWindowsFileStreams) { + fclose($stdout); + fclose($stderr); + } + + // If the subprocess got nuked with `kill -9`, we get a -1 exitcode. + // Upgrade this to a slightly more informative value by examining the + // terminating signal code. + $err = $status['exitcode']; + if ($err == -1) { + if ($status['signaled']) { + $err = 128 + $status['termsig']; + } + } + + $this->result = array( + $err, + $this->stdout, + $this->stderr, + ); + $this->closeProcess(); + return true; + } + + $elapsed = (microtime(true) - $this->start); + + if ($this->terminateTimeout && ($elapsed >= $this->terminateTimeout)) { + if (!$this->didTerminate) { + $this->killedByTimeout = true; + $this->sendTerminateSignal(); + return false; + } + } + + if ($this->killTimeout && ($elapsed >= $this->killTimeout)) { + $this->killedByTimeout = true; + $this->resolveKill(); + return true; + } + + } + + + /** + * @return void + * @task internal + */ + public function __destruct() { + if (!$this->proc) { + return; + } + + // NOTE: If we try to proc_close() an open process, we hang indefinitely. To + // avoid this, kill the process explicitly if it's still running. + + $status = $this->procGetStatus(); + if ($status['running']) { + $this->sendTerminateSignal(); + if (!$this->waitForExit(5)) { + $this->resolveKill(); + } + } else { + $this->closeProcess(); + } + } + + + /** + * Close and free resources if necessary. + * + * @return void + * @task internal + */ + private function closeProcess() { + foreach ($this->pipes as $pipe) { + if (isset($pipe)) { + @fclose($pipe); + } + } + $this->pipes = array(null, null, null); + if ($this->proc) { + @proc_close($this->proc); + $this->proc = null; + } + $this->stdin = null; + + if ($this->profilerCallID !== null) { + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerCallID, + array( + 'err' => $this->result ? idx($this->result, 0) : null, + )); + $this->profilerCallID = null; + } + } + + + /** + * Execute `proc_get_status()`, but avoid pitfalls. + * + * @return dict Process status. + * @task internal + */ + private function procGetStatus() { + // After the process exits, we only get one chance to read proc_get_status() + // before it starts returning garbage. Make sure we don't throw away the + // last good read. + if ($this->procStatus) { + if (!$this->procStatus['running']) { + return $this->procStatus; + } + } + $this->procStatus = proc_get_status($this->proc); + + return $this->procStatus; + } + + /** + * Try to close stdin, if we're done using it. This keeps us from hanging if + * the process on the other end of the pipe is waiting for EOF. + * + * @return void + * @task internal + */ + private function tryToCloseStdin() { + if (!$this->closePipe) { + // We've been told to keep the pipe open by a call to write(..., true). + return; + } + + if ($this->stdin->getByteLength()) { + // We still have bytes to write. + return; + } + + list($stdin) = $this->pipes; + if (!$stdin) { + // We've already closed stdin. + return; + } + + // There's nothing stopping us from closing stdin, so close it. + + @fclose($stdin); + $this->pipes[0] = null; + } + + public function getDefaultWait() { + $wait = parent::getDefaultWait(); + + $next_timeout = $this->getNextTimeout(); + if ($next_timeout) { + if (!$this->start) { + $this->start = microtime(true); + } + $elapsed = (microtime(true) - $this->start); + $wait = max(0, min($next_timeout - $elapsed, $wait)); + } + + return $wait; + } + + private function getNextTimeout() { + if ($this->didTerminate) { + return $this->killTimeout; + } else { + return $this->terminateTimeout; + } + } + + private function sendTerminateSignal() { + $this->didTerminate = true; + proc_terminate($this->proc); + return $this; + } + + private function waitForExit($duration) { + $start = microtime(true); + + while (true) { + $status = $this->procGetStatus(); + if (!$status['running']) { + return true; + } + + $waited = (microtime(true) - $start); + if ($waited > $duration) { + return false; + } + } + } + +} diff --git a/src/future/exec/PhutilBacktraceSignalHandler.php b/src/future/exec/PhutilBacktraceSignalHandler.php new file mode 100644 index 00000000..131a54bc --- /dev/null +++ b/src/future/exec/PhutilBacktraceSignalHandler.php @@ -0,0 +1,22 @@ +getTraceAsString()); + } + +} diff --git a/src/future/exec/PhutilCallbackSignalHandler.php b/src/future/exec/PhutilCallbackSignalHandler.php new file mode 100644 index 00000000..2cde5472 --- /dev/null +++ b/src/future/exec/PhutilCallbackSignalHandler.php @@ -0,0 +1,22 @@ +signal = $signal; + $this->callback = $callback; + } + + public function canHandleSignal(PhutilSignalRouter $router, $signo) { + return ($signo === $this->signal); + } + + public function handleSignal(PhutilSignalRouter $router, $signo) { + call_user_func($this->callback, $signo); + } + +} diff --git a/src/future/exec/PhutilConsoleMetricsSignalHandler.php b/src/future/exec/PhutilConsoleMetricsSignalHandler.php new file mode 100644 index 00000000..45675c8d --- /dev/null +++ b/src/future/exec/PhutilConsoleMetricsSignalHandler.php @@ -0,0 +1,14 @@ +didGetWINCHSignal(); + } + +} diff --git a/src/future/exec/PhutilExecPassthru.php b/src/future/exec/PhutilExecPassthru.php new file mode 100644 index 00000000..16b51393 --- /dev/null +++ b/src/future/exec/PhutilExecPassthru.php @@ -0,0 +1,141 @@ +execute(); + * + * You can set the current working directory for the command with + * @{method:setCWD}, and set the environment with @{method:setEnv}. + * + * @task command Executing Passthru Commands + */ +final class PhutilExecPassthru extends PhutilExecutableFuture { + + + private $command; + private $passthruResult; + + +/* -( Executing Passthru Commands )---------------------------------------- */ + + + /** + * Build a new passthru command. + * + * $exec = new PhutilExecPassthru('ls %s', $dir); + * + * @param string Command pattern. See @{function:csprintf}. + * @param ... Pattern arguments. + * + * @task command + */ + public function __construct($pattern /* , ... */) { + $args = func_get_args(); + $this->command = call_user_func_array('csprintf', $args); + } + + + /** + * Execute this command. + * + * @return int Error code returned by the subprocess. + * + * @task command + */ + public function execute() { + $command = $this->command; + + $profiler = PhutilServiceProfiler::getInstance(); + $call_id = $profiler->beginServiceCall( + array( + 'type' => 'exec', + 'subtype' => 'passthru', + 'command' => $command, + )); + + $spec = array(STDIN, STDOUT, STDERR); + $pipes = array(); + + if ($command instanceof PhutilCommandString) { + $unmasked_command = $command->getUnmaskedString(); + } else { + $unmasked_command = $command; + } + + if ($this->hasEnv()) { + $env = $this->getEnv(); + } else { + $env = null; + } + + $cwd = $this->getCWD(); + + $options = array(); + if (phutil_is_windows()) { + // Without 'bypass_shell', things like launching vim don't work properly, + // and we can't execute commands with spaces in them, and all commands + // invoked from git bash fail horridly, and everything is a mess in + // general. + $options['bypass_shell'] = true; + } + + $trap = new PhutilErrorTrap(); + $proc = @proc_open( + $unmasked_command, + $spec, + $pipes, + $cwd, + $env, + $options); + $errors = $trap->getErrorsAsString(); + $trap->destroy(); + + if (!is_resource($proc)) { + throw new Exception( + pht( + 'Failed to passthru %s: %s', + 'proc_open()', + $errors)); + } + + $err = proc_close($proc); + + $profiler->endServiceCall( + $call_id, + array( + 'err' => $err, + )); + + return $err; + } + + +/* -( Future )------------------------------------------------------------- */ + + + public function isReady() { + // This isn't really a future because it executes synchronously and has + // full control of the console. We're just implementing the interfaces to + // make it easier to share code with ExecFuture. + + if ($this->passthruResult === null) { + $this->passthruResult = $this->execute(); + } + + return true; + } + + protected function getResult() { + return $this->passthruResult; + } + +} diff --git a/src/future/exec/PhutilExecutableFuture.php b/src/future/exec/PhutilExecutableFuture.php new file mode 100644 index 00000000..53819825 --- /dev/null +++ b/src/future/exec/PhutilExecutableFuture.php @@ -0,0 +1,193 @@ +setEnv(array('X' => 'y')); + * + * // Env will have ONLY "X". + * $exec->setEnv(array('X' => 'y'), $wipe_process_env = true); + * + * @param map Dictionary of environmental variables. + * @param bool Optionally, pass `true` to replace the existing environment. + * @return this + * + * @task config + */ + final public function setEnv(array $env, $wipe_process_env = false) { + // Force values to strings here. The underlying PHP commands get upset if + // they are handed non-string values as environmental variables. + foreach ($env as $key => $value) { + $env[$key] = (string)$value; + } + + if (!$wipe_process_env) { + $env = $env + $this->getEnv(); + } + + $this->env = $env; + + return $this; + } + + + /** + * Set the value of a specific environmental variable for this command. + * + * @param string Environmental variable name. + * @param string|null New value, or null to remove this variable. + * @return this + * @task config + */ + final public function updateEnv($key, $value) { + $env = $this->getEnv(); + + if ($value === null) { + unset($env[$key]); + } else { + $env[$key] = (string)$value; + } + + $this->env = $env; + + return $this; + } + + + /** + * Returns `true` if this command has a configured environment. + * + * @return bool True if this command has an environment. + * @task config + */ + final public function hasEnv() { + return ($this->env !== null); + } + + + /** + * Get the configured environment. + * + * @return map Effective environment for this command. + * @task config + */ + final public function getEnv() { + if (!$this->hasEnv()) { + $default_env = $_ENV; + + // If `variables_order` does not include "E", the $_ENV superglobal + // does not build and there's no apparent reasonable way for us to + // rebuild it (we could perhaps parse the output of `export`). + + // For now, explicitly populate variables which we rely on and which + // we know may exist. After T12071, we should be able to rely on + // $_ENV and no longer need to do this. + + $known_keys = array( + 'PHABRICATOR_ENV', + 'PHABRICATOR_INSTANCE', + ); + + foreach ($known_keys as $known_key) { + $value = getenv($known_key); + if (strlen($value)) { + $default_env[$known_key] = $value; + } + } + + $this->setEnv($default_env, $wipe_process_env = true); + } + + return $this->env; + } + + + /** + * Set the current working directory for the subprocess (that is, set where + * the subprocess will execute). If not set, the default value is the parent's + * current working directory. + * + * @param string Directory to execute the subprocess in. + * @return this + * @task config + */ + final public function setCWD($cwd) { + $cwd = phutil_string_cast($cwd); + + try { + Filesystem::assertExists($cwd); + } catch (FilesystemException $ex) { + throw new PhutilProxyException( + pht( + 'Unable to run a command in directory "%s".', + $cwd), + $ex); + } + + if (!is_dir($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that path is '. + 'not a directory.', + $cwd)); + } + + // Although you don't technically need read permission to "chdir()" into + // a directory, it is almost certainly a mistake to execute a subprocess + // in a CWD we can't read. Refuse to do this. If callers have some + // exceptionally clever scheme up their sleeves they can always have the + // subprocess "cd" or "chdir()" explicitly. + + if (!is_readable($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that directory '. + 'is not readable (the current process does not have "+r" '. + 'permission).', + $cwd)); + } + + + if (phutil_is_windows()) { + // Do nothing. On Windows, calling "is_executable(...)" on a directory + // always appears to return "false". Skip this check under Windows. + } else if (!is_executable($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that directory '. + 'is not executable (the current process does not have "+x" '. + 'permission).', + $cwd)); + } + + $this->cwd = $cwd; + + return $this; + } + + + /** + * Get the command's current working directory. + * + * @return string Working directory. + * @task config + */ + final public function getCWD() { + return $this->cwd; + } + +} diff --git a/src/future/exec/PhutilSignalHandler.php b/src/future/exec/PhutilSignalHandler.php new file mode 100644 index 00000000..d0ffb9db --- /dev/null +++ b/src/future/exec/PhutilSignalHandler.php @@ -0,0 +1,8 @@ + + } + + public static function initialize() { + if (!self::$router) { + $router = new self(); + + // If pcntl_signal() does not exist (particularly, on Windows), just + // don't install signal handlers. + if (function_exists('pcntl_signal')) { + pcntl_signal(SIGHUP, array($router, 'routeSignal')); + pcntl_signal(SIGTERM, array($router, 'routeSignal')); + pcntl_signal(SIGWINCH, array($router, 'routeSignal')); + } + + self::$router = $router; + } + + return self::getRouter(); + } + + public static function getRouter() { + if (!self::$router) { + throw new Exception(pht('Signal router has not been initialized!')); + } + + return self::$router; + } + + public function installHandler($key, PhutilSignalHandler $handler) { + if (isset($this->handlers[$key])) { + throw new Exception( + pht( + 'Signal handler with key "%s" is already installed.', + $key)); + } + + $this->handlers[$key] = $handler; + + return $this; + } + + public function getHandler($key) { + return idx($this->handlers, $key); + } + + public function routeSignal($signo) { + $exceptions = array(); + + $handlers = $this->handlers; + foreach ($handlers as $key => $handler) { + try { + if ($handler->canHandleSignal($this, $signo)) { + $handler->handleSignal($this, $signo); + } + } catch (Exception $ex) { + $exceptions[] = $ex; + } + } + + if ($exceptions) { + throw new PhutilAggregateException( + pht( + 'Signal handlers raised exceptions while handling "%s".', + phutil_get_signal_name($signo)), + $exceptions); + } + + switch ($signo) { + case SIGTERM: + // Normally, PHP doesn't invoke destructors when exiting in response to + // a signal. This forces it to do so, so we have a fighting chance of + // releasing any locks, leases or resources on our way out. + exit(128 + $signo); + } + } + +} diff --git a/src/future/exec/__tests__/ExecFutureTestCase.php b/src/future/exec/__tests__/ExecFutureTestCase.php new file mode 100644 index 00000000..2ce0ad0c --- /dev/null +++ b/src/future/exec/__tests__/ExecFutureTestCase.php @@ -0,0 +1,155 @@ +write('')->resolvex(); + + $this->assertEqual('', $stdout); + } + + public function testKeepPipe() { + // NOTE: This is mostly testing the semantics of $keep_pipe in write(). + + list($stdout) = id(new ExecFuture('cat')) + ->write('', true) + ->start() + ->write('x', true) + ->write('y', true) + ->write('z', false) + ->resolvex(); + + $this->assertEqual('xyz', $stdout); + } + + public function testLargeBuffer() { + // NOTE: This is mostly a coverage test to hit branches where we're still + // flushing a buffer. + + $data = str_repeat('x', 1024 * 1024 * 4); + list($stdout) = id(new ExecFuture('cat'))->write($data)->resolvex(); + + $this->assertEqual($data, $stdout); + } + + public function testBufferLimit() { + $data = str_repeat('x', 1024 * 1024); + list($stdout) = id(new ExecFuture('cat')) + ->setStdoutSizeLimit(1024) + ->write($data) + ->resolvex(); + + $this->assertEqual(substr($data, 0, 1024), $stdout); + } + + public function testResolveTimeoutTestShouldRunLessThan1Sec() { + // NOTE: This tests interactions between the resolve() timeout and the + // ExecFuture timeout, which are similar but not identical. + + $future = id(new ExecFuture('sleep 32000'))->start(); + $future->setTimeout(32000); + + // We expect this to return in 0.01s. + $result = $future->resolve(0.01); + $this->assertEqual($result, null); + + // We expect this to now force the time out / kill immediately. If we don't + // do this, we'll hang when exiting until our subprocess exits (32000 + // seconds!) + $future->setTimeout(0.01); + $future->resolve(); + } + + public function testTerminateWithoutStart() { + // We never start this future, but it should be fine to kill a future from + // any state. + $future = new ExecFuture('sleep 1'); + $future->resolveKill(); + + $this->assertTrue(true); + } + + public function testTimeoutTestShouldRunLessThan1Sec() { + // NOTE: This is partly testing that we choose appropriate select wait + // times; this test should run for significantly less than 1 second. + + $future = new ExecFuture('sleep 32000'); + list($err) = $future->setTimeout(0.01)->resolve(); + + $this->assertTrue($err > 0); + $this->assertTrue($future->getWasKilledByTimeout()); + } + + public function testMultipleTimeoutsTestShouldRunLessThan1Sec() { + $futures = array(); + for ($ii = 0; $ii < 4; $ii++) { + $futures[] = id(new ExecFuture('sleep 32000'))->setTimeout(0.01); + } + + foreach (new FutureIterator($futures) as $future) { + list($err) = $future->resolve(); + + $this->assertTrue($err > 0); + $this->assertTrue($future->getWasKilledByTimeout()); + } + } + + public function testMultipleResolves() { + // It should be safe to call resolve(), resolvex(), resolveKill(), etc., + // as many times as you want on the same process. + + $future = new ExecFuture('echo quack'); + $future->resolve(); + $future->resolvex(); + list($err) = $future->resolveKill(); + + $this->assertEqual(0, $err); + } + + public function testReadBuffering() { + $str_len_8 = 'abcdefgh'; + $str_len_4 = 'abcd'; + + // This is a write/read with no read buffer. + $future = new ExecFuture('cat'); + $future->write($str_len_8); + + do { + $future->isReady(); + list($read) = $future->read(); + if (strlen($read)) { + break; + } + } while (true); + + // We expect to get the entire string back in the read. + $this->assertEqual($str_len_8, $read); + $future->resolve(); + + + // This is a write/read with a read buffer. + $future = new ExecFuture('cat'); + $future->write($str_len_8); + + // Set the read buffer size. + $future->setReadBufferSize(4); + do { + $future->isReady(); + list($read) = $future->read(); + if (strlen($read)) { + break; + } + } while (true); + + // We expect to get the entire string back in the read. + $this->assertEqual($str_len_4, $read); + + // Remove the limit so we can resolve the future. + $future->setReadBufferSize(null); + $future->resolve(); + } + +} diff --git a/src/future/exec/__tests__/ExecPassthruTestCase.php b/src/future/exec/__tests__/ExecPassthruTestCase.php new file mode 100644 index 00000000..f7795fc4 --- /dev/null +++ b/src/future/exec/__tests__/ExecPassthruTestCase.php @@ -0,0 +1,16 @@ +execute(); + $this->assertEqual(0, $err); + } + +} diff --git a/src/future/exec/execx.php b/src/future/exec/execx.php new file mode 100644 index 00000000..bde37d29 --- /dev/null +++ b/src/future/exec/execx.php @@ -0,0 +1,107 @@ +resolvex(); +} + + +/** + * Execute a command and capture stdout, stderr, and the return value. + * + * list ($err, $stdout, $stderr) = exec_manual('ls %s', $file); + * + * When invoking this function, you must manually handle the error condition. + * Error flows can often be simplified by using @{function:execx} instead, + * which throws an exception when it encounters an error. + * + * @param string sprintf()-style command pattern to execute. + * @param ... Arguments to sprintf pattern. + * @return array List of return code, stdout, and stderr. + */ +function exec_manual($cmd /* , ... */) { + $args = func_get_args(); + $ef = newv('ExecFuture', $args); + return $ef->resolve(); +} + + +/** + * Wrapper for @{class:PhutilExecPassthru}. + * + * @param string sprintf()-style command pattern to execute. + * @param ... Arguments to sprintf pattern. + * @return int Return code. + */ +function phutil_passthru($cmd /* , ... */) { + $args = func_get_args(); + return newv('PhutilExecPassthru', $args)->execute(); +} + + +/** + * Return a human-readable signal name (like "SIGINT" or "SIGKILL") for a given + * signal number. + * + * @param int Signal number. + * @return string Human-readable signal name. + */ +function phutil_get_signal_name($signo) { + // These aren't always defined; try our best to look up the signal name. + $constant_names = array( + 'SIGHUP', + 'SIGINT', + 'SIGQUIT', + 'SIGILL', + 'SIGTRAP', + 'SIGABRT', + 'SIGIOT', + 'SIGBUS', + 'SIGFPE', + 'SIGUSR1', + 'SIGSEGV', + 'SIGUSR2', + 'SIGPIPE', + 'SIGALRM', + 'SIGTERM', + 'SIGSTKFLT', + 'SIGCLD', + 'SIGCHLD', + 'SIGCONT', + 'SIGTSTP', + 'SIGTTIN', + 'SIGTTOU', + 'SIGURG', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGVTALRM', + 'SIGPROF', + 'SIGWINCH', + 'SIGPOLL', + 'SIGIO', + 'SIGPWR', + 'SIGSYS', + 'SIGBABY', + ); + + $signal_names = array(); + foreach ($constant_names as $constant) { + if (defined($constant)) { + $signal_names[constant($constant)] = $constant; + } + } + + return idx($signal_names, $signo); +} diff --git a/src/future/github/PhutilGitHubFuture.php b/src/future/github/PhutilGitHubFuture.php new file mode 100644 index 00000000..c6b23def --- /dev/null +++ b/src/future/github/PhutilGitHubFuture.php @@ -0,0 +1,130 @@ +accessToken = $token; + return $this; + } + + public function setRawGitHubQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function addHeader($key, $value) { + $this->headers[] = array($key, $value); + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception( + pht( + 'You must %s!', + 'setRawGitHubQuery()')); + } + + if (!$this->accessToken) { + throw new Exception( + pht( + 'You must %s!', + 'setAccessToken()')); + } + + $uri = new PhutilURI('https://api.github.com/'); + $uri->setPath('/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->addHeader('Authorization', 'token '.$this->accessToken); + // NOTE: GitHub requires a 'User-Agent' header. + $future->addHeader('User-Agent', __CLASS__); + $future->setMethod($this->method); + + foreach ($this->headers as $header) { + list($key, $value) = $header; + $future->addHeader($key, $value); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + if ($this->isRateLimitResponse($status, $headers)) { + // Do nothing, this is a rate limit. + } else if ($this->isNotModifiedResponse($status)) { + // Do nothing, this is a "Not Modified" response. + } else { + // This is an error condition we do not expect. + throw $status; + } + } + + try { + if (strlen($body)) { + $data = phutil_json_decode($body); + } else { + // This can happen for 304 responses. + $data = array(); + } + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from GitHub.'), + $ex); + } + + return id(new PhutilGitHubResponse()) + ->setStatus($status) + ->setHeaders($headers) + ->setBody($data); + } + + private function isNotModifiedResponse($status) { + return ($status->getStatusCode() == 304); + } + + private function isRateLimitResponse($status, array $headers) { + if ($status->getStatusCode() != 403) { + return false; + } + + foreach ($headers as $header) { + list($key, $value) = $header; + if (phutil_utf8_strtolower($key) === 'x-ratelimit-remaining') { + if (!(int)$value) { + return true; + } + } + } + + return false; + } + +} diff --git a/src/future/github/PhutilGitHubResponse.php b/src/future/github/PhutilGitHubResponse.php new file mode 100644 index 00000000..e379dadd --- /dev/null +++ b/src/future/github/PhutilGitHubResponse.php @@ -0,0 +1,49 @@ +status = $status; + return $this; + } + + public function getStatus() { + return $this->status; + } + + public function setBody(array $body) { + $this->body = $body; + return $this; + } + + public function getBody() { + return $this->body; + } + + public function setHeaders(array $headers) { + $this->headers = $headers; + return $this; + } + + public function getHeaders() { + return $this->headers; + } + + public function getHeaderValue($key, $default = null) { + $key = phutil_utf8_strtolower($key); + + foreach ($this->headers as $header) { + list($hkey, $value) = $header; + if (phutil_utf8_strtolower($hkey) === $key) { + return $value; + } + } + + return $default; + } + +} diff --git a/src/future/http/BaseHTTPFuture.php b/src/future/http/BaseHTTPFuture.php new file mode 100644 index 00000000..591cf781 --- /dev/null +++ b/src/future/http/BaseHTTPFuture.php @@ -0,0 +1,427 @@ +resolve(); + * + * This is an abstract base class which defines the API that HTTP futures + * conform to. Concrete implementations are available in @{class:HTTPFuture} + * and @{class:HTTPSFuture}. All futures return a tuple + * when resolved; status is an object of class @{class:HTTPFutureResponseStatus} + * and may represent any of a wide variety of errors in the transport layer, + * a support library, or the actual HTTP exchange. + * + * @task create Creating a New Request + * @task config Configuring the Request + * @task resolve Resolving the Request + * @task internal Internals + */ +abstract class BaseHTTPFuture extends Future { + + private $method = 'GET'; + private $timeout = 300.0; + private $headers = array(); + private $uri; + private $data; + private $expect; + + +/* -( Creating a New Request )--------------------------------------------- */ + + + /** + * Build a new future which will make an HTTP request to a given URI, with + * some optional data payload. Since this class is abstract you can't actually + * instantiate it; instead, build a new @{class:HTTPFuture} or + * @{class:HTTPSFuture}. + * + * @param string Fully-qualified URI to send a request to. + * @param mixed String or array to include in the request. Strings will be + * transmitted raw; arrays will be encoded and sent as + * 'application/x-www-form-urlencoded'. + * @task create + */ + final public function __construct($uri, $data = array()) { + $this->setURI((string)$uri); + $this->setData($data); + } + + +/* -( Configuring the Request )-------------------------------------------- */ + + + /** + * Set a timeout for the service call. If the request hasn't resolved yet, + * the future will resolve with a status that indicates the request timed + * out. You can determine if a status is a timeout status by calling + * isTimeout() on the status object. + * + * @param float Maximum timeout, in seconds. + * @return this + * @task config + */ + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + + /** + * Get the currently configured timeout. + * + * @return float Maximum number of seconds the request will execute for. + * @task config + */ + public function getTimeout() { + return $this->timeout; + } + + + /** + * Select the HTTP method (e.g., "GET", "POST", "PUT") to use for the request. + * By default, requests use "GET". + * + * @param string HTTP method name. + * @return this + * @task config + */ + final public function setMethod($method) { + static $supported_methods = array( + 'GET' => true, + 'POST' => true, + 'PUT' => true, + 'DELETE' => true, + ); + + if (empty($supported_methods[$method])) { + throw new Exception( + pht( + "The HTTP method '%s' is not supported. Supported HTTP methods ". + "are: %s.", + $method, + implode(', ', array_keys($supported_methods)))); + } + + $this->method = $method; + return $this; + } + + + /** + * Get the HTTP method the request will use. + * + * @return string HTTP method name, like "GET". + * @task config + */ + final public function getMethod() { + return $this->method; + } + + + /** + * Set the URI to send the request to. Note that this is also a constructor + * parameter. + * + * @param string URI to send the request to. + * @return this + * @task config + */ + public function setURI($uri) { + $this->uri = (string)$uri; + return $this; + } + + + /** + * Get the fully-qualified URI the request will be made to. + * + * @return string URI the request will be sent to. + * @task config + */ + public function getURI() { + return $this->uri; + } + + + /** + * Provide data to send along with the request. Note that this is also a + * constructor parameter; it may be more convenient to provide it there. Data + * must be a string (in which case it will be sent raw) or an array (in which + * case it will be encoded and sent as 'application/x-www-form-urlencoded'). + * + * @param mixed Data to send with the request. + * @return this + * @task config + */ + public function setData($data) { + if (!is_string($data) && !is_array($data)) { + throw new Exception(pht('Data parameter must be an array or string.')); + } + $this->data = $data; + return $this; + } + + + /** + * Get the data which will be sent with the request. + * + * @return mixed Data which will be sent. + * @task config + */ + public function getData() { + return $this->data; + } + + + /** + * Add an HTTP header to the request. The same header name can be specified + * more than once, which will cause multiple headers to be sent. + * + * @param string Header name, like "Accept-Language". + * @param string Header value, like "en-us". + * @return this + * @task config + */ + public function addHeader($name, $value) { + $this->headers[] = array($name, $value); + return $this; + } + + + /** + * Get headers which will be sent with the request. Optionally, you can + * provide a filter, which will return only headers with that name. For + * example: + * + * $all_headers = $future->getHeaders(); + * $just_user_agent = $future->getHeaders('User-Agent'); + * + * In either case, an array with all (or all matching) headers is returned. + * + * @param string|null Optional filter, which selects only headers with that + * name if provided. + * @return array List of all (or all matching) headers. + * @task config + */ + public function getHeaders($filter = null) { + $filter = strtolower($filter); + + $result = array(); + foreach ($this->headers as $header) { + list($name, $value) = $header; + if (!$filter || ($filter == strtolower($name))) { + $result[] = $header; + } + } + + return $result; + } + + /** + * Set the status codes that are expected in the response. + * If set, isError on the status object will return true for status codes + * that are not in the input array. Otherwise, isError will be true for any + * HTTP status code outside the 2xx range (notwithstanding other errors such + * as connection or transport issues). + * + * @param array|null List of expected HTTP status codes. + * + * @return this + * @task config + */ + public function setExpectStatus($status_codes) { + $this->expect = $status_codes; + return $this; + } + + /** + * Return list of expected status codes, or null if not set. + * + * @return array|null List of expected status codes. + */ + public function getExpectStatus() { + return $this->expect; + } + + + /** + * Add a HTTP basic authentication header to the request. + * + * @param string Username to authenticate with. + * @param PhutilOpaqueEnvelope Password to authenticate with. + * @return this + * @task config + */ + public function setHTTPBasicAuthCredentials( + $username, + PhutilOpaqueEnvelope $password) { + + $password_plaintext = $password->openEnvelope(); + $credentials = base64_encode($username.':'.$password_plaintext); + + return $this->addHeader('Authorization', 'Basic '.$credentials); + } + + public function getHTTPRequestByteLength() { + // NOTE: This isn't very accurate, but it's only used by the "--trace" + // call profiler to help pick out huge requests. + $data = $this->getData(); + + if (is_scalar($data)) { + return strlen($data); + } + + return strlen(phutil_build_http_querystring($data)); + } + + +/* -( Resolving the Request )---------------------------------------------- */ + + + /** + * Exception-oriented @{method:resolve}. Throws if the status indicates an + * error occurred. + * + * @return tuple HTTP request result tuple. + * @task resolve + */ + final public function resolvex() { + $result = $this->resolve(); + + list($status, $body, $headers) = $result; + if ($status->isError()) { + throw $status; + } + + return array($body, $headers); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Parse a raw HTTP response into a tuple. + * + * @param string Raw HTTP response. + * @return tuple Valid resolution tuple. + * @task internal + */ + protected function parseRawHTTPResponse($raw_response) { + $rex_base = "@^(?P.*?)\r?\n\r?\n(?P.*)$@s"; + $rex_head = "@^HTTP/\S+ (?P\d+) ?(?P.*?)". + "(?:\r?\n(?P.*))?$@s"; + + // We need to parse one or more header blocks in case we got any + // "HTTP/1.X 100 Continue" nonsense back as part of the response. This + // happens with HTTPS requests, at the least. + $response = $raw_response; + while (true) { + $matches = null; + if (!preg_match($rex_base, $response, $matches)) { + return $this->buildMalformedResult($raw_response); + } + + $head = $matches['head']; + $body = $matches['body']; + + if (!preg_match($rex_head, $head, $matches)) { + return $this->buildMalformedResult($raw_response); + } + + $response_code = (int)$matches['code']; + $response_status = strtolower($matches['status']); + if ($response_code == 100) { + // This is HTTP/1.X 100 Continue, so this whole chunk is moot. + $response = $body; + } else if (($response_code == 200) && + ($response_status == 'connection established')) { + // When tunneling through an HTTPS proxy, we get an initial header + // block like "HTTP/1.X 200 Connection established", then newlines, + // then the normal response. Drop this chunk. + $response = $body; + } else { + $headers = $this->parseHeaders(idx($matches, 'headers')); + break; + } + } + + $status = new HTTPFutureHTTPResponseStatus( + $response_code, + $body, + $headers, + $this->expect); + + return array($status, $body, $headers); + } + + /** + * Parse an HTTP header block. + * + * @param string Raw HTTP headers. + * @return list List of HTTP header tuples. + * @task internal + */ + protected function parseHeaders($head_raw) { + $rex_header = '@^(?P.*?):\s*(?P.*)$@'; + + $headers = array(); + + if (!$head_raw) { + return $headers; + } + + $headers_raw = preg_split("/\r?\n/", $head_raw); + foreach ($headers_raw as $header) { + $m = null; + if (preg_match($rex_header, $header, $m)) { + $headers[] = array($m['name'], $m['value']); + } else { + $headers[] = array($header, null); + } + } + + return $headers; + } + + + /** + * Find value of the first header with given name. + * + * @param list List of headers from `resolve()`. + * @param string Case insensitive header name. + * @return string Value of the header or null if not found. + * @task resolve + */ + public static function getHeader(array $headers, $search) { + assert_instances_of($headers, 'array'); + foreach ($headers as $header) { + list($name, $value) = $header; + if (strcasecmp($name, $search) == 0) { + return $value; + } + } + return null; + } + + + /** + * Build a result tuple indicating a parse error resulting from a malformed + * HTTP response. + * + * @return tuple Valid resolution tuple. + * @task internal + */ + protected function buildMalformedResult($raw_response) { + $body = null; + $headers = array(); + + $status = new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $raw_response); + return array($status, $body, $headers); + } + +} diff --git a/src/future/http/HTTPFuture.php b/src/future/http/HTTPFuture.php new file mode 100644 index 00000000..bfe5466d --- /dev/null +++ b/src/future/http/HTTPFuture.php @@ -0,0 +1,302 @@ +resolvex(); + * + * Or + * + * $future = new HTTPFuture('http://www.example.com/'); + * list($http_response_status_object, + * $response_body, + * $headers) = $future->resolve(); + * + * Prefer @{method:resolvex} to @{method:resolve} as the former throws + * @{class:HTTPFutureHTTPResponseStatus} on failures, which includes an + * informative exception message. + */ +final class HTTPFuture extends BaseHTTPFuture { + + private $host; + private $port = 80; + private $fullRequestPath; + + private $socket; + private $writeBuffer; + private $response; + + private $stateConnected = false; + private $stateWriteComplete = false; + private $stateReady = false; + private $stateStartTime; + + private $profilerCallID; + + public function setURI($uri) { + $parts = parse_url($uri); + if (!$parts) { + throw new Exception(pht("Could not parse URI '%s'.", $uri)); + } + + if (empty($parts['scheme']) || $parts['scheme'] !== 'http') { + throw new Exception( + pht( + "URI '%s' must be fully qualified with '%s' scheme.", + $uri, + 'http://')); + } + + if (!isset($parts['host'])) { + throw new Exception( + pht("URI '%s' must be fully qualified and include host name.", $uri)); + } + + $this->host = $parts['host']; + + if (!empty($parts['port'])) { + $this->port = $parts['port']; + } + + if (isset($parts['user']) || isset($parts['pass'])) { + throw new Exception( + pht('HTTP Basic Auth is not supported by %s.', __CLASS__)); + } + + if (isset($parts['path'])) { + $this->fullRequestPath = $parts['path']; + } else { + $this->fullRequestPath = '/'; + } + + if (isset($parts['query'])) { + $this->fullRequestPath .= '?'.$parts['query']; + } + + return parent::setURI($uri); + } + + public function __destruct() { + if ($this->socket) { + @fclose($this->socket); + $this->socket = null; + } + } + + public function getReadSockets() { + if ($this->socket) { + return array($this->socket); + } + return array(); + } + + public function getWriteSockets() { + if (strlen($this->writeBuffer)) { + return array($this->socket); + } + return array(); + } + + public function isWriteComplete() { + return $this->stateWriteComplete; + } + + private function getDefaultUserAgent() { + return __CLASS__.'/1.0'; + } + + public function isReady() { + if ($this->stateReady) { + return true; + } + + if (!$this->socket) { + $this->stateStartTime = microtime(true); + $this->socket = $this->buildSocket(); + if (!$this->socket) { + return $this->stateReady; + } + + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'http', + 'uri' => $this->getURI(), + )); + } + + if (!$this->stateConnected) { + $read = array(); + $write = array($this->socket); + $except = array(); + $select = stream_select($read, $write, $except, $tv_sec = 0); + if ($write) { + $this->stateConnected = true; + } + } + + if ($this->stateConnected) { + if (strlen($this->writeBuffer)) { + $bytes = @fwrite($this->socket, $this->writeBuffer); + if ($bytes === false) { + throw new Exception(pht('Failed to write to buffer.')); + } else if ($bytes) { + $this->writeBuffer = substr($this->writeBuffer, $bytes); + } + } + + if (!strlen($this->writeBuffer)) { + $this->stateWriteComplete = true; + } + + while (($data = fread($this->socket, 32768)) || strlen($data)) { + $this->response .= $data; + } + + if ($data === false) { + throw new Exception(pht('Failed to read socket.')); + } + } + + return $this->checkSocket(); + } + + private function buildSocket() { + $errno = null; + $errstr = null; + $socket = @stream_socket_client( + 'tcp://'.$this->host.':'.$this->port, + $errno, + $errstr, + $ignored_connection_timeout = 1.0, + STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT); + + if (!$socket) { + $this->stateReady = true; + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_FAILED); + return null; + } + + $ok = stream_set_blocking($socket, 0); + if (!$ok) { + throw new Exception(pht('Failed to set stream nonblocking.')); + } + + $this->writeBuffer = $this->buildHTTPRequest(); + + return $socket; + } + + private function checkSocket() { + $timeout = false; + $now = microtime(true); + if (($now - $this->stateStartTime) > $this->getTimeout()) { + $timeout = true; + } + + if (!feof($this->socket) && !$timeout) { + return false; + } + + $this->stateReady = true; + + if ($timeout) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_TIMEOUT); + } else if (!$this->stateConnected) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_REFUSED); + } else if (!$this->stateWriteComplete) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_FAILED); + } else { + $this->result = $this->parseRawHTTPResponse($this->response); + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall($this->profilerCallID, array()); + + return true; + } + + private function buildErrorResult($error) { + return array( + $status = new HTTPFutureTransportResponseStatus($error, $this->getURI()), + $body = null, + $headers = array(), + ); + } + + private function buildHTTPRequest() { + $data = $this->getData(); + $method = $this->getMethod(); + $uri = $this->fullRequestPath; + + $add_headers = array(); + + if ($this->getMethod() == 'GET') { + if (is_array($data)) { + $data = phutil_build_http_querystring($data); + if (strpos($uri, '?') !== false) { + $uri .= '&'.$data; + } else { + $uri .= '?'.$data; + } + $data = ''; + } + } else { + if (is_array($data)) { + $data = phutil_build_http_querystring($data)."\r\n"; + $add_headers[] = array( + 'Content-Type', + 'application/x-www-form-urlencoded', + ); + } + } + + $length = strlen($data); + + $add_headers[] = array( + 'Content-Length', + $length, + ); + + if (!$this->getHeaders('User-Agent')) { + $add_headers[] = array( + 'User-Agent', + $this->getDefaultUserAgent(), + ); + } + + if (!$this->getHeaders('Host')) { + $add_headers[] = array( + 'Host', + $this->host, + ); + } + + $headers = array_merge($this->getHeaders(), $add_headers); + foreach ($headers as $key => $header) { + list($name, $value) = $header; + if (strlen($value)) { + $value = ': '.$value; + } + $headers[$key] = $name.$value."\r\n"; + } + + return + "{$method} {$uri} HTTP/1.0\r\n". + implode('', $headers). + "\r\n". + $data; + } + +} diff --git a/src/future/http/HTTPSFuture.php b/src/future/http/HTTPSFuture.php new file mode 100644 index 00000000..7dca7eda --- /dev/null +++ b/src/future/http/HTTPSFuture.php @@ -0,0 +1,824 @@ +cabundle = $temp; + return $this; + } + + /** + * Set the SSL certificate to use for this session, given a path. + * + * @param string The path to a valid SSL certificate for this session + * @return this + */ + public function setCABundleFromPath($path) { + $this->cabundle = $path; + return $this; + } + + /** + * Get the path to the SSL certificate for this session. + * + * @return string|null + */ + public function getCABundle() { + return $this->cabundle; + } + + /** + * Set whether Location headers in the response will be respected. + * The default is true. + * + * @param boolean true to follow any Location header present in the response, + * false to return the request directly + * @return this + */ + public function setFollowLocation($follow) { + $this->followLocation = $follow; + return $this; + } + + /** + * Get whether Location headers in the response will be respected. + * + * @return boolean + */ + public function getFollowLocation() { + return $this->followLocation; + } + + /** + * Set the fallback CA certificate if one is not specified + * for the session, given a path. + * + * @param string The path to a valid SSL certificate + * @return void + */ + public static function setGlobalCABundleFromPath($path) { + self::$globalCABundle = $path; + } + /** + * Set the fallback CA certificate if one is not specified + * for the session, given a string. + * + * @param string The certificate + * @return void + */ + public static function setGlobalCABundleFromString($certificate) { + $temp = new TempFile(); + Filesystem::writeFile($temp, $certificate); + self::$globalCABundle = $temp; + } + + /** + * Get the fallback global CA certificate + * + * @return string + */ + public static function getGlobalCABundle() { + return self::$globalCABundle; + } + + /** + * Load contents of remote URI. Behaves pretty much like + * `@file_get_contents($uri)` but doesn't require `allow_url_fopen`. + * + * @param string + * @param float + * @return string|false + */ + public static function loadContent($uri, $timeout = null) { + $future = new HTTPSFuture($uri); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + try { + list($body) = $future->resolvex(); + return $body; + } catch (HTTPFutureResponseStatus $ex) { + return false; + } + } + + public function setDownloadPath($download_path) { + $this->downloadPath = $download_path; + + if (Filesystem::pathExists($download_path)) { + throw new Exception( + pht( + 'Specified download path "%s" already exists, refusing to '. + 'overwrite.')); + } + + return $this; + } + + public function setProgressSink(PhutilProgressSink $progress_sink) { + $this->progressSink = $progress_sink; + return $this; + } + + public function getProgressSink() { + return $this->progressSink; + } + + /** + * Attach a file to the request. + * + * @param string HTTP parameter name. + * @param string File content. + * @param string File name. + * @param string File mime type. + * @return this + */ + public function attachFileData($key, $data, $name, $mime_type) { + if (isset($this->files[$key])) { + throw new Exception( + pht( + '%s currently supports only one file attachment for each '. + 'parameter name. You are trying to attach two different files with '. + 'the same parameter, "%s".', + __CLASS__, + $key)); + } + + $this->files[$key] = array( + 'data' => $data, + 'name' => $name, + 'mime' => $mime_type, + ); + + return $this; + } + + public function isReady() { + if (isset($this->result)) { + return true; + } + + $uri = $this->getURI(); + $domain = id(new PhutilURI($uri))->getDomain(); + + $is_download = $this->isDownload(); + + // See T13396. For now, use the streaming response parser only if we're + // downloading the response to disk. + $use_streaming_parser = (bool)$is_download; + + if (!$this->handle) { + $uri_object = new PhutilURI($uri); + $proxy = PhutilHTTPEngineExtension::buildHTTPProxyURI($uri_object); + + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'http', + 'uri' => $uri, + 'proxy' => (string)$proxy, + )); + + if (!self::$multi) { + self::$multi = curl_multi_init(); + if (!self::$multi) { + throw new Exception(pht('%s failed!', 'curl_multi_init()')); + } + } + + if (!empty(self::$pool[$domain])) { + $curl = array_pop(self::$pool[$domain]); + } else { + $curl = curl_init(); + if (!$curl) { + throw new Exception(pht('%s failed!', 'curl_init()')); + } + } + + $this->handle = $curl; + curl_multi_add_handle(self::$multi, $curl); + + curl_setopt($curl, CURLOPT_URL, $uri); + + if (defined('CURLOPT_PROTOCOLS')) { + // cURL supports a lot of protocols, and by default it will honor + // redirects across protocols (for instance, from HTTP to POP3). Beyond + // being very silly, this also has security implications: + // + // http://blog.volema.com/curl-rce.html + // + // Disable all protocols other than HTTP and HTTPS. + + $allowed_protocols = CURLPROTO_HTTPS | CURLPROTO_HTTP; + curl_setopt($curl, CURLOPT_PROTOCOLS, $allowed_protocols); + curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, $allowed_protocols); + } + + if (strlen($this->rawBody)) { + if ($this->getData()) { + throw new Exception( + pht( + 'You can not execute an HTTP future with both a raw request '. + 'body and structured request data.')); + } + + // We aren't actually going to use this file handle, since we are + // just pushing data through the callback, but cURL gets upset if + // we don't hand it a real file handle. + $tmp = new TempFile(); + $this->fileHandle = fopen($tmp, 'r'); + + // NOTE: We must set CURLOPT_PUT here to make cURL use CURLOPT_INFILE. + // We'll possibly overwrite the method later on, unless this is really + // a PUT request. + curl_setopt($curl, CURLOPT_PUT, true); + curl_setopt($curl, CURLOPT_INFILE, $this->fileHandle); + curl_setopt($curl, CURLOPT_INFILESIZE, strlen($this->rawBody)); + curl_setopt($curl, CURLOPT_READFUNCTION, + array($this, 'willWriteBody')); + } else { + $data = $this->formatRequestDataForCURL(); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data); + } + + $headers = $this->getHeaders(); + + $saw_expect = false; + for ($ii = 0; $ii < count($headers); $ii++) { + list($name, $value) = $headers[$ii]; + $headers[$ii] = $name.': '.$value; + if (!strncasecmp($name, 'Expect', strlen('Expect'))) { + $saw_expect = true; + } + } + if (!$saw_expect) { + // cURL sends an "Expect" header by default for certain requests. While + // there is some reasoning behind this, it causes a practical problem + // in that lighttpd servers reject these requests with a 417. Both sides + // are locked in an eternal struggle (lighttpd has introduced a + // 'server.reject-expect-100-with-417' option to deal with this case). + // + // The ostensibly correct way to suppress this behavior on the cURL side + // is to add an empty "Expect:" header. If we haven't seen some other + // explicit "Expect:" header, do so. + // + // See here, for example, although this issue is fairly widespread: + // http://curl.haxx.se/mail/archive-2009-07/0008.html + $headers[] = 'Expect:'; + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + // Set the requested HTTP method, e.g. GET / POST / PUT. + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->getMethod()); + + // Make sure we get the headers and data back. + curl_setopt($curl, CURLOPT_HEADER, true); + curl_setopt($curl, CURLOPT_WRITEFUNCTION, + array($this, 'didReceiveDataCallback')); + + if ($this->followLocation) { + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_MAXREDIRS, 20); + } + + if (defined('CURLOPT_TIMEOUT_MS')) { + // If CURLOPT_TIMEOUT_MS is available, use the higher-precision timeout. + $timeout = max(1, ceil(1000 * $this->getTimeout())); + curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); + } else { + // Otherwise, fall back to the lower-precision timeout. + $timeout = max(1, ceil($this->getTimeout())); + curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); + } + + // We're going to try to set CAINFO below. This doesn't work at all on + // OSX around Yosemite (see T5913). On these systems, we'll use the + // system CA and then try to tell the user that their settings were + // ignored and how to fix things if we encounter a CA-related error. + // Assume we have custom CA settings to start with; we'll clear this + // flag if we read the default CA info below. + + // Try some decent fallbacks here: + // - First, check if a bundle is set explicitly for this request, via + // `setCABundle()` or similar. + // - Then, check if a global bundle is set explicitly for all requests, + // via `setGlobalCABundle()` or similar. + // - Then, if a local custom.pem exists, use that, because it probably + // means that the user wants to override everything (also because the + // user might not have access to change the box's php.ini to add + // curl.cainfo). + // - Otherwise, try using curl.cainfo. If it's set explicitly, it's + // probably reasonable to try using it before we fall back to what + // libphutil ships with. + // - Lastly, try the default that libphutil ships with. If it doesn't + // work, give up and yell at the user. + + if (!$this->getCABundle()) { + $caroot = dirname(phutil_get_library_root('arcanist')); + $caroot = $caroot.'/resources/ssl/'; + + $ini_val = ini_get('curl.cainfo'); + if (self::getGlobalCABundle()) { + $this->setCABundleFromPath(self::getGlobalCABundle()); + } else if (Filesystem::pathExists($caroot.'custom.pem')) { + $this->setCABundleFromPath($caroot.'custom.pem'); + } else if ($ini_val) { + // TODO: We can probably do a pathExists() here, even. + $this->setCABundleFromPath($ini_val); + } else { + $this->setCABundleFromPath($caroot.'default.pem'); + } + } + + if ($this->canSetCAInfo()) { + curl_setopt($curl, CURLOPT_CAINFO, $this->getCABundle()); + } + + $verify_peer = 1; + $verify_host = 2; + + $extensions = PhutilHTTPEngineExtension::getAllExtensions(); + foreach ($extensions as $extension) { + if ($extension->shouldTrustAnySSLAuthorityForURI($uri_object)) { + $verify_peer = 0; + } + if ($extension->shouldTrustAnySSLHostnameForURI($uri_object)) { + $verify_host = 0; + } + } + + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $verify_peer); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $verify_host); + curl_setopt($curl, CURLOPT_SSLVERSION, 0); + + // See T13391. Recent versions of cURL default to "HTTP/2" on some + // connections, but do not support HTTP/2 proxies. Until HTTP/2 + // stabilizes, force HTTP/1.1 explicitly. + curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + + if ($proxy) { + curl_setopt($curl, CURLOPT_PROXY, (string)$proxy); + } + + if ($is_download) { + $this->downloadHandle = @fopen($this->downloadPath, 'wb+'); + if (!$this->downloadHandle) { + throw new Exception( + pht( + 'Failed to open filesystem path "%s" for writing.', + $this->downloadPath)); + } + } + + if ($use_streaming_parser) { + $streaming_parser = id(new PhutilHTTPResponseParser()) + ->setFollowLocationHeaders($this->getFollowLocation()); + + if ($this->downloadHandle) { + $streaming_parser->setWriteHandle($this->downloadHandle); + } + + $progress_sink = $this->getProgressSink(); + if ($progress_sink) { + $streaming_parser->setProgressSink($progress_sink); + } + + $this->parser = $streaming_parser; + } + } else { + $curl = $this->handle; + + if (!self::$results) { + // NOTE: In curl_multi_select(), PHP calls curl_multi_fdset() but does + // not check the return value of &maxfd for -1 until recent versions + // of PHP (5.4.8 and newer). cURL may return -1 as maxfd in some unusual + // situations; if it does, PHP enters select() with nfds=0, which blocks + // until the timeout is reached. + // + // We could try to guess whether this will happen or not by examining + // the version identifier, but we can also just sleep for only a short + // period of time. + curl_multi_select(self::$multi, 0.01); + } + } + + do { + $active = null; + $result = curl_multi_exec(self::$multi, $active); + } while ($result == CURLM_CALL_MULTI_PERFORM); + + while ($info = curl_multi_info_read(self::$multi)) { + if ($info['msg'] == CURLMSG_DONE) { + self::$results[(int)$info['handle']] = $info; + } + } + + if (!array_key_exists((int)$curl, self::$results)) { + return false; + } + + // The request is complete, so release any temporary files we wrote + // earlier. + $this->temporaryFiles = array(); + + $info = self::$results[(int)$curl]; + $result = $this->responseBuffer; + $err_code = $info['result']; + + if ($err_code) { + if (($err_code == CURLE_SSL_CACERT) && !$this->canSetCAInfo()) { + $status = new HTTPFutureCertificateResponseStatus( + HTTPFutureCertificateResponseStatus::ERROR_IMMUTABLE_CERTIFICATES, + $uri); + } else { + $status = new HTTPFutureCURLResponseStatus($err_code, $uri); + } + + $body = null; + $headers = array(); + $this->result = array($status, $body, $headers); + } else if ($this->parser) { + $streaming_parser = $this->parser; + try { + $responses = $streaming_parser->getResponses(); + $final_response = last($responses); + $result = array( + $final_response->getStatus(), + $final_response->getBody(), + $final_response->getHeaders(), + ); + } catch (HTTPFutureParseResponseStatus $ex) { + $result = array($ex, null, array()); + } + + $this->result = $result; + } else { + // cURL returns headers of all redirects, we strip all but the final one. + $redirects = curl_getinfo($curl, CURLINFO_REDIRECT_COUNT); + $result = preg_replace('/^(.*\r\n\r\n){'.$redirects.'}/sU', '', $result); + $this->result = $this->parseRawHTTPResponse($result); + } + + curl_multi_remove_handle(self::$multi, $curl); + unset(self::$results[(int)$curl]); + + // NOTE: We want to use keepalive if possible. Return the handle to a + // pool for the domain; don't close it. + if ($this->shouldReuseHandles()) { + self::$pool[$domain][] = $curl; + } + + if ($is_download) { + if ($this->downloadHandle) { + fflush($this->downloadHandle); + fclose($this->downloadHandle); + $this->downloadHandle = null; + } + } + + $sink = $this->getProgressSink(); + if ($sink) { + $status = head($this->result); + if ($status->isError()) { + $sink->didFailWork(); + } else { + $sink->didCompleteWork(); + } + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall($this->profilerCallID, array()); + + return true; + } + + + /** + * Callback invoked by cURL as it reads HTTP data from the response. We save + * the data to a buffer. + */ + public function didReceiveDataCallback($handle, $data) { + if ($this->parser) { + $this->parser->readBytes($data); + } else { + $this->responseBuffer .= $data; + } + + return strlen($data); + } + + + /** + * Read data from the response buffer. + * + * NOTE: Like @{class:ExecFuture}, this method advances a read cursor but + * does not discard the data. The data will still be buffered, and it will + * all be returned when the future resolves. To discard the data after + * reading it, call @{method:discardBuffers}. + * + * @return string Response data, if available. + */ + public function read() { + if ($this->isDownload()) { + throw new Exception( + pht( + 'You can not read the result buffer while streaming results '. + 'to disk: there is no in-memory buffer to read.')); + } + + if ($this->parser) { + throw new Exception( + pht( + 'Streaming reads are not currently supported by the streaming '. + 'parser.')); + } + + $result = substr($this->responseBuffer, $this->responseBufferPos); + $this->responseBufferPos = strlen($this->responseBuffer); + return $result; + } + + + /** + * Discard any buffered data. Normally, you call this after reading the + * data with @{method:read}. + * + * @return this + */ + public function discardBuffers() { + if ($this->isDownload()) { + throw new Exception( + pht( + 'You can not discard the result buffer while streaming results '. + 'to disk: there is no in-memory buffer to discard.')); + } + + if ($this->parser) { + throw new Exception( + pht( + 'Buffer discards are not currently supported by the streaming '. + 'parser.')); + } + + $this->responseBuffer = ''; + $this->responseBufferPos = 0; + return $this; + } + + + /** + * Produces a value safe to pass to `CURLOPT_POSTFIELDS`. + * + * @return wild Some value, suitable for use in `CURLOPT_POSTFIELDS`. + */ + private function formatRequestDataForCURL() { + // We're generating a value to hand to cURL as CURLOPT_POSTFIELDS. The way + // cURL handles this value has some tricky caveats. + + // First, we can return either an array or a query string. If we return + // an array, we get a "multipart/form-data" request. If we return a + // query string, we get an "application/x-www-form-urlencoded" request. + + // Second, if we return an array we can't duplicate keys. The user might + // want to send the same parameter multiple times. + + // Third, if we return an array and any of the values start with "@", + // cURL includes arbitrary files off disk and sends them to an untrusted + // remote server. For example, an array like: + // + // array('name' => '@/usr/local/secret') + // + // ...will attempt to read that file off disk and transmit its contents with + // the request. This behavior is pretty surprising, and it can easily + // become a relatively severe security vulnerability which allows an + // attacker to read any file the HTTP process has access to. Since this + // feature is very dangerous and not particularly useful, we prevent its + // use. Broadly, this means we must reject some requests because they + // contain an "@" in an inconvenient place. + + // Generally, to avoid the "@" case and because most servers usually + // expect "application/x-www-form-urlencoded" data, we try to return a + // string unless there are files attached to this request. + + $data = $this->getData(); + $files = $this->files; + + $any_data = ($data || (is_string($data) && strlen($data))); + $any_files = (bool)$this->files; + + if (!$any_data && !$any_files) { + // No files or data, so just bail. + return null; + } + + if (!$any_files) { + // If we don't have any files, just encode the data as a query string, + // make sure it's not including any files, and we're good to go. + if (is_array($data)) { + $data = phutil_build_http_querystring($data); + } + + $this->checkForDangerousCURLMagic($data, $is_query_string = true); + + return $data; + } + + // If we've made it this far, we have some files, so we need to return + // an array. First, convert the other data into an array if it isn't one + // already. + + if (is_string($data)) { + // NOTE: We explicitly don't want fancy array parsing here, so just + // do a basic parse and then convert it into a dictionary ourselves. + $parser = new PhutilQueryStringParser(); + $pairs = $parser->parseQueryStringToPairList($data); + + $map = array(); + foreach ($pairs as $pair) { + list($key, $value) = $pair; + if (array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Request specifies two values for key "%s", but parameter '. + 'names must be unique if you are posting file data due to '. + 'limitations with cURL.', + $key)); + } + $map[$key] = $value; + } + + $data = $map; + } + + foreach ($data as $key => $value) { + $this->checkForDangerousCURLMagic($value, $is_query_string = false); + } + + foreach ($this->files as $name => $info) { + if (array_key_exists($name, $data)) { + throw new Exception( + pht( + 'Request specifies a file with key "%s", but that key is also '. + 'defined by normal request data. Due to limitations with cURL, '. + 'requests that post file data must use unique keys.', + $name)); + } + + $tmp = new TempFile($info['name']); + Filesystem::writeFile($tmp, $info['data']); + $this->temporaryFiles[] = $tmp; + + // In 5.5.0 and later, we can use CURLFile. Prior to that, we have to + // use this "@" stuff. + + if (class_exists('CURLFile', false)) { + $file_value = new CURLFile((string)$tmp, $info['mime'], $info['name']); + } else { + $file_value = '@'.(string)$tmp; + } + + $data[$name] = $file_value; + } + + return $data; + } + + + /** + * Detect strings which will cause cURL to do horrible, insecure things. + * + * @param string Possibly dangerous string. + * @param bool True if this string is being used as part of a query string. + * @return void + */ + private function checkForDangerousCURLMagic($string, $is_query_string) { + if (empty($string[0]) || ($string[0] != '@')) { + // This isn't an "@..." string, so it's fine. + return; + } + + if ($is_query_string) { + if (version_compare(phpversion(), '5.2.0', '<')) { + throw new Exception( + pht( + 'Attempting to make an HTTP request, but query string data begins '. + 'with "%s". Prior to PHP 5.2.0 this reads files off disk, which '. + 'creates a wide attack window for security vulnerabilities. '. + 'Upgrade PHP or avoid making cURL requests which begin with "%s".', + '@', + '@')); + } + + // This is safe if we're on PHP 5.2.0 or newer. + return; + } + + throw new Exception( + pht( + 'Attempting to make an HTTP request which includes file data, but the '. + 'value of a query parameter begins with "%s". PHP interprets these '. + 'values to mean that it should read arbitrary files off disk and '. + 'transmit them to remote servers. Declining to make this request.', + '@')); + } + + + /** + * Determine whether CURLOPT_CAINFO is usable on this system. + */ + private function canSetCAInfo() { + // We cannot set CAInfo on OSX after Yosemite. + + $osx_version = PhutilExecutionEnvironment::getOSXVersion(); + if ($osx_version) { + if (version_compare($osx_version, 14, '>=')) { + return false; + } + } + + return true; + } + + + /** + * Write a raw HTTP body into the request. + * + * You must write the entire body before starting the request. + * + * @param string Raw body. + * @return this + */ + public function write($raw_body) { + $this->rawBody = $raw_body; + return $this; + } + + + /** + * Callback to pass data to cURL. + */ + public function willWriteBody($handle, $infile, $len) { + $bytes = substr($this->rawBody, $this->rawBodyPos, $len); + $this->rawBodyPos += $len; + return $bytes; + } + + private function shouldReuseHandles() { + $curl_version = curl_version(); + $version = idx($curl_version, 'version'); + + // NOTE: cURL 7.43.0 has a bug where the POST body length is not recomputed + // properly when a handle is reused. For this version of cURL, disable + // handle reuse and accept a small performance penalty. See T8654. + if ($version == '7.43.0') { + return false; + } + + return true; + } + + private function isDownload() { + return ($this->downloadPath !== null); + } + +} diff --git a/src/future/http/PhutilHTTPEngineExtension.php b/src/future/http/PhutilHTTPEngineExtension.php new file mode 100644 index 00000000..6c1beb9f --- /dev/null +++ b/src/future/http/PhutilHTTPEngineExtension.php @@ -0,0 +1,141 @@ +getPhobjectClassConstant('EXTENSIONKEY'); + } + + final public static function getAllExtensions() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getExtensionKey') + ->execute(); + } + + final public static function getExtension($key) { + $extensions = self::getAllExtensions(); + return idx($extensions, $key); + } + + final public static function requireExtension($key) { + $extension = self::getExtension($key); + + if (!$extension) { + throw new Exception( + pht( + 'No HTTP engine extension exists with extension key "%s".', + $key)); + } + + return $extension; + } + + final public static function buildHTTPProxyURI(PhutilURI $uri) { + $proxy = null; + $via = null; + + $extensions = self::getAllExtensions(); + foreach ($extensions as $extension) { + $extension_proxy = $extension->getHTTPProxyURI($uri); + + if ($extension_proxy === null) { + continue; + } + + if (!($extension_proxy instanceof PhutilURI)) { + throw new Exception( + pht( + 'HTTP extension "%s" (of class "%s") returned an invalid '. + 'result from "%s": expected null, or an object of class "%s".', + $extension->getExtensionName(), + get_class($extension), + 'getHTTPProxyURI()', + 'PhutilURI')); + } + + if ($proxy) { + throw new Exception( + pht( + 'Two different HTTP extensions ("%s" of class "%s" and "%s" of '. + 'class "%s") both provided a proxy URI for URI "%s". No more '. + 'than one extension may provide a proxy for any URI.', + $extension->getExtensionName(), + get_class($extension), + $via->getExtensionName(), + get_class($via), + (string)$uri)); + } + + $proxy = $extension_proxy; + $via = $extension; + } + + return $proxy; + } + +} diff --git a/src/future/http/status/HTTPFutureCURLResponseStatus.php b/src/future/http/status/HTTPFutureCURLResponseStatus.php new file mode 100644 index 00000000..50c61805 --- /dev/null +++ b/src/future/http/status/HTTPFutureCURLResponseStatus.php @@ -0,0 +1,86 @@ +getStatusCode() == CURLE_OPERATION_TIMEOUTED); + } + + protected function getErrorCodeDescription($code) { + $constants = get_defined_constants(); + + $constant_name = null; + foreach ($constants as $constant => $value) { + if ($value == $code && preg_match('/^CURLE_/', $constant)) { + $constant_name = '<'.$constant.'> '; + break; + } + } + + $map = array( + CURLE_COULDNT_RESOLVE_HOST => pht( + 'There was an error resolving the server hostname. Check that you are '. + 'connected to the internet and that DNS is correctly configured. (Did '. + 'you add the domain to `%s` on some other machine, but not this one?)', + '/etc/hosts'), + + CURLE_SSL_CACERT => pht( + 'There was an error verifying the SSL Certificate Authority while '. + 'negotiating the SSL connection. This usually indicates that you are '. + 'using a self-signed certificate but have not added your CA to the '. + 'CA bundle. See instructions in "%s".', + 'libphutil/resources/ssl/README'), + + // Apparently there's no error constant for this? In cURL it's + // CURLE_SSL_CACERT_BADFILE but there's no corresponding constant in + // PHP. + 77 => pht( + 'The SSL CA Bundles that we tried to use could not be read or are '. + 'not formatted correctly.'), + + CURLE_SSL_CONNECT_ERROR => pht( + 'There was an error negotiating the SSL connection. This usually '. + 'indicates that the remote host has a bad SSL certificate, or your '. + 'local host has some sort of SSL misconfiguration which prevents it '. + 'from accepting the CA. If you are using a self-signed certificate, '. + 'see instructions in "%s".', + 'libphutil/resources/ssl/README'), + + CURLE_OPERATION_TIMEOUTED => pht( + 'The request took too long to complete.'), + + CURLE_SSL_PEER_CERTIFICATE => pht( + 'There was an error verifying the SSL connection. This usually '. + 'indicates that the remote host has an SSL certificate for a '. + 'different domain name than you are connecting with. Make sure the '. + 'certificate you have installed is signed for the correct domain.'), + ); + + $default_message = pht( + 'The cURL library raised an error while making a request. You may be '. + 'able to find more information about this error (error code: %d) '. + 'on the cURL site: %s', + $code, + 'http://curl.haxx.se/libcurl/c/libcurl-errors.html#'. + preg_replace('/[^A-Z]/', '', $constant_name)); + + $detailed_message = idx($map, $code, $default_message); + + return $constant_name.$detailed_message; + } + +} diff --git a/src/future/http/status/HTTPFutureCertificateResponseStatus.php b/src/future/http/status/HTTPFutureCertificateResponseStatus.php new file mode 100644 index 00000000..d6e35f89 --- /dev/null +++ b/src/future/http/status/HTTPFutureCertificateResponseStatus.php @@ -0,0 +1,33 @@ + 512) { + $excerpt = substr($body, 0, 512).'...'; + } else { + $excerpt = $body; + } + + $content_type = BaseHTTPFuture::getHeader($headers, 'Content-Type'); + $match = null; + if (preg_match('/;\s*charset=([^;]+)/', $content_type, $match)) { + $encoding = trim($match[1], "\"'"); + try { + $excerpt = phutil_utf8_convert($excerpt, 'UTF-8', $encoding); + } catch (Exception $ex) {} + } + + $this->excerpt = phutil_utf8ize($excerpt); + $this->expect = $expect; + + parent::__construct($status_code); + } + + protected function getErrorCodeType($code) { + return 'HTTP'; + } + + public function isError() { + if ($this->expect === null) { + return ($this->getStatusCode() < 200) || ($this->getStatusCode() > 299); + } + + return !in_array($this->getStatusCode(), $this->expect, true); + } + + public function isRedirect() { + $code = $this->getStatusCode(); + return ($code >= 300 && $code < 400); + } + + public function isTimeout() { + return false; + } + + protected function getErrorCodeDescription($code) { + static $map = array( + 404 => 'Not Found', + 500 => 'Internal Server Error', + ); + + return idx($map, $code)."\n".$this->excerpt."\n"; + } + +} diff --git a/src/future/http/status/HTTPFutureParseResponseStatus.php b/src/future/http/status/HTTPFutureParseResponseStatus.php new file mode 100644 index 00000000..09a0ff7b --- /dev/null +++ b/src/future/http/status/HTTPFutureParseResponseStatus.php @@ -0,0 +1,32 @@ +rawResponse = $raw_response; + parent::__construct($code); + } + + protected function getErrorCodeType($code) { + return 'Parse'; + } + + public function isError() { + return true; + } + + public function isTimeout() { + return false; + } + + protected function getErrorCodeDescription($code) { + return pht( + 'The remote host returned something other than an HTTP response: %s', + $this->rawResponse); + } + +} diff --git a/src/future/http/status/HTTPFutureResponseStatus.php b/src/future/http/status/HTTPFutureResponseStatus.php new file mode 100644 index 00000000..5bf68f0d --- /dev/null +++ b/src/future/http/status/HTTPFutureResponseStatus.php @@ -0,0 +1,43 @@ +statusCode = $status_code; + $this->uri = (string)$uri; + + $type = $this->getErrorCodeType($status_code); + $description = $this->getErrorCodeDescription($status_code); + + $uri_info = ''; + if ($this->uri) { + $uri_info = ' ('.$this->uri.')'; + } + + $message = rtrim("[{$type}/{$status_code}]{$uri_info} {$description}"); + + parent::__construct($message); + } + + final public function getStatusCode() { + return $this->statusCode; + } + + final public function getURI() { + return $this->uri; + } + + abstract public function isError(); + abstract public function isTimeout(); + + public function isRedirect() { + return false; + } + + abstract protected function getErrorCodeType($code); + abstract protected function getErrorCodeDescription($code); + +} diff --git a/src/future/http/status/HTTPFutureTransportResponseStatus.php b/src/future/http/status/HTTPFutureTransportResponseStatus.php new file mode 100644 index 00000000..76649c50 --- /dev/null +++ b/src/future/http/status/HTTPFutureTransportResponseStatus.php @@ -0,0 +1,44 @@ +getStatusCode() == self::ERROR_TIMEOUT); + } + + protected function getErrorCodeDescription($code) { + $map = array( + self::ERROR_TIMEOUT => pht( + 'The request took too long to complete.'), + self::ERROR_CONNECTION_ABORTED => pht( + 'The remote host closed the connection before the request completed.'), + self::ERROR_CONNECTION_REFUSED => pht( + 'The remote host refused the connection. This usually means the '. + 'host is not running an HTTP server, or the network is blocking '. + 'connections from this machine. Verify you can connect to the '. + 'remote host from this host.'), + self::ERROR_CONNECTION_FAILED => pht( + 'Connection could not be initiated. This usually indicates a DNS '. + 'problem: verify the domain name is correct, that you can '. + 'perform a DNS lookup for it from this machine. (Did you add the '. + 'domain to `%s` on some other machine, but not this one?) '. + 'This might also indicate that you specified the wrong port.', + '/etc/hosts'), + ); + return idx($map, $code); + } + +} diff --git a/src/future/oauth/PhutilOAuth1Future.php b/src/future/oauth/PhutilOAuth1Future.php new file mode 100644 index 00000000..084ae6f9 --- /dev/null +++ b/src/future/oauth/PhutilOAuth1Future.php @@ -0,0 +1,306 @@ +callbackURI = $callback_uri; + return $this; + } + + public function setTimestamp($timestamp) { + $this->timestamp = $timestamp; + return $this; + } + + public function setNonce($nonce) { + $this->nonce = $nonce; + return $this; + } + + public function setTokenSecret($token_secret) { + $this->tokenSecret = $token_secret; + return $this; + } + + public function setToken($token) { + $this->token = $token; + return $this; + } + + public function setPrivateKey(PhutilOpaqueEnvelope $private_key) { + $this->privateKey = $private_key; + return $this; + } + + public function setSignatureMethod($signature_method) { + $this->signatureMethod = $signature_method; + return $this; + } + + public function setConsumerKey($consumer_key) { + $this->consumerKey = $consumer_key; + return $this; + } + + public function setConsumerSecret(PhutilOpaqueEnvelope $consumer_secret) { + $this->consumerSecret = $consumer_secret; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + public function __construct($uri, $data = array()) { + $this->uri = new PhutilURI((string)$uri); + $this->data = $data; + $this->setProxiedFuture(new HTTPSFuture($uri, $data)); + } + + public function getSignature() { + $params = array(); + + // NOTE: The JIRA API uses JSON-encoded request bodies which are not + // signed, and OAuth1 provides no real way to sign a nonparameterized + // request body. Possibly we should split this apart into flags which + // control which data is signed, but for now this rule seems to cover + // all the use cases. + + if (is_array($this->data)) { + $params = $this->data; + } + + $params = $params + + $this->uri->getQueryParamsAsMap() + + $this->getOAuth1Headers(); + + return $this->sign($params); + } + + public function addHeader($name, $value) { + // If we haven't built the future yet, hold on to the header until after + // we do, since there might be more changes coming which will affect the + // signature process. + + if (!$this->hasConstructedFuture) { + $this->headers[] = array($name, $value); + } else { + $this->getProxiedFuture()->addHeader($name, $value); + } + return $this; + } + + protected function getProxiedFuture() { + $future = parent::getProxiedFuture(); + + if (!$this->hasConstructedFuture) { + $future->setMethod($this->method); + + $oauth_headers = $this->getOAuth1Headers(); + $oauth_headers['oauth_signature'] = $this->getSignature(); + + $full_oauth_header = array(); + foreach ($oauth_headers as $header => $value) { + $full_oauth_header[] = $header.'="'.urlencode($value).'"'; + } + $full_oauth_header = 'OAuth '.implode(', ', $full_oauth_header); + + $future->addHeader('Authorization', $full_oauth_header); + + foreach ($this->headers as $header) { + $future->addHeader($header[0], $header[1]); + } + $this->headers = array(); + + $timeout = $this->getTimeout(); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + + $this->hasConstructedFuture = true; + } + + return $future; + } + + protected function didReceiveResult($result) { + return $result; + } + + private function getOAuth1Headers() { + if (!$this->nonce) { + $this->nonce = Filesystem::readRandomCharacters(32); + } + if (!$this->timestamp) { + $this->timestamp = time(); + } + + $oauth_headers = array( + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_signature_method' => $this->signatureMethod, + 'oauth_timestamp' => $this->timestamp, + 'oauth_nonce' => $this->nonce, + 'oauth_version' => '1.0', + ); + + if ($this->callbackURI) { + $oauth_headers['oauth_callback'] = (string)$this->callbackURI; + } + + if ($this->token) { + $oauth_headers['oauth_token'] = $this->token; + } + + return $oauth_headers; + } + + private function sign(array $params) { + ksort($params); + + $pstr = array(); + foreach ($params as $key => $value) { + $pstr[] = rawurlencode($key).'='.rawurlencode($value); + } + $pstr = implode('&', $pstr); + + $sign_uri = clone $this->uri; + $sign_uri->setFragment(''); + $sign_uri->removeAllQueryParams(); + + $sign_uri->setProtocol(phutil_utf8_strtolower($sign_uri->getProtocol())); + $protocol = $sign_uri->getProtocol(); + switch ($protocol) { + case 'http': + if ($sign_uri->getPort() == 80) { + $sign_uri->setPort(null); + } + break; + case 'https': + if ($sign_uri->getPort() == 443) { + $sign_uri->setPort(null); + } + break; + } + + $method = rawurlencode(phutil_utf8_strtoupper($this->method)); + $sign_uri = rawurlencode((string)$sign_uri); + $pstr = rawurlencode($pstr); + + $sign_input = "{$method}&{$sign_uri}&{$pstr}"; + return $this->signString($sign_input); + } + + private function signString($string) { + $consumer_secret = null; + if ($this->consumerSecret) { + $consumer_secret = $this->consumerSecret->openEnvelope(); + } + + $key = urlencode($consumer_secret).'&'.urlencode($this->tokenSecret); + + switch ($this->signatureMethod) { + case 'HMAC-SHA1': + if (!$this->consumerSecret) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'HMAC-SHA1', + 'setConsumerSecret()')); + } + + $hash = hash_hmac('sha1', $string, $key, true); + return base64_encode($hash); + case 'RSA-SHA1': + if (!$this->privateKey) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'RSA-SHA1', + 'setPrivateKey()')); + } + + $cert = @openssl_pkey_get_private($this->privateKey->openEnvelope()); + if (!$cert) { + throw new Exception(pht('%s failed!', 'openssl_pkey_get_private()')); + } + + $pkey = @openssl_get_privatekey($cert); + if (!$pkey) { + throw new Exception(pht('%s failed!', 'openssl_get_privatekey()')); + } + + $signature = null; + $ok = openssl_sign($string, $signature, $pkey, OPENSSL_ALGO_SHA1); + if (!$ok) { + throw new Exception(pht('%s failed!', 'openssl_sign()')); + } + + openssl_free_key($pkey); + + return base64_encode($signature); + case 'PLAINTEXT': + if (!$this->consumerSecret) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'PLAINTEXT', + 'setConsumerSecret()')); + } + return $key; + default: + throw new Exception(pht("Unknown signature method '%s'!", $string)); + } + } + + public function resolvex() { + $result = $this->getProxiedFuture()->resolvex(); + return $this->didReceiveResult($result); + } + + public function resolveJSON() { + $result = $this->getProxiedFuture()->resolvex(); + $result = $this->didReceiveResult($result); + list($body) = $result; + + try { + return phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException(pht('Expected JSON.'), $ex); + } + } + + +} diff --git a/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php b/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php new file mode 100644 index 00000000..73e66375 --- /dev/null +++ b/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php @@ -0,0 +1,159 @@ +setTimestamp(1191242090) + ->setNonce('hsu94j3884jdopsl') + ->setConsumerKey('dpf43f3p2l4k3l03') + ->setConsumerSecret(new PhutilOpaqueEnvelope('kd94hf93k423kf44')) + ->setSignatureMethod('PLAINTEXT'); + + $this->assertEqual('kd94hf93k423kf44&', $future->getSignature()); + + + $uri = 'http://photos.example.net/photos'; + $data = array( + 'file' => 'vacation.jpg', + 'size' => 'original', + ); + + $future = id(new PhutilOAuth1Future($uri, $data)) + ->setMethod('GET') + ->setTimestamp(1191242096) + ->setNonce('kllo9940pd9333jh') + ->setConsumerKey('dpf43f3p2l4k3l03') + ->setConsumerSecret(new PhutilOpaqueEnvelope('kd94hf93k423kf44')) + ->setSignatureMethod('HMAC-SHA1') + ->setToken('nnch734d00sl2jdk') + ->setTokenSecret('pfkkdhi9sl3r4s00'); + + $this->assertEqual('tR3+Ty81lMeYAr/Fid0kMTYa/WM=', $future->getSignature()); + } + + public function testOAuth1SigningWithTwitterExamples() { + + // NOTE: This example is from Twitter. + // https://dev.twitter.com/docs/auth/creating-signature + + $uri = 'https://api.twitter.com/1/statuses/update.json?'. + 'include_entities=true'; + $data = array( + 'status' => 'Hello Ladies + Gentlemen, a signed OAuth request!', + ); + + $future = id(new PhutilOAuth1Future($uri, $data)) + ->setMethod('POST') + ->setConsumerKey('xvz1evFS4wEEPTGEFPHBog') + ->setConsumerSecret( + new PhutilOpaqueEnvelope('kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw')) + ->setNonce('kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg') + ->setSignatureMethod('HMAC-SHA1') + ->setTimestamp(1318622958) + ->setToken('370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb') + ->setTokenSecret('LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE'); + + $this->assertEqual('tnnArxj06cWHq44gCs1OSKk/jLY=', $future->getSignature()); + } + + public function testOAuth1SigningWithJIRAExamples() { + + // NOTE: This is an emprically example against JIRA v6.0.6, in that the + // code seems to work when actually authing. It primarily serves as a check + // of the RSA-SHA1 signature method. + +$public_key = <<setConsumerKey('quackquack') + ->setPrivateKey(new PhutilOpaqueEnvelope($private_key)) + ->setTimestamp('1375984131') + ->setNonce('iamaduck') + ->setSignatureMethod('RSA-SHA1'); + + // The actual signature is 684 bytes and begins "QwigfVxpOm0AKoWJkFRwbyseso + // VJobhiXpyY0J79Kzki+vwlT4Xz2Tr4vlwDLsra5gJbfdeme4qJ2rE..." + $this->assertEqual( + '5e63e65237e2b8078426996d5ef1a706', + md5($future->getSignature())); + } + +} diff --git a/src/future/paypal/PhutilPayPalAPIFuture.php b/src/future/paypal/PhutilPayPalAPIFuture.php new file mode 100644 index 00000000..8e5b46b5 --- /dev/null +++ b/src/future/paypal/PhutilPayPalAPIFuture.php @@ -0,0 +1,88 @@ +host = $host; + return $this; + } + + public function getHost() { + return $this->host; + } + + public function setAPIUsername($api_username) { + $this->apiUsername = $api_username; + return $this; + } + + public function setAPIPassword($api_password) { + $this->apiPassword = $api_password; + return $this; + } + + public function setAPISignature($api_signature) { + $this->apiSignature = $api_signature; + return $this; + } + + public function setRawPayPalQuery($action, array $params = array()) { + $this->params = array('METHOD' => $action) + $params + $this->params; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->params) { + throw new Exception(pht('You must %s!', 'setRawPayPalQuery()')); + } + + if (!$this->apiUsername) { + throw new Exception(pht('You must set PayPal API credentials!')); + } + + $params['VERSION'] = '98.0'; + $params['USER'] = $this->apiUsername; + $params['PWD'] = $this->apiPassword; + $params['SIGNATURE'] = $this->apiSignature; + + $this->future = id(new HTTPSFuture($this->getHost(), $params)) + ->setMethod('POST'); + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $dict = array(); + parse_str($body, $dict); + + if (idx($dict, 'ACK') !== 'Success') { + throw new Exception( + pht('PayPal API call failed: %s', print_r($dict, true))); + } + + return $dict; + } + +} diff --git a/src/future/postmark/PhutilPostmarkFuture.php b/src/future/postmark/PhutilPostmarkFuture.php new file mode 100644 index 00000000..23c21f47 --- /dev/null +++ b/src/future/postmark/PhutilPostmarkFuture.php @@ -0,0 +1,100 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setMethod($method, array $parameters) { + $this->method = $method; + $this->parameters = $parameters; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + protected function getProxiedFuture() { + if (!$this->future) { + if ($this->accessToken === null) { + throw new PhutilInvalidStateException('setAccessToken'); + } + + if ($this->method === null || $this->parameters === null) { + throw new PhutilInvalidStateException('setMethod'); + } + + $uri = id(new PhutilURI('https://api.postmarkapp.com/')) + ->setPath('/'.$this->method); + + $request_body = phutil_json_encode($this->parameters); + + $future = id(new HTTPSFuture($uri)) + ->setData($request_body) + ->setMethod('POST') + ->addHeader('X-Postmark-Server-Token', $this->accessToken) + ->addHeader('Accept', 'application/json') + ->addHeader('Content-Type', 'application/json'); + + $timeout = $this->getTimeout(); + if ($timeout) { + $future->setTimeout($timeout); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Postmark.'), + $ex); + } + + if (idx($data, 'ErrorCode')) { + $error = $data['ErrorCode']; + throw new Exception( + pht( + 'Received error from Postmark: (%s) %s', + $error, + idx($data, 'Message'))); + } + + return $data; + } + +} diff --git a/src/future/slack/PhutilSlackFuture.php b/src/future/slack/PhutilSlackFuture.php new file mode 100644 index 00000000..7ae8b0b1 --- /dev/null +++ b/src/future/slack/PhutilSlackFuture.php @@ -0,0 +1,87 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawSlackQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawSlackQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://slack.com/'); + $uri->setPath('/api/'.$this->action); + $uri->replaceQueryParam('token', $this->accessToken); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Slack.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception(pht('Received error from Slack: %s', $error)); + } + + return $data; + } + +} diff --git a/src/future/twitch/PhutilTwitchFuture.php b/src/future/twitch/PhutilTwitchFuture.php new file mode 100644 index 00000000..9dc06c34 --- /dev/null +++ b/src/future/twitch/PhutilTwitchFuture.php @@ -0,0 +1,93 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawTwitchQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawTwitchQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://api.twitch.tv/'); + $uri->setPath('/kraken/'.ltrim($this->action, '/')); + $uri->replaceQueryParam('oauth_token', $this->accessToken); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + // NOTE: This is how the Twitch API is versioned. + $future->addHeader('Accept', 'application/vnd.twitchtv.2+json'); + + // NOTE: This is required to avoid rate limiting. + $future->addHeader('Client-ID', $this->clientID); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Twitch.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception(pht('Received error from Twitch: %s', $error)); + } + + return $data; + } + +} diff --git a/src/future/wordpress/PhutilWordPressFuture.php b/src/future/wordpress/PhutilWordPressFuture.php new file mode 100644 index 00000000..e2ea8199 --- /dev/null +++ b/src/future/wordpress/PhutilWordPressFuture.php @@ -0,0 +1,89 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawWordPressQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawWordPressQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://public-api.wordpress.com/'); + $uri->setPath('/rest/v1/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + // NOTE: This is how WordPress.com REST API authenticates + $future->addHeader('Authorization', 'Bearer '.$this->accessToken); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from WordPress.com.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception( + pht('Received error from WordPress.com: %s', $error)); + } + + return $data; + } + +} diff --git a/src/init/init-library.php b/src/init/init-library.php new file mode 100644 index 00000000..1041d80b --- /dev/null +++ b/src/init/init-library.php @@ -0,0 +1,70 @@ +setType('class') + ->setName($class_name) + ->selectAndLoadSymbols(); + + if (!$symbols) { + throw new PhutilMissingSymbolException( + $class_name, + 'class or interface', + sprintf( + 'The class or interface "%s" is not defined in the library '. + 'map of any loaded library.', + $class_name)); + } + } catch (PhutilMissingSymbolException $ex) { + $should_throw = true; + + foreach (debug_backtrace() as $backtrace) { + if (empty($backtrace['function'])) { + continue; + } + + switch ($backtrace['function']) { + case 'class_exists': + case 'interface_exists': + case 'method_exists': + case 'property_exists': + case 'trait_exists': + $should_throw = false; + break; + } + } + + if (!$should_throw) { + return false; + } + + // If there are other SPL autoloaders installed, we need to give them a + // chance to load the class. Throw the exception if we're the last + // autoloader; if not, swallow it and let them take a shot. + $autoloaders = spl_autoload_functions(); + $last = end($autoloaders); + if ($last == __FUNCTION__) { + throw $ex; + } + } +} + +spl_autoload_register('__phutil_autoload', $throw = true); + +PhutilBootloader::newLibrary('arcanist', dirname(dirname(__FILE__))); diff --git a/src/init/lib/PhutilBootloader.php b/src/init/lib/PhutilBootloader.php new file mode 100644 index 00000000..7a8759e8 --- /dev/null +++ b/src/init/lib/PhutilBootloader.php @@ -0,0 +1,332 @@ +registerLibrary($name, $path); + } + + public static function getInstance() { + if (!self::$instance) { + self::$instance = new PhutilBootloader(); + } + return self::$instance; + } + + private function __construct() { + // This method intentionally left blank. + } + + public function getClassTree() { + return $this->classTree; + } + + public function registerInMemoryLibrary($name, $map) { + $this->registeredLibraries[$name] = "memory:$name"; + $this->inMemoryMaps[$name] = $map; + + $this->getLibraryMap($name); + } + + public function registerLibrary($name, $path) { + // Detect attempts to load the same library multiple times from different + // locations. This might mean you're doing something silly like trying to + // include two different versions of something, or it might mean you're + // doing something subtle like running a different version of 'arc' on a + // working copy of Arcanist. + if (isset($this->registeredLibraries[$name])) { + $old_path = $this->registeredLibraries[$name]; + if ($old_path != $path) { + throw new PhutilLibraryConflictException($name, $old_path, $path); + } + } + + $this->registeredLibraries[$name] = $path; + + // If we're loading libphutil itself, load the utility functions first so + // we can safely call functions like "id()" when handling errors. In + // particular, this improves error behavior when "utils.php" itself can + // not load. + if ($name === 'arcanist') { + $root = $this->getLibraryRoot('arcanist'); + $this->executeInclude($root.'/utils/utils.php'); + } + + // For libphutil v2 libraries, load all functions when we load the library. + + if (!class_exists('PhutilSymbolLoader', false)) { + $root = $this->getLibraryRoot('arcanist'); + $this->executeInclude($root.'/symbols/PhutilSymbolLoader.php'); + } + + $loader = new PhutilSymbolLoader(); + $loader + ->setLibrary($name) + ->setType('function'); + + try { + $loader->selectAndLoadSymbols(); + } catch (PhutilBootloaderException $ex) { + // Ignore this, it happens if a global function's file is removed or + // similar. Worst case is that we fatal when calling the function, which + // is no worse than fataling here. + } catch (PhutilMissingSymbolException $ex) { + // Ignore this, it happens if a global function is removed. Everything + // else loaded so proceed forward: worst case is a fatal when we + // hit a function call to a function which no longer exists, which is + // no worse than fataling here. + } + + if (empty($_SERVER['PHUTIL_DISABLE_RUNTIME_EXTENSIONS'])) { + $extdir = $path.DIRECTORY_SEPARATOR.'extensions'; + if (Filesystem::pathExists($extdir)) { + $extensions = id(new FileFinder($extdir)) + ->withSuffix('php') + ->withType('f') + ->withFollowSymlinks(true) + ->setForceMode('php') + ->find(); + + foreach ($extensions as $extension) { + $this->loadExtension( + $name, + $path, + $extdir.DIRECTORY_SEPARATOR.$extension); + } + } + } + + return $this; + } + + public function registerLibraryMap(array $map) { + $this->libraryMaps[$this->currentLibrary] = $map; + return $this; + } + + public function getLibraryMap($name) { + if (isset($this->extendedMaps[$name])) { + return $this->extendedMaps[$name]; + } + + if (empty($this->libraryMaps[$name])) { + $root = $this->getLibraryRoot($name); + $this->currentLibrary = $name; + + if (isset($this->inMemoryMaps[$name])) { + $this->libraryMaps[$name] = $this->inMemoryMaps[$name]; + } else { + $okay = include $root.'/__phutil_library_map__.php'; + if (!$okay) { + throw new PhutilBootloaderException( + "Include of '{$root}/__phutil_library_map__.php' failed!"); + } + } + + $map = $this->libraryMaps[$name]; + + $version = isset($map['__library_version__']) + ? $map['__library_version__'] + : 1; + + switch ($version) { + case 1: + throw new Exception( + 'libphutil v1 libraries are no longer supported.'); + case 2: + // NOTE: In version 2 of the library format, all parents (both + // classes and interfaces) are stored in the 'xmap'. The value is + // either a string for a single parent (the common case) or an array + // for multiple parents. + foreach ($map['xmap'] as $child => $parents) { + foreach ((array)$parents as $parent) { + $this->classTree[$parent][] = $child; + } + } + break; + default: + throw new Exception("Unsupported library version '{$version}'!"); + } + } + + $map = $this->libraryMaps[$name]; + + // If there's an extension map for this library, merge the maps. + if (isset($this->extensionMaps[$name])) { + $emap = $this->extensionMaps[$name]; + foreach (array('function', 'class', 'xmap') as $dict_key) { + if (!isset($emap[$dict_key])) { + continue; + } + $map[$dict_key] += $emap[$dict_key]; + } + } + + $this->extendedMaps[$name] = $map; + + return $map; + } + + public function getLibraryMapWithoutExtensions($name) { + // This just does all the checks to make sure the library is valid, then + // we throw away the result. + $this->getLibraryMap($name); + + return $this->libraryMaps[$name]; + } + + public function getLibraryRoot($name) { + if (empty($this->registeredLibraries[$name])) { + throw new PhutilBootloaderException( + "The phutil library '{$name}' has not been loaded!"); + } + return $this->registeredLibraries[$name]; + } + + public function getAllLibraries() { + return array_keys($this->registeredLibraries); + } + + public function loadLibrarySource($library, $source) { + $path = $this->getLibraryRoot($library).'/'.$source; + $this->executeInclude($path); + } + + private function executeInclude($path) { + // Include the source using `include_once`, but convert any warnings or + // recoverable errors into exceptions. + + // Some messages, including "Declaration of X should be compatible with Y", + // do not cause `include_once` to return an error code. Use + // error_get_last() to make sure we're catching everything in every PHP + // version. + + // (Also, the severity of some messages changed between versions of PHP.) + + // Note that we may enter this method after some earlier, unrelated error. + // In this case, error_get_last() will return information for that error. + // In PHP7 and later we could use error_clear_last() to clear that error, + // but the function does not exist in earlier versions of PHP. Instead, + // check if the value has changed. + + // Some parser-like errors, including "class must implement all abstract + // methods", cause PHP to fatal immediately with an E_ERROR. In these + // cases, include_once() does not throw and never returns. We leave + // reporting enabled for these errors since we don't have a way to do + // anything more graceful. + + // Likewise, some errors, including "cannot redeclare Class::method()" + // cause PHP to fatal immediately with E_COMPILE_ERROR. Treat these like + // the similar errors which raise E_ERROR. + + // See also T12190. + + $old_last = error_get_last(); + + try { + $old = error_reporting(E_ERROR | E_COMPILE_ERROR); + $okay = include_once $path; + error_reporting($old); + } catch (Exception $ex) { + throw $ex; + } catch (ParseError $throwable) { + // NOTE: As of PHP7, syntax errors may raise a ParseError (which is a + // Throwable, not an Exception) with a useless message (like "syntax + // error, unexpected ':'") and a trace which ends a level above this. + + // Treating this object normally results in an unusable message which + // does not identify where the syntax error occurred. Converting it to + // a string and taking the first line gives us something reasonable, + // however. + $message = (string)$throwable; + $message = preg_split("/\n/", $message); + $message = reset($message); + + throw new Exception($message); + } + + if (!$okay) { + throw new Exception("Source file \"{$path}\" failed to load."); + } + + $new_last = error_get_last(); + if ($new_last !== null) { + if ($new_last !== $old_last) { + $message = $new_last['message']; + throw new Exception( + "Error while loading file \"{$path}\": {$message}"); + } + } + } + + private function loadExtension($library, $root, $path) { + $old_functions = get_defined_functions(); + $old_functions = array_fill_keys($old_functions['user'], true); + $old_classes = array_fill_keys(get_declared_classes(), true); + $old_interfaces = array_fill_keys(get_declared_interfaces(), true); + + $this->executeInclude($path); + + $new_functions = get_defined_functions(); + $new_functions = array_fill_keys($new_functions['user'], true); + $new_classes = array_fill_keys(get_declared_classes(), true); + $new_interfaces = array_fill_keys(get_declared_interfaces(), true); + + $add_functions = array_diff_key($new_functions, $old_functions); + $add_classes = array_diff_key($new_classes, $old_classes); + $add_interfaces = array_diff_key($new_interfaces, $old_interfaces); + + // NOTE: We can't trust the path we loaded to be the location of these + // symbols, because it might have loaded other paths. + + foreach ($add_functions as $func => $ignored) { + $rfunc = new ReflectionFunction($func); + $fpath = Filesystem::resolvePath($rfunc->getFileName(), $root); + $this->extensionMaps[$library]['function'][$func] = $fpath; + } + + foreach ($add_classes + $add_interfaces as $class => $ignored) { + $rclass = new ReflectionClass($class); + $cpath = Filesystem::resolvePath($rclass->getFileName(), $root); + $this->extensionMaps[$library]['class'][$class] = $cpath; + + $xmap = $rclass->getInterfaceNames(); + $parent = $rclass->getParentClass(); + if ($parent) { + $xmap[] = $parent->getName(); + } + + if ($xmap) { + foreach ($xmap as $parent_class) { + $this->classTree[$parent_class][] = $class; + } + + if (count($xmap) == 1) { + $xmap = head($xmap); + } + + $this->extensionMaps[$library]['xmap'][$class] = $xmap; + } + } + + // Clear the extended library cache (should one exist) so we know that + // we need to rebuild it. + unset($this->extendedMaps[$library]); + } + +} diff --git a/src/init/lib/PhutilBootloaderException.php b/src/init/lib/PhutilBootloaderException.php new file mode 100644 index 00000000..e9a74166 --- /dev/null +++ b/src/init/lib/PhutilBootloaderException.php @@ -0,0 +1,3 @@ +library = $library; + $this->oldPath = $old_path; + $this->newPath = $new_path; + + parent::__construct(pht( + "Library conflict! The library '%s' has already been loaded (from '%s') ". + "but is now being loaded again from a new location ('%s'). You can not ". + "load multiple copies of the same library into a program.", + $library, + $old_path, + $new_path)); + } + + /** + * Retrieve the name of the library in conflict. + * + * @return string The name of the library which conflicts with an existing + * library. + * @task info + */ + public function getLibrary() { + return $this->library; + } + + /** + * Get the path to the library which has already been loaded earlier in the + * program's execution. + * + * @return string The path of the already-loaded library. + * @task info + */ + public function getOldPath() { + return $this->oldPath; + } + + /** + * Get the path to the library which is causing this conflict. + * + * @return string The path of the attempting-to-load library. + * @task info + */ + public function getNewPath() { + return $this->newPath; + } + +} diff --git a/src/init/lib/PhutilMissingSymbolException.php b/src/init/lib/PhutilMissingSymbolException.php new file mode 100644 index 00000000..5b315a57 --- /dev/null +++ b/src/init/lib/PhutilMissingSymbolException.php @@ -0,0 +1,29 @@ +assertEqual('arcanist', phutil_get_current_library_name()); + } + +} diff --git a/src/init/lib/core.php b/src/init/lib/core.php new file mode 100644 index 00000000..c0b0a14f --- /dev/null +++ b/src/init/lib/core.php @@ -0,0 +1,10 @@ +registerLibrary($library, $path); +} + +function phutil_register_library_map(array $map) { + PhutilBootloader::getInstance()->registerLibraryMap($map); +} diff --git a/src/init/lib/moduleutils.php b/src/init/lib/moduleutils.php new file mode 100644 index 00000000..ad447cff --- /dev/null +++ b/src/init/lib/moduleutils.php @@ -0,0 +1,53 @@ +getLibraryRoot($library); +} + +function phutil_get_library_root_for_path($path) { + foreach (Filesystem::walkToRoot($path) as $dir) { + if (Filesystem::pathExists($dir.'/__phutil_library_init__.php')) { + return $dir; + } + } + return null; +} + +function phutil_get_library_name_for_root($path) { + $path = rtrim(Filesystem::resolvePath($path), '/'); + + $bootloader = PhutilBootloader::getInstance(); + $libraries = $bootloader->getAllLibraries(); + foreach ($libraries as $library) { + $root = $bootloader->getLibraryRoot($library); + if (rtrim(Filesystem::resolvePath($root), '/') == $path) { + return $library; + } + } + + return null; +} + +function phutil_get_current_library_name() { + $caller = head(debug_backtrace(false)); + + $root = phutil_get_library_root_for_path($caller['file']); + return phutil_get_library_name_for_root($root); +} + +/** + * Warns about use of deprecated behavior. + */ +function phutil_deprecated($what, $why) { + PhutilErrorHandler::dispatchErrorMessage( + PhutilErrorHandler::DEPRECATED, + $what, + array( + 'why' => $why, + )); +} + +function phutil_load_library($path) { + require_once $path.'/__phutil_library_init__.php'; +} diff --git a/src/internationalization/PhutilLocale.php b/src/internationalization/PhutilLocale.php new file mode 100644 index 00000000..3ef2524e --- /dev/null +++ b/src/internationalization/PhutilLocale.php @@ -0,0 +1,247 @@ +" order. + * + * @param const `PhutilPerson` gender constant. + * @param list List of variants. + * @return string Variant for use. + */ + public function selectGenderVariant($variant, array $translations) { + if ($variant == PhutilPerson::GENDER_FEMININE) { + return end($translations); + } else { + return reset($translations); + } + } + + + /** + * Select a plural variant for this locale. By default, locales use a simple + * rule with two plural variants, listed in "" order. + * + * @param int Plurality of the value. + * @param list List of variants. + * @return string Variant for use. + */ + public function selectPluralVariant($variant, array $translations) { + if ($variant == 1) { + return reset($translations); + } else { + return end($translations); + } + } + + + /** + * Flags a locale as silly, like "English (Pirate)". + * + * These locales are fun but disastrously inappropriate for serious + * businesses. + * + * @return bool True if this locale is silly. + */ + public function isSillyLocale() { + return false; + } + + + /** + * Flags a locale as a testing locale, like "English (US, ALL CAPS)". These + * locales are useful for translation development, but not for normal users. + * + * @return bool True if this is a locale for testing or development. + */ + public function isTestLocale() { + return false; + } + + + /** + * Indicates that the translator should post-process translations in this + * locale by calling @{method:didTranslateString}. + * + * Doing this incurs a performance penalty, and is not useful for most + * languages. However, it can be used to implement test translations like + * "English (US, ALL CAPS)". + * + * @return bool True to postprocess strings. + */ + public function shouldPostProcessTranslations() { + return false; + } + + + /** + * Callback for post-processing translations. + * + * By default, this callback is not invoked. To activate it, return `true` + * from @{method:shouldPostProcessTranslations}. Activating this callback + * incurs a performance penalty. + * + * @param string The raw input pattern. + * @param string The selected translation pattern. + * @param list The raw input arguments. + * @param string The translated string. + * @return string Post-processed translation string. + */ + public function didTranslateString( + $raw_pattern, + $translated_pattern, + array $args, + $result_text) { + return $result_text; + } + + + /** + * Load all available locales. + * + * @return map Map from codes to locale objects. + */ + public static function loadAllLocales() { + static $locales; + + if ($locales === null) { + $objects = id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->execute(); + + $locale_map = array(); + foreach ($objects as $object) { + $locale_code = $object->getLocaleCode(); + if (empty($locale_map[$locale_code])) { + $locale_map[$locale_code] = $object; + } else { + throw new Exception( + pht( + 'Two subclasses of "%s" ("%s" and "%s") define '. + 'locales with the same locale code ("%s"). Each locale must '. + 'have a unique locale code.', + __CLASS__, + get_class($object), + get_class($locale_map[$locale_code]), + $locale_code)); + } + } + + foreach ($locale_map as $locale_code => $locale) { + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code !== null) { + if (empty($locale_map[$fallback_code])) { + throw new Exception( + pht( + 'The locale "%s" has an invalid fallback locale code ("%s"). '. + 'No locale class exists which defines this locale.', + get_class($locale), + $fallback_code)); + } + } + } + + foreach ($locale_map as $locale_code => $locale) { + $seen = array($locale_code => get_class($locale)); + self::checkLocaleFallback($locale_map, $locale, $seen); + } + + $locales = $locale_map; + } + return $locales; + } + + + /** + * Load a specific locale using a locale code. + * + * @param string Locale code. + * @return PhutilLocale Locale object. + */ + public static function loadLocale($locale_code) { + $all_locales = self::loadAllLocales(); + $locale = idx($all_locales, $locale_code); + + if (!$locale) { + throw new Exception( + pht( + 'There is no locale with the locale code "%s".', + $locale_code)); + } + + return $locale; + } + + + /** + * Recursively check locale fallbacks for cycles. + * + * @param map Map of locales. + * @param PhutilLocale Current locale. + * @param map Map of visited locales. + * @return void + */ + private static function checkLocaleFallback( + array $map, + PhutilLocale $locale, + array $seen) { + + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code === null) { + return; + } + + if (isset($seen[$fallback_code])) { + $seen[] = get_class($locale); + $seen[] = pht('...'); + throw new Exception( + pht( + 'Locale "%s" is part of a cycle of locales which fall back on '. + 'one another in a loop (%s). Locales which fall back on other '. + 'locales must not loop.', + get_class($locale), + implode(' -> ', $seen))); + } + + $seen[$fallback_code] = get_class($locale); + self::checkLocaleFallback($map, $map[$fallback_code], $seen); + } + +} diff --git a/src/internationalization/PhutilNumber.php b/src/internationalization/PhutilNumber.php new file mode 100644 index 00000000..c906f88c --- /dev/null +++ b/src/internationalization/PhutilNumber.php @@ -0,0 +1,26 @@ +value = $value; + $this->decimals = $decimals; + } + + public function getNumber() { + return $this->value; + } + + public function setDecimals($decimals) { + $this->decimals = $decimals; + return $this; + } + + public function getDecimals() { + return $this->decimals; + } + +} diff --git a/src/internationalization/PhutilPerson.php b/src/internationalization/PhutilPerson.php new file mode 100644 index 00000000..9f66afb0 --- /dev/null +++ b/src/internationalization/PhutilPerson.php @@ -0,0 +1,11 @@ + Map of raw strings to translations. + */ + abstract protected function getTranslations(); + + + /** + * Return a filtered map of all strings in this translation. + * + * Filters out empty/placeholder translations. + * + * @return map Map of raw strings to translations. + */ + final public function getFilteredTranslations() { + $translations = $this->getTranslations(); + + foreach ($translations as $key => $translation) { + if ($translation === null) { + unset($translations[$key]); + } + } + + return $translations; + } + + + /** + * Load all available translation objects. + * + * @return list List of available translation sources. + */ + public static function loadAllTranslations() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->execute(); + } + + + /** + * Load the complete translation map for a locale. + * + * This will compile primary and fallback translations into a single + * translation map. + * + * @param string Locale code, like "en_US". + * @return map Map of all avialable translations. + */ + public static function getTranslationMapForLocale($locale_code) { + $locale = PhutilLocale::loadLocale($locale_code); + + $translations = self::loadAllTranslations(); + + $results = array(); + foreach ($translations as $translation) { + if ($translation->getLocaleCode() == $locale_code) { + $results += $translation->getFilteredTranslations(); + } + } + + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code !== null) { + $results += self::getTranslationMapForLocale($fallback_code); + } + + return $results; + } + +} diff --git a/src/internationalization/PhutilTranslator.php b/src/internationalization/PhutilTranslator.php new file mode 100644 index 00000000..c2b0984a --- /dev/null +++ b/src/internationalization/PhutilTranslator.php @@ -0,0 +1,275 @@ +locale = $locale; + $this->localeCode = $locale->getLocaleCode(); + $this->shouldPostProcess = $locale->shouldPostProcessTranslations(); + return $this; + } + + public function setWillTranslateCallback($callback) { + $this->willTranslateCallback = $callback; + return $this; + } + + public function getWillTranslateCallback() { + return $this->willTranslateCallback; + } + + /** + * Add translations which will be later used by @{method:translate}. + * The parameter is an array of strings (for simple translations) or arrays + * (for translations with variants). The number of items in the array is + * language specific. It is `array($singular, $plural)` for English. + * + * array( + * 'color' => 'colour', + * '%d beer(s)' => array('%d beer', '%d beers'), + * ); + * + * The arrays can be nested for strings with more variant parts: + * + * array( + * '%d char(s) on %d row(s)' => array( + * array('%d char on %d row', '%d char on %d rows'), + * array('%d chars on %d row', '%d chars on %d rows'), + * ), + * ); + * + * The translation should have the same placeholders as originals. Swapping + * parameter order is possible: + * + * array( + * '%s owns %s.' => '%2$s is owned by %1$s.', + * ); + * + * @param array Identifier in key, translation in value. + * @return PhutilTranslator Provides fluent interface. + */ + public function setTranslations(array $translations) { + $this->translations = $translations; + return $this; + } + + /** + * @phutil-external-symbol class PhutilSafeHTML + * @phutil-external-symbol class PhutilSafeHTMLProducerInterface + * @phutil-external-symbol function phutil_escape_html + * @phutil-external-symbol function phutil_safe_html + */ + public function translate($text /* , ... */) { + $args = func_get_args(); + + if ($this->willTranslateCallback) { + call_user_func_array($this->willTranslateCallback, $args); + } + + if (isset($this->translations[$text])) { + $translation = $this->translations[$text]; + } else { + $translation = $text; + } + + while (is_array($translation)) { + $arg = next($args); + $translation = $this->chooseVariant($translation, $arg); + if ($translation === null) { + $pos = key($args); + + if (is_object($arg)) { + $kind = get_class($arg); + } else { + $kind = gettype($arg); + } + + return sprintf( + '[Invalid Translation!] The "%s" language data offers variant '. + 'translations for the plurality or gender of argument %s, but '. + 'the value for that argument is not an integer, PhutilNumber, or '. + 'PhutilPerson (it is a value of type "%s"). Raw input: <%s>.', + $this->localeCode, + $pos, + $kind, + $text); + } + } + array_shift($args); + + foreach ($args as $k => $arg) { + if ($arg instanceof PhutilNumber) { + $args[$k] = $this->formatNumber($arg->getNumber(), $arg->getDecimals()); + } + } + + // Check if any arguments are PhutilSafeHTML. If they are, we will apply + // any escaping necessary and output HTML. + $is_html = false; + foreach ($args as $arg) { + if ($arg instanceof PhutilSafeHTML || + $arg instanceof PhutilSafeHTMLProducerInterface) { + $is_html = true; + break; + } + } + + if ($is_html) { + foreach ($args as $k => $arg) { + $args[$k] = (string)phutil_escape_html($arg); + } + } + + $result = vsprintf($translation, $args); + if ($result === false) { + // If vsprintf() fails (often because the translated string references + // too many parameters), show the bad template with a note instead of + // returning an empty string. This makes it easier to figure out what + // went wrong and fix it. + $result = pht('[Invalid Translation!] %s', $translation); + } + + if ($this->shouldPostProcess) { + $result = $this->locale->didTranslateString( + $text, + $translation, + $args, + $result); + } + + if ($is_html) { + $result = phutil_safe_html($result); + } + + return $result; + } + + private function chooseVariant(array $translations, $variant) { + if (count($translations) == 1) { + // If we only have one variant, we can select it directly. + return reset($translations); + } + + if ($variant instanceof PhutilNumber) { + $is_gender = false; + $variant = $variant->getNumber(); + } else if ($variant instanceof PhutilPerson) { + $is_gender = true; + $variant = $variant->getGender(); + } else if (is_int($variant)) { + $is_gender = false; + } else { + return null; + } + + if ($is_gender) { + return $this->locale->selectGenderVariant($variant, $translations); + } else { + + // NOTE: This is a microoptimization which slightly improves performance + // for common languages with simple plural rules. Languages do not need + // to be added here even if they use the simple rules. The benefit of + // inclusion here is small, on the order of 5%. + static $simple_plural = array( + 'en_US' => true, + 'en_GB' => true, + 'en_ES' => true, + 'ko_KR' => true, + ); + + if (isset($simple_plural[$this->localeCode])) { + if ($variant == 1) { + return reset($translations); + } else { + return end($translations); + } + } else { + return $this->locale->selectPluralVariant($variant, $translations); + } + } + + } + + /** + * Translate date formatted by `$date->format()`. + * + * @param string Format accepted by `DateTime::format()`. + * @param DateTime + * @return string Formatted and translated date. + */ + public function translateDate($format, DateTime $date) { + static $format_cache = array(); + if (!isset($format_cache[$format])) { + $translatable = 'DlSFMaA'; + preg_match_all( + '/['.$translatable.']|(\\\\.|[^'.$translatable.'])+/', + $format, + $format_cache[$format], + PREG_SET_ORDER); + } + + $parts = array(); + foreach ($format_cache[$format] as $match) { + $part = $date->format($match[0]); + if (!isset($match[1])) { + $part = $this->translate($part); + } + $parts[] = $part; + } + return implode('', $parts); + } + + /** + * Format number with grouped thousands and optional decimal part. Requires + * translations of '.' (decimal point) and ',' (thousands separator). Both + * these translations must be 1 byte long with PHP < 5.4.0. + * + * @param float + * @param int + * @return string + */ + public function formatNumber($number, $decimals = 0) { + return number_format( + $number, + $decimals, + $this->translate('.'), + $this->translate(',')); + } + + public function validateTranslation($original, $translation) { + $pattern = '/<(\S[^>]*>?)?|&(\S[^;]*;?)?/i'; + $original_matches = null; + $translation_matches = null; + + preg_match_all($pattern, $original, $original_matches); + preg_match_all($pattern, $translation, $translation_matches); + + sort($original_matches[0]); + sort($translation_matches[0]); + + if ($original_matches[0] !== $translation_matches[0]) { + return false; + } + return true; + } + +} diff --git a/src/internationalization/__tests__/PhutilLocaleTestCase.php b/src/internationalization/__tests__/PhutilLocaleTestCase.php new file mode 100644 index 00000000..1027d2ed --- /dev/null +++ b/src/internationalization/__tests__/PhutilLocaleTestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } + +} diff --git a/src/internationalization/__tests__/PhutilPersonTest.php b/src/internationalization/__tests__/PhutilPersonTest.php new file mode 100644 index 00000000..953fcd23 --- /dev/null +++ b/src/internationalization/__tests__/PhutilPersonTest.php @@ -0,0 +1,20 @@ +gender; + } + + public function setGender($value) { + $this->gender = $value; + return $this; + } + + public function __toString() { + return pht('Test (%s)', $this->gender); + } + +} diff --git a/src/internationalization/__tests__/PhutilPhtTestCase.php b/src/internationalization/__tests__/PhutilPhtTestCase.php new file mode 100644 index 00000000..fed12b1d --- /dev/null +++ b/src/internationalization/__tests__/PhutilPhtTestCase.php @@ -0,0 +1,101 @@ +assertEqual('beer', pht('beer')); + $this->assertEqual('1 beer(s)', pht('%d beer(s)', 1)); + + $english_locale = PhutilLocale::loadLocale('en_US'); + PhutilTranslator::getInstance()->setLocale($english_locale); + PhutilTranslator::getInstance()->setTranslations( + array( + '%d beer(s)' => array('%d beer', '%d beers'), + )); + + $this->assertEqual('1 beer', pht('%d beer(s)', 1)); + + $czech_locale = PhutilLocale::loadLocale('cs_CZ'); + PhutilTranslator::getInstance()->setLocale($czech_locale); + PhutilTranslator::getInstance()->setTranslations( + array( + '%d beer(s)' => array('%d pivo', '%d piva', '%d piv'), + )); + + $this->assertEqual('5 piv', pht('%d beer(s)', 5)); + } + + public function getDateTranslations() { + // The only purpose of this function is to provide a static list of + // translations which can come from PhutilTranslator::translateDate() to + // allow translation extractor getting them. + return array( + 'D' => array( + pht('Sun'), + pht('Mon'), + pht('Tue'), + pht('Wed'), + pht('Thu'), + pht('Fri'), + pht('Sat'), + ), + 'l' => array( + pht('Sunday'), + pht('Monday'), + pht('Tuesday'), + pht('Wednesday'), + pht('Thursday'), + pht('Friday'), + pht('Saturday'), + ), + 'S' => array( + pht('st'), + pht('nd'), + pht('rd'), + pht('th'), + ), + 'F' => array( + pht('January'), + pht('February'), + pht('March'), + pht('April'), + pht('May'), + pht('June'), + pht('July'), + pht('August'), + pht('September'), + pht('October'), + pht('November'), + pht('December'), + ), + 'M' => array( + pht('Jan'), + pht('Feb'), + pht('Mar'), + pht('Apr'), + pht('May'), + pht('Jun'), + pht('Jul'), + pht('Aug'), + pht('Sep'), + pht('Oct'), + pht('Nov'), + pht('Dec'), + ), + 'a' => array( + pht('am'), + pht('pm'), + ), + 'A' => array( + pht('AM'), + pht('PM'), + ), + ); + } + +} diff --git a/src/internationalization/__tests__/PhutilTranslationTestCase.php b/src/internationalization/__tests__/PhutilTranslationTestCase.php new file mode 100644 index 00000000..50ddb311 --- /dev/null +++ b/src/internationalization/__tests__/PhutilTranslationTestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } + +} diff --git a/src/internationalization/__tests__/PhutilTranslatorTestCase.php b/src/internationalization/__tests__/PhutilTranslatorTestCase.php new file mode 100644 index 00000000..4a2e90cc --- /dev/null +++ b/src/internationalization/__tests__/PhutilTranslatorTestCase.php @@ -0,0 +1,200 @@ +newTranslator('en_US'); + $translator->setTranslations( + array( + '%d line(s)' => array('%d line', '%d lines'), + '%d char(s) on %d row(s)' => array( + array('%d char on %d row', '%d char on %d rows'), + array('%d chars on %d row', '%d chars on %d rows'), + ), + )); + + $this->assertEqual('line', $translator->translate('line')); + $this->assertEqual('param', $translator->translate('%s', 'param')); + + $this->assertEqual('0 lines', $translator->translate('%d line(s)', 0)); + $this->assertEqual('1 line', $translator->translate('%d line(s)', 1)); + $this->assertEqual('2 lines', $translator->translate('%d line(s)', 2)); + + $this->assertEqual( + '1 char on 1 row', + $translator->translate('%d char(s) on %d row(s)', 1, 1)); + $this->assertEqual( + '5 chars on 2 rows', + $translator->translate('%d char(s) on %d row(s)', 5, 2)); + + $this->assertEqual('1 beer(s)', $translator->translate('%d beer(s)', 1)); + } + + public function testCzech() { + $translator = $this->newTranslator('cs_CZ'); + $translator->setTranslations( + array( + '%d beer(s)' => array('%d pivo', '%d piva', '%d piv'), + )); + + $this->assertEqual('0 piv', $translator->translate('%d beer(s)', 0)); + $this->assertEqual('1 pivo', $translator->translate('%d beer(s)', 1)); + $this->assertEqual('2 piva', $translator->translate('%d beer(s)', 2)); + $this->assertEqual('5 piv', $translator->translate('%d beer(s)', 5)); + + $this->assertEqual('1 line(s)', $translator->translate('%d line(s)', 1)); + } + + public function testPerson() { + $translator = $this->newTranslator('cs_CZ'); + $translator->setTranslations( + array( + '%s wrote.' => array('%s napsal.', '%s napsala.'), + )); + + $person = new PhutilPersonTest(); + $this->assertEqual( + 'Test () napsal.', + $translator->translate('%s wrote.', $person)); + + $person->setGender(PhutilPerson::GENDER_MASCULINE); + $this->assertEqual( + 'Test (m) napsal.', + $translator->translate('%s wrote.', $person)); + + $person->setGender(PhutilPerson::GENDER_FEMININE); + $this->assertEqual( + 'Test (f) napsala.', + $translator->translate('%s wrote.', $person)); + } + + public function testTranslateDate() { + $date = new DateTime('2012-06-21'); + $translator = $this->newTranslator('en_US'); + + $this->assertEqual('June', $translator->translateDate('F', $date)); + $this->assertEqual('June 21', $translator->translateDate('F d', $date)); + $this->assertEqual('F', $translator->translateDate('\F', $date)); + + $translator->setTranslations( + array( + 'June' => 'correct', + '21' => 'wrong', + 'F' => 'wrong', + )); + $this->assertEqual('correct', $translator->translateDate('F', $date)); + $this->assertEqual('correct 21', $translator->translateDate('F d', $date)); + $this->assertEqual('F', $translator->translateDate('\F', $date)); + } + + public function testSetInstance() { + $english_translator = $this->newTranslator('en_US'); + + PhutilTranslator::setInstance($english_translator); + $original = PhutilTranslator::getInstance(); + $this->assertEqual('color', pht('color')); + + $british_locale = PhutilLocale::loadLocale('en_GB'); + + $british = new PhutilTranslator(); + $british->setLocale($british_locale); + $british->setTranslations( + array( + 'color' => 'colour', + )); + PhutilTranslator::setInstance($british); + $this->assertEqual('colour', pht('color')); + + PhutilTranslator::setInstance($original); + $this->assertEqual('color', pht('color')); + } + + public function testFormatNumber() { + $translator = $this->newTranslator('en_US'); + + $this->assertEqual('1,234', $translator->formatNumber(1234)); + $this->assertEqual('1,234.5', $translator->formatNumber(1234.5, 1)); + $this->assertEqual('1,234.5678', $translator->formatNumber(1234.5678, 4)); + + $translator->setTranslations( + array( + ',' => ' ', + '.' => ',', + )); + $this->assertEqual('1 234', $translator->formatNumber(1234)); + $this->assertEqual('1 234,5', $translator->formatNumber(1234.5, 1)); + $this->assertEqual('1 234,5678', $translator->formatNumber(1234.5678, 4)); + } + + public function testNumberTranslations() { + $translator = $this->newTranslator('en_US'); + + $translator->setTranslations( + array( + '%s line(s)' => array('%s line', '%s lines'), + )); + + $this->assertEqual( + '1 line', + $translator->translate('%s line(s)', new PhutilNumber(1))); + + $this->assertEqual( + '1,000 lines', + $translator->translate('%s line(s)', new PhutilNumber(1000))); + + $this->assertEqual( + '8.5 lines', + $translator->translate( + '%s line(s)', + id(new PhutilNumber(8.5))->setDecimals(1))); + } + + public function testValidateTranslation() { + $tests = array( + 'a < 2' => array( + 'a < 2' => true, + 'b < 3' => true, + '2 > a' => false, + 'a<2' => false, + ), + 'We win' => array( + 'We win' => true, + 'We win' => true, // false positive + 'We win' => false, + 'We win' => false, + ), + 'We win & triumph' => array( + 'We triumph & win' => true, + 'We win and triumph' => false, + ), + 'beer' => array( + 'pivo' => true, + 'b<>r' => false, + 'b&&r' => false, + ), + ); + + $translator = $this->newTranslator('en_US'); + + foreach ($tests as $original => $translations) { + foreach ($translations as $translation => $expect) { + $valid = ($expect ? 'valid' : 'invalid'); + $this->assertEqual( + $expect, + $translator->validateTranslation($original, $translation), + pht( + "'%s' should be %s with '%s'.", + $original, + $valid, + $translation)); + } + } + } + + private function newTranslator($locale_code) { + $locale = PhutilLocale::loadLocale($locale_code); + return id(new PhutilTranslator()) + ->setLocale($locale); + } + +} diff --git a/src/internationalization/locales/PhutilAllCapsEnglishLocale.php b/src/internationalization/locales/PhutilAllCapsEnglishLocale.php new file mode 100644 index 00000000..8298d493 --- /dev/null +++ b/src/internationalization/locales/PhutilAllCapsEnglishLocale.php @@ -0,0 +1,38 @@ += 2 && $variant <= 4) { + return $paucal; + } + + return $plural; + } + +} diff --git a/src/internationalization/locales/PhutilEmojiLocale.php b/src/internationalization/locales/PhutilEmojiLocale.php new file mode 100644 index 00000000..e142130f --- /dev/null +++ b/src/internationalization/locales/PhutilEmojiLocale.php @@ -0,0 +1,33 @@ +setTranslations()` and language rules set + * by `PhutilTranslator::getInstance()->setLocale()`. + * + * @param string Translation identifier with `sprintf()` placeholders. + * @param mixed Value to select the variant from (e.g. singular or plural). + * @param ... Next values referenced from $text. + * @return string Translated string with substituted values. + */ +function pht($text, $variant = null /* , ... */) { + $args = func_get_args(); + $translator = PhutilTranslator::getInstance(); + return call_user_func_array(array($translator, 'translate'), $args); +} + +/** + * Count all elements in an array, or something in an object. + * + * @param array|Countable A countable object. + * @return PhutilNumber Returns the number of elements in the input + * parameter. + */ +function phutil_count($countable) { + if (!(is_array($countable) || $countable instanceof Countable)) { + throw new InvalidArgumentException(pht('Argument should be countable.')); + } + + return new PhutilNumber(count($countable)); +} + +/** + * Provide a gendered argument to the translation engine. + * + * This function does nothing and only serves as a marker for the static + * extractor so it knows particular arguments may vary on gender. + * + * @param PhutilPerson Something implementing @{interface:PhutilPerson}. + * @return PhutilPerson The argument, unmodified. + */ +function phutil_person(PhutilPerson $person) { + return $person; +} diff --git a/src/internationalization/translation/LibphutilUSEnglishTranslation.php b/src/internationalization/translation/LibphutilUSEnglishTranslation.php new file mode 100644 index 00000000..963940fa --- /dev/null +++ b/src/internationalization/translation/LibphutilUSEnglishTranslation.php @@ -0,0 +1,34 @@ + array( + 'Daemon was idle for more than one second, scaling pool down.', + 'Daemon was idle for more than %s seconds, scaling pool down.', + ), + + 'Analyzing %s file(s) with %s subprocess(es)...' => array( + array( + 'Analyzing one file with a single subprocess...', + 'Analyzing %s file with %s subprocesses...', + ), + array( + 'Analyzing %s files with a single subprocess...', + 'Analyzing %s files with %s subprocesses...', + ), + ), + + '... (%s more byte(s)) ...' => array( + '... (%s more byte) ...', + '... (%s more bytes) ...', + ), + ); + } + +} diff --git a/src/ip/PhutilCIDRBlock.php b/src/ip/PhutilCIDRBlock.php new file mode 100644 index 00000000..e55d42bf --- /dev/null +++ b/src/ip/PhutilCIDRBlock.php @@ -0,0 +1,84 @@ + + } + + public static function newBlock($in) { + if ($in instanceof PhutilCIDRBlock) { + return clone $in; + } + + return self::newFromString($in); + } + + private static function newFromString($str) { + if (!preg_match('(^[\d.:a-fA-F]+/[\d]+\z)', $str)) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. Expected an IP block '. + 'in CIDR notation, like "%s" or "%s".', + $str, + '172.30.0.0/16', + '23:45:67:89::/24')); + } + + list($ip, $mask) = explode('/', $str); + + $ip = PhutilIPAddress::newAddress($ip); + + if (preg_match('/^0\d/', $mask)) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. The IP block mask '. + '("%s") must not have leading zeroes.', + $str, + $mask)); + } + + $max_bits = $ip->getBitCount(); + + $bits = (int)$mask; + if ($bits < 0 || $bits > $max_bits) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. The IP block mask '. + '("%s") must mask between 0 and %s bits, inclusive.', + $str, + $mask, + new PhutilNumber($max_bits))); + } + + $obj = new PhutilCIDRBlock(); + $obj->ip = $ip; + $obj->bits = $bits; + + return $obj; + } + + public function containsAddress($address) { + $address = PhutilIPAddress::newAddress($address); + + $block_bits = $this->ip->toBits(); + $address_bits = $address->toBits(); + + // If the two addresses have different bit widths (IPv4 vs IPv6), this + // CIDR block does not match the address. + if ($this->ip->getBitCount() != $address->getBitCount()) { + return false; + } + + return (strncmp($block_bits, $address_bits, $this->bits) === 0); + } + +} diff --git a/src/ip/PhutilCIDRList.php b/src/ip/PhutilCIDRList.php new file mode 100644 index 00000000..c7e703ea --- /dev/null +++ b/src/ip/PhutilCIDRList.php @@ -0,0 +1,40 @@ +containsAddrsss('172.30.0.1'); + */ +final class PhutilCIDRList extends Phobject { + + private $blocks; + + private function __construct() { + // + } + + public static function newList(array $blocks) { + foreach ($blocks as $key => $block) { + $blocks[$key] = PhutilCIDRBlock::newBlock($block); + } + + $obj = new PhutilCIDRList(); + $obj->blocks = $blocks; + return $obj; + } + + public function containsAddress($address) { + foreach ($this->blocks as $block) { + if ($block->containsAddress($address)) { + return true; + } + } + + return false; + } + +} diff --git a/src/ip/PhutilIPAddress.php b/src/ip/PhutilIPAddress.php new file mode 100644 index 00000000..ee10b4c5 --- /dev/null +++ b/src/ip/PhutilIPAddress.php @@ -0,0 +1,43 @@ + + } + + abstract public function toBits(); + abstract public function getBitCount(); + abstract public function getAddress(); + + public static function newAddress($in) { + if ($in instanceof PhutilIPAddress) { + return clone $in; + } + + try { + return PhutilIPv4Address::newFromString($in); + } catch (Exception $ex) { + // Continue, trying the address as IPv6 instead. + } + + try { + return PhutilIPv6Address::newFromString($in); + } catch (Exception $ex) { + // Continue, throwing a more tailored exception below. + } + + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Expected an IPv4 address '. + 'like "%s", or an IPv6 address like "%s".', + $in, + '23.45.67.89', + '2345:6789:0123:abcd::')); + } + +} diff --git a/src/ip/PhutilIPv4Address.php b/src/ip/PhutilIPv4Address.php new file mode 100644 index 00000000..28dc3ea0 --- /dev/null +++ b/src/ip/PhutilIPv4Address.php @@ -0,0 +1,86 @@ + + } + + public function getAddress() { + return $this->ip; + } + + public function getBitCount() { + return 32; + } + + protected static function newFromString($str) { + $matches = null; + $ok = preg_match('(^(\d+)\.(\d+)\.(\d+).(\d+)\z)', $str, $matches); + if (!$ok) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Expected an IPv4 '. + 'address like "%s".', + $str, + '23.45.67.89')); + } + + $parts = array_slice($matches, 1); + foreach ($parts as $part) { + if (preg_match('/^0\d/', $part)) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Address segments '. + 'should have no leading zeroes, but segment "%s" has a leading '. + 'zero.', + $str, + $part)); + } + + $value = (int)$part; + if ($value < 0 || $value > 255) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Address segments '. + 'should be between 0 and 255, inclusive, but segment "%s" has '. + 'a value outside of this range.', + $str, + $part)); + } + } + + $obj = new self(); + $obj->ip = $str; + + return $obj; + } + + public function toBits() { + if ($this->bits === null) { + $bits = ''; + foreach (explode('.', $this->ip) as $part) { + $value = (int)$part; + for ($ii = 7; $ii >= 0; $ii--) { + $mask = (1 << $ii); + if (($value & $mask) === $mask) { + $bits .= '1'; + } else { + $bits .= '0'; + } + } + } + + $this->bits = $bits; + } + + return $this->bits; + } + +} diff --git a/src/ip/PhutilIPv6Address.php b/src/ip/PhutilIPv6Address.php new file mode 100644 index 00000000..eb7ada00 --- /dev/null +++ b/src/ip/PhutilIPv6Address.php @@ -0,0 +1,212 @@ + + } + + public function getBitCount() { + return 128; + } + + protected static function newFromString($str) { + $parts = explode(':', $str); + if (count($parts) > 8) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: is has too many '. + 'parts. Expected a maximum of 7 colons, like "%s".', + $str, + '1:2:3:4:a:b:c:d')); + } + + if (count($parts) < 3) { + throw new Exception( + pht( + 'IP address "%s" is not properly formated: it has too few '. + 'parts. Expected a minimum of 2 colons, like "%s".', + $str, + '::1')); + } + + // Look for leading or trailing empty parts. These are valid if the string + // begins or ends like "::", "::1", or "1::", but not valid otherwise. + $has_omission = false; + if ($str === '::') { + $parts = array(null); + $has_omission = true; + } else if ($parts[0] === '') { + if ($parts[1] === '') { + unset($parts[1]); + $parts[0] = null; + $parts = array_values($parts); + $has_omission = true; + } else { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address with '. + 'omitted leading sements must begin with "::".', + $str)); + } + } else if (last($parts) === '') { + if ($parts[count($parts) - 2] === '') { + array_pop($parts); + $parts[count($parts) - 1] = null; + $parts = array_values($parts); + $has_omission = true; + } else { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address with '. + 'omitted trailing segments must end with "::".', + $str)); + } + } + + foreach ($parts as $idx => $part) { + if ($part !== '') { + continue; + } + + if ($has_omission) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address may '. + 'only contain a maximum of one subsequence omitted with "::".', + $str)); + } + + $has_omission = true; + $parts[$idx] = null; + } + + if (!$has_omission) { + if (count($parts) !== 8) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address must '. + 'contain exactly 8 segments, or omit a subsequence of segments '. + 'with "::".', + $str)); + } + } + + $values = array(); + foreach ($parts as $idx => $part) { + // This is a "::" segment, so fill in any missing values with 0. + if ($part === null) { + for ($ii = count($parts); $ii <= 8; $ii++) { + $values[] = 0; + } + continue; + } + + if (!preg_match('/^[0-9a-fA-F]{1,4}\z/', $part)) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: the segments of '. + 'an address must be hexadecimal values between "0000" and "ffff", '. + 'inclusive. Segment "%s" is not.', + $str, + $part)); + } + + $values[] = (int)hexdec($part); + } + + $obj = new self(); + $obj->values = $values; + + return $obj; + } + + public function getAddress() { + if ($this->displayAddress === null) { + // Find the longest consecutive sequence of "0" values. We want to + // collapse this into "::". + $longest_run = 0; + $longest_index = 0; + $current_run = null; + $current_index = null; + foreach ($this->values as $idx => $value) { + if ($value !== 0) { + $current_run = null; + continue; + } + + if ($current_run === null) { + $current_run = 1; + $current_index = $idx; + } else { + $current_run++; + } + + if ($current_run > $longest_run) { + $longest_run = $current_run; + $longest_index = $current_index; + } + } + + // Render the segments of the IPv6 address, omitting the longest run + // of consecutive "0" segments. + $pieces = array(); + for ($idx = 0; $idx < count($this->values); $idx++) { + $value = $this->values[$idx]; + + if ($idx === $longest_index) { + if ($longest_run > 1) { + $pieces[] = null; + $idx += ($longest_run - 1); + continue; + } + } + + $pieces[] = dechex($value); + } + + // If the omitted segment is at the beginning or end of the address, add + // an extra piece so we get the leading or trailing "::" when we implode + // the pieces. + if (head($pieces) === null) { + array_unshift($pieces, null); + } + + if (last($pieces) === null) { + $pieces[] = null; + } + + $this->displayAddress = implode(':', $pieces); + } + + return $this->displayAddress; + } + + public function toBits() { + if ($this->bits === null) { + $bits = ''; + foreach ($this->values as $value) { + for ($ii = 15; $ii >= 0; $ii--) { + $mask = (1 << $ii); + if (($value & $mask) === $mask) { + $bits .= '1'; + } else { + $bits .= '0'; + } + } + } + + $this->bits = $bits; + } + + return $this->bits; + } + +} diff --git a/src/ip/__tests__/PhutilIPAddressTestCase.php b/src/ip/__tests__/PhutilIPAddressTestCase.php new file mode 100644 index 00000000..1363fea8 --- /dev/null +++ b/src/ip/__tests__/PhutilIPAddressTestCase.php @@ -0,0 +1,339 @@ + true, + + // No nonsense. + '1.2.3' => false, + 'duck' => false, + '' => false, + '1 2 3 4' => false, + '.' => false, + '1.2.3.4.' => false, + '1..3.4' => false, + + // No leading zeroes. + '0.0.0.0' => true, + '0.0.0.01' => false, + + // No segments > 255. + '255.255.255.255' => true, + '255.255.255.256' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilIPAddress::newAddress($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilIPv4Address['.$input.']'); + } + } + + public function testValidIPv6Addresses() { + $cases = array( + '::' => true, + '::1' => true, + '1::' => true, + '1::1' => true, + '1:2:3:4:5:6:7:8' => true, + '1:2:3::5:6:7:8' => true, + '1:2:3::6:7:8' => true, + + // No nonsense. + 'quack:duck' => false, + '11111:22222::' => false, + + + // Too long. + '1:2:3:4:5:6:7:8:9' => false, + + // Too short. + '1:2:3' => false, + + // Too many omitted segments. + '1:2:3:::7:8:9' => false, + '1::3::7:8:9' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilIPAddress::newAddress($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilIPv6Address['.$input.']'); + } + } + + public function testIPv4AddressToBits() { + $cases = array( + '0.0.0.0' => '00000000000000000000000000000000', + '255.255.255.255' => '11111111111111111111111111111111', + '255.0.0.0' => '11111111000000000000000000000000', + '0.0.0.1' => '00000000000000000000000000000001', + '0.0.0.2' => '00000000000000000000000000000010', + '0.0.0.3' => '00000000000000000000000000000011', + ); + + foreach ($cases as $input => $expect) { + $actual = PhutilIPAddress::newAddress($input)->toBits(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv4Address['.$input.']->toBits()'); + } + } + + public function testIPv6AddressToBits() { + $cases = array( + '::' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000', + '::1' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000001', + '1::' => + '0000000000000001 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000', + '::ffff:c000:0280' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 1111111111111111'. + PhutilIPAddress::newAddress('192.0.2.128')->toBits(), + '21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A' => + '0010000111011010 0000000011010011'. + '0000000000000000 0010111100111011'. + '0000001010101010 0000000011111111'. + '1111111000101000 1001110001011010', + '2001:db8::1' => + '0010000000000001 0000110110111000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000001', + + ); + + foreach ($cases as $input => $expect) { + // Remove any spaces, these are just to make the tests above easier to + // read. + $expect = str_replace(' ', '', $expect); + + $actual = PhutilIPAddress::newAddress($input)->toBits(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv6Address['.$input.']->toBits()'); + } + } + + public function testIPv6AddressToAddress() { + $cases = array( + '::' => '::', + '::1' => '::1', + '::01' => '::1', + '0::0001' => '::1', + '0000::0001' => '::1', + '0000:0000::001' => '::1', + + '1::' => '1::', + '01::' => '1::', + '01::0' => '1::', + '0001::0000' => '1::', + + '1:0::0:2' => '1::2', + '1::0:2' => '1::2', + '1:0::2' => '1::2', + + 'CAFE::' => 'cafe::', + '0000:aBe:0:0:1::' => '0:abe:0:0:1::', + + '1:0:0:0:2:0:0:0' => '1::2:0:0:0', + '1:0:0:2:0:0:0:0' => '1:0:0:2::', + ); + + foreach ($cases as $input => $expect) { + $actual = PhutilIPAddress::newAddress($input)->getAddress(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv6Address['.$input.']->getAddress()'); + } + } + + public function testValidIPv4CIDRBlocks() { + $cases = array( + // Valid block. + '1.0.0.0/16' => true, + + // No nonsense. + 'duck' => false, + '1/2/3' => false, + '23/0.0.0.0' => false, + '0.0.0.0/0.0.0.0' => false, + + // No leading zeroes. + '1.0.0.0/4' => true, + '1.0.0.0/04' => false, + + // No out-of-range masks. + '1.0.0.0/32' => true, + '1.0.0.0/33' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilCIDRBlock::newBlock($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilCIDRBlock['.$input.']'); + } + } + + public function testValidIPv6CIDRBlocks() { + $cases = array( + // Valid block. + '::/16' => true, + '::/128' => true, + + // No nonsense. + '::/1/2' => false, + '::/::' => false, + '::' => false, + + // No leading zeroes. + '::/01' => false, + + // No out-of-range masks. + '::/129' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilCIDRBlock::newBlock($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilCIDRBlock['.$input.']'); + } + } + + public function testIPv4CIDRBlockContains() { + $cases = array( + '0.0.0.0/0' => array( + '0.0.0.0' => true, + '1.1.1.1' => true, + '2.3.4.5' => true, + '::' => false, + '::1' => false, + '::ffff:0:0' => false, + ), + '0.0.0.2/32' => array( + '0.0.0.1' => false, + '0.0.0.2' => true, + '0.0.0.3' => false, + '::' => false, + ), + '172.30.0.0/16' => array( + '172.29.255.255' => false, + '172.30.0.0' => true, + '172.30.255.255' => true, + '172.31.0.0' => false, + '::' => false, + ), + ); + + foreach ($cases as $input_block => $tests) { + $block = PhutilCIDRBlock::newBlock($input_block); + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $block->containsAddress($input), + 'PhutilCIDRBlock['.$input_block.']->containsAddress('.$input.')'); + } + } + } + + public function testIPv6CIDRBlockContains() { + $cases = array( + '::/0' => array( + '1::' => true, + '2::' => true, + '127.0.0.1' => false, + ), + '::ffff:0:0/96' => array( + '::ffff:0:0' => true, + '::ffff:ffff:ffff' => true, + '::fffe:0:0' => false, + '127.0.0.1' => false, + ), + ); + + foreach ($cases as $input_block => $tests) { + $block = PhutilCIDRBlock::newBlock($input_block); + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $block->containsAddress($input), + 'PhutilCIDRBlock['.$input_block.']->containsAddress('.$input.')'); + } + } + } + + public function testCIDRList() { + $list = array( + '172.30.0.0/16', + '127.0.0.3/32', + ); + + $cases = array( + '0.0.0.0' => false, + '172.30.0.5' => true, + '127.0.0.2' => false, + '127.0.0.3' => true, + ); + + $list = PhutilCIDRList::newList($list); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + $list->containsAddress($input), + 'PhutilCIDRList->containsAddress('.$input.')'); + } + } + + +} diff --git a/src/lexer/PhutilJSONFragmentLexer.php b/src/lexer/PhutilJSONFragmentLexer.php new file mode 100644 index 00000000..f704e48f --- /dev/null +++ b/src/lexer/PhutilJSONFragmentLexer.php @@ -0,0 +1,27 @@ + array( + array('"', 's', 'double-quoted-string'), + array('\s+', null), + array('[\\[\\]{},:]', 'o'), + array('(?:true|false|null)', 'k'), + array('-?\d+(\.\d+([eE][-+]?\d+)?)?', 'mf'), + array('.', null), + ), + 'double-quoted-string' => array( + array('[^"\\\\]+', 's'), + array('"', 's', '!pop'), + array('\\\\u[0-9a-fA-F]{4}', 'k'), + array('\\\\.', 'k'), + ), + ); + } + +} diff --git a/src/lexer/PhutilJavaFragmentLexer.php b/src/lexer/PhutilJavaFragmentLexer.php new file mode 100644 index 00000000..fbc082e9 --- /dev/null +++ b/src/lexer/PhutilJavaFragmentLexer.php @@ -0,0 +1,120 @@ + array_merge( + $nonsemantic_rules, + array( + array('('.implode('|', $keywords).')\\b', 'k'), + array('@[^\\W\\d][\\w.]*', 'nd'), + array('('.implode('|', $declarations).')\\b', 'k'), + array('('.implode('|', $types).')\\b', 'kt'), + array('(package|import\\s+static|import)\\b', 'kn', 'import'), + array('('.implode('|', $constants).')\\b', 'kc'), + array('(class|interface)\\b', 'kd', 'class'), + array('"(\\\\.|[^"\\\\]+)*"', 's'), + array("'(\\\\.|[^\\\\]|\\\\u[0-9a-f-A-F]{4})'", 's'), + array('([^\\W\\d]|\\$)[\\w$]*:', 'nl'), + array('([^\\W\\d]|\\$)[\\w$]*', 'n'), + array( + '(([0-9][0-9_]*\\.([0-9][0-9_]*)?|'. + '\\.[0-9][0-9_]*)([eE][+-]?[0-9][0-9_]*)?[fFdD]?|'. + '[0-9][eE][+-]?[0-9][0-9_]*[fFdD]?|'. + '[0-9]([eE][+-]?[0-9][0-9_]*)?[fFdD]|'. + '0[xX]([0-9a-fA-F][0-9a-fA-F_]*\\.?|'. + '([0-9a-fA-F][0-9a-fA-F_]*)?\\.[0-9a-fA-F][0-9a-fA-F_]*)'. + '[pP][+-]?[0-9][0-9_]*[fFdD]?)', + 'mf', + ), + array('0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?', 'mh'), + array('0[bB][01][01_]*[lL]?', 'mb'), + array('0[0-7_]+[lL]?', 'mo'), + array('(0|[1-9][0-9_]*[lL]?)', 'mi'), + array('([~^*!%&\\[\\](){}<>|+=:;,./?-])', 'o'), + array('(\S+|\s+)', null), + )), + 'class' => array_merge( + $nonsemantic_rules, + array( + array('([^\W\d]|\$)[\w$]*', 'nc', '!pop'), + array('', null, '!pop'), + )), + 'import' => array_merge( + $nonsemantic_rules, + array( + array('[\w.]+\*?', 'nn', '!pop'), + array('', null, '!pop'), + )), + ); + } + +} diff --git a/src/lexer/PhutilLexer.php b/src/lexer/PhutilLexer.php new file mode 100644 index 00000000..36cc897c --- /dev/null +++ b/src/lexer/PhutilLexer.php @@ -0,0 +1,362 @@ + array(...), + * 'state1' => array(...), + * 'state2' => array(...), + * ) + * + * Lexers start at the state named 'start'. Each state should have a list of + * rules which can match in that state. A list of rules looks like this: + * + * array( + * array('\s+', 'space'), + * array('\d+', 'digit'), + * array('\w+', 'word'), + * ) + * + * The lexer operates by processing each rule in the current state in order. + * When one matches, it produces a token. For example, the lexer above would + * lex this text: + * + * 3 asdf + * + * ...to produce these tokens (assuming the rules are for the 'start' state): + * + * array('digit', '3', null), + * array('space', ' ', null), + * array('word', 'asdf', null), + * + * A rule can also cause a state transition: + * + * array('zebra', 'animal', 'saw_zebra'), + * + * This would match the text "zebra", emit a token of type "animal", and change + * the parser state to "saw_zebra", causing the lexer to start using the rules + * from that state. + * + * To pop the lexer's state, you can use the special state '!pop'. + * + * Finally, you can provide additional options in the fourth parameter. + * Supported options are `case-insensitive` and `context`. + * + * Possible values for `context` are `push` (push the token value onto the + * context stack), `pop` (pop the context stack and use it to provide context + * for the token), and `discard` (pop the context stack and throw away the + * value). + * + * For example, to lex text like this: + * + * Class::CONSTANT + * + * You can use a rule set like this: + * + * 'start' => array( + * array('\w+(?=::)', 'class', 'saw_class', array('context' => 'push')), + * ), + * 'saw_class' => array( + * array('::', 'operator'), + * array('\w+', 'constant, '!pop', array('context' => 'pop')), + * ), + * + * This would parse the above text into this token stream: + * + * array('class', 'Class', null), + * array('operator', '::', null), + * array('constant', 'CONSTANT', 'Class'), + * + * For a concrete implementation, see @{class:PhutilPHPFragmentLexer}. + * + * @task lexerimpl Lexer Implementation + * @task rule Lexer Rules + * @task tokens Lexer Tokens + */ +abstract class PhutilLexer extends Phobject { + + private $processedRules; + private $lastState; + + +/* -( Lexer Rules )-------------------------------------------------------- */ + + + /** + * Return a set of rules for this lexer. See description in + * @{class:PhutilLexer}. + * + * @return dict Lexer rules. + * @task lexerimpl + */ + abstract protected function getRawRules(); + + +/* -( Lexer Rules )-------------------------------------------------------- */ + + + /** + * Process, normalize, and validate the raw lexer rules. + * + * @task rule + */ + protected function getRules() { + $class = get_class($this); + + $raw_rules = $this->getRawRules(); + + if (!is_array($raw_rules)) { + $type = gettype($raw_rules); + throw new UnexpectedValueException( + pht( + 'Expected %s to return array, got %s.', + $class.'->getRawRules()', + $type)); + } + + if (empty($raw_rules['start'])) { + throw new UnexpectedValueException( + pht( + "Expected %s rules to define rules for state '%s'.", + $class, + 'start')); + } + + $processed_rules = array(); + foreach ($raw_rules as $state => $rules) { + + if (!is_array($rules)) { + $type = gettype($rules); + throw new UnexpectedValueException( + pht( + "Expected list of rules for state '%s' in %s, got %s.", + $state, + $class, + $type)); + } + + foreach ($rules as $key => $rule) { + $n = count($rule); + if ($n < 2 || $n > 4) { + throw new UnexpectedValueException( + pht( + "Expected rule '%s' in state '%s' in %s to have 2-4 elements ". + "(regex, token, [next state], [options]), got %d.", + $key, + $state, + $class, + $n)); + } + $rule = array_values($rule); + if (count($rule) == 2) { + $rule[] = null; + } + if (count($rule) == 3) { + $rule[] = array(); + } + + foreach ($rule[3] as $option => $value) { + switch ($option) { + case 'context': + if ($value !== 'push' && + $value !== 'pop' && + $value !== 'discard' && + $value !== null) { + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s has unknown ". + "context rule '%s', expected '%s', '%s' or '%s'.", + $key, + $state, + $class, + $value, + 'push', + 'pop', + 'discard')); + } + break; + default: + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s has unknown option '%s'.", + $key, + $state, + $class, + $option)); + } + } + + $flags = 'sS'; + + // NOTE: The "\G" assertion is an offset-aware version of "^". + $rule[0] = '(\\G'.$rule[0].')'.$flags; + + if (@preg_match($rule[0], '') === false) { + $error = error_get_last(); + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s defines an ". + "invalid regular expression ('%s'): %s", + $key, + $state, + $class, + $rule[0], + idx($error, 'message'))); + } + + $next_state = $rule[2]; + if ($next_state !== null && $next_state !== '!pop') { + if (empty($raw_rules[$next_state])) { + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s transitions to ". + "state '%s', but there are no rules for that state.", + $key, + $state, + $class, + $next_state)); + } + } + + $processed_rules[$state][] = $rule; + } + } + + return $processed_rules; + } + + +/* -( Lexer Tokens )------------------------------------------------------- */ + + + /** + * Lex an input string into tokens. + * + * @param string Input string. + * @param string Initial lexer state. + * @return list List of lexer tokens. + * @task tokens + */ + public function getTokens($input, $initial_state = 'start') { + if (empty($this->processedRules)) { + $this->processedRules = $this->getRules(); + } + $rules = $this->processedRules; + + $this->lastState = null; + + $position = 0; + $length = strlen($input); + + $tokens = array(); + $states = array(); + $states[] = 'start'; + if ($initial_state != 'start') { + $states[] = $initial_state; + } + $context = array(); + while ($position < $length) { + $state_rules = idx($rules, end($states), array()); + foreach ($state_rules as $rule) { + + $matches = null; + if (!preg_match($rule[0], $input, $matches, 0, $position)) { + continue; + } + + list($regexp, $token_type, $next_state, $options) = $rule; + + $match_length = strlen($matches[0]); + if (!$match_length) { + if ($next_state === null) { + throw new UnexpectedValueException( + pht( + "Rule '%s' matched a zero-length token and causes no ". + "state transition.", + $regexp)); + } + } else { + $position += $match_length; + $token = array($token_type, $matches[0]); + + $copt = idx($options, 'context'); + if ($copt == 'push') { + $context[] = $matches[0]; + $token[] = null; + } else if ($copt == 'pop') { + if (empty($context)) { + throw new UnexpectedValueException( + pht("Rule '%s' popped empty context!", $regexp)); + } + $token[] = array_pop($context); + } else if ($copt == 'discard') { + if (empty($context)) { + throw new UnexpectedValueException( + pht("Rule '%s' discarded empty context!", $regexp)); + } + array_pop($context); + $token[] = null; + } else { + $token[] = null; + } + + $tokens[] = $token; + } + + if ($next_state !== null) { + if ($next_state == '!pop') { + array_pop($states); + if (empty($states)) { + throw new UnexpectedValueException( + pht("Rule '%s' popped off the last state.", $regexp)); + } + } else { + $states[] = $next_state; + } + } + + continue 2; + } + + throw new UnexpectedValueException( + pht('No lexer rule matched input at char %d.', $position)); + } + + $this->lastState = $states; + + return $tokens; + } + + + /** + * Merge adjacent tokens of the same type. For example, if a comment is + * tokenized as <"//", "comment">, this method will merge the two tokens into + * a single combined token. + */ + public function mergeTokens(array $tokens) { + $last = null; + $result = array(); + foreach ($tokens as $token) { + if ($last === null) { + $last = $token; + continue; + } + if (($token[0] == $last[0]) && ($token[2] == $last[2])) { + $last[1] .= $token[1]; + } else { + $result[] = $last; + $last = $token; + } + } + if ($last !== null) { + $result[] = $last; + } + return $result; + } + + public function getLexerState() { + return $this->lastState; + } + +} diff --git a/src/lexer/PhutilPHPFragmentLexer.php b/src/lexer/PhutilPHPFragmentLexer.php new file mode 100644 index 00000000..1d6ce3f6 --- /dev/null +++ b/src/lexer/PhutilPHPFragmentLexer.php @@ -0,0 +1,281 @@ + array( + array('<\\?(?i:php)?', 'cp', 'php'), + array('[^<]+', null), + array('<', null), + ), + + 'php' => array_merge(array( + array('\\?>', 'cp', '!pop'), + array( + '<<<([\'"]?)('.$identifier_pattern.')\\1\\n.*?\\n\\2\\;?\\n', + 's', + ), + ), $nonsemantic_rules, array( + array('(?i:__halt_compiler)\\b', 'cp', 'halt_compiler'), + array('(->|::)', 'o', 'attr'), + array('[~!%^&*+=|:.<>/?@-]+', 'o'), + array('[\\[\\]{}();,]', 'o'), + + // After 'new', try to match an unadorned symbol. + array('(?i:new|instanceof)\\b', 'k', 'possible_classname'), + array('(?i:function)\\b', 'k', 'function_definition'), + + // After 'extends' or 'implements', match a list of classes/interfaces. + array('(?i:extends|implements)\\b', 'k', 'class_list'), + + array('(?i:catch)\\b', 'k', 'catch'), + + array('(?i:'.implode('|', $keywords).')\\b', 'k'), + array('(?i:'.implode('|', $constants).')\\b', 'kc'), + + array('\\$+'.$identifier_pattern, 'nv'), + + // Match "f(" as a function and "C::" as a class. These won't work + // if you put a comment between the symbol and the operator, but + // that's a bizarre usage. + array($identifier_ns_pattern.'(?=\s*[\\(])', 'nf'), + array( + $identifier_ns_pattern.'(?=\s*::)', + 'nc', + 'context_attr', + array( + 'context' => 'push', + ), + ), + + array($identifier_ns_pattern, 'no'), + array('(\\d+\\.\\d*|\\d*\\.\\d+)([eE][+-]?[0-9]+)?', 'mf'), + array('\\d+[eE][+-]?[0-9]+', 'mf'), + array('0[0-7]+', 'mo'), + array('0[xX][a-fA-F0-9]+', 'mh'), + array('0[bB][0-1]+', 'm'), + array('\d+', 'mi'), + array("'", 's1', 'string1'), + array('`', 'sb', 'stringb'), + array('"', 's2', 'string2'), + array('.', null), + )), + + // We've just matched a class name, with a "::" lookahead. The name of + // the class is on the top of the context stack. We want to try to match + // the attribute or method (e.g., "X::C" or "X::f()"). + 'context_attr' => array_merge($nonsemantic_rules, array( + array('::', 'o'), + array( + $identifier_pattern.'(?=\s*[\\(])', + 'nf', + '!pop', + array( + 'context' => 'pop', + ), + ), + array( + $identifier_pattern, + 'na', + '!pop', + array( + 'context' => 'pop', + ), + ), + array( + '', + null, + '!pop', + array( + 'context' => 'discard', + ), + ), + )), + + // After '->' or '::', a symbol is an attribute name. Note that we end + // up in 'context_attr' instead of here in some cases. + 'attr' => array_merge($nonsemantic_rules, array( + array($identifier_pattern, 'na', '!pop'), + array('', null, '!pop'), + )), + + // After 'new', a symbol is a class name. + 'possible_classname' => array_merge($nonsemantic_rules, array( + array($identifier_ns_pattern, 'nc', '!pop'), + array('', null, '!pop'), + )), + + 'string1' => array( + array('[^\'\\\\]+', 's1'), + array("'", 's1', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + 'stringb' => array( + array('[^`\\\\]+', 'sb'), + array('`', 'sb', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + 'string2' => array( + array('[^"\\\\]+', 's2'), + array('"', 's2', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + // In a function definition (after "function"), we don't link the name + // as a "nf" (name.function) since it is its own definition. + 'function_definition' => array_merge($nonsemantic_rules, array( + array('&', 'o'), + array('\\(', 'o', '!pop'), + array($identifier_pattern, 'no', '!pop'), + array('', null, '!pop'), + )), + + // For "//" and "#" comments, we need to break out if we see "?" followed + // by ">". + 'line_comment' => array( + array('[^?\\n]+', 'c'), + array('\\n', null, '!pop'), + array('(?=\\?>)', null, '!pop'), + array('\\?', 'c'), + ), + + // We've seen __halt_compiler. Grab the '();' afterward and then eat + // the rest of the file as raw data. + 'halt_compiler' => array_merge($nonsemantic_rules, array( + array('[()]', 'o'), + + array(';', 'o', 'compiler_halted'), + array('\\?>', 'o', 'compiler_halted'), + + // Just halt on anything else. + array('', null, 'compiler_halted'), + )), + + // __halt_compiler has taken effect. + 'compiler_halted' => array( + array('.+', null), + ), + + 'class_list' => array_merge($nonsemantic_rules, array( + array(',', 'o'), + array('(?i:implements)', 'k'), + array($identifier_ns_pattern, 'nc'), + array('', null, '!pop'), + )), + + 'catch' => array_merge($nonsemantic_rules, array( + array('\\(', 'o'), + array($identifier_ns_pattern, 'nc'), + array('', null, '!pop'), + )), + ); + } + +} diff --git a/src/lexer/PhutilPythonFragmentLexer.php b/src/lexer/PhutilPythonFragmentLexer.php new file mode 100644 index 00000000..efcc9ac6 --- /dev/null +++ b/src/lexer/PhutilPythonFragmentLexer.php @@ -0,0 +1,314 @@ + array_merge(array( + array('\\n', null), + // TODO: Docstrings should match only at the start of a line + array('""".*?"""', 'sd'), + array('\'\'\'.*?\'\'\'', 'sd'), + ), $nonsemantic_rules, array( + array('[]{}:(),;[]', 'p'), + array('\\\\\\n', null), + array('\\\\', null), + array('(?:in|is|and|or|not)\\b', 'ow'), + array('(?:!=|==|<<|>>|[-~+/*%=<>&^|.])', 'o'), + array('(?:'.implode('|', $keywords).')\\b', 'k'), + array('def(?=\\s)', 'k', 'funcname'), + array('class(?=\\s)', 'k', 'classname'), + array('from(?=\\s)', 'kn', 'fromimport'), + array('import(?=\\s)', 'kn', 'import'), + array('(? array_merge($nonsemantic_rules, array( + array('[a-zA-Z_]\w*', 'nf', '!pop'), + array('', null, '!pop'), + )), + + 'classname' => array_merge($nonsemantic_rules, array( + array('[a-zA-Z_]\w*', 'nc', '!pop'), + array('', null, '!pop'), + )), + + 'fromimport' => array_merge($nonsemantic_rules, array( + array('import\b', 'kn', '!pop'), + // if None occurs here, it's "raise x from None", since None can + // never be a module name + array('None\b', 'bp', '!pop'), + // sadly, in "raise x from y" y will be highlighted as namespace too + array('[a-zA-Z_.][\w.]*', 'nn'), + array('', null, '!pop'), + )), + + 'import' => array_merge($nonsemantic_rules, array( + array('as\b', 'kn'), + array(',', 'o'), + array('[a-zA-Z_.][\w.]*', 'nn'), + array('', null, '!pop'), + )), + + 'dqs_raw' => $dqs, + 'sqs_raw' => $sqs, + 'dqs' => array_merge($stringescape, $dqs), + 'sqs' => array_merge($stringescape, $sqs), + 'tdqs_raw' => $tdqs, + 'tsqs_raw' => $tsqs, + 'tdqs' => array_merge($stringescape, $tdqs), + 'tsqs' => array_merge($stringescape, $tsqs), + ); + } + +} diff --git a/src/lexer/PhutilShellLexer.php b/src/lexer/PhutilShellLexer.php new file mode 100644 index 00000000..d4e8c523 --- /dev/null +++ b/src/lexer/PhutilShellLexer.php @@ -0,0 +1,86 @@ +getTokens($string); + if (count($this->getLexerState()) > 1) { + throw new UnexpectedValueException( + pht('Unterminated string in argument list!')); + } + + foreach ($tokens as $key => $token) { + switch ($token[0]) { + case "'": + case '"': + unset($tokens[$key]); + break; + case 'esc': + $tokens[$key][0] = 'arg'; + $tokens[$key][1] = substr($token[1], 1); + break; + default: + break; + } + } + + $tokens = $this->mergeTokens(array_values($tokens)); + + $argv = array(); + foreach ($tokens as $token) { + if ($token[0] == 'arg') { + $argv[] = $token[1]; + } + } + + return $argv; + } + + protected function getRawRules() { + return array( + 'start' => array( + array('\s+', ' '), + array("'", "'", 'string1'), + array('"', '"', 'string2'), + array('\\\\.', 'esc'), + array('[^\\s\'"\\\\]+', 'arg'), + ), + 'string1' => array( + // NOTE: In a single-quoted string, backslash is not an escape. + array('[^\']+', 'arg'), + array("'", "'", '!pop'), + ), + 'string2' => array( + // NOTE: In a double-quoted string, backslash IS an escape, but only + // for some characters: ", $, `, \ and newline. + array('[^"\\\\]+', 'arg'), + array('"', '"', '!pop'), + array('\\\\["$`\\\\\\n]', 'esc'), + array('\\\\.', 'arg'), + ), + ); + } + +} diff --git a/src/lexer/PhutilSimpleOptionsLexer.php b/src/lexer/PhutilSimpleOptionsLexer.php new file mode 100644 index 00000000..c83c19d4 --- /dev/null +++ b/src/lexer/PhutilSimpleOptionsLexer.php @@ -0,0 +1,90 @@ +getTokens($input); + + foreach ($tokens as $key => $token) { + list($type, $value) = $token; + switch ($type) { + case 'esc': + $tokens[$key][0] = 'word'; + $tokens[$key][1] = substr($value, 1); + break; + } + } + + $tokens = $this->mergeTokens($tokens); + + // Find spaces in between two words and turn them into words. This allows + // us to parse unescaped spaces in values correctly. + for ($ii = 0; $ii < count($tokens); $ii++) { + list($type, $value) = $tokens[$ii]; + if ($type != ' ') { + continue; + } + $last = idx($tokens, $ii - 1); + if (!$last) { + continue; + } + $next = idx($tokens, $ii + 1); + if (!$next) { + continue; + } + if ($last[0] == 'word' && $next[0] == 'word') { + $tokens[$ii][0] = 'word'; + } + } + + // NOTE: Strip these only after merging tokens, so "a b" merges into two + // words, "a" and "b", not a single "ab" word. + foreach ($tokens as $key => $token) { + list($type, $value) = $token; + switch ($type) { + case "'": + case '"': + case ' ': + unset($tokens[$key]); + break; + } + } + + return array_values($tokens); + } + + protected function getRawRules() { + return array( + 'start' => array( + array('\s+', ' '), + array("'", "'", 'string1'), + array('"', '"', 'string2'), + array(',', ','), + array('=', '='), + array('[^\\s\'"=,]+', 'word'), + ), + 'string1' => array( + array('[^\'\\\\]+', 'word'), + array("'", "'", '!pop'), + array('\\\\.', 'esc'), + array('\\\\$', '!pop'), + ), + 'string2' => array( + array('[^"\\\\]+', 'word'), + array('"', '"', '!pop'), + array('\\\\.', 'esc'), + array('\\\\$', '!pop'), + ), + ); + } + +} diff --git a/src/lexer/PhutilTypeLexer.php b/src/lexer/PhutilTypeLexer.php new file mode 100644 index 00000000..0ebe88a8 --- /dev/null +++ b/src/lexer/PhutilTypeLexer.php @@ -0,0 +1,32 @@ + array( + array('\s+', ' '), + array('\\|', '|'), + array('<', '<'), + array('>', '>'), + array(',', ','), + array('\\?', '?'), + array('optional', 'opt'), + array('map', 'map'), + array('list', 'list'), + array('int|float|bool|string|null|callable|wild|regex', 'k'), + array('\\\\?[a-zA-Z_\x7f-\xff]+(\\\\[a-zA-Z_\x7f-\xff]+)*', 'k'), + array('\\(', '(', 'comment'), + ), + 'comment' => array( + array('\\)', ')', '!pop'), + array('[^\\)]+', 'cm'), + ), + ); + } + +} diff --git a/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php b/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php new file mode 100644 index 00000000..33dde736 --- /dev/null +++ b/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php @@ -0,0 +1,317 @@ +runLexer($file, $data); + } + } + + private function runLexer($file, $data) { + $lexer = new PhutilPHPFragmentLexer(); + + $initial_state = 'start'; + switch ($file) { + case 'pop-from-php.txt': + $initial_state = 'php'; + break; + case 'trailing-backslash-1.txt': + case 'trailing-backslash-2.txt': + case 'trailing-backslash-b.txt': + // It's important these test cases not have trailing newlines. + $data = rtrim($data); + break; + } + + $caught = null; + $tokens = null; + try { + $tokens = $lexer->getTokens($data, $initial_state); + } catch (Exception $ex) { + $caught = $ex; + } + + switch ($file) { + case 'basics.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $tokens = $lexer->mergeTokens($tokens); + $this->assertEqual( + array( + array('cp', '', null), + array(null, "\n\nd\n", null), + ), + $tokens, + $file); + break; + case 'extendsimplements.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', '?>', null), + array(null, "\n", null), + ), + $tokens, + $file); + break; + case 'trailing-backslash-1.txt': + case 'trailing-backslash-2.txt': + case 'trailing-backslash-b.txt': + $this->assertEqual(null, $caught); + break; + default: + throw new Exception(pht("No assertion block for test '%s'!", $file)); + } + } + + +} diff --git a/src/lexer/__tests__/PhutilShellLexerTestCase.php b/src/lexer/__tests__/PhutilShellLexerTestCase.php new file mode 100644 index 00000000..eeff827e --- /dev/null +++ b/src/lexer/__tests__/PhutilShellLexerTestCase.php @@ -0,0 +1,208 @@ +runLexer($file, $data); + } + } + + private function runLexer($file, $data) { + $lexer = new PhutilShellLexer(); + + $initial_state = 'start'; + + $caught = null; + $tokens = null; + try { + $tokens = $lexer->getTokens($data, $initial_state); + } catch (Exception $ex) { + $caught = $ex; + } + + $argv = null; + try { + $argv = $lexer->splitArguments($data); + } catch (Exception $ex) { + // Ignore; not diagnostically useful. + } + + switch ($file) { + case 'basic.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'arg1', null), + array(' ', ' ', null), + array('arg', 'arg2', null), + array(' ', ' ', null), + array('arg', 'arg3', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'arg1', + 'arg2', + 'arg3', + ), + $argv, + $file); + break; + case 'escape.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array("'", "'", null), + array('arg', '\\', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('esc', '\\"', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + '\\', + '"', + ), + $argv, + $file); + break; + case 'slashes.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'a', null), + array('esc', '\\ ', null), + array('arg', 'b', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'a\\b', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'a', null), + array('arg', '\\b', null), + array('"', '"', null), + array(' ', ' ', null), + array('"', '"', null), + array('esc', '\\$', null), + array('esc', '\\`', null), + array('esc', '\\\\', null), + array('esc', '\\"', null), + array('esc', '\\'."\n", null), + array('arg', 'xyz', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'a b', + 'a\\b', + 'a\\b', + '$`\\"'."\n".'xyz', + ), + $argv, + $file); + break; + case 'spaces.txt': + $this->assertEqual( + array( + array('arg', 'arg1', null), + array(' ', ' ', null), + array('arg', 'arg2', null), + array(' ', ' ', null), + array('arg', 'arg3', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'arg1', + 'arg2', + 'arg3', + ), + $argv, + $file); + break; + case 'strings.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'a', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'b', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'c', null), + array('"', '"', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'd', null), + array("'", "'", null), + array("'", "'", null), + array('arg', 'e', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'f', null), + array('"', '"', null), + array('"', '"', null), + array('arg', 'g', null), + array('"', '"', null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'h', null), + array('"', '"', null), + array('"', '"', null), + array('arg', "'", null), + array('"', '"', null), + array('"', '"', null), + array('arg', 'i', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'a', + 'b', + 'c', + 'de', + 'fg', + 'h\'i', + ), + $argv, + $file); + break; + case 'unterminated.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + 'start', + 'string1', + ), + $lexer->getLexerState(), + $file); + $this->assertEqual( + null, + $argv, + $file); + break; + default: + throw new Exception(pht("No assertion block for test '%s'!", $file)); + } + } + + +} diff --git a/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php b/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php new file mode 100644 index 00000000..599f1933 --- /dev/null +++ b/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php @@ -0,0 +1,61 @@ +assertEqual( + array( + array('word', 'legs', null), + array('=', '=', null), + array('word', '4', null), + ), + $this->getTokens('legs=4')); + + $this->assertEqual( + array( + array('word', 'legs', null), + array('=', '=', null), + array('word', '4', null), + array(',', ',', null), + array(' ', ' ', null), + array('word', 'LEGS', null), + array('=', '=', null), + array('word', '4', null), + ), + $this->getTokens('legs=4, LEGS=4')); + } + + public function testSimpleOptionsLexerNiceTokens() { + $this->assertEqual( + array( + array('word', 'legs', null), + ), + $this->getNiceTokens(' legs ')); + + $this->assertEqual( + array( + array('word', 'a', null), + array('word', ' ', null), + array('word', 'b', null), + ), + $this->getNiceTokens(' a b ')); + + $this->assertEqual( + array( + array('word', 'a', null), + array('word', 'b', null), + ), + $this->getNiceTokens('"a""b"')); + } + + private function getTokens($input) { + $lexer = new PhutilSimpleOptionsLexer(); + return $lexer->getTokens($input); + } + + private function getNiceTokens($input) { + $lexer = new PhutilSimpleOptionsLexer(); + return $lexer->getNiceTokens($input); + } + +} diff --git a/src/lexer/__tests__/php/basics.txt b/src/lexer/__tests__/php/basics.txt new file mode 100644 index 00000000..a701c8f0 --- /dev/null +++ b/src/lexer/__tests__/php/basics.txt @@ -0,0 +1 @@ + + +d diff --git a/src/lexer/__tests__/php/extendsimplements.txt b/src/lexer/__tests__/php/extendsimplements.txt new file mode 100644 index 00000000..59067bcc --- /dev/null +++ b/src/lexer/__tests__/php/extendsimplements.txt @@ -0,0 +1,3 @@ + diff --git a/src/lexer/__tests__/php/symbols.txt b/src/lexer/__tests__/php/symbols.txt new file mode 100644 index 00000000..3ce2fabe --- /dev/null +++ b/src/lexer/__tests__/php/symbols.txt @@ -0,0 +1,8 @@ +raiseLintInLibrary( $library, diff --git a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php index f3dd662e..743d1484 100644 --- a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php +++ b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php @@ -17,8 +17,8 @@ final class ArcanistPHPCompatibilityXHPASTLinterRule } if ($compat_info === null) { - $target = phutil_get_library_root('phutil'). - '/../resources/php_compat_info.json'; + $target = phutil_get_library_root('arcanist'). + '/../resources/php/symbol-information.json'; $compat_info = phutil_json_decode(Filesystem::readFile($target)); } diff --git a/src/moduleutils/PhutilLibraryMapBuilder.php b/src/moduleutils/PhutilLibraryMapBuilder.php new file mode 100644 index 00000000..410ff8fc --- /dev/null +++ b/src/moduleutils/PhutilLibraryMapBuilder.php @@ -0,0 +1,514 @@ +root = $root; + } + + /** + * Control status output. Use `--quiet` to set this. + * + * @param bool If true, don't show status output. + * @return this + * + * @task map + */ + public function setQuiet($quiet) { + $this->quiet = $quiet; + return $this; + } + + /** + * Control subprocess parallelism limit. Use `--limit` to set this. + * + * @param int Maximum number of subprocesses to run in parallel. + * @return this + * + * @task map + */ + public function setSubprocessLimit($limit) { + $this->subprocessLimit = $limit; + return $this; + } + + /** + * Get the map of symbols in this library, analyzing the library to build it + * if necessary. + * + * @return map Information about symbols in this library. + * + * @task map + */ + public function buildMap() { + if ($this->librarySymbolMap === null) { + $this->analyzeLibrary(); + } + return $this->librarySymbolMap; + } + + + /** + * Get the map of files in this library, analyzing the library to build it + * if necessary. + * + * Returns a map of file paths to information about symbols used and defined + * in the file. + * + * @return map Information about files in this library. + * + * @task map + */ + public function buildFileSymbolMap() { + if ($this->fileSymbolMap === null) { + $this->analyzeLibrary(); + } + return $this->fileSymbolMap; + } + + /** + * Build and update the library map. + * + * @return void + * + * @task map + */ + public function buildAndWriteMap() { + $library_map = $this->buildMap(); + + $this->log(pht('Writing map...')); + $this->writeLibraryMap($library_map); + } + + /** + * Write a status message to the user, if not running in quiet mode. + * + * @param string Message to write. + * @return this + * + * @task map + */ + private function log($message) { + if (!$this->quiet) { + @fwrite(STDERR, "%s\n", $message); + } + return $this; + } + + +/* -( Path Management )---------------------------------------------------- */ + + /** + * Get the path to some file in the library. + * + * @param string A library-relative path. If omitted, returns the library + * root path. + * @return string An absolute path. + * + * @task path + */ + private function getPath($path = '') { + return $this->root.'/'.$path; + } + + /** + * Get the path to the symbol cache file. + * + * @return string Absolute path to symbol cache. + * + * @task path + */ + private function getPathForSymbolCache() { + return $this->getPath('.phutil_module_cache'); + } + + /** + * Get the path to the map file. + * + * @return string Absolute path to the library map. + * + * @task path + */ + private function getPathForLibraryMap() { + return $this->getPath('__phutil_library_map__.php'); + } + + /** + * Get the path to the library init file. + * + * @return string Absolute path to the library init file + * + * @task path + */ + private function getPathForLibraryInit() { + return $this->getPath('__phutil_library_init__.php'); + } + + +/* -( Symbol Analysis and Caching )---------------------------------------- */ + + /** + * Load the library symbol cache, if it exists and is readable and valid. + * + * @return dict Map of content hashes to cache of output from + * `phutil_symbols.php`. + * + * @task symbol + */ + private function loadSymbolCache() { + $cache_file = $this->getPathForSymbolCache(); + + try { + $cache = Filesystem::readFile($cache_file); + } catch (Exception $ex) { + $cache = null; + } + + $symbol_cache = array(); + if ($cache) { + try { + $symbol_cache = phutil_json_decode($cache); + } catch (PhutilJSONParserException $ex) { + $symbol_cache = array(); + } + } + + $version = idx($symbol_cache, self::SYMBOL_CACHE_VERSION_KEY); + if ($version != self::SYMBOL_CACHE_VERSION) { + // Throw away caches from a different version of the library. + $symbol_cache = array(); + } + unset($symbol_cache[self::SYMBOL_CACHE_VERSION_KEY]); + + return $symbol_cache; + } + + /** + * Write a symbol map to disk cache. + * + * @param dict Symbol map of relative paths to symbols. + * @param dict Source map (like @{method:loadSourceFileMap}). + * @return void + * + * @task symbol + */ + private function writeSymbolCache(array $symbol_map, array $source_map) { + $cache_file = $this->getPathForSymbolCache(); + + $cache = array( + self::SYMBOL_CACHE_VERSION_KEY => self::SYMBOL_CACHE_VERSION, + ); + + foreach ($symbol_map as $file => $symbols) { + $cache[$source_map[$file]] = $symbols; + } + + $json = json_encode($cache); + try { + Filesystem::writeFile($cache_file, $json); + } catch (FilesystemException $ex) { + $this->log(pht('Unable to save the cache!')); + } + } + + /** + * Drop the symbol cache, forcing a clean rebuild. + * + * @return this + * + * @task symbol + */ + public function dropSymbolCache() { + $this->log(pht('Dropping symbol cache...')); + Filesystem::remove($this->getPathForSymbolCache()); + } + + /** + * Build a future which returns a `phutil_symbols.php` analysis of a source + * file. + * + * @param string Relative path to the source file to analyze. + * @return Future Analysis future. + * + * @task symbol + */ + private function buildSymbolAnalysisFuture($file) { + $absolute_file = $this->getPath($file); + $bin = dirname(__FILE__).'/../../support/lib/extract-symbols.php'; + + return new ExecFuture('php -f %R -- --ugly %R', $bin, $absolute_file); + } + + +/* -( Source Management )-------------------------------------------------- */ + + /** + * Build a map of all source files in a library to hashes of their content. + * Returns an array like this: + * + * array( + * 'src/parser/ExampleParser.php' => '60b725f10c9c85c70d97880dfe8191b3', + * // ... + * ); + * + * @return dict Map of library-relative paths to content hashes. + * @task source + */ + private function loadSourceFileMap() { + $root = $this->getPath(); + + $init = $this->getPathForLibraryInit(); + if (!Filesystem::pathExists($init)) { + throw new Exception( + pht( + "Provided path '%s' is not a %s library.", + $root, + 'phutil')); + } + + $files = id(new FileFinder($root)) + ->withType('f') + ->withSuffix('php') + ->excludePath('*/.*') + ->setGenerateChecksums(true) + ->find(); + + $extensions_dir = 'extensions/'; + $extensions_len = strlen($extensions_dir); + + $map = array(); + foreach ($files as $file => $hash) { + $file = Filesystem::readablePath($file, $root); + $file = ltrim($file, '/'); + + if (dirname($file) == '.') { + // We don't permit normal source files at the root level, so just ignore + // them; they're special library files. + continue; + } + + // Ignore files in the extensions/ directory. + if (!strncmp($file, $extensions_dir, $extensions_len)) { + continue; + } + + // We include also filename in the hash to handle cases when the file is + // moved without modifying its content. + $map[$file] = md5($hash.$file); + } + + return $map; + } + + /** + * Convert the symbol analysis of all the source files in the library into + * a library map. + * + * @param dict Symbol analysis of all source files. + * @return dict Library map. + * @task source + */ + private function buildLibraryMap(array $symbol_map) { + $library_map = array( + 'class' => array(), + 'function' => array(), + 'xmap' => array(), + ); + + // Detect duplicate symbols within the library. + foreach ($symbol_map as $file => $info) { + foreach ($info['have'] as $type => $symbols) { + foreach ($symbols as $symbol => $declaration) { + $lib_type = ($type == 'interface') ? 'class' : $type; + if (!empty($library_map[$lib_type][$symbol])) { + $prior = $library_map[$lib_type][$symbol]; + throw new Exception( + pht( + "Definition of %s '%s' in file '%s' duplicates prior ". + "definition in file '%s'. You can not declare the ". + "same symbol twice.", + $type, + $symbol, + $file, + $prior)); + } + $library_map[$lib_type][$symbol] = $file; + } + } + $library_map['xmap'] += $info['xmap']; + } + + // Simplify the common case (one parent) to make the file a little easier + // to deal with. + foreach ($library_map['xmap'] as $class => $extends) { + if (count($extends) == 1) { + $library_map['xmap'][$class] = reset($extends); + } + } + + // Sort the map so it is relatively stable across changes. + foreach ($library_map as $key => $symbols) { + ksort($symbols); + $library_map[$key] = $symbols; + } + ksort($library_map); + + return $library_map; + } + + /** + * Write a finalized library map. + * + * @param dict Library map structure to write. + * @return void + * + * @task source + */ + private function writeLibraryMap(array $library_map) { + $map_file = $this->getPathForLibraryMap(); + $version = self::LIBRARY_MAP_VERSION; + + $library_map = array( + self::LIBRARY_MAP_VERSION_KEY => $version, + ) + $library_map; + + $library_map = phutil_var_export($library_map); + $at = '@'; + + $source_file = <<log(pht('Finding source files...')); + $source_map = $this->loadSourceFileMap(); + $this->log( + pht('Found %s files.', new PhutilNumber(count($source_map)))); + + // Load the symbol cache with existing parsed symbols. This allows us + // to remap libraries quickly by analyzing only changed files. + $this->log(pht('Loading symbol cache...')); + $symbol_cache = $this->loadSymbolCache(); + + // If the XHPAST binary is not up-to-date, build it now. Otherwise, + // `phutil_symbols.php` will attempt to build the binary and will fail + // miserably because it will be trying to build the same file multiple + // times in parallel. + if (!PhutilXHPASTBinary::isAvailable()) { + PhutilXHPASTBinary::build(); + } + + // Build out the symbol analysis for all the files in the library. For + // each file, check if it's in cache. If we miss in the cache, do a fresh + // analysis. + $symbol_map = array(); + $futures = array(); + foreach ($source_map as $file => $hash) { + if (!empty($symbol_cache[$hash])) { + $symbol_map[$file] = $symbol_cache[$hash]; + continue; + } + $futures[$file] = $this->buildSymbolAnalysisFuture($file); + } + $this->log( + pht('Found %s files in cache.', new PhutilNumber(count($symbol_map)))); + + // Run the analyzer on any files which need analysis. + if ($futures) { + $limit = $this->subprocessLimit; + + $this->log( + pht( + 'Analyzing %s file(s) with %s subprocess(es)...', + phutil_count($futures), + new PhutilNumber($limit))); + + $progress = new PhutilConsoleProgressBar(); + if ($this->quiet) { + $progress->setQuiet(true); + } + $progress->setTotal(count($futures)); + + $futures = id(new FutureIterator($futures)) + ->limit($limit); + foreach ($futures as $file => $future) { + $result = $future->resolveJSON(); + if (empty($result['error'])) { + $symbol_map[$file] = $result; + } else { + $progress->done(false); + throw new XHPASTSyntaxErrorException( + $result['line'], + $file.': '.$result['error']); + } + $progress->update(1); + } + $progress->done(); + } + + $this->fileSymbolMap = $symbol_map; + + // We're done building the cache, so write it out immediately. Note that + // we've only retained entries for files we found, so this implicitly cleans + // out old cache entries. + $this->writeSymbolCache($symbol_map, $source_map); + + // Our map is up to date, so either show it on stdout or write it to disk. + $this->log(pht('Building library map...')); + + $this->librarySymbolMap = $this->buildLibraryMap($symbol_map); + } + + +} diff --git a/src/object/Phobject.php b/src/object/Phobject.php new file mode 100644 index 00000000..0a7a59ee --- /dev/null +++ b/src/object/Phobject.php @@ -0,0 +1,104 @@ +throwOnAttemptedIteration(); + } + + public function key() { + $this->throwOnAttemptedIteration(); + } + + public function next() { + $this->throwOnAttemptedIteration(); + } + + public function rewind() { + $this->throwOnAttemptedIteration(); + } + + public function valid() { + $this->throwOnAttemptedIteration(); + } + + private function throwOnAttemptedIteration() { + throw new DomainException( + pht( + 'Attempting to iterate an object (of class %s) which is not iterable.', + get_class($this))); + } + + + /** + * Read the value of a class constant. + * + * This is the same as just typing `self::CONSTANTNAME`, but throws a more + * useful message if the constant is not defined and allows the constant to + * be limited to a maximum length. + * + * @param string Name of the constant. + * @param int|null Maximum number of bytes permitted in the value. + * @return string Value of the constant. + */ + public function getPhobjectClassConstant($key, $byte_limit = null) { + $class = new ReflectionClass($this); + + $const = $class->getConstant($key); + if ($const === false) { + throw new Exception( + pht( + '"%s" class "%s" must define a "%s" constant.', + __CLASS__, + get_class($this), + $key)); + } + + if ($byte_limit !== null) { + if (!is_string($const) || (strlen($const) > $byte_limit)) { + throw new Exception( + pht( + '"%s" class "%s" has an invalid "%s" property. Field constants '. + 'must be strings and no more than %s bytes in length.', + __CLASS__, + get_class($this), + $key, + new PhutilNumber($byte_limit))); + } + } + + return $const; + } + +} diff --git a/src/object/__tests__/PhobjectTestCase.php b/src/object/__tests__/PhobjectTestCase.php new file mode 100644 index 00000000..d401b481 --- /dev/null +++ b/src/object/__tests__/PhobjectTestCase.php @@ -0,0 +1,40 @@ +duck; + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof DomainException); + + $caught = null; + try { + $object->duck = 'quack'; + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof DomainException); + } + + public function testThrowOnIteration() { + $object = new PhutilTestPhobject(); + + $caught = null; + try { + foreach ($object as $item) { + // ... + } + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof DomainException); + } + +} diff --git a/src/object/__tests__/PhutilTestPhobject.php b/src/object/__tests__/PhutilTestPhobject.php new file mode 100644 index 00000000..7bd5b81b --- /dev/null +++ b/src/object/__tests__/PhutilTestPhobject.php @@ -0,0 +1,3 @@ +setBugtraqPattern('http://bugs.com/%BUGID%') + * ->setBugtraqCaptureExpression('/[Ii]ssues?:?(\s*,?\s*#\d+)+/') + * ->setBugtraqSelectExpression('/(\d+)/') + * ->processCorpus($message); + * + * This will produce: + * + * Issues: http://bugs.com/123, http://bugs.com/345 + * + */ +final class PhutilBugtraqParser extends Phobject { + + private $bugtraqPattern; + private $bugtraqCaptureExpression; + private $bugtraqSelectExpression; + + public function setBugtraqPattern($pattern) { + $this->bugtraqPattern = $pattern; + return $this; + } + + public function setBugtraqCaptureExpression($regex) { + PhutilTypeSpec::newFromString('regex')->check($regex); + + $this->bugtraqCaptureExpression = $regex; + return $this; + } + + public function setBugtraqSelectExpression($regex) { + PhutilTypeSpec::newFromString('regex')->check($regex); + + $this->bugtraqSelectExpression = $regex; + return $this; + } + + public function processCorpus($corpus) { + $regexp = $this->bugtraqCaptureExpression; + $matches = null; + $flags = PREG_SET_ORDER | PREG_OFFSET_CAPTURE; + + // First, find all the matching text ranges. We do this up front because + // when we do the replacement pass at the end, the whole thing needs to go + // in reverse order. + + preg_match_all($regexp, $corpus, $matches, $flags); + $captures = array(); + foreach ($matches as $match) { + list($captured_text, $captured_offset) = $match[0]; + $captures[] = array( + 'text' => $captured_text, + 'at' => $captured_offset, + ); + } + + // Find the actual bug IDs. If there's a selection expression, we use that + // to pick bug IDs out of a larger context. For example, the syntax may be: + // + // Issues: 123, 124 + // + // In this case, "123" and "124" are the issue IDs, and could be selected + // with an expression like: + // + // /(\d+)/ + // + // If there's no selection expression, we use the entire match. + + $bug_ids = array(); + $select_regexp = $this->bugtraqSelectExpression; + foreach ($captures as $capture) { + $captured_text = $capture['text']; + $captured_offset = $capture['at']; + + if (strlen($select_regexp)) { + $selections = null; + preg_match_all( + $select_regexp, + $captured_text, + $selections, + PREG_OFFSET_CAPTURE); + + foreach ($selections[1] as $selection) { + $bug_ids[] = array( + 'text' => $selection[0], + 'at' => $captured_offset + $selection[1], + ); + } + } else { + $bug_ids[] = array( + 'text' => $captured_text, + 'at' => $captured_offset, + ); + } + } + + // Now that we have all the bug IDs to replace, replace them (in reverse + // order, so the offsets don't get messed up). + $bug_ids = array_reverse($bug_ids); + foreach ($bug_ids as $bug) { + $new_text = str_replace( + '%BUGID%', + $bug['text'], + $this->bugtraqPattern); + + $corpus = substr_replace( + $corpus, + $new_text, + $bug['at'], + strlen($bug['text'])); + } + + return $corpus; + } + +} diff --git a/src/parser/PhutilDocblockParser.php b/src/parser/PhutilDocblockParser.php new file mode 100644 index 00000000..a1eda282 --- /dev/null +++ b/src/parser/PhutilDocblockParser.php @@ -0,0 +1,163 @@ + line number. + $map = array(); + $lines = explode("\n", $text); + $num = 1; + foreach ($lines as $line) { + $len = strlen($line) + 1; + for ($jj = 0; $jj < $len; $jj++) { + $map[] = $num; + } + ++$num; + } + + foreach ($matches[0] as $match) { + list($data, $offset) = $match; + $blocks[] = array($data, $map[$offset]); + } + + return $blocks; + } + + public function parse($docblock) { + // Strip off comments. + $docblock = trim($docblock); + $docblock = preg_replace('@^/\*\*@', '', $docblock); + $docblock = preg_replace('@\*/$@', '', $docblock); + $docblock = preg_replace('@^\s*\*@m', '', $docblock); + + // Normalize multi-line @specials. + $lines = explode("\n", $docblock); + $last = false; + foreach ($lines as $k => $line) { + + // NOTE: We allow "@specials" to be preceded by up to two whitespace + // characters; more than that and we assume the block is a code block. + // Broadly, there's ambiguity between a special like: + // + // <... lots of indentation ...> @author alincoln + // + // ...and a code block like: + // + // <... lots of indentation ...> @def square(x, y): + // + // Because standard practice is to indent the entire block one level, + // we allow that and one additional space before assuming something is + // a code block. + + if (preg_match('/^\s{0,2}@\w/i', $line)) { + $last = $k; + $lines[$last] = trim($line); + } else if (preg_match('/^\s*$/', $line)) { + $last = false; + } else if ($last !== false) { + $lines[$last] = $lines[$last].' '.trim($line); + unset($lines[$k]); + } + } + + $docblock = implode("\n", $lines); + + $special = array(); + + // Parse @specials. + $matches = null; + $have_specials = preg_match_all( + '/^@([\w-]+)[ \t]*([^\n]*)/m', + $docblock, + $matches, + PREG_SET_ORDER); + + if ($have_specials) { + $docblock = preg_replace( + '/^@([\w-]+)[ \t]*([^\n]*)?\n*/m', + '', + $docblock); + foreach ($matches as $match) { + list($_, $type, $data) = $match; + $data = trim($data); + + // For flags like "@stable" which don't have any string data, set the + // value to true. + if (!strlen($data)) { + $data = true; + } + + if (!isset($special[$type])) { + $special[$type] = $data; + } else { + if (!is_array($special[$type])) { + $special[$type] = (array)$special[$type]; + } + $special[$type][] = $data; + } + } + } + + // Convert `array(true, true, true)` to `true`. + foreach ($special as $type => $data) { + if (is_array($data)) { + $all_trues = true; + + foreach ($data as $value) { + if ($value !== true) { + $all_trues = false; + break; + } + } + + if ($all_trues) { + $special[$type] = true; + } + } + } + + $docblock = str_replace("\t", ' ', $docblock); + + // Smush the whole docblock to the left edge. + $min_indent = 80; + $indent = 0; + foreach (array_filter(explode("\n", $docblock)) as $line) { + for ($ii = 0; $ii < strlen($line); $ii++) { + if ($line[$ii] != ' ') { + break; + } + $indent++; + } + $min_indent = min($indent, $min_indent); + } + + $docblock = preg_replace( + '/^'.str_repeat(' ', $min_indent).'/m', + '', + $docblock); + $docblock = rtrim($docblock); + // Trim any empty lines off the front, but leave the indent level if there + // is one. + $docblock = preg_replace('/^\s*\n/', '', $docblock); + + return array($docblock, $special); + } + +} diff --git a/src/parser/PhutilEditorConfig.php b/src/parser/PhutilEditorConfig.php new file mode 100644 index 00000000..a03d2bf6 --- /dev/null +++ b/src/parser/PhutilEditorConfig.php @@ -0,0 +1,195 @@ + array( + 'latin1', + 'utf-8', + 'utf-8-bom', + 'utf-16be', + 'utf-16le', + ), + self::END_OF_LINE => array('lf', 'cr', 'crlf'), + self::INDENT_SIZE => 'int|string', + self::INDENT_STYLE => array('space', 'tab'), + self::FINAL_NEWLINE => 'bool', + self::LINE_LENGTH => 'int', + self::TAB_WIDTH => 'int', + self::TRAILING_WHITESPACE => 'bool', + ); + + private $root; + + /** + * Constructor. + * + * @param string The root directory. + */ + public function __construct($root) { + $this->root = $root; + } + + /** + * Get the specified EditorConfig property for the specified path. + * + * @param string + * @param string + * @return wild + */ + public function getProperty($path, $key) { + if (!idx(self::$knownProperties, $key)) { + throw new InvalidArgumentException(pht('Invalid EditorConfig property.')); + } + + $props = $this->getProperties($path); + + switch ($key) { + case self::INDENT_SIZE: + if (idx($props, self::INDENT_SIZE) === null && + idx($props, self::INDENT_STYLE) === 'tab') { + return 'tab'; + } else if (idx($props, self::INDENT_SIZE) === 'tab' && + idx($props, self::TAB_WIDTH) === null) { + return idx($props, self::TAB_WIDTH); + } + break; + + case self::TAB_WIDTH: + if (idx($props, self::TAB_WIDTH) === null && + idx($props, self::INDENT_SIZE) !== null && + idx($props, self::INDENT_SIZE) !== 'tab') { + return idx($props, self::INDENT_SIZE); + } + break; + } + + return idx($props, $key); + } + + /** + * Get the EditorConfig properties for the specified path. + * + * Returns a map containing all of the EditorConfig properties which apply + * to the specified path. The following rules are applied when processing + * EditorConfig files: + * + * - If a glob does not contain `/`, it can match a path in any subdirectory. + * - If the first character of a glob is `/`, it will only match files in the + * same directory as the `.editorconfig` file. + * - Properties and values are case-insensitive. + * - Unknown properties will be silently ignored. + * - Values are not validated against the specification (this may change in + * the future). + * - Invalid glob patterns will be silently ignored. + * + * @param string + * @return map + */ + public function getProperties($path) { + $configs = $this->getEditorConfigs($path); + $matches = array(); + + foreach ($configs as $config) { + list($path_prefix, $editorconfig) = $config; + + foreach ($editorconfig as $glob => $properties) { + if (!$glob) { + continue; + } + + if (strpos($glob, '/') === false) { + $glob = '**/'.$glob; + } else if (strncmp($glob, '/', 0)) { + $glob = substr($glob, 1); + } + + $glob = $path_prefix.'/'.$glob; + try { + if (!phutil_fnmatch($glob, $path)) { + continue; + } + } catch (Exception $ex) { + // Invalid glob pattern... ignore it. + continue; + } + + foreach ($properties as $property => $value) { + $property = strtolower($property); + + if (!idx(self::$knownProperties, $property)) { + // Unknown property... ignore it. + continue; + } + + if (is_string($value)) { + $value = strtolower($value); + } + if ($value === '') { + $value = null; + } + $matches[$property] = $value; + } + } + } + + return $matches; + } + + /** + * Returns the EditorConfig files which affect the specified path. + * + * Find and parse all `.editorconfig` files between the specified path and + * the root directory. The results are returned in the same order that they + * should be matched. + * + * return list> + */ + private function getEditorConfigs($path) { + $configs = array(); + $found_root = false; + $root = $this->root; + + do { + $path = dirname($path); + $file = $path.'/.editorconfig'; + + if (!Filesystem::pathExists($file)) { + continue; + } + + $contents = Filesystem::readFile($file); + $config = phutil_ini_decode($contents); + + if (idx($config, 'root') === true) { + $found_root = true; + } + unset($config['root']); + array_unshift($configs, array($path, $config)); + + if ($found_root) { + break; + } + } while ($path != $root && Filesystem::isDescendant($path, $root)); + + return $configs; + } + +} diff --git a/src/parser/PhutilEmailAddress.php b/src/parser/PhutilEmailAddress.php new file mode 100644 index 00000000..6acda756 --- /dev/null +++ b/src/parser/PhutilEmailAddress.php @@ -0,0 +1,114 @@ +$/', $email_address, $matches)) { + $display_name = trim($matches[1], '\'" '); + if (strpos($matches[2], '@') !== false) { + list($local_part, $domain_name) = explode('@', $matches[2], 2); + } else { + $local_part = $matches[2]; + $domain_name = null; + } + } else if (preg_match('/^(.*)@(.*)$/', $email_address, $matches)) { + $display_name = null; + $local_part = $matches[1]; + $domain_name = $matches[2]; + } else { + $display_name = null; + $local_part = $email_address; + $domain_name = null; + } + + $this->displayName = $display_name; + $this->localPart = $local_part; + $this->domainName = $domain_name; + } + + public function __toString() { + $address = $this->getAddress(); + if (strlen($this->displayName)) { + $display_name = $this->encodeDisplayName($this->displayName); + return $display_name.' <'.$address.'>'; + } else { + return $address; + } + } + + public function setDisplayName($display_name) { + $this->displayName = $display_name; + return $this; + } + + public function getDisplayName() { + return $this->displayName; + } + + public function setLocalPart($local_part) { + $this->localPart = $local_part; + return $this; + } + + public function getLocalPart() { + return $this->localPart; + } + + public function setDomainName($domain_name) { + $this->domainName = $domain_name; + return $this; + } + + public function getDomainName() { + return $this->domainName; + } + + public function setAddress($address) { + $parts = explode('@', $address, 2); + + $this->localPart = $parts[0]; + if (isset($parts[1])) { + $this->domainName = $parts[1]; + } + + return $this; + } + + public function getAddress() { + $address = $this->localPart; + if (strlen($this->domainName)) { + $address .= '@'.$this->domainName; + } + return $address; + } + + private function encodeDisplayName($name) { + // NOTE: This is a reasonable effort based on a cursory reading of + // RFC2822, but may be significantly misguided. + + // Newlines are not permitted, even when escaped. Discard them. + $name = preg_replace("/\s*[\r\n]+\s*/", ' ', $name); + + // Escape double quotes and backslashes. + $name = addcslashes($name, '\\"'); + + // Quote the string. + $name = '"'.$name.'"'; + + return $name; + } + +} diff --git a/src/parser/PhutilGitURI.php b/src/parser/PhutilGitURI.php new file mode 100644 index 00000000..cfe5530f --- /dev/null +++ b/src/parser/PhutilGitURI.php @@ -0,0 +1,92 @@ +parseURI($uri); + if ($parts) { + $this->user = $parts[1]; + $this->domain = $parts[2]; + $this->path = $parts[3]; + } + } + + private static function parseURI($uri) { + // See T4913. Fail the parse if there is leading whitespace; stricter + // systems will not accept these URIs. + if (ltrim($uri) !== $uri) { + return null; + } + + $user = '(?:([^@]+)@)?'; + $domain = '([^:]+)'; + $path = ':(.*)'; + + $regexp = '/^'.$user.$domain.$path.'$/'; + $matches = null; + $ok = preg_match($regexp, $uri, $matches); + if ($ok) { + return array_pad($matches, 4, ''); + } + + return null; + } + + public function __toString() { + $user = null; + if ($this->user) { + $user = $this->user.'@'; + } + + $domain = $this->domain; + $path = $this->path; + + return $user.$domain.':'.$path; + } + + public function setDomain($domain) { + $this->domain = $domain; + return $this; + } + + public function getDomain() { + return $this->domain; + } + + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setUser($user) { + $this->user = $user; + return $this; + } + + public function getUser() { + return $this->user; + } + +} diff --git a/src/parser/PhutilJSON.php b/src/parser/PhutilJSON.php new file mode 100644 index 00000000..0bcc4f76 --- /dev/null +++ b/src/parser/PhutilJSON.php @@ -0,0 +1,155 @@ +encodeFormattedObject($object, 0)."\n"; + } + + + /** + * Encode a list in JSON and pretty-print it, discarding keys. + * + * @param list List to encode in JSON. + * @return string Pretty-printed list representation. + */ + public function encodeAsList(array $list) { + return $this->encodeFormattedArray($list, 0)."\n"; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Pretty-print a JSON object. + * + * @param dict Object to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedObject($object, $depth) { + if (empty($object)) { + return '{}'; + } + + $pre = $this->getIndent($depth); + $key_pre = $this->getIndent($depth + 1); + $keys = array(); + $vals = array(); + $max = 0; + foreach ($object as $key => $val) { + $ekey = $this->encodeFormattedValue((string)$key, 0); + $max = max($max, strlen($ekey)); + $keys[] = $ekey; + $vals[] = $this->encodeFormattedValue($val, $depth + 1); + } + $key_lines = array(); + foreach ($keys as $k => $key) { + $key_lines[] = $key_pre.$key.': '.$vals[$k]; + } + $key_lines = implode(",\n", $key_lines); + + $out = "{\n"; + $out .= $key_lines; + $out .= "\n"; + $out .= $pre.'}'; + + return $out; + } + + + /** + * Pretty-print a JSON list. + * + * @param list List to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedArray($array, $depth) { + if (empty($array)) { + return '[]'; + } + + $pre = $this->getIndent($depth); + $val_pre = $this->getIndent($depth + 1); + + $vals = array(); + foreach ($array as $val) { + $vals[] = $val_pre.$this->encodeFormattedValue($val, $depth + 1); + } + $val_lines = implode(",\n", $vals); + + $out = "[\n"; + $out .= $val_lines; + $out .= "\n"; + $out .= $pre.']'; + + return $out; + } + + + /** + * Pretty-print a JSON value. + * + * @param dict Value to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedValue($value, $depth) { + if (is_array($value)) { + if (phutil_is_natural_list($value)) { + return $this->encodeFormattedArray($value, $depth); + } else { + return $this->encodeFormattedObject($value, $depth); + } + } else { + if (defined('JSON_UNESCAPED_SLASHES')) { + // If we have a new enough version of PHP, disable escaping of slashes + // when pretty-printing values. Escaping slashes can defuse an attack + // where the attacker embeds "" inside a JSON string, but that + // isn't relevant when rendering JSON for human viewers. + return json_encode($value, JSON_UNESCAPED_SLASHES); + } else { + return json_encode($value); + } + } + } + + + /** + * Render a string corresponding to the current indent depth. + * + * @param int Current depth. + * @return string Indentation. + * @task internal + */ + private function getIndent($depth) { + if (!$depth) { + return ''; + } else { + return str_repeat(' ', $depth); + } + } + +} diff --git a/src/parser/PhutilJSONParser.php b/src/parser/PhutilJSONParser.php new file mode 100644 index 00000000..d3b5aef5 --- /dev/null +++ b/src/parser/PhutilJSONParser.php @@ -0,0 +1,64 @@ +allowDuplicateKeys = $allow_duplicate_keys; + return $this; + } + + public function parse($json) { + $jsonlint_root = phutil_get_library_root('arcanist'); + $jsonlint_root = $jsonlint_root.'/../externals/jsonlint'; + + require_once $jsonlint_root.'/src/Seld/JsonLint/JsonParser.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/Lexer.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/ParsingException.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/Undefined.php'; + + $parser = new JsonLintJsonParser(); + try { + $output = $parser->parse($json, $this->getFlags()); + } catch (JsonLintParsingException $ex) { + $details = $ex->getDetails(); + $message = preg_replace("/^Parse error .*\\^\n/s", '', $ex->getMessage()); + + throw new PhutilJSONParserException( + $message, + idx(idx($details, 'loc', array()), 'last_line'), + idx(idx($details, 'loc', array()), 'last_column'), + idx($details, 'token'), + idx($details, 'expected')); + } + + if (!is_array($output)) { + throw new PhutilJSONParserException( + pht( + '%s is not a valid JSON object.', + PhutilReadableSerializer::printShort($json))); + } + + return $output; + } + + private function getFlags() { + $flags = JsonLintJsonParser::PARSE_TO_ASSOC; + + if ($this->allowDuplicateKeys) { + $flags |= JsonLintJsonParser::ALLOW_DUPLICATE_KEYS; + } else { + $flags |= JsonLintJsonParser::DETECT_KEY_CONFLICTS; + } + + return $flags; + } + +} diff --git a/src/parser/PhutilLanguageGuesser.php b/src/parser/PhutilLanguageGuesser.php new file mode 100644 index 00000000..7b0dc6fc --- /dev/null +++ b/src/parser/PhutilLanguageGuesser.php @@ -0,0 +1,47 @@ + 1, + // Capture "#!/usr/bin/php" sorts of things. + '@^#!.*bin/(\S+)@' => 1, + // Capture initial " 1, + // Capture emacs "mode" header. + '@^.*-[*]-.*mode\s*:\s*(\S+).*-[*]-.*$@m' => 1, + // Look for things that seem to be diffs. + '/^---.*$\n^[+]{3}.*$\n^@@/m' => 'diff', + '/^diff --git/' => 'diff', + // Look for plausible console output. + '@^(?:\S+[\\\\/] )?[$] @' => 'console', + ); + + foreach ($patterns as $pattern => $language) { + $matches = null; + if (preg_match($pattern, $source, $matches)) { + if (is_numeric($language)) { + return $matches[$language]; + } else { + return $language; + } + } + } + + return null; + } + +} diff --git a/src/parser/PhutilParserGenerator.php b/src/parser/PhutilParserGenerator.php new file mode 100644 index 00000000..f084adb7 --- /dev/null +++ b/src/parser/PhutilParserGenerator.php @@ -0,0 +1,910 @@ +setTerminals(array('a', 'b')) + * ->setStartRule('S') + * ->setRules( + * array( + * 'S' => 'A b', + * 'A' => array( + * 'A a', + * 'a', + * ))) + * ->processGrammar(); + * + * To actually parse token streams, use @{method:parseTokens}. + * + * $tokens = get_tokens(); // Usually from PhutilLexer + * $callback = 'some_callback'; + * $tree = $parser->parseTokens($tokens, $callback); + * + * The callback is invoked when a grammar rule matches. It should have this + * signature: + * + * function parser_callback($rule, $production, array $tokens) { + * // ... + * } + * + * The `$rule` is the matching rule; the `$production` is the matching + * production, and `$tokens` is the matching tokens (for terminal rules) or the + * return value of previous parse callbacks (for nonterminal rules). + * + * You should either return a result of evaluation, or some sort of abstract + * representation of the parse tree (this is more likely to be useful for more + * complex grammars). + * + * NOTE: This class generates LR(1) parsers, which perform less-than-optimally + * on large grammars. Worse, it is written in PHP. It is suitable only for + * very simple grammars with few states. + * + * NOTE: These parsers silently resolve reduce/reduce conflicts by choosing the + * first reduction, and silently resolve shift/reduce conflicts by shifting. + * These are the same rules used by Yacc, but are implicit. + * + * @task rules Grammar Rules + * @task rvalidation Rule Validation + * @task first Computing First() + * @task tables Computing Action and Goto Tables + * @task inspect Inspecting Generator State + */ +final class PhutilParserGenerator extends Phobject { + + private $terminals; + private $rules; + private $startRule = 'start'; + private $states = array(); + private $sets = array(); + private $successor = array(); + private $setHashes = array(); + private $actionTable; + private $gotoTable; + + private $rulesValidated = false; + private $eofSymbol; + private $initSymbol; + private $epsilonSymbol; + private $endSymbol; + + private $firstTable; + + public function processGrammar() { + $this->validateRules(); + $this->buildFirstTable(); + + $init = $this->getInitSymbol(); + $eof = $this->getEOFSymbol(); + $end = $this->getEndSymbol(); + + $this->rules[$init] = array( + array($this->startRule, $end), + ); + list($is_new, $state) = $this->addState( + array( + array($this->getInitSymbol(), 0, 0, $eof), + )); + $this->buildSuccessors($state); + + $this->buildTables(); + + return $this; + } + + +/* -( Grammar Rules )------------------------------------------------------ */ + + + public function setTerminals(array $terminals) { + $this->terminals = array_fill_keys($terminals, true); + return $this; + } + + public function setRules(array $rules) { + $this->rules = $rules; + return $this; + } + + public function setStartRule($rule_name) { + $this->startRule = $rule_name; + return $this; + } + + public function getStartRule() { + return $this->startRule; + } + + public function getEOFSymbol() { + if ($this->eofSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->eofSymbol; + } + + public function getInitSymbol() { + if ($this->initSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->initSymbol; + } + + public function getEpsilonSymbol() { + if ($this->epsilonSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->epsilonSymbol; + } + + public function getEndSymbol() { + if ($this->endSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->endSymbol; + } + + public function isTerminal($symbol) { + return isset($this->terminals[$symbol]); + } + + public function isRule($symbol) { + return isset($this->rules[$symbol]); + } + + +/* -( Rule Validation )---------------------------------------------------- */ + + + /** + * Perform a battery of tests on the provided rules to detect problems which + * would prevent us from generating a parser. + * + * @return void + * @task rvalidation + */ + private function validateRules() { + // Rules must be specified in the right format. + $this->parseRules(); + + // Rules must contain only known symbols. + $this->validateRuleSymbols(); + + // The start rule must exist and be valid. + $this->validateStartRule(); + + // Now, we select printable names for special symbols (EOF, epsilon, etc) + // that don't conflict with any symbols in the grammar. + $this->chooseSpecialSymbols(); + + // Make sure every terminal can be reached by some rule. + $this->validateAllTerminalsReachable(); + + // Make sure every rule can be reached. + $this->validateAllRulesReachable(); + + // Make sure every rule has some valid reduction. + $this->validateAllRulesReducible(); + + $this->rulesValidated = true; + } + + + /** + * @task rvalidation + */ + private function parseRules() { + foreach ($this->rules as $rule_name => $rule_variants) { + if (!is_array($rule_variants)) { + $rule_variants = array($rule_variants); + $this->rules[$rule_name] = $rule_variants; + } + foreach ($rule_variants as $vkey => $variant) { + if ($variant === null) { + $variant = array(null); + } else if (!is_array($variant)) { + $variant = preg_split('/\s+/', $variant); + } else { + foreach ($variant as $symbol) { + if (($symbol === null) && count($variant) > 1) { + throw new PhutilInvalidRuleParserGeneratorException( + pht( + "Rule '%s' contains a production '%s' which is ". + "nonempty but has a null in it. A rule with other ". + "may not contain null.", + $rule_name, + $vkey)); + } + } + } + $this->rules[$rule_name][$vkey] = array_values($variant); + } + } + } + + + /** + * @task rvalidation + */ + private function validateRuleSymbols() { + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production_name => $production) { + foreach ($production as $symbol) { + if ($symbol === null) { + continue; + } + if ($this->isTerminal($symbol)) { + continue; + } + if ($this->isRule($symbol)) { + continue; + } + $production_string = implode(' ', $production); + throw new PhutilUnknownSymbolParserGeneratorException( + pht( + "Symbol '%s' in production '%s' ('%s') of rule '%s' does not ". + "name a rule or terminal. Did you misspell a symbol, fail to ". + "specify a terminal, or forget a rule?", + $symbol, + $production_name, + $production_string, + $rule)); + } + } + } + } + + + /** + * @task rvalidation + */ + private function validateStartRule() { + $start_rule = $this->getStartRule(); + if (!$this->isRule($start_rule)) { + throw new PhutilUnknownSymbolParserGeneratorException( + pht( + "Start rule '%s' does not appear in the rules for the grammar. Use ". + "%s to choose a different start rule, or add a rule named '%s'.", + $start_rule, + 'setStartRule()', + $start_rule)); + } + } + + + /** + * @task rvalidation + */ + private function chooseSpecialSymbols() { + $special = array( + 'eofSymbol' => '(end-of-file)', + 'epsilonSymbol' => '(epsilon)', + 'initSymbol' => '(init)', + 'endSymbol' => '(end)', + ); + + foreach ($special as $key => $value) { + while ($this->isRule($value) || $this->isTerminal($value)) { + $value .= "'"; + } + $special[$key] = $value; + } + + $this->eofSymbol = $special['eofSymbol']; + $this->epsilonSymbol = $special['epsilonSymbol']; + $this->initSymbol = $special['initSymbol']; + $this->endSymbol = $special['endSymbol']; + + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production_name => $production) { + foreach ($production as $key => $symbol) { + if ($symbol === null) { + $this->rules[$rule][$production_name][$key] = $this->epsilonSymbol; + } + } + $this->rules[$rule][$production_name][] = $this->endSymbol; + } + } + + $this->terminals[$this->getEOFSymbol()] = true; + } + + + /** + * @task rvalidation + */ + private function validateAllTerminalsReachable() { + $seen = array(); + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production) { + foreach ($production as $symbol) { + $seen[$symbol] = true; + } + } + } + + $missing = array_diff_key($this->terminals, $seen); + unset($missing[$this->getEOFSymbol()]); + if ($missing) { + $missing_terminals = array_keys($missing); + $missing_terminals = implode(', ', $missing_terminals); + throw new PhutilUnreachableTerminalParserGeneratorException( + pht( + 'Some terminals do not appear in any rule: %s', + $missing_terminals)); + } + } + + + /** + * @task rvalidation + */ + private function validateAllRulesReachable() { + $stack = array(); + $reachable = $this->computeReachableRules($this->getStartRule(), $stack); + + $missing = array_diff_key($this->rules, $reachable); + unset($missing[$this->getStartRule()]); + + if ($missing) { + $missing_rules = array_keys($missing); + $missing_rules = implode(', ', $missing_rules); + throw new PhutilUnreachableRuleParserGeneratorException( + pht( + 'Some rules can never be reached from any production: %s', + $missing_rules)); + } + } + + + /** + * @task rvalidation + */ + private function computeReachableRules($rule, array &$stack) { + if (isset($stack[$rule])) { + return $stack[$rule]; + } + + $stack[$rule] = array(); + + foreach ($this->rules[$rule] as $production) { + foreach ($production as $symbol) { + if ($this->isRule($symbol)) { + $stack[$rule][$symbol] = true; + $stack[$rule] += $this->computeReachableRules($symbol, $stack); + } + } + } + + return $stack[$rule]; + } + + + /** + * @task rvalidation + */ + private function validateAllRulesReducible() { + $reducible = array(); + foreach ($this->rules as $rule => $productions) { + if (!$this->isRuleReducible($rule, $reducible)) { + throw new PhutilIrreducibleRuleParserGeneratorException( + pht( + "Rule '%s' can never be reduced: it recurses indefinitely ". + "and reaches no production of terminals.", + $rule)); + } + } + } + + + /** + * @task rvalidation + */ + private function isRuleReducible($rule, array &$reducible) { + if (isset($reducible[$rule])) { + return $reducible[$rule]; + } + + // Set this ahead of time so we don't end up in an infinite loop if + // rules recurse. We'll overwrite it if we find a reduction. + $reducible[$rule] = false; + $reducible[$rule] = $this->computeRuleReducible($rule, $reducible); + return $reducible[$rule]; + } + + + /** + * @task rvalidation + */ + private function computeRuleReducible($rule, array &$reducible) { + $epsilon = $this->getEpsilonSymbol(); + $end = $this->getEndSymbol(); + + $productions = $this->rules[$rule]; + + // In the first pass, try to find a trivially reducible production, e.g. one + // with epsilon or only terminals. Also, remove recursive productions (those + // which directly involve the rule itself) because we know we won't be able + // to reduce them. If we're lucky, this will allow us to determine that the + // rule is reducible without recursion. For example, we can immediately + // reduce these productions: + // + // R -> a + // R -> b c d + // R -> (epsilon) + // + // We can never reduce these productions: + // + // R -> R + // R -> a R b + // + // We might be able to reduce these productions, but they aren't as cheap + // or easy to figure out, since we need to first determine if other rules + // can be reduced: + // + // R -> X Y + // R -> X a + // + // If we find a reduction, we return immediately. + + foreach ($productions as $key => $production) { + $has_only_terminals = true; + foreach ($production as $symbol) { + if ($symbol == $end) { + break; + } else if ($symbol == $epsilon) { + // The rule contains an epsilon production, which can always reduce + // it. + return true; + } else if ($symbol == $rule) { + // The rule contains itself; this production is never reducible. We + // must find another reducible production. + unset($productions[$key]); + continue 2; + } else if ($this->isTerminal($symbol)) { + // This is a terminal; keep looking. We'll be able to reduce the + // production if it contains only terminals. + continue; + } else { + // This is a rule, so we can't trivially reduce it. We'll keep it + // for the next round if we can't find any trivial reductions. + $has_only_terminals = false; + break; + } + } + + if ($has_only_terminals) { + return true; + } + } + + // If we have no productions left, this rule can't be reduced. + if (empty($productions)) { + return false; + } + + // We have remaining productions which include other rules. Look for a + // nontrivial reduction. For example: + // + // R -> X Y + // X -> x + // Y -> y + // + // In this case, X and Y are both reducible, so "X Y" is reducible and thus + // R is reducible. + foreach ($productions as $production) { + $can_reduce = true; + foreach ($production as $symbol) { + // NOTE: We don't need to check for epsilon here, because we would + // already have determined the rule was reducible if we had an epsilon + // production. + if ($symbol == $end) { + break; + } else if ($this->isTerminal($symbol)) { + continue; + } else if (!$this->isRuleReducible($symbol, $reducible)) { + $can_reduce = false; + break; + } + } + + if ($can_reduce) { + // The production contained only terminals and reducible rules, so it + // is reducible. We're good and don't need to examine remaining + // productions. + return true; + } + } + + // We didn't find any reducible productions. + return false; + } + + +/* -( Computing First() )-------------------------------------------------- */ + + + private function buildFirstTable() { + $this->firstTable = array(); + foreach ($this->rules as $rule => $productions) { + $this->buildRuleFirst($rule); + } + } + + private function buildRuleFirst($rule) { + if (isset($this->firstTable[$rule])) { + return $this->firstTable[$rule]; + } + + $this->firstTable[$rule] = array(); + $productions = $this->rules[$rule]; + foreach ($productions as $key => $production) { + $this->firstTable[$rule] += $this->getFirstForProduction($production); + } + + return $this->firstTable[$rule]; + } + + private function getFirstForProduction(array $production) { + $set = array(); + + $end = $this->getEndSymbol(); + $epsilon = $this->getEpsilonSymbol(); + $eof = $this->getEOFSymbol(); + + $accept_epsilon = true; + foreach ($production as $symbol) { + if ($symbol === $end) { + break; + } else if ($symbol === $epsilon) { + break; + } else if ($this->isTerminal($symbol)) { + $set[$symbol] = true; + $accept_epsilon = false; + break; + } else { + $symbol_set = $this->buildRuleFirst($symbol); + + $has_epsilon = isset($symbol_set[$epsilon]); + unset($symbol_set[$epsilon]); + $set += $symbol_set; + if (!$has_epsilon) { + $accept_epsilon = false; + break; + } + } + } + + if ($accept_epsilon) { + $set[$epsilon] = true; + } + + return $set; + } + + +/* -( Computing States )--------------------------------------------------- */ + + + private function addState(array $set) { + $seen = array(); + foreach ($set as $item) { + $seen[$item[0]][$item[1]][$item[2]][$item[3]] = true; + } + + $end = $this->getEndSymbol(); + $epsilon = $this->getEpsilonSymbol(); + + for ($ii = 0; $ii < count($set); $ii++) { + $item = $set[$ii]; + + $production = $this->rules[$item[0]][$item[1]]; + $next = $production[$item[2]]; + if ($this->isTerminal($next)) { + continue; + } else if ($next === $epsilon) { + continue; + } else if ($next === $end) { + continue; + } + + $v = array_slice($production, $item[2] + 1, -1); + $v[] = $item[3]; + $v[] = $end; + + $firsts = $this->getFirstForProduction($v); + + foreach ($firsts as $nfirst => $ignored) { + if (!$this->isTerminal($nfirst)) { + unset($firsts[$nfirst]); + } + } + + foreach ($this->rules[$next] as $pkey => $nproduction) { + foreach ($firsts as $nfirst => $ignored) { + if (isset($seen[$next][$pkey][0][$nfirst])) { + continue; + } + $set[] = array($next, $pkey, 0, $nfirst); + $seen[$next][$pkey][0][$nfirst] = true; + } + } + } + + $hash = $this->hashSet($set); + if (isset($this->setHashes[$hash])) { + return array(false, $this->setHashes[$hash]); + } + + $this->states[] = $set; + $state = last_key($this->states); + $this->setHashes[$hash] = $state; + + return array(true, $state); + } + + private function buildSuccessors($start_state) { + $end = $this->getEndSymbol(); + + $nexts = array(); + foreach ($this->states[$start_state] as $item) { + $next = $this->rules[$item[0]][$item[1]][$item[2]]; + if ($next === $end) { + continue; + } + $nexts[$next][] = array( + $item[0], + $item[1], + $item[2] + 1, + $item[3], + ); + } + + foreach ($nexts as $next => $items) { + list($is_new, $state) = $this->addState($items); + $this->successor[$start_state][$next] = $state; + if ($is_new) { + $this->buildSuccessors($state); + } + } + } + + private function hashSet(array $set) { + foreach ($set as $k => $item) { + $set[$k] = implode("\0", $item); + } + sort($set); + $set = implode("\1", $set); + + return md5($set); + } + + + private function buildTables() { + $action = array(); + $goto = array(); + + $end = $this->getEndSymbol(); + $eof = $this->getEOFSymbol(); + $init = $this->getInitSymbol(); + + foreach ($this->states as $state => $items) { + $shift = array(); + $reduce = array(); + $accept = false; + foreach ($items as $item) { + $next = $this->rules[$item[0]][$item[1]][$item[2]]; + if ($next == $end) { + if ($item[0] !== $init) { + $reduce[$item[3]][] = $item; + } else if ($item[0] === $init && $item[3] === $eof) { + $accept = $item; + } + } else if ($this->isTerminal($next)) { + $shift[$next] = $item; + } else { + $goto[$state][$next] = $this->successor[$state][$next]; + } + } + + foreach ($reduce as $next => $reductions) { + if (count($reductions) > 1) { + $ways = array(); + foreach ($reductions as $reduction) { + $ways[] = "{$reduction[0]}/{$reduction[1]}"; + } + $ways = implode('; ', $ways); + + // TODO: As below, we should have more explicit handling of + // reduce/reduce conflicts. For now, just pick the first one. + + if (false) { + throw new Exception( + pht( + "Reduce/reduce conflict: from state '%s', when a ". + "'%s' is encountered, it may be reduced in multiple ". + "ways: %s", + $state, + $next, + $ways)); + } + } + $reduce[$next] = head($reductions); + } + + $srconflicts = array_intersect_key($shift, $reduce); + foreach ($srconflicts as $next => $ignored) { + + // TODO: We should probably have better or more explicit handling of + // shift/reduce conflicts. For now, we just shift. + + if (false) { + $what = $reduce[$next][0]; + throw new Exception( + pht( + "Shift/reduce conflict: from state '%s', when a '%s' ". + "is encountered, shifting conflicts with reducing '%s'.", + $state, + $next, + $what)); + } else { + // Resolve the shift/reduce by shifting. + $reduce = array(); + } + } + + if ($accept && isset($shift[$eof])) { + throw new Exception(pht('Accept/shift conflict!')); + } + + if ($accept && isset($reduce[$eof])) { + throw new Exception(pht('Accept/reduce conflict!')); + } + + foreach ($reduce as $next => $item) { + $action[$state][$next] = array( + 'R', + array( + $item[0], + $item[1], + count($this->rules[$item[0]][$item[1]]) - 1, + ), + ); + } + + foreach ($shift as $next => $item) { + $action[$state][$next] = array( + 'S', + $this->successor[$state][$next], + ); + } + + if ($accept) { + $action[$state][$eof] = array('A'); + } + } + + $this->actionTable = $action; + $this->gotoTable = $goto; + } + + public function generateParserFunction($name) { + $out = array(); + $out[] = 'function '.$name.'(array $tokens, $callback) {'; + $out[] = ' return '.__CLASS__.'::parseTokensWithTables('; + $out[] = ' '.$this->formatAndIndent($this->actionTable, 4).','; + $out[] = ' '.$this->formatAndIndent($this->gotoTable, 4).','; + $out[] = ' '.$this->formatAndIndent($this->getEOFSymbol(), 4).','; + $out[] = ' $tokens,'; + $out[] = ' $callback);'; + $out[] = '}'; + return implode("\n", $out); + } + + private function formatAndIndent($var, $depth) { + $var = phutil_var_export($var); + $var = str_replace("\n", "\n".str_repeat(' ', $depth), $var); + + return $var; + } + + public function parseTokens(array $tokens, $callback) { + return self::parseTokensWithTables( + $this->actionTable, + $this->gotoTable, + $this->getEOFSymbol(), + $tokens, + $callback); + } + + public static function parseTokensWithTables( + $action_table, + $goto_table, + $eof_symbol, + array $tokens, + $callback) { + + $state_stack = array(0); + $token_stack = array(); + + $tokens = array_reverse($tokens); + while (true) { + $state = end($state_stack); + + if (empty($tokens)) { + $next = $eof_symbol; + } else { + $next_token = end($tokens); + $next = $next_token[0]; + } + + if (!isset($action_table[$state][$next])) { + $expected = implode(', ', array_keys($action_table[$state])); + throw new Exception( + pht( + "Unexpected '%s' in state %s! Expected: %s", + $next, + $state, + $expected)); + } + + $action = $action_table[$state][$next]; + + switch ($action[0]) { + case 'S': + $state_stack[] = $action[1]; + $token_stack[] = array_pop($tokens); + break; + case 'R': + $r_rule = $action[1][0]; + $r_prod = $action[1][1]; + $r_size = $action[1][2]; + + $token_v = array(); + while ($r_size--) { + $token_v[] = array_pop($token_stack); + array_pop($state_stack); + } + $token_v = array_reverse($token_v); + $token_stack[] = call_user_func_array( + $callback, + array($r_rule, $r_prod, $token_v)); + $goto = $goto_table[end($state_stack)][$r_rule]; + $state_stack[] = $goto; + break; + case 'A': + break 2; + } + } + + return head($token_stack); + } + + +/* -( Inspecting Generator State )----------------------------------------- */ + + + /** + * @task inspect + */ + public function inspectRules() { + if (!$this->rulesValidated) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->rules; + } + + + /** + * @task inspect + */ + public function inspectFirstTable() { + if ($this->firstTable === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->firstTable; + } + + +} diff --git a/src/parser/PhutilQueryStringParser.php b/src/parser/PhutilQueryStringParser.php new file mode 100644 index 00000000..90f67f64 --- /dev/null +++ b/src/parser/PhutilQueryStringParser.php @@ -0,0 +1,139 @@ + 'z', + * ); + * + * ...with the `.` replaced with an underscore, `_`. Other characters converted + * in this way include space and unmatched opening brackets. + * + * Broadly, this is part of the terrible legacy of `register_globals`. Since + * we'd like to be able to parse all valid query strings without destroying any + * data, this class implements a less-encumbered parser. + */ +final class PhutilQueryStringParser extends Phobject { + + + /** + * Parses a query string into a dictionary, applying PHP rules for handling + * array nomenclature (like `a[]=1`) in parameter names. + * + * For a more basic parse, see @{method:parseQueryStringToPairList}. + * + * @param string Query string. + * @return map Parsed dictionary. + */ + public function parseQueryString($query_string) { + $result = array(); + + $list = $this->parseQueryStringToPairList($query_string); + foreach ($list as $parts) { + list($key, $value) = $parts; + if (!strlen($key)) { + continue; + } + $this->parseQueryKeyToArr($key, $value, $result); + } + + return $result; + } + + + /** + * Parses a query string into a basic list of pairs, without handling any + * array information in the keys. For example: + * + * a[]=1&a[]=2 + * + * ...will parse into: + * + * array( + * array('a[]', '1'), + * array('a[]', '2'), + * ); + * + * Use @{method:parseQueryString} to produce a more sophisticated parse which + * applies array rules and returns a dictionary. + * + * @param string Query string. + * @return list> List of parsed parameters. + */ + public function parseQueryStringToPairList($query_string) { + $list = array(); + + if (!strlen($query_string)) { + return $list; + } + + $pairs = explode('&', $query_string); + foreach ($pairs as $pair) { + if (!strlen($pair)) { + continue; + } + $parts = explode('=', $pair, 2); + if (count($parts) < 2) { + $parts[] = ''; + } + $list[] = array( + urldecode($parts[0]), + urldecode($parts[1]), + ); + } + + return $list; + } + + + /** + * Treats the key as a flat query that potentially has square brackets. If + * there are square brackets we parse them into an array. + * + * Example input: + * $key = "email[0]"; + * $val = "my@example.com"; + * + * Example output: + * array("email" => array(0 => "my@example.com")); + * + * @param string $key + * @param string $val + * @param array $input_arr + */ + private function parseQueryKeyToArr($key, $val, array &$input_arr) { + if (preg_match('/^[^\[\]]+(?:\[[^\[\]]*\])+$/', $key)) { + $key_pieces = preg_split('/\]?\[/', rtrim($key, ']')); + if ($key_pieces) { + $cursor = &$input_arr; + foreach ($key_pieces as $piece) { + if (strlen($piece)) { + if (empty($cursor[$piece]) || !is_array($cursor[$piece])) { + $cursor[$piece] = array(); + } + } else { + $cursor[] = array(); + $piece = last_key($cursor); + } + $cursor = &$cursor[$piece]; + } + + $cursor = $val; + unset($cursor); + } + } else { + $input_arr[$key] = $val; + } + } +} diff --git a/src/parser/PhutilSimpleOptions.php b/src/parser/PhutilSimpleOptions.php new file mode 100644 index 00000000..bcb25a4c --- /dev/null +++ b/src/parser/PhutilSimpleOptions.php @@ -0,0 +1,195 @@ + '4', + * 'eyes' => '2', + * ); + * + * @param string Input option list. + * @return dict Parsed dictionary. + * @task parse + */ + public function parse($input) { + $result = array(); + + $lexer = new PhutilSimpleOptionsLexer(); + $tokens = $lexer->getNiceTokens($input); + + $state = 'key'; + $pairs = array(); + foreach ($tokens as $token) { + list($type, $value) = $token; + switch ($state) { + case 'key': + if ($type != 'word') { + return array(); + } + if (!strlen($value)) { + return array(); + } + $key = $this->normalizeKey($value); + $state = '='; + break; + case '=': + if ($type == '=') { + $state = 'value'; + break; + } + if ($type == ',') { + $pairs[] = array($key, true); + $state = 'key'; + break; + } + return array(); + case 'value': + if ($type == ',') { + $pairs[] = array($key, null); + $state = 'key'; + break; + } + if ($type != 'word') { + return array(); + } + $pairs[] = array($key, $value); + $state = ','; + break; + case ',': + if ($type == 'word') { + $pair = array_pop($pairs); + $pair[1] .= $value; + $pairs[] = $pair; + break; + } + if ($type != ',') { + return array(); + } + $state = 'key'; + break; + } + } + + if ($state == '=') { + $pairs[] = array($key, true); + } + if ($state == 'value') { + $pairs[] = array($key, null); + } + + $result = array(); + foreach ($pairs as $pair) { + list($key, $value) = $pair; + if ($value === null) { + unset($result[$key]); + } else { + $result[$key] = $value; + } + } + + return $result; + } + + +/* -( Unparsing Simple Options )------------------------------------------- */ + + + /** + * Convert a dictionary into a simple option list. For example: + * + * array( + * 'legs' => '4', + * 'eyes' => '2', + * ); + * + * ...becomes: + * + * legs=4, eyes=2 + * + * @param dict Input dictionary. + * @param string Additional characters to escape. + * @return string Unparsed option list. + */ + public function unparse(array $options, $escape = '') { + $result = array(); + foreach ($options as $name => $value) { + $name = $this->normalizeKey($name); + if (!strlen($value)) { + continue; + } + if ($value === true) { + $result[] = $this->quoteString($name, $escape); + } else { + $qn = $this->quoteString($name, $escape); + $qv = $this->quoteString($value, $escape); + $result[] = $qn.'='.$qv; + } + } + return implode(', ', $result); + } + + +/* -( Parser Configuration )----------------------------------------------- */ + + + /** + * Configure case sensitivity of the parser. By default, the parser is + * case insensitive, so "legs=4" has the same meaning as "LEGS=4". If you + * set it to be case sensitive, the keys have different meanings. + * + * @param bool True to make the parser case sensitive, false (default) to + * make it case-insensitive. + * @return this + * @task config + */ + public function setCaseSensitive($case_sensitive) { + $this->caseSensitive = $case_sensitive; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + private function normalizeKey($key) { + if (!strlen($key)) { + throw new Exception(pht('Empty key is invalid!')); + } + if (!$this->caseSensitive) { + $key = strtolower($key); + } + return $key; + } + + private function quoteString($string, $escape) { + if (preg_match('/[^a-zA-Z0-9]/', $string)) { + $string = '"'.addcslashes($string, '\\\'"'.$escape).'"'; + } + return $string; + } + +} diff --git a/src/parser/PhutilTypeSpec.php b/src/parser/PhutilTypeSpec.php new file mode 100644 index 00000000..c49fccf4 --- /dev/null +++ b/src/parser/PhutilTypeSpec.php @@ -0,0 +1,1921 @@ + + * map + * type|type + * + * A type may be marked as optional by suffixing it with "?" or prefixing it + * with the word "optional": + * + * int? + * optional int + * + * A type may have a human-readable comment in parentheses, at the end: + * + * int (must be even) + * + * For example, these are valid type specifications: + * + * int|string + * map + * list> + * optional int + * string (uppercase) + * + */ +final class PhutilTypeSpec extends Phobject { + + private $type; + private $subtypes = array(); + private $optional; + private $comment; + + private function __construct() {} + + public function getType() { + return $this->type; + } + + public function check($value, $name = null) { + switch ($this->type) { + case 'int': + if (!is_int($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'float': + if (!is_float($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'bool': + if (!is_bool($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'string': + if (!is_string($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'regex': + $trap = new PhutilErrorTrap(); + $ok = @preg_match($value, ''); + $err = $trap->getErrorsAsString(); + $trap->destroy(); + + if ($ok === false) { + throw new PhutilTypeCheckException($this, $value, $name, $err); + } + break; + case 'null': + if (!is_null($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'list': + if (!is_array($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + if ($value && !phutil_is_natural_list($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + try { + foreach ($value as $v) { + $this->subtypes[0]->check($v); + } + } catch (PhutilTypeCheckException $ex) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'map': + if (!is_array($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + try { + foreach ($value as $k => $v) { + $this->subtypes[0]->check($k); + $this->subtypes[1]->check($v); + } + } catch (PhutilTypeCheckException $ex) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'or': + foreach ($this->subtypes as $subtype) { + try { + $subtype->check($value); + return; + } catch (PhutilTypeCheckException $ex) { + // Ignore. + } + } + throw new PhutilTypeCheckException($this, $value, $name); + case 'wild': + return; + default: + if (class_exists($this->type, false)) { + if ($value instanceof $this->type) { + return; + } + } else if (interface_exists($this->type, false)) { + if ($value instanceof $this->type) { + return; + } + } + + throw new PhutilTypeCheckException($this, $value, $name); + } + } + + public static function checkMap(array $values, array $types) { + $extra = array_diff_key($values, $types); + if ($extra) { + throw new PhutilTypeExtraParametersException($extra); + } + + $missing = array(); + foreach ($types as $key => $type) { + $types[$key] = self::newFromString($type); + if (!array_key_exists($key, $values)) { + if (!$types[$key]->optional) { + $missing[] = $key; + } + } + } + + if ($missing) { + throw new PhutilTypeMissingParametersException($missing); + } + + foreach ($types as $key => $type) { + if (array_key_exists($key, $values)) { + $type->check($values[$key], $key); + } + } + } + + public static function getCommonParentClass($class_a, $class_b) { + // Make sure both classes are really classes. + try { + if (!class_exists($class_a) || !class_exists($class_b)) { + return null; + } + } catch (PhutilMissingSymbolException $ex) { + return null; + } + + $ancestors_a = array(); + do { + $ancestors_a[] = $class_a; + } while ($class_a = get_parent_class($class_a)); + + $ancestors_b = array(); + do { + $ancestors_b[] = $class_b; + } while ($class_b = get_parent_class($class_b)); + + return head(array_intersect($ancestors_a, $ancestors_b)); + } + + public static function getTypeOf($value) { + if (is_int($value)) { + return 'int'; + } else if (is_float($value)) { + return 'float'; + } else if (is_bool($value)) { + return 'bool'; + } else if (is_string($value)) { + return 'string'; + } else if (is_null($value)) { + return 'null'; + } else if (is_object($value)) { + return get_class($value); + } else if (is_array($value)) { + $vtype = self::getTypeOfVector($value); + if ($value && phutil_is_natural_list($value)) { + return 'list<'.$vtype.'>'; + } else { + $ktype = self::getTypeOfVector(array_keys($value)); + return "map<{$ktype}, {$vtype}>"; + } + } else { + return 'wild'; + } + } + + private static function getTypeOfVector(array $vector) { + if (!$vector) { + return 'wild'; + } + + $type = null; + foreach ($vector as $value) { + $vtype = self::getTypeOf($value); + if ($type === null) { + $type = $vtype; + } else if ($type === $vtype) { + continue; + } else { + $parent = self::getCommonParentClass($type, $vtype); + if ($parent) { + $type = $parent; + } else { + return 'wild'; + } + } + } + + return $type; + } + + public function toString() { + $sub = array(); + foreach ($this->subtypes as $subtype) { + $sub[] = $subtype->toString(); + } + + switch ($this->type) { + case 'map': + $string = 'map<'.$sub[0].', '.$sub[1].'>'; + break; + case 'list': + $string = 'list<'.$sub[0].'>'; + break; + case 'or': + $string = implode('|', $sub); + break; + default: + $string = $this->type; + break; + } + + if ($this->optional) { + $string = 'optional '.$string; + } + + if ($this->comment) { + $string .= ' ('.$this->comment.')'; + } + + return $string; + } + + public static function newFromString($string) { + $lexer = self::getLexer(); + $tokens = $lexer->getTokens($string); + + // Strip whitespace tokens. + foreach ($tokens as $key => $token) { + $type = $token[0]; + if ($type == ' ') { + unset($tokens[$key]); + } + } + + $tokens = array_values($tokens); + $callback = array(__CLASS__, 'didReduceTokens'); + return self::parseTokens($tokens, $callback); + } + + public static function didReduceTokens($rule, $production, array $tokens) { + switch ($rule) { + case 'start': + case 'some_type': + case 'not_or_type': + return $tokens[0]; + case 'type': + if ($production == 'yes') { + $tokens[0]->optional = true; + } + return $tokens[0]; + case 'basic_type': + $obj = new PhutilTypeSpec(); + $obj->type = $tokens[0][1]; + return $obj; + case 'or_type': + $l = $tokens[0]; + $r = $tokens[2]; + + if ($l->type == 'or') { + if ($r->type == 'or') { + foreach ($r->subtypes as $subtype) { + $l->subtypes[] = $subtype; + } + } else { + $l->subtypes[] = $r; + } + return $l; + } else if ($r->type == 'or') { + $r->subtypes[] = $l; + return $r; + } else { + $obj = new PhutilTypeSpec(); + $obj->type = 'or'; + $obj->subtypes[] = $l; + $obj->subtypes[] = $r; + return $obj; + } + break; + case 'map_type': + $obj = new PhutilTypeSpec(); + $obj->type = 'map'; + $obj->subtypes[] = $tokens[2]; + $obj->subtypes[] = $tokens[4]; + return $obj; + case 'list_type': + $obj = new PhutilTypeSpec(); + $obj->type = 'list'; + $obj->subtypes[] = $tokens[2]; + return $obj; + case 'maybe_optional': + if ($production == 'yes') { + $tokens[1]->optional = true; + return $tokens[1]; + } else { + return $tokens[0]; + } + break; + case 'maybe_comment': + if ($production == 'yes') { + $tokens[0]->comment = $tokens[1]; + } + return $tokens[0]; + case 'comment': + return $tokens[1]; + case 'comment_text': + $result = ''; + foreach ($tokens as $token) { + if (is_array($token)) { + $result .= $token[1]; + } else { + $result .= $token; + } + } + return $result; + default: + throw new Exception(pht("Unhandled parser rule '%s'!", $rule)); + } + } + + private static function getLexer() { + static $lexer; + if (!$lexer) { + $lexer = new PhutilTypeLexer(); + } + return $lexer; + } + + private static function parseTokens(array $tokens, $callback) { + // NOTE: This is automatically generated by the script + // `support/parser/generate-type-parser.php`. + + return PhutilParserGenerator::parseTokensWithTables( + array( + 0 => array( + 'opt' => array( + 0 => 'S', + 1 => 3, + ), + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 1 => array( + '(end-of-file)' => array( + 0 => 'A', + ), + ), + 2 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'start', + 1 => 0, + 2 => 1, + ), + ), + ), + 3 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 4 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_optional', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 5 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_comment', + 1 => 'no', + 2 => 1, + ), + ), + '(' => array( + 0 => 'S', + 1 => 7, + ), + ), + 6 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_comment', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 7 => array( + 'cm' => array( + 0 => 'S', + 1 => 11, + ), + ), + 8 => array( + ')' => array( + 0 => 'S', + 1 => 9, + ), + 'cm' => array( + 0 => 'S', + 1 => 10, + ), + ), + 9 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'comment', + 1 => 0, + 2 => 3, + ), + ), + ), + 10 => array( + ')' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 0, + 2 => 2, + ), + ), + 'cm' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 0, + 2 => 2, + ), + ), + ), + 11 => array( + ')' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 1, + 2 => 1, + ), + ), + 'cm' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 1, + 2 => 1, + ), + ), + ), + 12 => array( + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 13, + ), + ), + 13 => array( + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 14 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 15, + ), + ), + 15 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 16 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 17 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 18 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 19 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 20 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 21 => array( + '<' => array( + 0 => 'S', + 1 => 22, + ), + ), + 22 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 23 => array( + ',' => array( + 0 => 'S', + 1 => 24, + ), + ), + 24 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 25 => array( + '>' => array( + 0 => 'S', + 1 => 26, + ), + ), + 26 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 27 => array( + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 28, + ), + ), + 28 => array( + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 29 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 30, + ), + ), + 30 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 31 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 32 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 33 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 34 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 35 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 36 => array( + '<' => array( + 0 => 'S', + 1 => 37, + ), + ), + 37 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 38 => array( + ',' => array( + 0 => 'S', + 1 => 39, + ), + ), + 39 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 40 => array( + '>' => array( + 0 => 'S', + 1 => 41, + ), + ), + 41 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 42 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 43, + ), + ), + 43 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 44 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 45 => array( + '<' => array( + 0 => 'S', + 1 => 46, + ), + ), + 46 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 47 => array( + '>' => array( + 0 => 'S', + 1 => 48, + ), + ), + 48 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 49 => array( + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 50, + ), + ), + 50 => array( + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 51 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 52, + ), + ), + 52 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 53 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 54 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 55 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 56 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 57 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 58 => array( + '<' => array( + 0 => 'S', + 1 => 59, + ), + ), + 59 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 60 => array( + ',' => array( + 0 => 'S', + 1 => 61, + ), + ), + 61 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 62 => array( + '>' => array( + 0 => 'S', + 1 => 63, + ), + ), + 63 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 64 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 65, + ), + ), + 65 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 66 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 67 => array( + '<' => array( + 0 => 'S', + 1 => 68, + ), + ), + 68 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 69 => array( + '>' => array( + 0 => 'S', + 1 => 70, + ), + ), + 70 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 71 => array( + '<' => array( + 0 => 'S', + 1 => 72, + ), + ), + 72 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 73 => array( + '>' => array( + 0 => 'S', + 1 => 74, + ), + ), + 74 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 75 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 76, + ), + ), + 76 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 77 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 78 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_optional', + 1 => 'no', + 2 => 1, + ), + ), + ), + ), + array( + 0 => array( + 'start' => 1, + 'maybe_optional' => 2, + 'maybe_comment' => 78, + 'type' => 5, + 'some_type' => 12, + 'or_type' => 14, + 'not_or_type' => 75, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 3 => array( + 'maybe_comment' => 4, + 'type' => 5, + 'some_type' => 12, + 'or_type' => 14, + 'not_or_type' => 75, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 5 => array( + 'comment' => 6, + ), + 7 => array( + 'comment_text' => 8, + ), + 15 => array( + 'not_or_type' => 16, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 22 => array( + 'type' => 23, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 24 => array( + 'type' => 25, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 30 => array( + 'not_or_type' => 31, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 37 => array( + 'type' => 38, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 39 => array( + 'type' => 40, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 43 => array( + 'not_or_type' => 44, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 46 => array( + 'type' => 47, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 52 => array( + 'not_or_type' => 53, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 59 => array( + 'type' => 60, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 61 => array( + 'type' => 62, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 65 => array( + 'not_or_type' => 66, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 68 => array( + 'type' => 69, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 72 => array( + 'type' => 73, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 76 => array( + 'not_or_type' => 77, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + ), + '(end-of-file)', + $tokens, + $callback); + } + +} diff --git a/src/parser/PhutilURI.php b/src/parser/PhutilURI.php new file mode 100644 index 00000000..7ddd3074 --- /dev/null +++ b/src/parser/PhutilURI.php @@ -0,0 +1,559 @@ +protocol = $uri->protocol; + $this->user = $uri->user; + $this->pass = $uri->pass; + $this->domain = $uri->domain; + $this->port = $uri->port; + $this->path = $uri->path; + $this->query = $uri->query; + $this->fragment = $uri->fragment; + $this->type = $uri->type; + + $this->initializeQueryParams(phutil_string_cast($uri), $params); + + return; + } + + $uri = phutil_string_cast($uri); + + $type = self::TYPE_URI; + + // Reject ambiguous URIs outright. Different versions of different clients + // parse these in different ways. See T12526 for discussion. + if (preg_match('(^[^/:]*://[^/]*[#?].*:)', $uri)) { + throw new Exception( + pht( + 'Rejecting ambiguous URI "%s". This URI is not formatted or '. + 'encoded properly.', + $uri)); + } + + $matches = null; + if (preg_match('(^([^/:]*://[^/]*)(\\?.*)\z)', $uri, $matches)) { + // If the URI is something like `idea://open?file=/path/to/file`, the + // `parse_url()` function will parse `open?file=` as the host. This is + // not the expected result. Break the URI into two pieces, stick a slash + // in between them, parse that, then remove the path. See T6106. + + $parts = parse_url($matches[1].'/'.$matches[2]); + unset($parts['path']); + } else if ($this->isGitURIPattern($uri)) { + // Handle Git/SCP URIs in the form "user@domain:relative/path". + + $user = '(?:(?P[^/@]+)@)?'; + $host = '(?P[^/:]+)'; + $path = ':(?P.*)'; + + $ok = preg_match('(^'.$user.$host.$path.'\z)', $uri, $matches); + if (!$ok) { + throw new Exception( + pht( + 'Failed to parse URI "%s" as a Git URI.', + $uri)); + } + + $parts = $matches; + $parts['scheme'] = 'ssh'; + + $type = self::TYPE_GIT; + } else { + $parts = parse_url($uri); + } + + // The parse_url() call will accept URIs with leading whitespace, but many + // other tools (like git) will not. See T4913 for a specific example. If + // the input string has leading whitespace, fail the parse. + if ($parts) { + if (ltrim($uri) != $uri) { + $parts = false; + } + } + + // NOTE: `parse_url()` is very liberal about host names; fail the parse if + // the host looks like garbage. In particular, we do not allow hosts which + // begin with "." or "-". See T12961 for a specific attack which relied on + // hosts beginning with "-". + if ($parts) { + $host = idx($parts, 'host', ''); + if (strlen($host)) { + if (!preg_match('/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-]*\z/', $host)) { + $parts = false; + } + } + } + + if (!$parts) { + $parts = array(); + } + + // stringyness is to preserve API compatibility and + // allow the tests to continue passing + $this->protocol = idx($parts, 'scheme', ''); + $this->user = rawurldecode(idx($parts, 'user', '')); + $this->pass = rawurldecode(idx($parts, 'pass', '')); + $this->domain = idx($parts, 'host', ''); + $this->port = (string)idx($parts, 'port', ''); + $this->path = idx($parts, 'path', ''); + $query = idx($parts, 'query'); + if ($query) { + $pairs = id(new PhutilQueryStringParser()) + ->parseQueryStringToPairList($query); + + foreach ($pairs as $pair) { + list($key, $value) = $pair; + $this->appendQueryParam($key, $value); + } + } + $this->fragment = idx($parts, 'fragment', ''); + + $this->type = $type; + + $this->initializeQueryParams($uri, $params); + } + + public function __toString() { + $prefix = null; + + if ($this->isGitURI()) { + $port = null; + } else { + $port = $this->port; + } + + $domain = $this->domain; + + $user = $this->user; + $pass = $this->pass; + if (strlen($user) && strlen($pass)) { + $auth = rawurlencode($user).':'.rawurlencode($pass).'@'; + } else if (strlen($user)) { + $auth = rawurlencode($user).'@'; + } else { + $auth = null; + } + + $protocol = $this->protocol; + if ($this->isGitURI()) { + $protocol = null; + } else { + if (strlen($auth)) { + $protocol = nonempty($this->protocol, 'http'); + } + } + + if (strlen($protocol) || strlen($auth) || strlen($domain)) { + if ($this->isGitURI()) { + $prefix = "{$auth}{$domain}"; + } else { + $prefix = "{$protocol}://{$auth}{$domain}"; + } + + if (strlen($port)) { + $prefix .= ':'.$port; + } + } + + if ($this->query) { + $query = '?'.phutil_build_http_querystring_from_pairs($this->query); + } else { + $query = null; + } + + if (strlen($this->getFragment())) { + $fragment = '#'.$this->getFragment(); + } else { + $fragment = null; + } + + $path = $this->getPath(); + if ($this->isGitURI()) { + if (strlen($path)) { + $path = ':'.$path; + } + } + + return $prefix.$path.$query.$fragment; + } + + /** + * @deprecated + */ + public function setQueryParam($key, $value) { + // To set, we replace the first matching key with the new value, then + // remove all other matching keys. This replaces the old value and retains + // the parameter order. + + $is_null = ($value === null); + + // Typecheck and cast the key before we compare it to existing keys. This + // raises an early exception if the key has a bad type. + list($key) = phutil_http_parameter_pair($key, ''); + + $found = false; + foreach ($this->query as $list_key => $pair) { + list($k, $v) = $pair; + + if ($k !== $key) { + continue; + } + + if ($found) { + unset($this->query[$list_key]); + continue; + } + + $found = true; + + if ($is_null) { + unset($this->query[$list_key]); + } else { + $this->insertQueryParam($key, $value, $list_key); + } + } + + $this->query = array_values($this->query); + + // If we didn't find an existing place to put it, add it to the end. + if (!$found) { + if (!$is_null) { + $this->appendQueryParam($key, $value); + } + } + + return $this; + } + + /** + * @deprecated + */ + public function setQueryParams(array $params) { + $this->query = array(); + + foreach ($params as $k => $v) { + $this->appendQueryParam($k, $v); + } + + return $this; + } + + /** + * @deprecated + */ + public function getQueryParams() { + $map = array(); + + foreach ($this->query as $pair) { + list($k, $v) = $pair; + $map[$k] = $v; + } + + return $map; + } + + public function getQueryParamsAsMap() { + $map = array(); + + foreach ($this->query as $pair) { + list($k, $v) = $pair; + + if (isset($map[$k])) { + throw new Exception( + pht( + 'Query parameters include a duplicate key ("%s") and can not be '. + 'nondestructively represented as a map.', + $k)); + } + + $map[$k] = $v; + } + + return $map; + } + + public function getQueryParamsAsPairList() { + return $this->query; + } + + public function appendQueryParam($key, $value) { + return $this->insertQueryParam($key, $value); + } + + public function removeAllQueryParams() { + $this->query = array(); + return $this; + } + + public function removeQueryParam($remove_key) { + list($remove_key) = phutil_http_parameter_pair($remove_key, ''); + + foreach ($this->query as $idx => $pair) { + list($key, $value) = $pair; + + if ($key !== $remove_key) { + continue; + } + + unset($this->query[$idx]); + } + + $this->query = array_values($this->query); + + return $this; + } + + public function replaceQueryParam($replace_key, $replace_value) { + if ($replace_value === null) { + throw new InvalidArgumentException( + pht( + 'Value provided to "replaceQueryParam()" for key "%s" is NULL. '. + 'Use "removeQueryParam()" to remove a query parameter.', + $replace_key)); + } + + $this->removeQueryParam($replace_key); + $this->appendQueryParam($replace_key, $replace_value); + return $this; + } + + private function insertQueryParam($key, $value, $idx = null) { + list($key, $value) = phutil_http_parameter_pair($key, $value); + + if ($idx === null) { + $this->query[] = array($key, $value); + } else { + $this->query[$idx] = array($key, $value); + } + + return $this; + } + + private function initializeQueryParams($uri, array $params) { + $have_params = array(); + foreach ($this->query as $pair) { + list($key) = $pair; + $have_params[$key] = true; + } + + foreach ($params as $key => $value) { + if (isset($have_params[$key])) { + throw new InvalidArgumentException( + pht( + 'You are trying to construct an ambiguous URI: query parameter '. + '"%s" is present in both the string argument ("%s") and the map '. + 'argument.', + $key, + $uri)); + } + + if ($value === null) { + continue; + } + + $this->appendQueryParam($key, $value); + } + + return $this; + } + + public function setProtocol($protocol) { + $this->protocol = $protocol; + return $this; + } + + public function getProtocol() { + return $this->protocol; + } + + public function setDomain($domain) { + $this->domain = $domain; + return $this; + } + + public function getDomain() { + return $this->domain; + } + + public function setPort($port) { + $this->port = $port; + return $this; + } + public function getPort() { + return $this->port; + } + + public function getPortWithProtocolDefault() { + static $default_ports = array( + 'http' => '80', + 'https' => '443', + 'ssh' => '22', + ); + + return nonempty( + $this->getPort(), + idx($default_ports, $this->getProtocol()), + ''); + } + + public function setPath($path) { + if ($this->isGitURI()) { + // Git URIs use relative paths which do not need to begin with "/". + } else { + if ($this->domain && strlen($path) && $path[0] !== '/') { + $path = '/'.$path; + } + } + + $this->path = $path; + return $this; + } + + public function appendPath($path) { + $first = strlen($path) ? $path[0] : null; + $last = strlen($this->path) ? $this->path[strlen($this->path) - 1] : null; + + if (!$this->path) { + return $this->setPath($path); + } else if ($first === '/' && $last === '/') { + $path = substr($path, 1); + } else if ($first !== '/' && $last !== '/') { + $path = '/'.$path; + } + + $this->path .= $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setFragment($fragment) { + $this->fragment = $fragment; + return $this; + } + + public function getFragment() { + return $this->fragment; + } + + public function setUser($user) { + $this->user = $user; + return $this; + } + + public function getUser() { + return $this->user; + } + + public function setPass($pass) { + $this->pass = $pass; + return $this; + } + + public function getPass() { + return $this->pass; + } + + public function alter($key, $value) { + $altered = clone $this; + $altered->replaceQueryParam($key, $value); + return $altered; + } + + public function isGitURI() { + return ($this->type == self::TYPE_GIT); + } + + public function setType($type) { + + if ($type == self::TYPE_URI) { + $path = $this->getPath(); + if (strlen($path) && ($path[0] !== '/')) { + // Try to catch this here because we are not allowed to throw from + // inside __toString() so we don't have a reasonable opportunity to + // react properly if we catch it later. + throw new Exception( + pht( + 'Unable to convert URI "%s" into a standard URI because the '. + 'path is relative. Standard URIs can not represent relative '. + 'paths.', + $this)); + } + } + + $this->type = $type; + return $this; + } + + public function getType() { + return $this->type; + } + + private function isGitURIPattern($uri) { + $matches = null; + + $ok = preg_match('(^(?P[^/]+):(?P(?!//).*)\z)', $uri, $matches); + if (!$ok) { + return false; + } + + $head = $matches['head']; + $last = $matches['last']; + + // If any part of this has spaces in it, it's not a Git URI. We fail here + // so we fall back and don't fail more abruptly later. + if (preg_match('(\s)', $head.$last)) { + return false; + } + + // If the second part only contains digits, assume we're looking at + // casually specified "domain.com:123" URI, not a Git URI pointed at an + // entirely numeric relative path. + if (preg_match('(^\d+\z)', $last)) { + return false; + } + + // If the first part has a "." or an "@" in it, interpret it as a domain + // or a "user@host" string. + if (preg_match('([.@])', $head)) { + return true; + } + + // Otherwise, interpret the URI conservatively as a "javascript:"-style + // URI. This means that "localhost:path" is parsed as a normal URI instead + // of a Git URI, but we can't tell which the user intends and it's safer + // to treat it as a normal URI. + return false; + } + +} diff --git a/src/parser/__tests__/PhutilBugtraqParserTestCase.php b/src/parser/__tests__/PhutilBugtraqParserTestCase.php new file mode 100644 index 00000000..984289ac --- /dev/null +++ b/src/parser/__tests__/PhutilBugtraqParserTestCase.php @@ -0,0 +1,61 @@ +setBugtraqPattern('http://bugs.com/%BUGID%') + ->setBugtraqCaptureExpression('/[Ii]ssues?:?(\s*,?\s*\d+)+/') + ->setBugtraqSelectExpression('/(\d+)/') + ->processCorpus('Issues: 123, 345'); + $this->assertEqual( + 'Issues: http://bugs.com/123, http://bugs.com/345', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/([A-Z]{2,}-\d+)/') + ->processCorpus('AB-1 BC-2 CD-3'); + $this->assertEqual( + ' ', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/\d+/') + ->processCorpus('This text has no bugs in it.'); + $this->assertEqual( + 'This text has no bugs in it.', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/.*/') + ->setBugtraqSelectExpression('/(\d+)/') + ->processCorpus('This text captures but does not select.'); + $this->assertEqual( + 'This text captures but does not select.', + $actual); + + $caught = null; + try { + id(new PhutilBugtraqParser()) + ->setBugtraqCaptureExpression('!'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilTypeCheckException); + + + $caught = null; + try { + id(new PhutilBugtraqParser()) + ->setBugtraqSelectExpression('!'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + + +} diff --git a/src/parser/__tests__/PhutilDocblockParserTestCase.php b/src/parser/__tests__/PhutilDocblockParserTestCase.php new file mode 100644 index 00000000..c0fefc07 --- /dev/null +++ b/src/parser/__tests__/PhutilDocblockParserTestCase.php @@ -0,0 +1,127 @@ +parseDocblock($root.$file); + } + } + + private function parseDocblock($doc_file) { + $contents = Filesystem::readFile($doc_file); + $file = basename($doc_file); + + $parser = new PhutilDocblockParser(); + list($docblock, $specials) = $parser->parse($contents); + + switch ($file) { + case 'embedded-specials.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + "So long as a @special does not appear at the beginning of a line,\n". + "it is parsed as normal text.", + $docblock); + break; + case 'indented-block.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + 'Cozy lummox gives smart squid who asks for job pen.', + $docblock); + break; + case 'indented-text.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + 'Cozy lummox gives smart squid who asks for job pen.', + $docblock); + break; + case 'multiline-special.docblock': + $this->assertEqual( + array( + 'special' => 'x y z', + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'multi-specials.docblock': + $this->assertEqual( + array( + 'special' => array('north', 'south'), + 'stable' => true, + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'specials.docblock': + $this->assertEqual( + array( + 'type' => 'type', + 'task' => 'task', + 'special' => array('dot', 'dot', 'dash'), + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'linebreak-breaks-specials.docblock': + $this->assertEqual( + array( + 'title' => 'title', + ), + $specials); + $this->assertEqual( + 'This is normal text, not part of the @title.', + $docblock); + break; + case 'specials-with-hyphen.docblock': + $this->assertEqual( + array( + 'repeat-hyphen' => array('a', 'b'), + 'multiline-hyphen' => 'mmm nnn', + 'normal-hyphen' => 'x', + ), + $specials); + break; + case 'indented-specials.docblock': + $this->assertEqual( + array( + 'title' => 'sendmail', + 'special' => 'only a little bit indented', + ), + $specials); + break; + case 'flag-specials.docblock': + $this->assertEqual( + "stuff above\n\nstuff in the middle\n\nstuff below", + $docblock); + $this->assertEqual( + array( + 'flag' => true, + 'stuff' => true, + 'zebra' => true, + 'apple' => true, + ), + $specials); + break; + case 'mixed-types.docblock': + $this->assertEqual( + array( + 'special' => array('squirrels', true), + ), + $specials); + break; + default: + throw new Exception(pht("No test case to handle file '%s'!", $file)); + } + } + +} diff --git a/src/parser/__tests__/PhutilEditorConfigTestCase.php b/src/parser/__tests__/PhutilEditorConfigTestCase.php new file mode 100644 index 00000000..38557fa3 --- /dev/null +++ b/src/parser/__tests__/PhutilEditorConfigTestCase.php @@ -0,0 +1,106 @@ +getTestFile()); + + $tests = array( + 'default' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 2, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'file' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 3, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'file.txt' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 3, + 'charset' => 'latin1', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'externals/README' => array( + array( + 'indent_style' => null, + 'indent_size' => null, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => false, + 'insert_final_newline' => false, + ), + array(), + ), + 'subdir/file' => array( + array( + 'indent_style' => 'tab', + 'indent_size' => 3, + 'charset' => 'utf-8-bom', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'empty/file' => array( + array(), + array( + 'indent_style' => null, + 'indent_size' => null, + 'charset' => null, + 'trim_trailing_whitespace' => null, + 'insert_final_newline' => null, + ), + ), + ); + + foreach ($tests as $path => $expected) { + list($properties, $property) = $expected; + $property = array_merge($properties, $property); + + $this->assertEqual( + $properties, + $parser->getProperties($this->getTestFile($path))); + + foreach ($property as $key => $value) { + $this->assertEqual( + $value, + $parser->getProperty($this->getTestFile($path), $key)); + } + } + + $invalid_properties = array( + 'invalid', + ); + + foreach ($invalid_properties as $invalid_property) { + $caught = null; + try { + $parser->getProperty('', $invalid_property); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + } + + private function getTestFile($path = null) { + return dirname(__FILE__).'/editorconfig/'.$path; + } + +} diff --git a/src/parser/__tests__/PhutilEmailAddressTestCase.php b/src/parser/__tests__/PhutilEmailAddressTestCase.php new file mode 100644 index 00000000..f2c4158b --- /dev/null +++ b/src/parser/__tests__/PhutilEmailAddressTestCase.php @@ -0,0 +1,130 @@ +'); + $this->assertEqual( + 'Abraham Lincoln', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln@logcabin.com'); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('"Abraham" '); + $this->assertEqual( + 'Abraham', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress(' alincoln@logcabin.com '); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln'); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + null, + $email->getDomainName()); + $this->assertEqual( + 'alincoln', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln '); + $this->assertEqual( + 'alincoln', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln at logcabin dot com', + $email->getLocalPart()); + $this->assertEqual( + null, + $email->getDomainName()); + $this->assertEqual( + 'alincoln at logcabin dot com', + $email->getAddress()); + } + + public function testEmailEncoding() { + $cases = array( + array( + 'Tangerine Q. Hawthorne', + 'thawthorne@blackspire.bunker', + '"Tangerine Q. Hawthorne" ', + ), + array( + 'Hector "\\" Backslash', + 'hector@backslash', + '"Hector \\"\\\\\\" Backslash" ', + ), + array( + 'My Middle Name "" Is My Email', + 'name@domain', + '"My Middle Name \\"\\" Is My Email" ', + ), + array( + "My Legal Name\nContains A Newline", + 'newline@example', + '"My Legal Name Contains A Newline" ', + ), + ); + + foreach ($cases as $case) { + list($name, $address, $expect) = $case; + $actual = (string)id(new PhutilEmailAddress()) + ->setDisplayName($name) + ->setAddress($address); + $this->assertEqual( + $expect, + $actual, + pht('Email: %s + %s -> %s', $name, $address, $expect)); + } + } + +} diff --git a/src/parser/__tests__/PhutilGitURITestCase.php b/src/parser/__tests__/PhutilGitURITestCase.php new file mode 100644 index 00000000..91f05115 --- /dev/null +++ b/src/parser/__tests__/PhutilGitURITestCase.php @@ -0,0 +1,28 @@ +assertEqual('git', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('git@host.com:path/to/something', (string)$uri); + + $uri = new PhutilGitURI('host.com:path/to/something'); + $this->assertEqual('', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('host.com:path/to/something', (string)$uri); + } + + public function testStrictGitURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' user@example.com'); + $this->assertEqual('', $uri->getDomain()); + } + + +} diff --git a/src/parser/__tests__/PhutilJSONParserTestCase.php b/src/parser/__tests__/PhutilJSONParserTestCase.php new file mode 100644 index 00000000..e24a75cb --- /dev/null +++ b/src/parser/__tests__/PhutilJSONParserTestCase.php @@ -0,0 +1,139 @@ + array(), + '[]' => array(), + '{"foo": "bar"}' => array('foo' => 'bar'), + '[1, "foo", true, null]' => array(1, 'foo', true, null), + '{"foo": {"bar": "baz"}}' => array('foo' => array('bar' => 'baz')), + '{"foo": "bar", "bar": ["baz"]}' + => array('foo' => 'bar', 'bar' => array('baz')), + '{"foo": "bar", "bar": {"baz": "foo"}}' + => array('foo' => 'bar', 'bar' => array('baz' => 'foo')), + '{"": ""}' => array('' => ''), + '{"test":"\u00c9v\u00e9nement"}' + => array('test' => "\xC3\x89v\xC3\xA9nement"), + '["\u00c9v\u00e9nement"]' => array("\xC3\x89v\xC3\xA9nement"), + '{"test":"http:\/\/foo\\\\zomg"}' + => array('test' => 'http://foo\\zomg'), + '["http:\/\/foo\\\\zomg"]' => array('http://foo\\zomg'), + Filesystem::readFile(dirname(__FILE__).'/json/base64.json') => array( + 'action' => 'candidate.create', + 'actionId' => '80653a26cc46357ff79ff83b47e27c3cb7a668bd', + 'params' => array( + 'attachments' => array( + Filesystem::readFile(dirname(__FILE__).'/json/base64.data'), + ), + ), + ), + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $parser->parse($input), + pht('Parsing JSON: %s', $input)); + } + } + + public function testInvalidJSON() { + $parser = new PhutilJSONParser(); + + $tests = array( + '{' => array( + 'line' => 1, + 'char' => 1, + 'token' => 'EOF', + ), + '[' => array( + 'line' => 1, + 'char' => 1, + 'token' => 'EOF', + ), + '{"foo":' => array( + 'line' => 1, + 'char' => 7, + 'token' => 'EOF', + ), + '{"foo":"bar",}' => array( + 'line' => 1, + 'char' => 13, + 'token' => '}', + ), + '{{}' => array( + 'line' => 1, + 'char' => 1, + 'token' => '{', + ), + '{}}' => array( + 'line' => 1, + 'char' => 2, + 'token' => '}', + ), + "{\"foo\":\"bar\",\n\"bar\":\"baz\",}" => array( + 'line' => 2, + 'char' => 12, + 'token' => '}', + ), + "{'foo': 'bar'}" => array( + 'line' => 1, + 'char' => 1, + 'token' => 'INVALID', + ), + "{\"foo\": \"bar\nbaz\"}" => array( + 'line' => 1, + 'char' => 7, + 'token' => 'INVALID', + ), + '{"foo": "bar\z"}' => array( + 'line' => 1, + 'char' => 7, + 'token' => 'INVALID', + ), + ); + + foreach ($tests as $input => $expected) { + $caught = null; + try { + $parser->parse($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + $this->assertEqual($expected['line'], $caught->getSourceLine()); + $this->assertEqual($expected['char'], $caught->getSourceChar()); + $this->assertEqual($expected['token'], $caught->getSourceToken()); + } + } + + public function testDuplicateKeys() { + $parser = new PhutilJSONParser(); + + $tests = array( + '{"foo": "bar", "foo": "baz"}' => array('foo' => 'baz'), + ); + + foreach ($tests as $input => $expect) { + $parser->setAllowDuplicateKeys(true); + $this->assertEqual( + $expect, + $parser->parse($input), + pht('Parsing JSON: %s', $input)); + + $parser->setAllowDuplicateKeys(false); + $caught = null; + try { + $parser->parse($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + } + } + +} diff --git a/src/parser/__tests__/PhutilJSONTestCase.php b/src/parser/__tests__/PhutilJSONTestCase.php new file mode 100644 index 00000000..295d7b55 --- /dev/null +++ b/src/parser/__tests__/PhutilJSONTestCase.php @@ -0,0 +1,21 @@ +assertEqual( + $expect, + $serializer->encodeFormatted(array('x' => array())), + pht('Empty arrays should serialize as `%s`, not `%s`.', '[]', '{}')); + } + +} diff --git a/src/parser/__tests__/PhutilLanguageGuesserTestCase.php b/src/parser/__tests__/PhutilLanguageGuesserTestCase.php new file mode 100644 index 00000000..9eaa402a --- /dev/null +++ b/src/parser/__tests__/PhutilLanguageGuesserTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + $expect, + PhutilLanguageGuesser::guessLanguage($source), + pht("Guessed language for '%s'.", $test)); + } + } + +} diff --git a/src/parser/__tests__/PhutilParserGeneratorTestCase.php b/src/parser/__tests__/PhutilParserGeneratorTestCase.php new file mode 100644 index 00000000..d82ef6ec --- /dev/null +++ b/src/parser/__tests__/PhutilParserGeneratorTestCase.php @@ -0,0 +1,330 @@ +setTerminals(array('a')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'a b', + )); + + $caught = null; + try { + // Expect "b is not a rule or terminal". + $generator->processGrammar(); + } catch (PhutilUnknownSymbolParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testBadStartRule() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('a')) + ->setStartRule('Q') + ->setRules( + array( + 'S' => 'a', + )); + + $caught = null; + try { + // Expect "no start rule Q". + $generator->processGrammar(); + } catch (PhutilUnknownSymbolParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testMessySymbols() { + // This is testing that internal defaults are correctly changed when they + // would conflict with the provided grammar. This is a messy test which + // relies on a lot of implementation details. + + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('(init)', 'x', 'y', 'start', '(end)')) + ->setStartRule('(epsilon)') + ->setRules( + array( + '(epsilon)' => array( + array('s p a c e s'), + ), + 's p a c e s' => '(init) x start (end-of-file) y', + '(end-of-file)' => array( + '(end)', + null, + ), + )) + ->processGrammar(); + + $rules = $generator->inspectRules(); + + $init = $generator->getInitSymbol(); + $eof = $generator->getEOFSymbol(); + $epsilon = $generator->getEpsilonSymbol(); + $end = $generator->getEndSymbol(); + + $this->assertFalse($init == '(init)'); + $this->assertFalse($eof == '(end-of-file)'); + $this->assertFalse($epsilon == '(epsilon)'); + $this->assertFalse($end == '(end)'); + + $keys = array_keys($rules); + $expect = array('(end-of-file)', '(epsilon)', 's p a c e s', $init); + sort($keys); + sort($expect); + $this->assertEqual($keys, $expect); + + $this->assertEqual( + array( + array('s p a c e s', $end), + ), + $rules['(epsilon)']); + + $this->assertEqual( + array( + array('(end)', $end), + array($epsilon, $end), + ), + $rules['(end-of-file)']); + } + + public function testUnreachableTerminal() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x', 'y')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'x', + )); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilUnreachableTerminalParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnreachableRule() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'x', + 'A' => 'B', + 'B' => 'x', + )); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilUnreachableRuleParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testIrreducibleGrammars() { + $tests = array( + 'trivially irreducible' => array( + true, + array( + 'S' => array('E', 'x'), + 'E' => 'E', + ), + ), + 'nontrivially irreducible' => array( + true, + array( + 'S' => array('X', 'x'), + 'X' => 'Y', + 'Y' => 'Z', + 'Z' => 'X', + ), + ), + 'left-recursive reducible' => array( + false, + array( + 'S' => 'E', + 'E' => array('E x', 'x'), + ), + ), + 'right-recursive reducible' => array( + false, + array( + 'S' => 'E', + 'E' => array('x', 'x E'), + ), + ), + ); + + foreach ($tests as $test) { + list($expect, $rules) = $test; + + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x')) + ->setStartRule('S') + ->setRules($rules); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilIrreducibleRuleParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertEqual($expect, ($caught instanceof Exception)); + } + } + + public function testFirst() { + $generator = $this->buildABCGenerator()->processGrammar(); + + $first = $generator->inspectFirstTable(); + ksort($first); + + foreach ($first as $key => $table) { + ksort($table); + $first[$key] = $table; + } + + $this->assertEqual( + array( + 'A' => array( + '(epsilon)' => true, + 'a' => true, + 'b' => true, + ), + 'B' => array( + 'c' => true, + ), + 'C' => array( + '(epsilon)' => true, + 'b' => true, + ), + 'S' => array( + 'a' => true, + 'b' => true, + 'c' => true, + ), + ), + $first); + } + + public function testStates() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('a', 'b')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'X X', + 'X' => array( + 'a X', + 'b', + ), + )) + ->processGrammar(); + + $this->assertTrue(true); + } + + public function testETParser() { + $generator = $this->buildETGenerator()->processGrammar(); + + $result = $generator->parseTokens( + array( + array('n', 3), + array('+', '+'), + array('n', 5), + ), + array($this, 'didReduceET')); + + $this->assertEqual(8, $result); + } + + public function didReduceET($rule, $production, array $tokens) { + switch ($rule) { + case 'S': + return $tokens[0]; + case 'E': + switch ($production) { + case 0: + return $tokens[0] + $tokens[2]; + case 1: + return $tokens[0]; + } + break; + case 'T': + switch ($production) { + case 0: + return $tokens[1]; + case 1: + return $tokens[0][1]; + } + break; + } + + throw new Exception(pht('Unexpected rule in ET grammar.')); + } + + private function buildABCGenerator() { + $terminals = array( + 'a', + 'b', + 'c', + ); + + $rules = array( + 'S' => 'A B', + 'A' => array('C a', null), + 'B' => array('B a A C', 'c'), + 'C' => array('b', null), + ); + + $generator = id(new PhutilParserGenerator()) + ->setTerminals($terminals) + ->setStartRule('S') + ->setRules($rules); + + return $generator; + } + + private function buildETGenerator() { + // This grammar and the corresponding tests are based on: + // http://dragonbook.stanford.edu/lecture-notes/Stanford-CS143/08-Bottom-Up-Parsing.pdf + // http://dragonbook.stanford.edu/lecture-notes/Stanford-CS143/09-SLR-Parsing.pdf + + $terminals = array( + '(', + 'n', + ')', + '+', + ); + + $rules = array( + 'S' => 'E', + 'E' => array('E + T', 'T'), + 'T' => array('( E )', 'n'), + ); + + $generator = id(new PhutilParserGenerator()) + ->setTerminals($terminals) + ->setStartRule('S') + ->setRules($rules); + + return $generator; + } + + +} diff --git a/src/parser/__tests__/PhutilQueryStringParserTestCase.php b/src/parser/__tests__/PhutilQueryStringParserTestCase.php new file mode 100644 index 00000000..fff19f61 --- /dev/null +++ b/src/parser/__tests__/PhutilQueryStringParserTestCase.php @@ -0,0 +1,140 @@ + array(), + 'foo=bar&foobar=barfoo' => array( + 'foo' => 'bar', + 'foobar' => 'barfoo', + ), + 'a]b[]=1&a]=2&a[[]=3&a[b]b=4&[][a]=5' => array( + 'a]b[]' => '1', + 'a]' => '2', + 'a[[]' => '3', + 'a[b]b' => '4', + '[][a]' => '5', + ), + 'foo[][]=bar&bar[1][3]=foo' => array( + 'foo' => array( + 0 => array( + 0 => 'bar', + ), + ), + 'bar' => array( + 1 => array( + 3 => 'foo', + ), + ), + ), + 'foo[][]=bar&a]b[]=1' => array( + 'foo' => array( + 0 => array( + 0 => 'bar', + ), + ), + 'a]b[]' => '1', + ), + 'a&&b' => array( + 'a' => '', + 'b' => '', + ), + 'a[b][]=foo&a[b][]=bar' => array( + 'a' => array( + 'b' => array( + 0 => 'foo', + 1 => 'bar', + ), + ), + ), + 'a=1&a=2' => array( + 'a' => '2', + ), + 'a=1&a[]=2' => array( + 'a' => array( + 0 => '2', + ), + ), + 'a=1&a[b]=2&a[]=3' => array( + 'a' => array( + 'b' => '2', + 0 => '3', + ), + ), + 'a%20b=%20' => array( + 'a b' => ' ', + ), + 'a.b=c' => array( + 'a.b' => 'c', + ), + 'a=b=c' => array( + 'a' => 'b=c', + ), + ); + + $parser = new PhutilQueryStringParser(); + + foreach ($map as $query_string => $expected) { + $this->assertEqual( + $expected, + $parser->parseQueryString($query_string)); + } + } + + public function testQueryStringListParsing() { + $map = array( + '' => array(), + '&' => array(), + '=' => array( + array('', ''), + ), + '=&' => array( + array('', ''), + ), + 'a=b' => array( + array('a', 'b'), + ), + 'a[]=b' => array( + array('a[]', 'b'), + ), + 'a=' => array( + array('a', ''), + ), + '. [=1' => array( + array('. [', '1'), + ), + 'a=b&c=d' => array( + array('a', 'b'), + array('c', 'd'), + ), + 'a=b&a=c' => array( + array('a', 'b'), + array('a', 'c'), + ), + '&a=b&' => array( + array('a', 'b'), + ), + '=a' => array( + array('', 'a'), + ), + '&&&' => array( + ), + 'a%20b=c%20d' => array( + array('a b', 'c d'), + ), + ); + + $parser = new PhutilQueryStringParser(); + + foreach ($map as $query_string => $expected) { + $this->assertEqual( + $expected, + $parser->parseQueryStringToPairList($query_string)); + } + } + +} diff --git a/src/parser/__tests__/PhutilSimpleOptionsTestCase.php b/src/parser/__tests__/PhutilSimpleOptionsTestCase.php new file mode 100644 index 00000000..5e751a65 --- /dev/null +++ b/src/parser/__tests__/PhutilSimpleOptionsTestCase.php @@ -0,0 +1,143 @@ + array(), + + // Basic parsing. + 'legs=4' => array('legs' => '4'), + 'legs=4,eyes=2' => array('legs' => '4', 'eyes' => '2'), + + // Repeated keys mean last specification wins. + 'legs=4,legs=3' => array('legs' => '3'), + + // Keys with no value should map to true. + 'flag' => array('flag' => true), + 'legs=4,flag' => array('legs' => '4', 'flag' => true), + + // Leading and trailing spaces should be ignored. + ' flag ' => array('flag' => true), + ' legs = 4 , eyes = 2' => array('legs' => '4', 'eyes' => '2'), + + // Unescaped spaces inside values are OK. + 'legs=a b c d' => array('legs' => 'a b c d'), + + // Case should be ignored. + 'LEGS=4' => array('legs' => '4'), + 'legs=4, LEGS=4' => array('legs' => '4'), + + // Empty values should be absent. + 'legs=' => array(), + 'legs=4,legs=,eyes=2' => array('eyes' => '2'), + + // Quoted values should allow parsing comma, equals, etc. + 'punctuation=",="' => array('punctuation' => ',='), + + // Quoted keys can also have that stuff. + '"backslash\\\\quote\\""=1' => array('backslash\\quote"' => '1'), + ' "," = "," , "=" = "=" ' => array(',' => ',', '=' => '='), + + // Strings like this should not parse as simpleoptions. + 'SELECT id, name, size FROM table' => array(), + '"a""b"' => array(), + '=a' => array(), + ',a' => array(), + 'a==' => array(), + 'a=b=' => array(), + ); + + foreach ($map as $string => $expect) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + $expect, + $parser->parse($string), + pht("Correct parse of '%s'", $string)); + } + } + + public function testSimpleOptionsCaseParse() { + $map = array( + 'legs=4, LEGS=8, LeGs' => array( + 'legs' => '4', + 'LEGS' => '8', + 'LeGs' => true, + ), + ); + + foreach ($map as $string => $expect) { + $parser = new PhutilSimpleOptions(); + $parser->setCaseSensitive(true); + $this->assertEqual( + $expect, + $parser->parse($string), + pht("Correct case-sensitive parse of '%s'", $string)); + } + } + + public function testSimpleOptionsUnterminatedStrings() { + $list = array( + '"', + "'", + 'a="', + "a='", + 'a="\\', + "a='\\", + ); + + foreach ($list as $input) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + array(), + $parser->parse($input), + pht('Correct failing parse of invalid input: %s', $input)); + } + } + + public function testSimpleOptionsUnparse() { + $map = array( + '' => array(), + 'legs=4' => array('legs' => '4'), + 'legs=4, eyes=2' => array('legs' => '4', 'eyes' => '2'), + 'eyes=2, legs=4' => array('eyes' => '2', 'legs' => '4'), + 'legs=4, head' => array('legs' => '4', 'head' => true), + 'eyes=2' => array('legs' => '', 'eyes' => '2'), + '"thousands separator"=","' => array('thousands separator' => ','), + ); + + foreach ($map as $expect => $dict) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + $expect, + $parser->unparse($dict), + pht('Correct unparse of %s', print_r($dict, true))); + } + + $bogus = array( + array('' => ''), + array('' => 'x'), + ); + + foreach ($bogus as $bad_input) { + $caught = null; + try { + $parser = new PhutilSimpleOptions(); + $parser->unparse($bad_input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue( + $caught instanceof Exception, + pht('Correct throw on unparse of bad input.')); + } + + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + 'a="\\}"', + $parser->unparse(array('a' => '}'), '}'), + pht('Unparse with extra escape.')); + } + +} diff --git a/src/parser/__tests__/PhutilTypeSpecTestCase.php b/src/parser/__tests__/PhutilTypeSpecTestCase.php new file mode 100644 index 00000000..c294c5b6 --- /dev/null +++ b/src/parser/__tests__/PhutilTypeSpecTestCase.php @@ -0,0 +1,320 @@ +', + 'int | null', + 'list < string >', + 'int (must be even)', + 'optional int', + 'int?', + 'int|null?', + 'optional int? (minimum 300)', + 'list', + 'list>>> (easy)', + '\\SomeClass', + '\\Namespace\\SomeClass', + '\\NamespaceA\\NamespaceB\\NamespaceC', + 'NamespaceA\\NamespaceB\\NamespaceC', + ); + + $bad = array( + '', + 'list<>', + 'list', + 'map|map', + 'int optional', + '(derp)', + 'list', + 'int?|string', + '\\', + '\\\\', + '\\SomeClass\\', + 'SomeClass\\', + ); + + $good = array_fill_keys($good, true); + $bad = array_fill_keys($bad, false); + + foreach ($good + $bad as $input => $expect) { + $caught = null; + try { + PhutilTypeSpec::newFromString($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + ($caught === null), + $input); + } + } + + public function testTypeSpecStringify() { + $types = array( + 'int', + 'list', + 'map', + 'list>', + 'map>', + 'int|null', + 'int|string|null', + 'list', + 'list', + 'optional int', + 'int (even)', + ); + + foreach ($types as $type) { + $this->assertEqual( + $type, + PhutilTypeSpec::newFromString($type)->toString()); + } + } + + public function testCanonicalize() { + $tests = array( + 'int?' => 'optional int', + 'int | null' => 'int|null', + 'list < map < int , string > > ?' => 'optional list>', + 'int ( x )' => 'int ( x )', + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + PhutilTypeSpec::newFromString($input)->toString(), + $input); + } + } + + public function testGetCommonParentClass() { + $map = array( + 'stdClass' => array( + array('stdClass', 'stdClass'), + ), + false => array( + array('Exception', 'stdClass'), + ), + 'Exception' => array( + array('Exception', 'RuntimeException'), + array('LogicException', 'RuntimeException'), + array('BadMethodCallException', 'OutOfBoundsException'), + ), + ); + + foreach ($map as $expect => $tests) { + if (is_int($expect)) { + $expect = (bool)$expect; + } + + foreach ($tests as $input) { + list($class_a, $class_b) = $input; + + $this->assertEqual( + $expect, + PhutilTypeSpec::getCommonParentClass($class_a, $class_b), + print_r($input, true)); + } + } + } + + public function testGetTypeOf() { + $map = array( + 'int' => 1, + 'string' => 'asdf', + 'float' => 1.5, + 'bool' => true, + 'null' => null, + 'map' => array(), + 'list' => array('a', 'b'), + 'list' => array(1, 2, 3), + 'map' => array('x' => 3), + 'map>' => array(1 => array('x', 'y')), + 'stdClass' => new stdClass(), + 'list' => array( + new Exception(), + new LogicException(), + new RuntimeException(), + ), + 'map' => array('x' => new stdClass()), + ); + + foreach ($map as $expect => $input) { + $this->assertEqual( + $expect, + PhutilTypeSpec::getTypeOf($input), + print_r($input, true)); + + PhutilTypeSpec::newFromString($expect)->check($input); + } + } + + public function testTypeCheckFailures() { + $map = array( + 'int' => 'string', + 'string' => 32, + 'null' => true, + 'bool' => null, + 'map' => 16, + 'list' => array('y' => 'z'), + 'int|null' => 'ducks', + 'stdClass' => new Exception(), + 'list' => array(new Exception()), + ); + + foreach ($map as $type => $value) { + $caught = null; + try { + PhutilTypeSpec::newFromString($type)->check($value); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + } + + public function testCheckMap() { + $spec = array( + 'count' => 'int', + 'color' => 'optional string', + ); + + // Valid + + PhutilTypeSpec::checkMap( + array( + 'count' => 1, + ), + $spec); + + // Valid, with optional parameter. + + PhutilTypeSpec::checkMap( + array( + 'count' => 3, + 'color' => 'red', + ), + $spec); + + // Parameter "count" is required but missing. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array(), + $spec); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeMissingParametersException); + + // Parameter "size" is specified but does not exist. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'count' => 4, + 'size' => 'large', + ), + $spec); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeExtraParametersException); + } + + public function testRegexValidation() { + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'regex', + )); + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'regex' => '.*', + ), + array( + 'regex' => 'regex', + )); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + + public function testScalarOrListRegexp() { + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'regex | list', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => array('/.*/'), + ), + array( + 'regex' => 'regex | list', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'list | regex', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => array('/.*/'), + ), + array( + 'regex' => 'list | regex', + )); + + $this->assertTrue(true); + } + + public function testMixedVector() { + // This is a test case for an issue where we would not infer the type + // of a vector containing a mixture of scalar and nonscalar elements + // correctly. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'key' => array('!', (object)array()), + ), + array( + 'key' => 'list', + )); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + +} diff --git a/src/parser/__tests__/PhutilURITestCase.php b/src/parser/__tests__/PhutilURITestCase.php new file mode 100644 index 00000000..c9c881ce --- /dev/null +++ b/src/parser/__tests__/PhutilURITestCase.php @@ -0,0 +1,417 @@ +assertEqual('http', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('user', $uri->getUser(), pht('user')); + $this->assertEqual('pass', $uri->getPass(), pht('password')); + $this->assertEqual('host', $uri->getDomain(), pht('domain')); + $this->assertEqual('99', $uri->getPort(), pht('port')); + + $this->assertEqual('/path/', $uri->getPath(), pht('path')); + $this->assertEqual( + array( + array( + 'query', + 'value', + ), + ), + $uri->getQueryParamsAsPairList(), + 'query params'); + $this->assertEqual('fragment', $uri->getFragment(), pht('fragment')); + $this->assertEqual( + 'http://user:pass@host:99/path/?query=value#fragment', + (string)$uri, + 'uri'); + + + $uri = new PhutilURI('ssh://git@example.com/example/example.git'); + $this->assertEqual('ssh', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('git', $uri->getUser(), pht('user')); + $this->assertEqual('', $uri->getPass(), pht('password')); + $this->assertEqual('example.com', $uri->getDomain(), pht('domain')); + $this->assertEqual('', $uri->getPort(), 'port'); + + $this->assertEqual('/example/example.git', $uri->getPath(), pht('path')); + $this->assertEqual( + array(), + $uri->getQueryParamsAsPairList(), + pht('query parameters')); + $this->assertEqual('', $uri->getFragment(), pht('fragment')); + $this->assertEqual( + 'ssh://git@example.com/example/example.git', + (string)$uri, + 'uri'); + + + $uri = new PhutilURI('http://0@domain.com/'); + $this->assertEqual('0', $uri->getUser()); + $this->assertEqual('http://0@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://0:0@domain.com/'); + $this->assertEqual('0', $uri->getUser()); + $this->assertEqual('0', $uri->getPass()); + $this->assertEqual('http://0:0@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%20:%20@domain.com/'); + $this->assertEqual(' ', $uri->getUser()); + $this->assertEqual(' ', $uri->getPass()); + $this->assertEqual('http://%20:%20@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%40:%40@domain.com/'); + $this->assertEqual('@', $uri->getUser()); + $this->assertEqual('@', $uri->getPass()); + $this->assertEqual('http://%40:%40@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%2F:%2F@domain.com/'); + $this->assertEqual('/', $uri->getUser()); + $this->assertEqual('/', $uri->getPass()); + $this->assertEqual('http://%2F:%2F@domain.com/', (string)$uri); + + // These tests are covering cases where cURL and parse_url() behavior + // may differ in potentially dangerous ways. See T6755 for discussion. + + // In general, we defuse these attacks by emitting URIs which escape + // special characters so that they are interpreted unambiguously by + // cURL in the same way that parse_url() interpreted them. + + $uri = new PhutilURI('http://u:p@evil.com?@good.com'); + $this->assertEqual('u', $uri->getUser()); + $this->assertEqual('p', $uri->getPass()); + $this->assertEqual('evil.com', $uri->getDomain()); + $this->assertEqual('http://u:p@evil.com?%40good.com=', (string)$uri); + + // The behavior of URLs in these forms differs for different versions + // of cURL, PHP, and other software. Because safe parsing is a tricky + // proposition and these URIs are almost certainly malicious, we just + // reject them. See T12526 for discussion. + + $dangerous = array( + // Ambiguous encoding. + 'http://good.com#u:p@evil.com/' => true, + 'http://good.com?u:p@evil.com/' => true, + + // Unambiguous encoding: with a trailing slash. + 'http://good.com/#u:p@evil.com/' => false, + 'http://good.com/?u:p@evil.com/' => false, + + // Unambiguous encoding: with escaping. + 'http://good.com%23u:p@evil.com/' => false, + 'http://good.com%40u:p@evil.com/' => false, + ); + + foreach ($dangerous as $input => $expect) { + $caught = null; + try { + new PhutilURI($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + ($caught instanceof $ex), + pht('Unexpected parse result for dangerous URI "%s".', $input)); + } + + $uri = new PhutilURI('www.example.com'); + $this->assertEqual('', $uri->getProtocol()); + $this->assertEqual('www.example.com', (string)$uri); + } + + public function testURIGeneration() { + $uri = new PhutilURI('http://example.com'); + $uri->setPath('bar'); + $this->assertEqual('http://example.com/bar', $uri->__toString()); + } + + public function testStrictURIParsingOfHosts() { + $uri = new PhutilURI('http://&/'); + $this->assertEqual('', $uri->getDomain()); + + // See T12961 for more discussion of these hosts which begin with "-". + $uri = new PhutilURI('ssh://-oProxyCommand/'); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI('ssh://-oProxyCommand=curl/'); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI('ssh://.com/'); + $this->assertEqual('', $uri->getDomain()); + + // Make sure newlines are rejected. + $uri = new PhutilURI("ssh://example.com\n.domain.us/"); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI("ssh://example.com\n"); + $this->assertEqual('', $uri->getDomain()); + } + + public function testStrictURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' http://example.com/'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testAppendPath() { + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('foo'); + $this->assertEqual('http://example.com/foo', $uri->__toString()); + $uri->appendPath('bar'); + $this->assertEqual('http://example.com/foo/bar', $uri->__toString()); + + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('/foo/'); + $this->assertEqual('http://example.com/foo/', $uri->__toString()); + $uri->appendPath('/bar/'); + $this->assertEqual('http://example.com/foo/bar/', $uri->__toString()); + + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('foo'); + $this->assertEqual('http://example.com/foo', $uri->__toString()); + $uri->appendPath('/bar/'); + $this->assertEqual('http://example.com/foo/bar/', $uri->__toString()); + } + + public function testUnusualURIs() { + $uri = new PhutilURI('file:///path/to/file'); + $this->assertEqual('file', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('', $uri->getDomain(), pht('domain')); + $this->assertEqual('/path/to/file', $uri->getPath(), pht('path')); + + $uri = new PhutilURI('idea://open?x=/'); + $this->assertEqual('idea', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('open', $uri->getDomain(), pht('domain')); + $this->assertEqual('', $uri->getPath(), pht('path')); + $this->assertEqual( + array( + array( + 'x', + '/', + ), + ), + $uri->getQueryParamsAsPairList()); + + // This is not a legitimate URI and should not parse as one. + $uri = new PhutilURI('fruit.list: apple banana cherry'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testAmbiguousURIs() { + // It's important that this be detected as a Javascript URI, because that + // is how browsers will treat it. + $uri = new PhutilURI('javascript:evil'); + $this->assertEqual('javascript', $uri->getProtocol()); + + + // This is "wrong", in that the user probably intends for this to be a + // Git-style URI, but we can not easily parse it as one without making the + // "javascript" case above unsafe. + $uri = new PhutilURI('localhost:todo.txt'); + $this->assertEqual('localhost', $uri->getProtocol()); + + + // These variants are unambiguous and safe. + $uri = new PhutilURI('localhost.com:todo.txt'); + $this->assertEqual('localhost.com', $uri->getDomain()); + + $uri = new PhutilURI('user@localhost:todo.txt'); + $this->assertEqual('localhost', $uri->getDomain()); + + // This could either be a Git URI with relative path "22", or a normal URI + // with port "22". We should assume it is a port number because this is + // relatively common, while relative Git URIs pointing at numeric filenames + // are bizarre. + $uri = new PhutilURI('domain.com:22'); + $this->assertEqual('domain.com', $uri->getDomain()); + $this->assertEqual('22', $uri->getPort()); + } + + public function testDefaultPorts() { + $uri = new PhutilURI('http://www.example.com'); + $this->assertEqual('80', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('https://www.example.com'); + $this->assertEqual('443', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('ssh://git@example.com/example/example.git'); + $this->assertEqual('22', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('unknown://www.example.com'); + $this->assertEqual('', $uri->getPortWithProtocolDefault()); + } + + public function testGitURIParsing() { + $uri = new PhutilURI('git@host.com:path/to/something'); + $this->assertEqual('ssh', $uri->getProtocol()); + $this->assertEqual('git', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('git@host.com:path/to/something', (string)$uri); + + $uri = new PhutilURI('host.com:path/to/something'); + $this->assertEqual('ssh', $uri->getProtocol()); + $this->assertEqual('', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('host.com:path/to/something', (string)$uri); + + $uri_1 = new PhutilURI('host.com:path/to/something'); + $uri_2 = new PhutilURI($uri_1); + + $this->assertEqual((string)$uri_1, (string)$uri_2); + } + + public function testStrictGitURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' user@example.com:path'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testNoRelativeURIPaths() { + $uri = new PhutilURI('user@example.com:relative_path'); + + $caught = null; + try { + $uri->setType(PhutilURI::TYPE_URI); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateKeys() { + $uri = new PhutilURI('http://www.example.com/?x=1&x=2'); + $this->assertEqual( + 'http://www.example.com/?x=1&x=2', + (string)$uri); + + $uri->appendQueryParam('x', '3'); + $this->assertEqual( + 'http://www.example.com/?x=1&x=2&x=3', + (string)$uri); + + $uri->replaceQueryParam('x', '4'); + $this->assertEqual( + 'http://www.example.com/?x=4', + (string)$uri); + + $uri->removeQueryParam('x'); + $this->assertEqual( + 'http://www.example.com/', + (string)$uri); + + $uri->appendQueryParam('a', 'a'); + $uri->appendQueryParam('b', 'b'); + $uri->appendQueryParam('c', 'c'); + $uri->appendQueryParam('b', 'd'); + + $this->assertEqual( + 'http://www.example.com/?a=a&b=b&c=c&b=d', + (string)$uri); + + $uri->replaceQueryParam('b', 'e'); + $this->assertEqual( + 'http://www.example.com/?a=a&c=c&b=e', + (string)$uri, + pht( + 'Replacing a parameter should overwrite other instances of the key.')); + } + + public function testBadHTTPParameters() { + $uri = new PhutilURI('http://www.example.com/'); + + $caught = null; + try { + $uri->replaceQueryParam(array(), 'x'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + (bool)$caught, + pht('Nonscalar HTTP keys should throw.')); + + $caught = null; + try { + $uri->replaceQueryParam('x', array()); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + (bool)$caught, + pht('Nonscalar HTTP values should throw.')); + } + + public function testHTTPParameterTypes() { + // Whether you pass an integer or string, "0" should always be the same + // query parameter. + + $uri = new PhutilURI('http://www.example.com/'); + + $uri->appendQueryParam(0, 'a'); + $uri->appendQueryParam('0', 'b'); + $this->assertEqual( + 'http://www.example.com/?0=a&0=b', + (string)$uri); + + $uri->replaceQueryParam(0, 'c'); + $this->assertEqual( + 'http://www.example.com/?0=c', + (string)$uri); + + $uri->replaceQueryParam(0, 'a'); + $uri->appendQueryParam('0', 'b'); + $this->assertEqual( + 'http://www.example.com/?0=a&0=b', + (string)$uri); + + $uri->replaceQueryParam('0', 'c'); + $this->assertEqual( + 'http://www.example.com/?0=c', + (string)$uri); + } + + public function testGetQueryParamsAsMap() { + $uri = new PhutilURI('http://www.example.com/?x=1&x=2'); + + $caught = null; + try { + $map = $uri->getQueryParamsAsMap(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue((bool)$caught); + } + + public function testQueryURIConstruction() { + $uri = new PhutilURI('http://example.com/', array('y' => '1')); + $this->assertEqual( + 'http://example.com/?y=1', + (string)$uri); + + $uri = new PhutilURI('http://example.com/?x=2', array('y' => '1')); + $this->assertEqual( + 'http://example.com/?x=2&y=1', + (string)$uri); + + $caught = null; + try { + $uri = new PhutilURI('http://example.com/?y=3', array('y' => '1')); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught); + + $uri = new PhutilURI('http://example.com/?a=1', array('b' => '2')); + $uri = new PhutilURI($uri, array('c' => '3')); + + $this->assertEqual( + 'http://example.com/?a=1&b=2&c=3', + (string)$uri); + } + +} diff --git a/src/parser/__tests__/docblock/embedded-specials.docblock b/src/parser/__tests__/docblock/embedded-specials.docblock new file mode 100644 index 00000000..e2e1b60c --- /dev/null +++ b/src/parser/__tests__/docblock/embedded-specials.docblock @@ -0,0 +1,4 @@ +/** + * So long as a @special does not appear at the beginning of a line, + * it is parsed as normal text. + */ diff --git a/src/parser/__tests__/docblock/flag-specials.docblock b/src/parser/__tests__/docblock/flag-specials.docblock new file mode 100644 index 00000000..6dc8cca1 --- /dev/null +++ b/src/parser/__tests__/docblock/flag-specials.docblock @@ -0,0 +1,15 @@ +/** + * stuff above + * + * @flag + * @stuff + * @stuff + * + * @zebra + * + * stuff in the middle + * + * @apple + * + * stuff below + */ diff --git a/src/parser/__tests__/docblock/indented-block.docblock b/src/parser/__tests__/docblock/indented-block.docblock new file mode 100644 index 00000000..766dc49c --- /dev/null +++ b/src/parser/__tests__/docblock/indented-block.docblock @@ -0,0 +1,3 @@ + /** + * Cozy lummox gives smart squid who asks for job pen. + */ diff --git a/src/parser/__tests__/docblock/indented-specials.docblock b/src/parser/__tests__/docblock/indented-specials.docblock new file mode 100644 index 00000000..dc683fce --- /dev/null +++ b/src/parser/__tests__/docblock/indented-specials.docblock @@ -0,0 +1,11 @@ +/** + * @title sendmail + * + * Blah blah add this configuration: + * + * @notspecial.com =~+> do sendmail magic + * + * @special only a + * little bit + * indented + */ diff --git a/src/parser/__tests__/docblock/indented-text.docblock b/src/parser/__tests__/docblock/indented-text.docblock new file mode 100644 index 00000000..e3f36df3 --- /dev/null +++ b/src/parser/__tests__/docblock/indented-text.docblock @@ -0,0 +1,3 @@ +/** + * Cozy lummox gives smart squid who asks for job pen. + */ diff --git a/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock b/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock new file mode 100644 index 00000000..2e31a7fc --- /dev/null +++ b/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock @@ -0,0 +1,5 @@ +/** + * @title title + * + * This is normal text, not part of the @title. + */ diff --git a/src/parser/__tests__/docblock/mixed-types.docblock b/src/parser/__tests__/docblock/mixed-types.docblock new file mode 100644 index 00000000..c70caa16 --- /dev/null +++ b/src/parser/__tests__/docblock/mixed-types.docblock @@ -0,0 +1,4 @@ +/** + * @special squirrels + * @special + */ diff --git a/src/parser/__tests__/docblock/multi-specials.docblock b/src/parser/__tests__/docblock/multi-specials.docblock new file mode 100644 index 00000000..a57547c6 --- /dev/null +++ b/src/parser/__tests__/docblock/multi-specials.docblock @@ -0,0 +1,8 @@ +/** + * @special north + * @special south + * + * @stable + * @stable + * @stable + */ diff --git a/src/parser/__tests__/docblock/multiline-special.docblock b/src/parser/__tests__/docblock/multiline-special.docblock new file mode 100644 index 00000000..d3791892 --- /dev/null +++ b/src/parser/__tests__/docblock/multiline-special.docblock @@ -0,0 +1,5 @@ +/** + * @special x + * y + * z + */ diff --git a/src/parser/__tests__/docblock/specials-with-hyphen.docblock b/src/parser/__tests__/docblock/specials-with-hyphen.docblock new file mode 100644 index 00000000..1eaa1c62 --- /dev/null +++ b/src/parser/__tests__/docblock/specials-with-hyphen.docblock @@ -0,0 +1,7 @@ +/** + * @repeat-hyphen a + * @repeat-hyphen b + * @multiline-hyphen mmm + * nnn + * @normal-hyphen x + */ diff --git a/src/parser/__tests__/docblock/specials.docblock b/src/parser/__tests__/docblock/specials.docblock new file mode 100644 index 00000000..45b39039 --- /dev/null +++ b/src/parser/__tests__/docblock/specials.docblock @@ -0,0 +1,8 @@ +/** + * @type type + * @task task + * + * @special dot + * @special dot + * @special dash + */ diff --git a/src/parser/__tests__/editorconfig/.editorconfig b/src/parser/__tests__/editorconfig/.editorconfig new file mode 100644 index 00000000..7f37bdc4 --- /dev/null +++ b/src/parser/__tests__/editorconfig/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[file*] +indent_size = 3 + +[*.txt] +charset = latin1 + +[{invalid_glob] +indent_size = 1 + +[externals/**] +indent_style = +indent_size = +trim_trailing_whitespace = false +insert_final_newline = false diff --git a/src/parser/__tests__/editorconfig/empty/.editorconfig b/src/parser/__tests__/editorconfig/empty/.editorconfig new file mode 100644 index 00000000..78b36ca0 --- /dev/null +++ b/src/parser/__tests__/editorconfig/empty/.editorconfig @@ -0,0 +1 @@ +root = true diff --git a/src/parser/__tests__/editorconfig/externals/.editorconfig b/src/parser/__tests__/editorconfig/externals/.editorconfig new file mode 100644 index 00000000..e69de29b diff --git a/src/parser/__tests__/editorconfig/subdir/.editorconfig b/src/parser/__tests__/editorconfig/subdir/.editorconfig new file mode 100644 index 00000000..c949bed7 --- /dev/null +++ b/src/parser/__tests__/editorconfig/subdir/.editorconfig @@ -0,0 +1,3 @@ +[*] +indent_style = tab +charset = utf-8-bom diff --git a/src/parser/__tests__/json/base64.data b/src/parser/__tests__/json/base64.data new file mode 100644 index 00000000..5b3330c2 --- /dev/null +++ b/src/parser/__tests__/json/base64.data @@ -0,0 +1 @@ +fileName:Resume.doc;base64stream:0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8tAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAP7///8WAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAP7////+////LwAAAP7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAA/v///wgAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAC8AAAACAAAAAEAAABIAAAABAAAAFAAAAAIAAAAaAAAAAkAAACAAAAACgAAAIwAAAALAAAAmAAAAAwAAACkAAAADQAAALAAAAACAAAA6f0AAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAACAAAAMQAAAEAAAAAAgRssAAAAAEAAAAAAAAAAAAAAAEAAAAAA1pEh62jLAUAAAAAAhXEJ8mjLAQAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAEAAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rhIANQAKAAEAWwAPAAIAAAAAAAAAbgAAEPH/AgBuAAAABwBEAGUAZgBhAHUAbAB0AAAAGgAAAAMkAGEkADEkACokATckATUkATMkAUEkADMAQioAT0oAAFFKAABDShgAbUgJBHNICQRLSAEAUEoEAG5I/wBeSgUAYUoYAF9I/wB0SP8AAAAAAAAAAAAAAAAAAAAAAAAAAEIAQUDy/6EAQgAAABkAQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAAAAAAAAAAAAAAAAAuAP4f8v/xAC4AAAAJAFcAVwA4AE4AdQBtADEAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v8BAS4AAAAJAFcAVwA4AE4AdQBtADEAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v8RAS4AAAAJAFcAVwA4AE4AdQBtADIAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v8hAS4AAAAJAFcAVwA4AE4AdQBtADIAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v8xAS4AAAAJAFcAVwA4AE4AdQBtADMAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v9BAS4AAAAJAFcAVwA4AE4AdQBtADMAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v9RAS4AAAAJAFcAVwA4AE4AdQBtADQAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v9hAS4AAAAJAFcAVwA4AE4AdQBtADQAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v9xAS4AAAAJAFcAVwA4AE4AdQBtADUAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v+BAS4AAAAJAFcAVwA4AE4AdQBtADUAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v+RAS4AAAAJAFcAVwA4AE4AdQBtADYAegAwAAAADABPSgYAUUoGAF5KBwA2AP4f8v+hATYAAAAJAFcAVwA4AE4AdQBtADcAegAwAAAAFABPSgYAUUoGAENKHABeSgcAYUocADYA/h/y/7EBNgAAAAkAVwBXADgATgB1AG0ANwB6ADEAAAAUAE9KCQBRSgkAQ0ocAF5KBwBhShwAQgD+H/L/wQFCAAAAGQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0AAAAAABIAP4f8v/RAUgAAAAcAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAAAAAAC4A/h/y/+EBLgAAAAkAVwBXADgATgB1AG0ANgB6ADEAAAAMAE9KCABRSggAXkoHADYA/h/y//EBNgAAAAkAVwBXADgATgB1AG0AOAB6ADAAAAAUAE9KBgBRSgYAQ0ocAF5KBwBhShwANgD+H/L/AQI2AAAACQBXAFcAOABOAHUAbQA4AHoAMQAAABQAT0oIAFFKCABDShwAXkoHAGFKHABKAP4f8v8RAkoAAAAdAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAAAAAATAD+H/L/IQJMAAAAHgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAAAAAATgD+H/L/MQJOAAAAHwBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxAAAAAABQAP4f8v9BAlAAAAAgAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAAAAAAUgD+H/L/UQJSAAAAIQBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAAAAAAVAD+H/L/YQJUAAAAIgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxAAAAAABWAP4f8v9xAlYAAAAjAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAAAAAAWAD+H/L/gQJYAAAAJABXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAAAAAAWgD+H/L/kQJaAAAAJQBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxAAAAAABcAP4f8v+hAlwAAAAmAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAXgD+H/L/sQJeAAAAJwBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAYAD+H/L/wQJgAAAAKABXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAxAAAAAABiAP4f8v/RAmIAAAApAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAZAD+H/L/4QJkAAAAKgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAANgD+H/L/8QI2AAAABwBCAHUAbABsAGUAdABzAAAAGABPSgcAUUoHAENKHABQSgcAXkoHAGFKHABGAP4fAQASA0YAAAAHAEgAZQBhAGQAaQBuAGcAAAANADAAE6TwABSkeAAGJAEAGABPSgIAUUoCAENKHABQSgoAXkoFAGFKHAAuAEIQAQASAy4AAAAJAFQAZQB4AHQAIABiAG8AZAB5AAAACgAxABOkAAAUpHgAAAAgAC8QEQMiAyAAAAAEAEwAaQBzAHQAAAACADIABABeSgsAQAD+HwEAMgNAAAAABwBDAGEAcAB0AGkAbwBuAAAADQAzABOkeAAUpHgADCQBABIAQ0oYADYIAV5KCwBhShgAXQgBJgD+HwEAQgMmAAAABQBJAG4AZABlAHgAAAAFADQADCQBAAQAXkoLAAAAAACxDAAABAAALgAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAWGQAAYiEAABEAAAASAAAAAAgAAGYLAABiEQAAFhkAAGIhAAATAAAAFAAAABUAAAAWAAAABwABAAAAAQAAAP8P/w//D/8P/w//D/8P/w//DwAAAgAAAAIAAAD/D/8P/w//D/8P/w//D/8P/w8AAAMAAAADAAAA/w//D/8P/w//D/8P/w//D/8PAAAEAAAABAAAAP8P/w//D/8P/w//D/8P/w//DwAABQAAAAUAAAD/D/8P/w//D/8P/w//D/8P/w8AAAYAAAAGAAAA/w//D/8P/w//D/8P/w//D/8PAAAHAAAABwAAAP8P/w//D/8P/w//D/8P/w//DwAAAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoTYCWCEmP4VxgUAAdgJBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehEALYISY/hXGBQABQAsGT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoQQDmCEmP4VxgUAARAOBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehHgPYISY/hXGBQABeA8GT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoRIEmCEmP4VxgUAAUgSBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehLATYISY/hXGBQABsBMGT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EsAFghFD+FcYFAAGwAQYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehEACYITA/RXGBQABQAIGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoTQAmCEMP0VxgUAAdACBgAAAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EYANghKD8FcYFAAFgAwYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehPADYIQQ/BXGBQAB8AMGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoSABGCEgPsVxgUAAYAEBgAAAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EEAVghPD6FcYFAAEQBQYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehKAFYIRg+hXGBQABoAUGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoQwBmCE0PkVxgUAATAGBgAABwAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////8HAAAABwBXAFcAOABOAHUAbQAxAAcAVwBXADgATgB1AG0AMwAHAFcAVwA4AE4AdQBtADQABwBXAFcAOABOAHUAbQA1AAcAVwBXADgATgB1AG0ANgAHAFcAVwA4AE4AdQBtADcAAAAAAAAAsQwAAAAAAAACEAAAAAAAAACxDAAAUAAACAAAAAAMAAAARxaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAANRaQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAeQBtAGIAbwBsAAAAMyaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcgBpAGEAbAAAAEEmkAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAHIAZQBiAHUAYwBoAGUAdAAgAE0AUwAAAEkmkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAANQaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAYQBoAG8AbQBhAAAANQSQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAeQBtAGIAbwBsAAAAXwSQAQALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AcABlAG4AUwB5AG0AYgBvAGwAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAAXwSQAYALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AcABlAG4AUwB5AG0AYgBvAGwAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAAOwSQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAaQBuAGcAZABpAG4AZwBzAAAAOwaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0AUwAgAE0AaQBuAGMAaABvAAAANQSQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAYQBoAG8AbQBhAAAAQgAEAAEIjRgAAMUCAABoAQAAAACWVeoGy1XqBgAAAAABAAAAAAAMAgAAgQwAAAIAPQAAAAQAg5A9AAAADAIAAIEMAAACAD0AAAA9AAAAAAAAACcDACAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADspQEBTSAJBAAAABK/AAAAAAAAMAAAAAAACAAAYiEAAA4AQ2FvbGFuODAAAAAAAAAAAAAAAAAAAAAAAAAJBBYAMi4AAAAAAAAAAAAAsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AEQAAAAIAAAD//w8AEwAAAAQAAAD//w8AAAAAAAAAAAAAAAAAAAAAAIgAAAAAAKoKAAAAAAAAqgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgoAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4KAAA0AAAA8goAABQAAAAGCwAAJAAAAAAAAAAAAAAAlxsAABwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzHgAAYgIAAAAAAAAAAAAAghsAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCwAAxgAAAH4aAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGwAAaAAAAAAAAAAAAAAAdhsAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcAByAGkAbAAgAFYAaQBzAG4AaQBjAGsADQAxADQAMAAgAEwAbwBuAGcAIABEAHIAaQB2AGUADQBJAHIAdwBpAG4ALAAgAFAAQQAgADEANQA2ADQAMgANACgANwAyADQAKQAgADYAMQAwAC0AMQA0ADgAMAANAA0ADQBDAG8AbQBwAHUAdABlAHIAIABTAGsAaQBsAGwAcwANAA0ACQAJAEkAIABhAG0AIABlAHgAcABlAHIAaQBlAG4AYwBlAGQAIAB3AGkAdABoACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALgANAA0ACQAJAEkAIABjAGEAbgAgAHUAcwBlACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAdABvACAAZABvAHcAbgBsAG8AYQBkACAAdQBwAGQAYQB0AGUAcwAgAGYAbwByACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALAAgAHMAZQBhAHIAYwBoAA0ACQAJAGQAaQByAGUAYwB0AGkAbwBuAHMAIAB0AG8AIABhAG4AZAAgAGYAcgBvAG0AIABkAGkAZgBmAGUAcgBlAG4AdAAgAGwAbwBjAGEAdABpAG8AbgBzACwAIABjAGEAbgAgAHMAZQBhAHIAYwBoACAAZgBvAHIAIABwAGgAeQBzAGkAYwBhAGwAIABhAGQAZAByAGUAcwBzAGUAcwAgAGYAbwByAA0ACQAJAGMAbwBtAHAAYQBuAGkAZQBzACAAbwByACAAaQBuAGQAaQB2AGkAZAB1AGEAbABzACwAIABhAG4AZAAgAGUAbQBhAGkAbAAuAA0ADQBFAGQAdQBjAGEAdABpAG8AbgANAA0ACQAJAEIAcgBhAGQAZgBvAHIAZAAgAEIAdQBzAGkAbgBlAHMAcwAsACAAUABpAHQAdABzAGIAdQByAGcAaAAsACAAUABBAAkACQAJAAkACQAJACgAOQAvADAAMAAtADEAMAAvADAAMQApAA0ACQAJAEEAUwBCACwAIABPAGYAZgBpAGMAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAG8AbgANAEMAbwB1AHIAcwBlACAAdwBvAHIAawAgAGkAbgBjAGwAdQBkAGUAZAA6ACAARQBzAHMAZQBuAHQAaQBhAGwAcwAgAG8AZgAgAE0AYQBuAGEAZwBlAG0AZQBuAHQALAAgAEQAYQB0AGEAIABBAG4AYQBsAHkAcwBpAHMALAAgAEMAbwBuAGMAZQBwAHQAcwAgAG8AZgAgAEQAZQBzAGsAdABvAHAAIABQAHUAYgBsAGkAcwBoAGkAbgBnACwAIABBAGQAdgBhAG4AYwBlAGQAIABFAGwAZQBjAHQAcgBvAG4AaQBjACAAUwBwAHIAZQBhAGQAcwBoAGUAZQB0AHMALgANAA0ACQAJAFAAZQBuAG4AIABUAHIAYQBmAGYAbwByAGQAIABIAGkAZwBoACAAUwBjAGgAbwBvAGwALAAgAEgAYQByAHIAaQBzAG8AbgAgAEMAaQB0AHkALAAgAFAAQQAJAAkACQAJAAkAKAAxADkAOQA2AC0AMgAwADAAMAApAA0ACQAJAEQAaQBwAGwAbwBtAGEALQAgAEcAZQBuAGUAcgBhAGwAIABTAHQAdQBkAGkAZQBzAA0ARwBlAG4AZQByAGEAbAAgAEMAbwB1AHIAcwBlAHMAIABvAGYAIABzAHQAdQBkAHkAIAB3AGUAcgBlACAATQBhAHQAaAAsACAARQBuAGcAbABpAHMAaAAgAGEAbgBkACAAUwBjAGkAZQBuAGMAZQAuAA0AVABvAG8AawAgAFMAcABlAGUAZAB3AHIAaQB0AGkAbgBnACwAIABTAHAAZQBlAGQAdwByAGkAdABpAG4AZwAgAEkASQAsACAAUABvAHQAdABlAHIAeQAgAGEAbgBkACAASgBlAHcAZQBsAHIAeQAgAGEAcwAgAGEAZABkAGUAZAAgAGMAbwB1AHIAcwBlAHMALgANAFAAZQByAGYAbwByAG0AZQBkACAAaQBuACAAdABoAGUAIABtAGEAcgBjAGgAaQBuAGcAIABiAGEAbgBkACAAYQBuAGQAIABjAG8AbgBjAGUAcgB0ACAAYgBhAG4AZAAgAGEAbABsACAAZgBvAHUAcgAgAHkAZQBhAHIAcwAuAA0AVwBhAHMAIABhACAAbQBlAG0AYgBlAHIAIABvAGYAIABDAG8AbQBtAHUAbgBpAHQAeQAgAEEAYwB0AGkAbwBuACAAUAByAG8AZwByAGEAbQAgACgAQwBBAFAAKQANAEgAZQBsAHAAZQBkACAAbwB1AHQAIABiAGEAYwBrAHMAdABhAGcAZQAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAcAByAGkAbgBnACAAbQB1AHMAaQBjAGEAbAAgAHQAdwBvACAAeQBlAGEAcgBzACAAaQBuACAAYQAgAHIAbwB3AC4ADQANAA0ARQBtAHAAbABvAHkAbQBlAG4AdAAgAEgAaQBzAHQAbwByAHkADQANAAkASwBlAHkAcwB0AG8AbgBlACAAQwBvAGwAbABlAGMAdABpAG8AbgBzACwAIABJAHIAdwBpAG4ALAAgAFAAQQAJAAkACQAJAAkACQAJACgANgAvADEANAAtAFAAcgBlAHMAZQBuAHQAKQANAAkARABhAHQAYQAgAEUAbgB0AHIAeQANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAdgBlAHIAaQBmAHkAIABmAGkAbgBhAGwAIABsAG8AYwBhAGwAIAByAGUAdAB1AHIAbgBzACAAYQBuAGQAIAB2AGUAcgBpAGYAeQAgAHQAaABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAdABoAGEAdAAgAGkAcwAgAGkAbgANAHQAaABlACAAcwB5AHMAdABlAG0ALgANAAkADQAJAEMAYQB0AGMAaAAtAFUAcAAgAEwAbwBnAGkAcwB0AGkAYwBzACwAIABHAHIAZQBlAG4AcwBiAHUAcgBnACwAIABQAEEACQAJAAkACQAJAAkAKAA0AC8AMQA0AC0ANQAvADEANAApAA0ACQBTAGgAaQBwAHAAaQBuAGcALwBSAGUAYwBlAGkAdgBpAG4AZwAgAEMAbABlAHIAawANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAASQBuACAAJgAgAE8AdQB0ACAAYwBvAHUAbgB0ACAAZgBvAHIAIAB0AGgAZQAgAHAAcgBlAHYAaQBvAHUAcwAgAGQAYQB5AC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAHAAcgBvAGMAZQBzAHMAIABCAGkAbABsAHMAIABvAGYAIABMAGEAZABpAG4AZwAgAGYAbwByACAAUwBoAGkAcABtAGUAbgB0AHMAIAB1AHMAaQBuAGcAIAAzAFAATAAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAHIAbwBjAGUAcwBzACAAcgBlAGMAZQBpAHAAdABzACAAZgBvAHIAIABpAHQAZQBtAHMAIABkAGUAbABpAHYAZQByAGUAZAAgAHUAcwBpAG4AZwAgADMAUABMAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAGEAcgByAGkAZQByAHMAIAB0AG8AIABhAHIAcgBhAG4AZwBlACAAcABpAGMAawAgAHUAcABzACAAZgBvAHIAIABzAGgAaQBwAG0AZQBuAHQAcwAuAA0ADQANAAkATABvAGQAbwB2AGkAYwBvACAAJgAgAEEAcwBzAG8AYwBpAGEAdABlAHMALAAgAEYAbwByAGUAcwB0ACAASABpAGwAbABzACwAIABQAEEACQAJAAkACQAJAAkAKAAxAC8AMQAzAC0AMgAvADEANAApAA0ACQBQAHIAbwBjAGUAcwBzAG8AcgANAEQAdQByAGkAbgBnACAAdABhAHgAIABzAGUAYQBzAG8AbgAgAEkAIABwAHIAbwBjAGUAcwBzACAAYwBsAGkAZQBuAHQAcwAgAHQAYQB4ACAAcgBlAHQAdQByAG4AcwAgAGIAeQAgAG0AYQBrAGkAbgBnACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAGMAbABpAGUAbgB0AHMAIAB0AGEAeAAgAHIAZQB0AHUAcgBuACAAZgBvAHIAIAB0AGgAZQAgAGMAbABpAGUAbgB0ACAAdABvACAAawBlAGUAcAAgAGYAbwByACAAdABoAGUAaQByACAAcgBlAGMAbwByAGQAcwAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZwBlAG4AZQByAGEAbAAgAG8AZgBmAGkAYwBlACAAZAB1AHQAaQBlAHMALgANAA0ADQAJAA0ACQBBAG0AZQByAGkAcwBvAHUAcgBjAGUAYgBlAHIAZwBlAG4ALQAgAFQAaABlAHIAYQBjAG8AbQAsACAATQBvAG4AcgBvAGUAdgBpAGwAbABlACwAIABQAEEACQAJAAkACQAoADEAMgAvADEAMQAtADEAMAAvADEAMgApAA0ACQBTAGUAbgBpAG8AcgAgAEQAYQB0AGEAIABFAG4AdAByAHkALQBYAGEAcgBlAGwAdABvAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZABhAHQAYQAgAGUAbgB0AHIAeQAgAGYAbwByACAAYgBlAG4AZQBmAGkAdAAgAGkAbgB2AGUAcwB0AGkAZwBhAHQAaQBvAG4AcwAgAGYAbwByACAAdABoAGUAIABkAHIAdQBnACAAYwBhAGwAbABlAGQAIABYAGEAcgBlAGwAdABvAC4ADQBFAG4AdABlAHIAIABCAHUAcwBpAG4AZQBzAHMAIABBAHMAcwBvAGMAaQBhAHQAZQBzACAAQQBnAHIAZQBlAG0AZQBuAHQAcwAgAGYAbwByACAAcABoAHkAcwBpAGMAaQBhAG4AcwAgAG8AZgBmAGkAYwBlAHMAIABmAG8AcgAgAHQAaABlACAAZAByAHUAZwAgAGMAYQBsAGwAZQBkACAAWABhAHIAZQBsAHQAbwAuAA0AUwBlAGEAcgBjAGgAIABwAGgAeQBzAGkAYwBpAGEAbgBzACAATgBQAEkAIABuAHUAbQBiAGUAcgBzACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByAC4ADQBMAGkAbgBrACAAaQBtAGEAZwBlAHMAIAB0AG8AIABjAGEAcwBlAHMAIAB1AHMAaQBuAGcAIABLAG8AZgBhAHgALgANAEYAYQB4ACAAaQBuACAAVgBlAHIAYgBhAGwAIABCAGUAbgBlAGYAaQB0ACAASQBuAHYAZQBzAHQAaQBnAGEAdABpAG8AbgAgAGYAbwByAG0AcwAgAHQAbwAgAEsAbwBmAGEAeAAgAHQAbwAgAGwAaQBuAGsAIAB0AG8AIABjAGEAcwBlAHMALgANAA0ADQAJAFQAaABlACAATgBlAHcAIABNAG8AbgByAG8AZQB2AGkAbABsAGUAIABEAG8AZABnAGUAIABDAG8AbABsAGkAcwBpAG8AbgAgAEMAZQBuAHQAZQByACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkAKAAxAC8AMQAxAC0AMQAyAC8AMQAxACkAIAAJAFIAZQBjAGUAcAB0AGkAbwBuAGkAcwB0AA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgAgAHAAaABvAG4AZQBzAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAHUAcwB0AG8AbQBlAHIAcwAgACAAdwBpAHQAaAAgAGkAbgBzAHUAcgBhAG4AYwBlACAAYQBzAHMAaQBnAG4AbQBlAG4AdABzACAASQAgAHIAZQBjAGUAaQB2AGUAZAAgAHYAaQBhACAAQwBDAEMAIABPAG4AZQAgAHQAbwAgAHMAYwBoAGUAZAB1AGwAZQAgAGYAbwByACAAZQBzAHQAaQBtAGEAdABlAHMALgANAEkAIABlAG4AdABlAHIAIABiAG8AZAB5ACAAcwBoAG8AcAAgAHQAZQBjAGgAbgBpAGMAaQBhAG4AJwBzACAAdABpAG0AZQAgAGMAYQByAGQAcwAgAHUAcwBpAG4AZwAgAEEARABQAC4ADQBJACAAbwByAGQAZQByACAAJgAgAGMAaABlAGMAawAgAGkAbgAgAHAAYQByAHQAcwAuAA0ASQAgAHcAcgBpAHQAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGMAbABvAHMAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ATwBuACAAbwBjAGMAYQBzAGkAbwBuACAASQAgAGgAYQB2AGUAIABmAGkAbABsAGUAZAAgAGkAbgAgAGYAbwByACAAdABoAGUAIABjAGEAcwBoAGkAZQByACAAYQB0ACAASwBpAGEALwBNAGEAegBkAGEALgANAA0ACQANAAkARABhAHkAIABGAG8AcgBkACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkACQAJAAkACQAJACgAMQAxAC8AMAA1AC0ANgAvADEAMAApAA0ACQBSAGUAYwBlAHAAdABpAG8AbgBpAHMAdAAvAEMAYQBzAGgAaQBlAHIALwBDAHUAcwB0AG8AbQBlAHIAIABTAGUAcgB2AGkAYwBlAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgBlAGQAIABwAGgAbwBuAGUAcwAsACAAdABhAGsAZQAgAGMAYQByAGUAIABvAGYAIABzAGUAcgB2AGkAYwBlACAAYwB1AHMAdABvAG0AZQByAHMALAAgAGIAYQBsAGEAbgBjAGUAIABiAG8AdABoACAAYwBhAHMAaAAgAGQAcgBhAHcAZQByAHMALAAgAGEAbgBkACAAZABvACAAYQAgAGQAZQBwAG8AcwBpAHQALgANAEkAIABzAHQAbwBjAGsAZQBkACAAaQBuACAAbgBlAHcAIABhAG4AZAAgAHUAcwBlAGQAIAB2AGUAaABpAGMAbABlAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAHcAYQBzACAAcwBvAGwAZQBsAHkAIAByAGUAcwBwAG8AbgBzAGkAYgBsAGUAIABmAG8AcgAgAGUAbgB0AGUAcgBpAG4AZwAgAGkAbgB2AG8AaQBjAGUAcwAgAGYAbwByACAAYQBjAGMAbwB1AG4AdABzACAAcABhAHkAYQBiAGwAZQAgAGEAbgBkACAAcAByAGkAbgB0AGkAbgBnACAAYwBoAGUAYwBrAHMAIABmAG8AcgAgAGEAYwBjAG8AdQBuAHQAcwAgAHAAYQB5AGEAYgBsAGUAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGUAbgB0AGUAcgBlAGQAIABzAHQAbwBjAGsAIABuAHUAbQBiAGUAcgBzACAAZgBvAHIAIABuAGUAdwAgAHYAZQBoAGkAYwBsAGUAcwAgAG8AbgBsAGkAbgBlACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAbwBuACAARABlAGEAbABlAHIAIABBAGMAYwBlAHMAcwAgAFMAeQBzAHQAZQBtACAAZgBvAHIAIABQAE4AQwAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdwBhAHIAcgBhAG4AdAB5ACAAYwBsAGEAaQBtAHMAIABmAG8AcgAgAEoATQAmAEEAIABvAG4AbABpAG4AZQAgAHUAcwBpAG4AZwAgAEkAbgB0AGUAcgBuAGUAdAAgAEUAeABwAGwAbwByAGUAcgAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdAByAGEAbgBzAGYAZQByACAAcABhAHAAZQByAHcAbwByAGsAIABmAG8AcgAgAGQAZQBhAGwAZQByACAAdAByAGEAZABlAHMAIAB1AHMAaQBuAGcAIABDAG8AbgBjAGUAcABzACAAbwBuACAARgBNAEMAIABEAGUAYQBsAGUAcgAuAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABwIAAA6CAAAWggAAHgIAAB6CAAAfAgAAJwIAACeCAAAAgkAAAQJAACyCQAAWgoAAKgKAACqCgAAvgoAAMAKAAAsCwAAMAsAAGYLAABoDAAAagwAAOgMAADsDAAAHg0AAJANAAAkDgAApA4AAAIPAACEDwAAhg8AAIgPAACuDwAAsA8AABwQAAAeEAAANBAAANwQAAD0EAAA+BAAAPoQAABiEQAAZBEAAJYRAAAeEgAAphIAACwTAAC0EwAAthMAALgTAAAsFAAAQhQAAEwVAACwFQAAshUAALQVAAC4FQAANhYAADgWAABsFgAAKBcAANoXAABIGAAAjBgAABYZAAD06+vr39/Q39/f39/f39DBwcHQwcHBwdDBwcHBwbKy0N/f39DBp9DQ39/QwcHBwaMA39Df39/f39/f0N/f39/fAAAGNQgAXAgAABQ2CAE1CABdCAFcCABPSgMAUUoDAAAcQ0ocADYIATUIAGFKHABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAGFKGABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAWFKGABdCAFcCAFPSgMAUUoDAAAWQ0oYADYIAWFKGABdCAFPSgMAUUoDAAAQQ0ocAGFKHABPSgMAUUoDAAAWQ0owADUIAWFKMABcCAFPSgMAUUoDAEAWGQAAGBkAABoZAACyGQAAzBkAABAaAADwGgAAWhsAAI4bAADQGwAAEhwAAIgcAACKHAAAjhwAAJAcAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA9/fr3M3Nzc3Nzc3Nzc3c3Nzc3Nzc3M3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxDShgANggBNQgAYUoYAF0IAVwIAE9KAwBRSgMAABxDShgANggBNQgBYUoYAF0IAVwIAU9KAwBRSgMAABZDShgANggBYUoYAF0IAU9KAwBRSgMAABBDShgAYUoYAE9KAwBRSgMAGAAIAAAcCAAAOggAAFoIAAB4CAAAeggAAHwIAACcCAAAnggAAAIJAAAECQAAsgkAAFoKAACoCgAAqgoAAL4KAADACgAALAsAAGYLAAD6AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAADrAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAA1wAAAAAAAAAAAAAAANIAAAAAAAAAAAAAAADNAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAMMAAAAAAAAAAAAAAAC+AAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAALQAAAAAAAAAAAAAAACvAAAAAAAAAAAAAAAAqgAAAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQBYSQBAAQAAAMkAWEkAQAEAAADJAFhJAEABAAAAyQBYSQBAAQAAAMkAWEkAQASZgsAAGgMAABqDAAA6AwAAB4NAACQDQAAJA4AAKQOAAACDwAAhA8AAIYPAACIDwAArg8AALAPAAAcEAAANBAAANwQAAD0EAAA+BAAAGIRAAD3AAAAAAAAAAAAAAAA8gAAAAAAAAAAAAAAAO0AAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADbAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAxwAAAAAAAAAAAAAAAMIAAAAAAAAAAAAAAAC9AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALMAAAAAAAAAAAAAAACuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAMkAGEkAAAEAAADJABhJAAFAAAKJgALRgAABQAACiYAC0YBAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAwADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAIAAAKJgALRgIAAyQAYSQAABNiEQAAlhEAAB4SAACmEgAALBMAALQTAAC2EwAAuBMAACwUAABCFAAATBUAALAVAACyFQAAtBUAALgVAAA2FgAAbBYAACgXAADaFwAASBgAAIwYAAAWGQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6wAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADhAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANkAAAAAAAAAAAAAAADUAAAAAAAAAAAAAAAAzwAAAAAAAAAAAAAAAMoAAAAAAAAAAAAAAADFAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAgAAAomAAtGBQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGBgADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQABQAACiYAC0YBAAAEAAADJABhJAAAFRYZAAAYGQAAGhkAAMwZAAAQGgAA8BoAAFobAACOGwAA0BsAABIcAACIHAAAihwAAI4cAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOMAAAAAAAAAAAAAAADeAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADHAAAAAAAAAAAAAAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQACAAACiYAC0YEAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAWMAAfsNAvILDgPSGwwgIisMICI5CwASSQAAAyUAAAMZBoATBwAAAAADNQAAAoMgAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAABgkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEACAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgACAAAABAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAAABAE8AbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP////8DAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAUAAAAAAAAADEAVABhAGIAbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABUhAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAFAAAABgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA7AAAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAyLgAAAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAA=;type:2 \ No newline at end of file diff --git a/src/parser/__tests__/json/base64.json b/src/parser/__tests__/json/base64.json new file mode 100644 index 00000000..4e1afee5 --- /dev/null +++ b/src/parser/__tests__/json/base64.json @@ -0,0 +1 @@ +{"action":"candidate.create","actionId":"80653a26cc46357ff79ff83b47e27c3cb7a668bd","params":{"attachments":["fileName:Resume.doc;base64stream:0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8tAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAP7///8WAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAP7////+////LwAAAP7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAA/v///wgAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAC8AAAACAAAAAEAAABIAAAABAAAAFAAAAAIAAAAaAAAAAkAAACAAAAACgAAAIwAAAALAAAAmAAAAAwAAACkAAAADQAAALAAAAACAAAA6f0AAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAACAAAAMQAAAEAAAAAAgRssAAAAAEAAAAAAAAAAAAAAAEAAAAAA1pEh62jLAUAAAAAAhXEJ8mjLAQAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAEAAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rhIANQAKAAEAWwAPAAIAAAAAAAAAbgAAEPH/AgBuAAAABwBEAGUAZgBhAHUAbAB0AAAAGgAAAAMkAGEkADEkACokATckATUkATMkAUEkADMAQioAT0oAAFFKAABDShgAbUgJBHNICQRLSAEAUEoEAG5I/wBeSgUAYUoYAF9I/wB0SP8AAAAAAAAAAAAAAAAAAAAAAAAAAEIAQUDy/6EAQgAAABkAQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAAAAAAAAAAAAAAAAAuAP4f8v/xAC4AAAAJAFcAVwA4AE4AdQBtADEAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v8BAS4AAAAJAFcAVwA4AE4AdQBtADEAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v8RAS4AAAAJAFcAVwA4AE4AdQBtADIAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v8hAS4AAAAJAFcAVwA4AE4AdQBtADIAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v8xAS4AAAAJAFcAVwA4AE4AdQBtADMAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v9BAS4AAAAJAFcAVwA4AE4AdQBtADMAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v9RAS4AAAAJAFcAVwA4AE4AdQBtADQAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v9hAS4AAAAJAFcAVwA4AE4AdQBtADQAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v9xAS4AAAAJAFcAVwA4AE4AdQBtADUAegAwAAAADABPSgYAUUoGAF5KBwAuAP4f8v+BAS4AAAAJAFcAVwA4AE4AdQBtADUAegAxAAAADABPSggAUUoIAF5KBwAuAP4f8v+RAS4AAAAJAFcAVwA4AE4AdQBtADYAegAwAAAADABPSgYAUUoGAF5KBwA2AP4f8v+hATYAAAAJAFcAVwA4AE4AdQBtADcAegAwAAAAFABPSgYAUUoGAENKHABeSgcAYUocADYA/h/y/7EBNgAAAAkAVwBXADgATgB1AG0ANwB6ADEAAAAUAE9KCQBRSgkAQ0ocAF5KBwBhShwAQgD+H/L/wQFCAAAAGQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0AAAAAABIAP4f8v/RAUgAAAAcAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAAAAAAC4A/h/y/+EBLgAAAAkAVwBXADgATgB1AG0ANgB6ADEAAAAMAE9KCABRSggAXkoHADYA/h/y//EBNgAAAAkAVwBXADgATgB1AG0AOAB6ADAAAAAUAE9KBgBRSgYAQ0ocAF5KBwBhShwANgD+H/L/AQI2AAAACQBXAFcAOABOAHUAbQA4AHoAMQAAABQAT0oIAFFKCABDShwAXkoHAGFKHABKAP4f8v8RAkoAAAAdAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAAAAAATAD+H/L/IQJMAAAAHgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAAAAAATgD+H/L/MQJOAAAAHwBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxAAAAAABQAP4f8v9BAlAAAAAgAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAAAAAAUgD+H/L/UQJSAAAAIQBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAAAAAAVAD+H/L/YQJUAAAAIgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxAAAAAABWAP4f8v9xAlYAAAAjAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAAAAAAWAD+H/L/gQJYAAAAJABXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAAAAAAWgD+H/L/kQJaAAAAJQBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxAAAAAABcAP4f8v+hAlwAAAAmAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAXgD+H/L/sQJeAAAAJwBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAYAD+H/L/wQJgAAAAKABXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAxAAAAAABiAP4f8v/RAmIAAAApAFcAVwAtAEEAYgBzAGEAdAB6AC0AUwB0AGEAbgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAMQAxADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAAZAD+H/L/4QJkAAAAKgBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAMQAxADEAMQAxADEAMQAxADEAMQAAAAAANgD+H/L/8QI2AAAABwBCAHUAbABsAGUAdABzAAAAGABPSgcAUUoHAENKHABQSgcAXkoHAGFKHABGAP4fAQASA0YAAAAHAEgAZQBhAGQAaQBuAGcAAAANADAAE6TwABSkeAAGJAEAGABPSgIAUUoCAENKHABQSgoAXkoFAGFKHAAuAEIQAQASAy4AAAAJAFQAZQB4AHQAIABiAG8AZAB5AAAACgAxABOkAAAUpHgAAAAgAC8QEQMiAyAAAAAEAEwAaQBzAHQAAAACADIABABeSgsAQAD+HwEAMgNAAAAABwBDAGEAcAB0AGkAbwBuAAAADQAzABOkeAAUpHgADCQBABIAQ0oYADYIAV5KCwBhShgAXQgBJgD+HwEAQgMmAAAABQBJAG4AZABlAHgAAAAFADQADCQBAAQAXkoLAAAAAACxDAAABAAALgAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAWGQAAYiEAABEAAAASAAAAAAgAAGYLAABiEQAAFhkAAGIhAAATAAAAFAAAABUAAAAWAAAABwABAAAAAQAAAP8P/w//D/8P/w//D/8P/w//DwAAAgAAAAIAAAD/D/8P/w//D/8P/w//D/8P/w8AAAMAAAADAAAA/w//D/8P/w//D/8P/w//D/8PAAAEAAAABAAAAP8P/w//D/8P/w//D/8P/w//DwAABQAAAAUAAAD/D/8P/w//D/8P/w//D/8P/w8AAAYAAAAGAAAA/w//D/8P/w//D/8P/w//D/8PAAAHAAAABwAAAP8P/w//D/8P/w//D/8P/w//DwAAAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSgkAUUoJAF5KBwABAGzwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoTYCWCEmP4VxgUAAdgJBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehEALYISY/hXGBQABQAsGT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoQQDmCEmP4VxgUAARAOBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehHgPYISY/hXGBQABeA8GT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAENKHABeSgcAYUocAAEAt/ABAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAXoRIEmCEmP4VxgUAAUgSBk9KCABRSggAQ0ocAF5KBwBhShwAAQDmJQEAAAAXAAAAAAAAAAAAAAAAAAAAAAAAABQQAABehLATYISY/hXGBQABsBMGT0oIAFFKCABDShwAXkoHAGFKHAABAKolAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EsAFghFD+FcYFAAGwAQYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehEACYITA/RXGBQABQAIGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoTQAmCEMP0VxgUAAdACBgAAAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EYANghKD8FcYFAAFgAwYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehPADYIQQ/BXGBQAB8AMGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoSABGCEgPsVxgUAAYAEBgAAAQAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAABAAAF6EEAVghPD6FcYFAAEQBQYAAAEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAQAABehKAFYIRg+hXGBQABoAUGAAABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAXoQwBmCE0PkVxgUAATAGBgAABwAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////8HAAAABwBXAFcAOABOAHUAbQAxAAcAVwBXADgATgB1AG0AMwAHAFcAVwA4AE4AdQBtADQABwBXAFcAOABOAHUAbQA1AAcAVwBXADgATgB1AG0ANgAHAFcAVwA4AE4AdQBtADcAAAAAAAAAsQwAAAAAAAACEAAAAAAAAACxDAAAUAAACAAAAAAMAAAARxaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAANRaQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAeQBtAGIAbwBsAAAAMyaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcgBpAGEAbAAAAEEmkAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAHIAZQBiAHUAYwBoAGUAdAAgAE0AUwAAAEkmkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAANQaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAYQBoAG8AbQBhAAAANQSQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAeQBtAGIAbwBsAAAAXwSQAQALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AcABlAG4AUwB5AG0AYgBvAGwAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAAXwSQAYALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AcABlAG4AUwB5AG0AYgBvAGwAAABBAHIAaQBhAGwAIABVAG4AaQBjAG8AZABlACAATQBTAAAAOwSQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAaQBuAGcAZABpAG4AZwBzAAAAOwaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0AUwAgAE0AaQBuAGMAaABvAAAANQSQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAYQBoAG8AbQBhAAAAQgAEAAEIjRgAAMUCAABoAQAAAACWVeoGy1XqBgAAAAABAAAAAAAMAgAAgQwAAAIAPQAAAAQAg5A9AAAADAIAAIEMAAACAD0AAAA9AAAAAAAAACcDACAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADspQEBTSAJBAAAABK/AAAAAAAAMAAAAAAACAAAYiEAAA4AQ2FvbGFuODAAAAAAAAAAAAAAAAAAAAAAAAAJBBYAMi4AAAAAAAAAAAAAsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AEQAAAAIAAAD//w8AEwAAAAQAAAD//w8AAAAAAAAAAAAAAAAAAAAAAIgAAAAAAKoKAAAAAAAAqgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgoAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4KAAA0AAAA8goAABQAAAAGCwAAJAAAAAAAAAAAAAAAlxsAABwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzHgAAYgIAAAAAAAAAAAAAghsAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCwAAxgAAAH4aAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGwAAaAAAAAAAAAAAAAAAdhsAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcAByAGkAbAAgAFYAaQBzAG4AaQBjAGsADQAxADQAMAAgAEwAbwBuAGcAIABEAHIAaQB2AGUADQBJAHIAdwBpAG4ALAAgAFAAQQAgADEANQA2ADQAMgANACgANwAyADQAKQAgADYAMQAwAC0AMQA0ADgAMAANAA0ADQBDAG8AbQBwAHUAdABlAHIAIABTAGsAaQBsAGwAcwANAA0ACQAJAEkAIABhAG0AIABlAHgAcABlAHIAaQBlAG4AYwBlAGQAIAB3AGkAdABoACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALgANAA0ACQAJAEkAIABjAGEAbgAgAHUAcwBlACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAdABvACAAZABvAHcAbgBsAG8AYQBkACAAdQBwAGQAYQB0AGUAcwAgAGYAbwByACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALAAgAHMAZQBhAHIAYwBoAA0ACQAJAGQAaQByAGUAYwB0AGkAbwBuAHMAIAB0AG8AIABhAG4AZAAgAGYAcgBvAG0AIABkAGkAZgBmAGUAcgBlAG4AdAAgAGwAbwBjAGEAdABpAG8AbgBzACwAIABjAGEAbgAgAHMAZQBhAHIAYwBoACAAZgBvAHIAIABwAGgAeQBzAGkAYwBhAGwAIABhAGQAZAByAGUAcwBzAGUAcwAgAGYAbwByAA0ACQAJAGMAbwBtAHAAYQBuAGkAZQBzACAAbwByACAAaQBuAGQAaQB2AGkAZAB1AGEAbABzACwAIABhAG4AZAAgAGUAbQBhAGkAbAAuAA0ADQBFAGQAdQBjAGEAdABpAG8AbgANAA0ACQAJAEIAcgBhAGQAZgBvAHIAZAAgAEIAdQBzAGkAbgBlAHMAcwAsACAAUABpAHQAdABzAGIAdQByAGcAaAAsACAAUABBAAkACQAJAAkACQAJACgAOQAvADAAMAAtADEAMAAvADAAMQApAA0ACQAJAEEAUwBCACwAIABPAGYAZgBpAGMAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAG8AbgANAEMAbwB1AHIAcwBlACAAdwBvAHIAawAgAGkAbgBjAGwAdQBkAGUAZAA6ACAARQBzAHMAZQBuAHQAaQBhAGwAcwAgAG8AZgAgAE0AYQBuAGEAZwBlAG0AZQBuAHQALAAgAEQAYQB0AGEAIABBAG4AYQBsAHkAcwBpAHMALAAgAEMAbwBuAGMAZQBwAHQAcwAgAG8AZgAgAEQAZQBzAGsAdABvAHAAIABQAHUAYgBsAGkAcwBoAGkAbgBnACwAIABBAGQAdgBhAG4AYwBlAGQAIABFAGwAZQBjAHQAcgBvAG4AaQBjACAAUwBwAHIAZQBhAGQAcwBoAGUAZQB0AHMALgANAA0ACQAJAFAAZQBuAG4AIABUAHIAYQBmAGYAbwByAGQAIABIAGkAZwBoACAAUwBjAGgAbwBvAGwALAAgAEgAYQByAHIAaQBzAG8AbgAgAEMAaQB0AHkALAAgAFAAQQAJAAkACQAJAAkAKAAxADkAOQA2AC0AMgAwADAAMAApAA0ACQAJAEQAaQBwAGwAbwBtAGEALQAgAEcAZQBuAGUAcgBhAGwAIABTAHQAdQBkAGkAZQBzAA0ARwBlAG4AZQByAGEAbAAgAEMAbwB1AHIAcwBlAHMAIABvAGYAIABzAHQAdQBkAHkAIAB3AGUAcgBlACAATQBhAHQAaAAsACAARQBuAGcAbABpAHMAaAAgAGEAbgBkACAAUwBjAGkAZQBuAGMAZQAuAA0AVABvAG8AawAgAFMAcABlAGUAZAB3AHIAaQB0AGkAbgBnACwAIABTAHAAZQBlAGQAdwByAGkAdABpAG4AZwAgAEkASQAsACAAUABvAHQAdABlAHIAeQAgAGEAbgBkACAASgBlAHcAZQBsAHIAeQAgAGEAcwAgAGEAZABkAGUAZAAgAGMAbwB1AHIAcwBlAHMALgANAFAAZQByAGYAbwByAG0AZQBkACAAaQBuACAAdABoAGUAIABtAGEAcgBjAGgAaQBuAGcAIABiAGEAbgBkACAAYQBuAGQAIABjAG8AbgBjAGUAcgB0ACAAYgBhAG4AZAAgAGEAbABsACAAZgBvAHUAcgAgAHkAZQBhAHIAcwAuAA0AVwBhAHMAIABhACAAbQBlAG0AYgBlAHIAIABvAGYAIABDAG8AbQBtAHUAbgBpAHQAeQAgAEEAYwB0AGkAbwBuACAAUAByAG8AZwByAGEAbQAgACgAQwBBAFAAKQANAEgAZQBsAHAAZQBkACAAbwB1AHQAIABiAGEAYwBrAHMAdABhAGcAZQAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAcAByAGkAbgBnACAAbQB1AHMAaQBjAGEAbAAgAHQAdwBvACAAeQBlAGEAcgBzACAAaQBuACAAYQAgAHIAbwB3AC4ADQANAA0ARQBtAHAAbABvAHkAbQBlAG4AdAAgAEgAaQBzAHQAbwByAHkADQANAAkASwBlAHkAcwB0AG8AbgBlACAAQwBvAGwAbABlAGMAdABpAG8AbgBzACwAIABJAHIAdwBpAG4ALAAgAFAAQQAJAAkACQAJAAkACQAJACgANgAvADEANAAtAFAAcgBlAHMAZQBuAHQAKQANAAkARABhAHQAYQAgAEUAbgB0AHIAeQANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAdgBlAHIAaQBmAHkAIABmAGkAbgBhAGwAIABsAG8AYwBhAGwAIAByAGUAdAB1AHIAbgBzACAAYQBuAGQAIAB2AGUAcgBpAGYAeQAgAHQAaABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAdABoAGEAdAAgAGkAcwAgAGkAbgANAHQAaABlACAAcwB5AHMAdABlAG0ALgANAAkADQAJAEMAYQB0AGMAaAAtAFUAcAAgAEwAbwBnAGkAcwB0AGkAYwBzACwAIABHAHIAZQBlAG4AcwBiAHUAcgBnACwAIABQAEEACQAJAAkACQAJAAkAKAA0AC8AMQA0AC0ANQAvADEANAApAA0ACQBTAGgAaQBwAHAAaQBuAGcALwBSAGUAYwBlAGkAdgBpAG4AZwAgAEMAbABlAHIAawANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAASQBuACAAJgAgAE8AdQB0ACAAYwBvAHUAbgB0ACAAZgBvAHIAIAB0AGgAZQAgAHAAcgBlAHYAaQBvAHUAcwAgAGQAYQB5AC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAHAAcgBvAGMAZQBzAHMAIABCAGkAbABsAHMAIABvAGYAIABMAGEAZABpAG4AZwAgAGYAbwByACAAUwBoAGkAcABtAGUAbgB0AHMAIAB1AHMAaQBuAGcAIAAzAFAATAAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAHIAbwBjAGUAcwBzACAAcgBlAGMAZQBpAHAAdABzACAAZgBvAHIAIABpAHQAZQBtAHMAIABkAGUAbABpAHYAZQByAGUAZAAgAHUAcwBpAG4AZwAgADMAUABMAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAGEAcgByAGkAZQByAHMAIAB0AG8AIABhAHIAcgBhAG4AZwBlACAAcABpAGMAawAgAHUAcABzACAAZgBvAHIAIABzAGgAaQBwAG0AZQBuAHQAcwAuAA0ADQANAAkATABvAGQAbwB2AGkAYwBvACAAJgAgAEEAcwBzAG8AYwBpAGEAdABlAHMALAAgAEYAbwByAGUAcwB0ACAASABpAGwAbABzACwAIABQAEEACQAJAAkACQAJAAkAKAAxAC8AMQAzAC0AMgAvADEANAApAA0ACQBQAHIAbwBjAGUAcwBzAG8AcgANAEQAdQByAGkAbgBnACAAdABhAHgAIABzAGUAYQBzAG8AbgAgAEkAIABwAHIAbwBjAGUAcwBzACAAYwBsAGkAZQBuAHQAcwAgAHQAYQB4ACAAcgBlAHQAdQByAG4AcwAgAGIAeQAgAG0AYQBrAGkAbgBnACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAGMAbABpAGUAbgB0AHMAIAB0AGEAeAAgAHIAZQB0AHUAcgBuACAAZgBvAHIAIAB0AGgAZQAgAGMAbABpAGUAbgB0ACAAdABvACAAawBlAGUAcAAgAGYAbwByACAAdABoAGUAaQByACAAcgBlAGMAbwByAGQAcwAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZwBlAG4AZQByAGEAbAAgAG8AZgBmAGkAYwBlACAAZAB1AHQAaQBlAHMALgANAA0ADQAJAA0ACQBBAG0AZQByAGkAcwBvAHUAcgBjAGUAYgBlAHIAZwBlAG4ALQAgAFQAaABlAHIAYQBjAG8AbQAsACAATQBvAG4AcgBvAGUAdgBpAGwAbABlACwAIABQAEEACQAJAAkACQAoADEAMgAvADEAMQAtADEAMAAvADEAMgApAA0ACQBTAGUAbgBpAG8AcgAgAEQAYQB0AGEAIABFAG4AdAByAHkALQBYAGEAcgBlAGwAdABvAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZABhAHQAYQAgAGUAbgB0AHIAeQAgAGYAbwByACAAYgBlAG4AZQBmAGkAdAAgAGkAbgB2AGUAcwB0AGkAZwBhAHQAaQBvAG4AcwAgAGYAbwByACAAdABoAGUAIABkAHIAdQBnACAAYwBhAGwAbABlAGQAIABYAGEAcgBlAGwAdABvAC4ADQBFAG4AdABlAHIAIABCAHUAcwBpAG4AZQBzAHMAIABBAHMAcwBvAGMAaQBhAHQAZQBzACAAQQBnAHIAZQBlAG0AZQBuAHQAcwAgAGYAbwByACAAcABoAHkAcwBpAGMAaQBhAG4AcwAgAG8AZgBmAGkAYwBlAHMAIABmAG8AcgAgAHQAaABlACAAZAByAHUAZwAgAGMAYQBsAGwAZQBkACAAWABhAHIAZQBsAHQAbwAuAA0AUwBlAGEAcgBjAGgAIABwAGgAeQBzAGkAYwBpAGEAbgBzACAATgBQAEkAIABuAHUAbQBiAGUAcgBzACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByAC4ADQBMAGkAbgBrACAAaQBtAGEAZwBlAHMAIAB0AG8AIABjAGEAcwBlAHMAIAB1AHMAaQBuAGcAIABLAG8AZgBhAHgALgANAEYAYQB4ACAAaQBuACAAVgBlAHIAYgBhAGwAIABCAGUAbgBlAGYAaQB0ACAASQBuAHYAZQBzAHQAaQBnAGEAdABpAG8AbgAgAGYAbwByAG0AcwAgAHQAbwAgAEsAbwBmAGEAeAAgAHQAbwAgAGwAaQBuAGsAIAB0AG8AIABjAGEAcwBlAHMALgANAA0ADQAJAFQAaABlACAATgBlAHcAIABNAG8AbgByAG8AZQB2AGkAbABsAGUAIABEAG8AZABnAGUAIABDAG8AbABsAGkAcwBpAG8AbgAgAEMAZQBuAHQAZQByACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkAKAAxAC8AMQAxAC0AMQAyAC8AMQAxACkAIAAJAFIAZQBjAGUAcAB0AGkAbwBuAGkAcwB0AA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgAgAHAAaABvAG4AZQBzAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAHUAcwB0AG8AbQBlAHIAcwAgACAAdwBpAHQAaAAgAGkAbgBzAHUAcgBhAG4AYwBlACAAYQBzAHMAaQBnAG4AbQBlAG4AdABzACAASQAgAHIAZQBjAGUAaQB2AGUAZAAgAHYAaQBhACAAQwBDAEMAIABPAG4AZQAgAHQAbwAgAHMAYwBoAGUAZAB1AGwAZQAgAGYAbwByACAAZQBzAHQAaQBtAGEAdABlAHMALgANAEkAIABlAG4AdABlAHIAIABiAG8AZAB5ACAAcwBoAG8AcAAgAHQAZQBjAGgAbgBpAGMAaQBhAG4AJwBzACAAdABpAG0AZQAgAGMAYQByAGQAcwAgAHUAcwBpAG4AZwAgAEEARABQAC4ADQBJACAAbwByAGQAZQByACAAJgAgAGMAaABlAGMAawAgAGkAbgAgAHAAYQByAHQAcwAuAA0ASQAgAHcAcgBpAHQAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGMAbABvAHMAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ATwBuACAAbwBjAGMAYQBzAGkAbwBuACAASQAgAGgAYQB2AGUAIABmAGkAbABsAGUAZAAgAGkAbgAgAGYAbwByACAAdABoAGUAIABjAGEAcwBoAGkAZQByACAAYQB0ACAASwBpAGEALwBNAGEAegBkAGEALgANAA0ACQANAAkARABhAHkAIABGAG8AcgBkACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkACQAJAAkACQAJACgAMQAxAC8AMAA1AC0ANgAvADEAMAApAA0ACQBSAGUAYwBlAHAAdABpAG8AbgBpAHMAdAAvAEMAYQBzAGgAaQBlAHIALwBDAHUAcwB0AG8AbQBlAHIAIABTAGUAcgB2AGkAYwBlAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgBlAGQAIABwAGgAbwBuAGUAcwAsACAAdABhAGsAZQAgAGMAYQByAGUAIABvAGYAIABzAGUAcgB2AGkAYwBlACAAYwB1AHMAdABvAG0AZQByAHMALAAgAGIAYQBsAGEAbgBjAGUAIABiAG8AdABoACAAYwBhAHMAaAAgAGQAcgBhAHcAZQByAHMALAAgAGEAbgBkACAAZABvACAAYQAgAGQAZQBwAG8AcwBpAHQALgANAEkAIABzAHQAbwBjAGsAZQBkACAAaQBuACAAbgBlAHcAIABhAG4AZAAgAHUAcwBlAGQAIAB2AGUAaABpAGMAbABlAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAHcAYQBzACAAcwBvAGwAZQBsAHkAIAByAGUAcwBwAG8AbgBzAGkAYgBsAGUAIABmAG8AcgAgAGUAbgB0AGUAcgBpAG4AZwAgAGkAbgB2AG8AaQBjAGUAcwAgAGYAbwByACAAYQBjAGMAbwB1AG4AdABzACAAcABhAHkAYQBiAGwAZQAgAGEAbgBkACAAcAByAGkAbgB0AGkAbgBnACAAYwBoAGUAYwBrAHMAIABmAG8AcgAgAGEAYwBjAG8AdQBuAHQAcwAgAHAAYQB5AGEAYgBsAGUAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGUAbgB0AGUAcgBlAGQAIABzAHQAbwBjAGsAIABuAHUAbQBiAGUAcgBzACAAZgBvAHIAIABuAGUAdwAgAHYAZQBoAGkAYwBsAGUAcwAgAG8AbgBsAGkAbgBlACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAbwBuACAARABlAGEAbABlAHIAIABBAGMAYwBlAHMAcwAgAFMAeQBzAHQAZQBtACAAZgBvAHIAIABQAE4AQwAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdwBhAHIAcgBhAG4AdAB5ACAAYwBsAGEAaQBtAHMAIABmAG8AcgAgAEoATQAmAEEAIABvAG4AbABpAG4AZQAgAHUAcwBpAG4AZwAgAEkAbgB0AGUAcgBuAGUAdAAgAEUAeABwAGwAbwByAGUAcgAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdAByAGEAbgBzAGYAZQByACAAcABhAHAAZQByAHcAbwByAGsAIABmAG8AcgAgAGQAZQBhAGwAZQByACAAdAByAGEAZABlAHMAIAB1AHMAaQBuAGcAIABDAG8AbgBjAGUAcABzACAAbwBuACAARgBNAEMAIABEAGUAYQBsAGUAcgAuAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABwIAAA6CAAAWggAAHgIAAB6CAAAfAgAAJwIAACeCAAAAgkAAAQJAACyCQAAWgoAAKgKAACqCgAAvgoAAMAKAAAsCwAAMAsAAGYLAABoDAAAagwAAOgMAADsDAAAHg0AAJANAAAkDgAApA4AAAIPAACEDwAAhg8AAIgPAACuDwAAsA8AABwQAAAeEAAANBAAANwQAAD0EAAA+BAAAPoQAABiEQAAZBEAAJYRAAAeEgAAphIAACwTAAC0EwAAthMAALgTAAAsFAAAQhQAAEwVAACwFQAAshUAALQVAAC4FQAANhYAADgWAABsFgAAKBcAANoXAABIGAAAjBgAABYZAAD06+vr39/Q39/f39/f39DBwcHQwcHBwdDBwcHBwbKy0N/f39DBp9DQ39/QwcHBwaMA39Df39/f39/f0N/f39/fAAAGNQgAXAgAABQ2CAE1CABdCAFcCABPSgMAUUoDAAAcQ0ocADYIATUIAGFKHABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAGFKGABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAWFKGABdCAFcCAFPSgMAUUoDAAAWQ0oYADYIAWFKGABdCAFPSgMAUUoDAAAQQ0ocAGFKHABPSgMAUUoDAAAWQ0owADUIAWFKMABcCAFPSgMAUUoDAEAWGQAAGBkAABoZAACyGQAAzBkAABAaAADwGgAAWhsAAI4bAADQGwAAEhwAAIgcAACKHAAAjhwAAJAcAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA9/fr3M3Nzc3Nzc3Nzc3c3Nzc3Nzc3M3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxDShgANggBNQgAYUoYAF0IAVwIAE9KAwBRSgMAABxDShgANggBNQgBYUoYAF0IAVwIAU9KAwBRSgMAABZDShgANggBYUoYAF0IAU9KAwBRSgMAABBDShgAYUoYAE9KAwBRSgMAGAAIAAAcCAAAOggAAFoIAAB4CAAAeggAAHwIAACcCAAAnggAAAIJAAAECQAAsgkAAFoKAACoCgAAqgoAAL4KAADACgAALAsAAGYLAAD6AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAADrAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAA1wAAAAAAAAAAAAAAANIAAAAAAAAAAAAAAADNAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAMMAAAAAAAAAAAAAAAC+AAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAALQAAAAAAAAAAAAAAACvAAAAAAAAAAAAAAAAqgAAAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQBYSQBAAQAAAMkAWEkAQAEAAADJAFhJAEABAAAAyQBYSQBAAQAAAMkAWEkAQASZgsAAGgMAABqDAAA6AwAAB4NAACQDQAAJA4AAKQOAAACDwAAhA8AAIYPAACIDwAArg8AALAPAAAcEAAANBAAANwQAAD0EAAA+BAAAGIRAAD3AAAAAAAAAAAAAAAA8gAAAAAAAAAAAAAAAO0AAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADbAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAxwAAAAAAAAAAAAAAAMIAAAAAAAAAAAAAAAC9AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALMAAAAAAAAAAAAAAACuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAMkAGEkAAAEAAADJABhJAAFAAAKJgALRgAABQAACiYAC0YBAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAwADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAIAAAKJgALRgIAAyQAYSQAABNiEQAAlhEAAB4SAACmEgAALBMAALQTAAC2EwAAuBMAACwUAABCFAAATBUAALAVAACyFQAAtBUAALgVAAA2FgAAbBYAACgXAADaFwAASBgAAIwYAAAWGQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6wAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADhAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANkAAAAAAAAAAAAAAADUAAAAAAAAAAAAAAAAzwAAAAAAAAAAAAAAAMoAAAAAAAAAAAAAAADFAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAgAAAomAAtGBQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGBgADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQABQAACiYAC0YBAAAEAAADJABhJAAAFRYZAAAYGQAAGhkAAMwZAAAQGgAA8BoAAFobAACOGwAA0BsAABIcAACIHAAAihwAAI4cAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOMAAAAAAAAAAAAAAADeAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADHAAAAAAAAAAAAAAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQACAAACiYAC0YEAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAWMAAfsNAvILDgPSGwwgIisMICI5CwASSQAAAyUAAAMZBoATBwAAAAADNQAAAoMgAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAABgkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEACAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgACAAAABAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAAABAE8AbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP////8DAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAUAAAAAAAAADEAVABhAGIAbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABUhAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAFAAAABgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA7AAAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAyLgAAAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAA=;type:2"]}} diff --git a/src/parser/__tests__/languageguesser/bash.shebang b/src/parser/__tests__/languageguesser/bash.shebang new file mode 100644 index 00000000..ef8dfc11 --- /dev/null +++ b/src/parser/__tests__/languageguesser/bash.shebang @@ -0,0 +1,3 @@ +#!/bin/bash + +exit 1; diff --git a/src/parser/__tests__/languageguesser/console.path b/src/parser/__tests__/languageguesser/console.path new file mode 100644 index 00000000..ac42ce92 --- /dev/null +++ b/src/parser/__tests__/languageguesser/console.path @@ -0,0 +1,8 @@ +path/to/somewhere/ $ ls +[ dd kill mv sh wait4path +bash df ksh pax sleep zsh +cat domainname launchctl ps stty +chmod echo link pwd sync +cp ed ln rcp tcsh +csh expr ls rm test +date hostname mkdir rmdir unlink diff --git a/src/parser/__tests__/languageguesser/console.prompt b/src/parser/__tests__/languageguesser/console.prompt new file mode 100644 index 00000000..775eaf8f --- /dev/null +++ b/src/parser/__tests__/languageguesser/console.prompt @@ -0,0 +1,8 @@ +$ ls +[ dd kill mv sh wait4path +bash df ksh pax sleep zsh +cat domainname launchctl ps stty +chmod echo link pwd sync +cp ed ln rcp tcsh +csh expr ls rm test +date hostname mkdir rmdir unlink diff --git a/src/parser/__tests__/languageguesser/diff.git b/src/parser/__tests__/languageguesser/diff.git new file mode 100644 index 00000000..eb4e3ce1 --- /dev/null +++ b/src/parser/__tests__/languageguesser/diff.git @@ -0,0 +1,7 @@ +diff --git a/some_file b/some_file +index 4c479de..637a09b 100644 +--- a/some_file ++++ b/some_file +@@ -1 +1 @@ +-apple ++banana diff --git a/src/parser/__tests__/languageguesser/diff.udiff b/src/parser/__tests__/languageguesser/diff.udiff new file mode 100644 index 00000000..faf3bfd2 --- /dev/null +++ b/src/parser/__tests__/languageguesser/diff.udiff @@ -0,0 +1,5 @@ +--- some_file 2012-05-20 19:35:28.000000000 -0700 ++++ other_file 2012-05-20 19:35:23.000000000 -0700 +@@ -1 +1 @@ +-apple ++banana diff --git a/src/parser/__tests__/languageguesser/nothing-useful b/src/parser/__tests__/languageguesser/nothing-useful new file mode 100644 index 00000000..c0f8198a --- /dev/null +++ b/src/parser/__tests__/languageguesser/nothing-useful @@ -0,0 +1,2 @@ +derp derp derp derp derp derp derp derp derp derp derp derp derp derp +herp derp herp derp herp derp herp derp herp derp herp derp herp derp diff --git a/src/parser/__tests__/languageguesser/php.shell b/src/parser/__tests__/languageguesser/php.shell new file mode 100644 index 00000000..90017edb --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.shell @@ -0,0 +1,3 @@ +#!/usr/bin/php + +exit(1); diff --git a/src/parser/__tests__/languageguesser/php.shell-env b/src/parser/__tests__/languageguesser/php.shell-env new file mode 100644 index 00000000..56ca75a9 --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.shell-env @@ -0,0 +1,3 @@ +#!/usr/bin/env php + +exit(1); diff --git a/src/parser/__tests__/languageguesser/php.test b/src/parser/__tests__/languageguesser/php.test new file mode 100644 index 00000000..ab2b32bb --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.test @@ -0,0 +1,3 @@ +id = $id; + $this->typeID = $data[0]; + if (isset($data[1])) { + $this->l = $data[1]; + } else { + $this->l = -1; + } + if (isset($data[2])) { + $this->r = $data[2]; + } else { + $this->r = -1; + } + $this->tree = $tree; + } + + final public function getParentNode() { + return $this->parentNode; + } + + final public function setParentNode(AASTNode $node = null) { + $this->parentNode = $node; + return $this; + } + + final public function getPreviousSibling() { + return $this->previousSibling; + } + + final public function setPreviousSibling(AASTNode $node = null) { + $this->previousSibling = $node; + return $this; + } + + final public function getNextSibling() { + return $this->nextSibling; + } + + final public function setNextSibling(AASTNode $node = null) { + $this->nextSibling = $node; + return $this; + } + + final public function getID() { + return $this->id; + } + + final public function getTypeID() { + return $this->typeID; + } + + final public function getTree() { + return $this->tree; + } + + final public function getTypeName() { + if (empty($this->typeName)) { + $this->typeName = + $this->tree->getNodeTypeNameFromTypeID($this->getTypeID()); + } + return $this->typeName; + } + + final public function getChildren() { + return $this->children; + } + + final public function setChildren(array $children) { + // We don't call `assert_instances_of($children, 'AASTNode')` because doing + // so would incur a significant performance penalty. + $this->children = $children; + return $this; + } + + public function getChildrenOfType($type) { + $nodes = array(); + + foreach ($this->children as $child) { + if ($child->getTypeName() == $type) { + $nodes[] = $child; + } + } + + return $nodes; + } + + public function getChildOfType($index, $type) { + $child = $this->getChildByIndex($index); + if ($child->getTypeName() != $type) { + throw new Exception( + pht( + "Child in position '%d' is not of type '%s': %s", + $index, + $type, + $this->getDescription())); + } + + return $child; + } + + public function getChildByIndex($index) { + // NOTE: Microoptimization to avoid calls like array_values() or idx(). + + $idx = 0; + foreach ($this->children as $child) { + if ($idx == $index) { + return $child; + } + ++$idx; + } + + throw new Exception(pht("No child with index '%d'.", $index)); + } + + /** + * Build a cache to improve the performance of + * @{method:selectDescendantsOfType}. This cache makes a time/memory tradeoff + * by aggressively caching node descendants. It may improve the tree's query + * performance substantially if you make a large number of queries, but also + * requires a significant amount of memory. + * + * This builds a cache for the entire tree and improves performance of all + * @{method:selectDescendantsOfType} calls. + */ + public function buildSelectCache() { + $cache = array(); + foreach ($this->getChildren() as $id => $child) { + $type_id = $child->getTypeID(); + if (empty($cache[$type_id])) { + $cache[$type_id] = array(); + } + $cache[$type_id][$id] = $child; + foreach ($child->buildSelectCache() as $type_id => $nodes) { + if (empty($cache[$type_id])) { + $cache[$type_id] = array(); + } + $cache[$type_id] += $nodes; + } + } + $this->selectCache = $cache; + return $this->selectCache; + } + + /** + * Build a cache to improve the performance of @{method:selectTokensOfType}. + * This cache makes a time/memory tradeoff by aggressively caching token + * types. It may improve the tree's query performance substantially if you + * make a large number of queries, but also requires a significant amount of + * memory. + * + * This builds a cache for this node only. + */ + public function buildTokenCache() { + $cache = array(); + foreach ($this->getTokens() as $id => $token) { + $cache[$token->getTypeName()][$id] = $token; + } + $this->tokenCache = $cache; + return $this->tokenCache; + } + + public function selectTokensOfType($type_name) { + return $this->selectTokensOfTypes(array($type_name)); + } + + /** + * Select all tokens of any given types. + */ + public function selectTokensOfTypes(array $type_names) { + $tokens = array(); + + foreach ($type_names as $type_name) { + if (isset($this->tokenCache)) { + $cached_tokens = idx($this->tokenCache, $type_name, array()); + foreach ($cached_tokens as $id => $cached_token) { + $tokens[$id] = $cached_token; + } + } else { + foreach ($this->getTokens() as $id => $token) { + if ($token->getTypeName() == $type_name) { + $tokens[$id] = $token; + } + } + } + } + + return $tokens; + } + + final public function isDescendantOf(AASTNode $node) { + for ($it = $this; $it !== null; $it = $it->getParentNode()) { + if ($it === $node) { + return true; + } + } + + return false; + } + + public function selectDescendantsOfType($type_name) { + return $this->selectDescendantsOfTypes(array($type_name)); + } + + public function selectDescendantsOfTypes(array $type_names) { + $nodes = array(); + foreach ($type_names as $type_name) { + $type = $this->getTypeIDFromTypeName($type_name); + + if (isset($this->selectCache)) { + if (isset($this->selectCache[$type])) { + $nodes = $nodes + $this->selectCache[$type]; + } + } else { + $nodes = $nodes + $this->executeSelectDescendantsOfType($this, $type); + } + } + + return AASTNodeList::newFromTreeAndNodes($this->tree, $nodes); + } + + protected function executeSelectDescendantsOfType($node, $type) { + $results = array(); + foreach ($node->getChildren() as $id => $child) { + if ($child->getTypeID() == $type) { + $results[$id] = $child; + } + $results += $this->executeSelectDescendantsOfType($child, $type); + } + return $results; + } + + public function getTokens() { + if ($this->l == -1 || $this->r == -1) { + return array(); + } + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + foreach (range($this->l, $this->r) as $token_id) { + $result[$token_id] = $tokens[$token_id]; + } + return $result; + } + + public function getConcreteString() { + $values = array(); + foreach ($this->getTokens() as $token) { + $values[] = $token->getValue(); + } + return implode('', $values); + } + + public function getSemanticString() { + $tokens = $this->getTokens(); + foreach ($tokens as $id => $token) { + if ($token->isComment()) { + unset($tokens[$id]); + } + } + return implode('', mpull($tokens, 'getValue')); + } + + public function getIndentation() { + $tokens = $this->getTokens(); + $left = head($tokens); + + while ($left && + (!$left->isAnyWhitespace() || + strpos($left->getValue(), "\n") === false)) { + $left = $left->getPrevToken(); + } + + if (!$left) { + return null; + } + + return preg_replace("/^.*\n/s", '', $left->getValue()); + } + + public function getDescription() { + $concrete = $this->getConcreteString(); + if (strlen($concrete) > 75) { + $concrete = substr($concrete, 0, 36).'...'.substr($concrete, -36); + } + + $concrete = addcslashes($concrete, "\\\n\""); + + return pht('a node of type %s: "%s"', $this->getTypeName(), $concrete); + } + + final protected function getTypeIDFromTypeName($type_name) { + return $this->tree->getNodeTypeIDFromTypeName($type_name); + } + + final public function getOffset() { + $stream = $this->tree->getRawTokenStream(); + if (empty($stream[$this->l])) { + return null; + } + return $stream[$this->l]->getOffset(); + } + + final public function getLength() { + $stream = $this->tree->getRawTokenStream(); + if (empty($stream[$this->r])) { + return null; + } + return $stream[$this->r]->getOffset() - $this->getOffset(); + } + + + public function getSurroundingNonsemanticTokens() { + $before = array(); + $after = array(); + + $tokens = $this->tree->getRawTokenStream(); + + if ($this->l != -1) { + $before = $tokens[$this->l]->getNonsemanticTokensBefore(); + } + + if ($this->r != -1) { + $after = $tokens[$this->r]->getNonsemanticTokensAfter(); + } + + return array($before, $after); + } + + final public function getLineNumber() { + return idx($this->tree->getOffsetToLineNumberMap(), $this->getOffset()); + } + + final public function getEndLineNumber() { + return idx( + $this->tree->getOffsetToLineNumberMap(), + $this->getOffset() + $this->getLength()); + } + + /** + * Determines whether the current node appears //after// a specified node in + * the tree. + * + * @param AASTNode + * @return bool + */ + final public function isAfter(AASTNode $node) { + return head($this->getTokens())->getOffset() > + last($node->getTokens())->getOffset(); + } + + /** + * Determines whether the current node appears //before// a specified node in + * the tree. + * + * @param AASTNode + * @return bool + */ + final public function isBefore(AASTNode $node) { + return last($this->getTokens())->getOffset() < + head($node->getTokens())->getOffset(); + } + + /** + * Determines whether a specified node is a descendant of the current node. + * + * @param AASTNode + * @return bool + */ + final public function containsDescendant(AASTNode $node) { + return !$this->isAfter($node) && !$this->isBefore($node); + } + + public function dispose() { + foreach ($this->getChildren() as $child) { + $child->dispose(); + } + + unset($this->selectCache); + } + +} diff --git a/src/parser/aast/api/AASTNodeList.php b/src/parser/aast/api/AASTNodeList.php new file mode 100644 index 00000000..92f76f2a --- /dev/null +++ b/src/parser/aast/api/AASTNodeList.php @@ -0,0 +1,110 @@ +tree, $nodes); + } + + public function selectDescendantsOfType($type_name) { + return $this->selectDescendantsOfTypes(array($type_name)); + } + + public function selectDescendantsOfTypes(array $type_names) { + $results = array(); + foreach ($type_names as $type_name) { + foreach ($this->list as $id => $node) { + $results += $node->selectDescendantsOfType($type_name)->getRawNodes(); + } + } + return $this->newList($results); + } + + public function getChildrenByIndex($index) { + $results = array(); + foreach ($this->list as $id => $node) { + $child = $node->getChildByIndex($index); + $results[$child->getID()] = $child; + } + return $this->newList($results); + } + + public function add(AASTNodeList $list) { + foreach ($list->list as $id => $node) { + $this->list[$id] = $node; + } + $this->ids = array_keys($this->list); + return $this; + } + + public function getTokens() { + $tokens = array(); + foreach ($this->list as $node) { + $tokens += $node->getTokens(); + } + return $tokens; + } + + public function getRawNodes() { + return $this->list; + } + + public static function newFromTreeAndNodes(AASTTree $tree, array $nodes) { + // We could do `assert_instances_of($nodes, 'AASTNode')` here, but doing + // so imposes an observable performance penalty for linting. + + $obj = new AASTNodeList(); + $obj->tree = $tree; + $obj->list = $nodes; + $obj->ids = array_keys($nodes); + return $obj; + } + + public static function newFromTree(AASTTree $tree) { + $obj = new AASTNodeList(); + $obj->tree = $tree; + $obj->list = array(0 => $tree->getRootNode()); + $obj->ids = array(0 => 0); + return $obj; + } + + +/* -( Countable )---------------------------------------------------------- */ + + public function count() { + return count($this->ids); + } + + +/* -( Iterator )----------------------------------------------------------- */ + + public function current() { + return $this->list[$this->key()]; + } + + public function key() { + return $this->ids[$this->pos]; + } + + public function next() { + $this->pos++; + } + + public function rewind() { + $this->pos = 0; + } + + public function valid() { + return $this->pos < count($this->ids); + } + +} diff --git a/src/parser/aast/api/AASTToken.php b/src/parser/aast/api/AASTToken.php new file mode 100644 index 00000000..aebe9ced --- /dev/null +++ b/src/parser/aast/api/AASTToken.php @@ -0,0 +1,91 @@ +id = $id; + $this->typeID = $type; + $this->value = $value; + $this->offset = $offset; + $this->tree = $tree; + } + + final public function getTokenID() { + return $this->id; + } + + final public function getTypeID() { + return $this->typeID; + } + + public function getTypeName() { + if (empty($this->typeName)) { + $this->typeName = $this->tree->getTokenTypeNameFromTypeID($this->typeID); + } + return $this->typeName; + } + + final public function getValue() { + return $this->value; + } + + final public function overwriteValue($value) { + $this->value = $value; + return $this; + } + + final public function getOffset() { + return $this->offset; + } + + abstract public function isComment(); + abstract public function isAnyWhitespace(); + + public function isSemantic() { + return !($this->isComment() || $this->isAnyWhitespace()); + } + + public function getPrevToken() { + $tokens = $this->tree->getRawTokenStream(); + return idx($tokens, $this->id - 1); + } + + public function getNextToken() { + $tokens = $this->tree->getRawTokenStream(); + return idx($tokens, $this->id + 1); + } + + public function getNonsemanticTokensBefore() { + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + $ii = $this->id - 1; + while ($ii >= 0 && !$tokens[$ii]->isSemantic()) { + $result[$ii] = $tokens[$ii]; + --$ii; + } + return array_reverse($result); + } + + public function getNonsemanticTokensAfter() { + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + $ii = $this->id + 1; + while ($ii < count($tokens) && !$tokens[$ii]->isSemantic()) { + $result[$ii] = $tokens[$ii]; + ++$ii; + } + return $result; + } + + final public function getLineNumber() { + return idx($this->tree->getOffsetToLineNumberMap(), $this->getOffset()); + } + +} diff --git a/src/parser/aast/api/AASTTree.php b/src/parser/aast/api/AASTTree.php new file mode 100644 index 00000000..2f1e1319 --- /dev/null +++ b/src/parser/aast/api/AASTTree.php @@ -0,0 +1,194 @@ +stream[$ii] = $this->newToken( + $ii, + $token[0], + substr($source, $offset, $token[1]), + $offset, + $this); + $offset += $token[1]; + ++$ii; + } + + $this->rawSource = $source; + $this->buildTree(array($tree)); + } + + final public function setTreeType($description) { + $this->treeType = $description; + return $this; + } + + final public function getTreeType() { + return $this->treeType; + } + + final public function setTokenConstants(array $token_map) { + $this->tokenConstants = $token_map; + $this->tokenReverseMap = array_flip($token_map); + return $this; + } + + final public function setNodeConstants(array $node_map) { + $this->nodeConstants = $node_map; + $this->nodeReverseMap = array_flip($node_map); + return $this; + } + + final public function getNodeTypeNameFromTypeID($type_id) { + if (empty($this->nodeConstants[$type_id])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type name for node type ID '%s' in '%s' AAST.", + $type_id, + $tree_type)); + } + + return $this->nodeConstants[$type_id]; + } + + final public function getNodeTypeIDFromTypeName($type_name) { + if (empty($this->nodeReverseMap[$type_name])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type ID for node type name '%s' in '%s' AAST.", + $type_name, + $tree_type)); + } + return $this->nodeReverseMap[$type_name]; + } + + final public function getTokenTypeNameFromTypeID($type_id) { + if (empty($this->tokenConstants[$type_id])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type name for token type ID '%s' in '%s' AAST.", + $type_id, + $tree_type)); + } + return $this->tokenConstants[$type_id]; + } + + final public function getTokenTypeIDFromTypeName($type_name) { + if (empty($this->tokenReverseMap[$type_name])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type ID for token type name '%s' in '%s' AAST.", + $type_name, + $tree_type)); + } + return $this->tokenReverseMap[$type_name]; + } + + /** + * Unlink internal datastructures so that PHP will garbage collect the tree. + * + * This renders the object useless. + * + * @return void + */ + public function dispose() { + $this->getRootNode()->dispose(); + unset($this->tree); + unset($this->stream); + } + + final public function getRootNode() { + return $this->tree[0]; + } + + protected function buildTree(array $tree) { + $ii = count($this->tree); + $nodes = array(); + foreach ($tree as $node) { + $this->tree[$ii] = $this->newNode($ii, $node, $this); + $nodes[$ii] = $node; + ++$ii; + } + foreach ($nodes as $node_id => $node) { + if (isset($node[3])) { + $children = $this->buildTree($node[3]); + $previous_child = null; + + foreach ($children as $ii => $child) { + $child->setParentNode($this->tree[$node_id]); + $child->setPreviousSibling($previous_child); + + if ($previous_child) { + $previous_child->setNextSibling($child); + } + + $previous_child = $child; + } + + if ($previous_child) { + $previous_child->setNextSibling($child); + } + + $this->tree[$node_id]->setChildren($children); + } + } + + $result = array(); + foreach ($nodes as $key => $node) { + $result[$key] = $this->tree[$key]; + } + + return $result; + } + + final public function getRawTokenStream() { + return $this->stream; + } + + public function getOffsetToLineNumberMap() { + if ($this->lineMap === null) { + $src = $this->rawSource; + $len = strlen($src); + $lno = 1; + $map = array(); + for ($ii = 0; $ii < $len; ++$ii) { + $map[$ii] = $lno; + if ($src[$ii] == "\n") { + ++$lno; + } + } + $this->lineMap = $map; + } + return $this->lineMap; + } + +} diff --git a/src/parser/argument/PhutilArgumentParser.php b/src/parser/argument/PhutilArgumentParser.php new file mode 100644 index 00000000..c6c34615 --- /dev/null +++ b/src/parser/argument/PhutilArgumentParser.php @@ -0,0 +1,935 @@ +setTagline('make an new dog') + * $args->setSynopsis(<<parse( + * array( + * array( + * 'name' => 'name', + * 'param' => 'dogname', + * 'default' => 'Rover', + * 'help' => 'Set the dog\'s name. By default, the dog will be '. + * 'named "Rover".', + * ), + * array( + * 'name' => 'big', + * 'short' => 'b', + * 'help' => 'If set, create a large dog.', + * ), + * )); + * + * $dog_name = $args->getArg('name'); + * $dog_size = $args->getArg('big') ? 'big' : 'small'; + * + * // ... etc ... + * + * (For detailed documentation on supported keys in argument specifications, + * see @{class:PhutilArgumentSpecification}.) + * + * This will handle argument parsing, and generate appropriate usage help if + * the user provides an unsupported flag. @{class:PhutilArgumentParser} also + * supports some builtin "standard" arguments: + * + * $args->parseStandardArguments(); + * + * See @{method:parseStandardArguments} for details. Notably, this includes + * a "--help" flag, and an "--xprofile" flag for profiling command-line scripts. + * + * Normally, when the parser encounters an unknown flag, it will exit with + * an error. However, you can use @{method:parsePartial} to consume only a + * set of flags: + * + * $args->parsePartial($spec_list); + * + * This allows you to parse some flags before making decisions about other + * parsing, or share some flags across scripts. The builtin standard arguments + * are implemented in this way. + * + * There is also builtin support for "workflows", which allow you to build a + * script that operates in several modes (e.g., by accepting commands like + * `install`, `upgrade`, etc), like `arc` does. For detailed documentation on + * workflows, see @{class:PhutilArgumentWorkflow}. + * + * @task parse Parsing Arguments + * @task read Reading Arguments + * @task help Command Help + * @task internal Internals + */ +final class PhutilArgumentParser extends Phobject { + + private $bin; + private $argv; + private $specs = array(); + private $results = array(); + private $parsed; + + private $tagline; + private $synopsis; + private $workflows; + private $showHelp; + + const PARSE_ERROR_CODE = 77; + + private static $traceModeEnabled = false; + + +/* -( Parsing Arguments )-------------------------------------------------- */ + + + /** + * Build a new parser. Generally, you start a script with: + * + * $args = new PhutilArgumentParser($argv); + * + * @param list Argument vector to parse, generally the $argv global. + * @task parse + */ + public function __construct(array $argv) { + $this->bin = $argv[0]; + $this->argv = array_slice($argv, 1); + } + + + /** + * Parse and consume a list of arguments, removing them from the argument + * vector but leaving unparsed arguments for later consumption. You can + * retrieve unconsumed arguments directly with + * @{method:getUnconsumedArgumentVector}. Doing a partial parse can make it + * easier to share common flags across scripts or workflows. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @param bool Require flags appear before any non-flag arguments. + * @return this + * @task parse + */ + public function parsePartial(array $specs, $initial_only = false) { + return $this->parseInternal($specs, false, $initial_only); + } + + /** + * @return this + */ + private function parseInternal( + array $specs, + $correct_spelling, + $initial_only) { + + $specs = PhutilArgumentSpecification::newSpecsFromList($specs); + $this->mergeSpecs($specs); + + $specs_by_name = mpull($specs, null, 'getName'); + $specs_by_short = mpull($specs, null, 'getShortAlias'); + unset($specs_by_short[null]); + + $argv = $this->argv; + $len = count($argv); + $is_initial = true; + for ($ii = 0; $ii < $len; $ii++) { + $arg = $argv[$ii]; + $map = null; + $options = null; + if (!is_string($arg)) { + // Non-string argument; pass it through as-is. + } else if ($arg == '--') { + // This indicates "end of flags". + break; + } else if ($arg == '-') { + // This is a normal argument (e.g., stdin). + continue; + } else if (!strncmp('--', $arg, 2)) { + $pre = '--'; + $arg = substr($arg, 2); + $map = $specs_by_name; + $options = array_keys($specs_by_name); + } else if (!strncmp('-', $arg, 1) && strlen($arg) > 1) { + $pre = '-'; + $arg = substr($arg, 1); + $map = $specs_by_short; + } else { + $is_initial = false; + } + + if ($map) { + $val = null; + $parts = explode('=', $arg, 2); + if (count($parts) == 2) { + list($arg, $val) = $parts; + } + + // Try to correct flag spelling for full flags, to allow users to make + // minor mistakes. + if ($correct_spelling && $options && !isset($map[$arg])) { + $corrections = PhutilArgumentSpellingCorrector::newFlagCorrector() + ->correctSpelling($arg, $options); + + if (count($corrections) == 1) { + $corrected = head($corrections); + + $this->logMessage( + tsprintf( + "%s\n", + pht( + '(Assuming "%s" is the British spelling of "%s".)', + $pre.$arg, + $pre.$corrected))); + + $arg = $corrected; + } + } + + if (isset($map[$arg])) { + if ($initial_only && !$is_initial) { + throw new PhutilArgumentUsageException( + pht( + 'Argument "%s" appears after the first non-flag argument. '. + 'This special argument must appear before other arguments.', + "{$pre}{$arg}")); + } + + $spec = $map[$arg]; + unset($argv[$ii]); + + $param_name = $spec->getParamName(); + if ($val !== null) { + if ($param_name === null) { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' does not take a parameter.", + "{$pre}{$arg}")); + } + } else { + if ($param_name !== null) { + if ($ii + 1 < $len) { + $val = $argv[$ii + 1]; + unset($argv[$ii + 1]); + $ii++; + } else { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' requires a parameter.", + "{$pre}{$arg}")); + } + } else { + $val = true; + } + } + + if (!$spec->getRepeatable()) { + if (array_key_exists($spec->getName(), $this->results)) { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' was provided twice.", + "{$pre}{$arg}")); + } + } + + $conflicts = $spec->getConflicts(); + foreach ($conflicts as $conflict => $reason) { + if (array_key_exists($conflict, $this->results)) { + + if (!is_string($reason) || !strlen($reason)) { + $reason = '.'; + } else { + $reason = ': '.$reason.'.'; + } + + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' conflicts with argument '%s'%s", + "{$pre}{$arg}", + "--{$conflict}", + $reason)); + } + } + + if ($spec->getRepeatable()) { + if ($spec->getParamName() === null) { + if (empty($this->results[$spec->getName()])) { + $this->results[$spec->getName()] = 0; + } + $this->results[$spec->getName()]++; + } else { + $this->results[$spec->getName()][] = $val; + } + } else { + $this->results[$spec->getName()] = $val; + } + } + } + } + + foreach ($specs as $spec) { + if ($spec->getWildcard()) { + $this->results[$spec->getName()] = $this->filterWildcardArgv($argv); + $argv = array(); + break; + } + } + + $this->argv = array_values($argv); + return $this; + } + + + /** + * Parse and consume a list of arguments, throwing an exception if there is + * anything left unconsumed. This is like @{method:parsePartial}, but raises + * a {class:PhutilArgumentUsageException} if there are leftovers. + * + * Normally, you would call @{method:parse} instead, which emits a + * user-friendly error. You can also use @{method:printUsageException} to + * render the exception in a user-friendly way. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parseFull(array $specs) { + $this->parseInternal($specs, true, false); + + if (count($this->argv)) { + $arg = head($this->argv); + throw new PhutilArgumentUsageException( + pht("Unrecognized argument '%s'.", $arg)); + } + + if ($this->showHelp) { + $this->printHelpAndExit(); + } + + return $this; + } + + + /** + * Parse and consume a list of arguments, raising a user-friendly error if + * anything remains. See also @{method:parseFull} and @{method:parsePartial}. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parse(array $specs) { + try { + return $this->parseFull($specs); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + } + + + /** + * Parse and execute workflows, raising a user-friendly error if anything + * remains. See also @{method:parseWorkflowsFull}. + * + * See @{class:PhutilArgumentWorkflow} for details on using workflows. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parseWorkflows(array $workflows) { + try { + return $this->parseWorkflowsFull($workflows); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + } + + + /** + * Select a workflow. For commands that may operate in several modes, like + * `arc`, the modes can be split into "workflows". Each workflow specifies + * the arguments it accepts. This method takes a list of workflows, selects + * the chosen workflow, parses its arguments, and either executes it (if it + * is executable) or returns it for handling. + * + * See @{class:PhutilArgumentWorkflow} for details on using workflows. + * + * @param list List of @{class:PhutilArgumentWorkflow}s. + * @return PhutilArgumentWorkflow|no Returns the chosen workflow if it is + * not executable, or executes it and + * exits with a return code if it is. + * @task parse + */ + public function parseWorkflowsFull(array $workflows) { + assert_instances_of($workflows, 'PhutilArgumentWorkflow'); + + // Clear out existing workflows. We need to do this to permit the + // construction of sub-workflows. + $this->workflows = array(); + + foreach ($workflows as $workflow) { + $name = $workflow->getName(); + + if ($name === null) { + throw new PhutilArgumentSpecificationException( + pht('Workflow has no name!')); + } + + if (isset($this->workflows[$name])) { + throw new PhutilArgumentSpecificationException( + pht("Two workflows with name '%s!", $name)); + } + + $this->workflows[$name] = $workflow; + } + + $argv = $this->argv; + if (empty($argv)) { + // TODO: this is kind of hacky / magical. + if (isset($this->workflows['help'])) { + $argv = array('help'); + } else { + throw new PhutilArgumentUsageException(pht('No workflow selected.')); + } + } + + $flow = array_shift($argv); + + if (empty($this->workflows[$flow])) { + $corrected = PhutilArgumentSpellingCorrector::newCommandCorrector() + ->correctSpelling($flow, array_keys($this->workflows)); + + if (count($corrected) == 1) { + $corrected = head($corrected); + + $this->logMessage( + tsprintf( + "%s\n", + pht( + '(Assuming "%s" is the British spelling of "%s".)', + $flow, + $corrected))); + + $flow = $corrected; + } else { + $this->raiseUnknownWorkflow($flow, $corrected); + } + } + + $workflow = $this->workflows[$flow]; + + if ($this->showHelp) { + // Make "cmd flow --help" behave like "cmd help flow", not "cmd help". + $help_flow = idx($this->workflows, 'help'); + if ($help_flow) { + if ($help_flow !== $workflow) { + $workflow = $help_flow; + $argv = array($flow); + + // Prevent parse() from dumping us back out to standard help. + $this->showHelp = false; + } + } else { + $this->printHelpAndExit(); + } + } + + $this->argv = array_values($argv); + + if ($workflow->shouldParsePartial()) { + $this->parsePartial($workflow->getArguments()); + } else { + $this->parse($workflow->getArguments()); + } + + + if ($workflow->isExecutable()) { + $workflow->setArgv($this); + $err = $workflow->execute($this); + exit($err); + } else { + return $workflow; + } + } + + + /** + * Parse "standard" arguments and apply their effects: + * + * --trace Enable service call tracing. + * --no-ansi Disable ANSI color/style sequences. + * --xprofile Write out an XHProf profile. + * --help Show help. + * + * @return this + * + * @phutil-external-symbol function xhprof_enable + */ + public function parseStandardArguments() { + try { + $this->parsePartial( + array( + array( + 'name' => 'trace', + 'help' => pht('Trace command execution and show service calls.'), + 'standard' => true, + ), + array( + 'name' => 'no-ansi', + 'help' => pht( + 'Disable ANSI terminal codes, printing plain text with '. + 'no color or style.'), + 'conflicts' => array( + 'ansi' => null, + ), + 'standard' => true, + ), + array( + 'name' => 'ansi', + 'help' => pht( + "Use formatting even in environments which probably ". + "don't support it."), + 'standard' => true, + ), + array( + 'name' => 'xprofile', + 'param' => 'profile', + 'help' => pht( + 'Profile script execution and write results to a file.'), + 'standard' => true, + ), + array( + 'name' => 'help', + 'short' => 'h', + 'help' => pht('Show this help.'), + 'standard' => true, + ), + array( + 'name' => 'show-standard-options', + 'help' => pht( + 'Show every option, including standard options like this one.'), + 'standard' => true, + ), + array( + 'name' => 'recon', + 'help' => pht('Start in remote console mode.'), + 'standard' => true, + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + + if ($this->getArg('trace')) { + PhutilServiceProfiler::installEchoListener(); + self::$traceModeEnabled = true; + } + + if ($this->getArg('no-ansi')) { + PhutilConsoleFormatter::disableANSI(true); + } + + if ($this->getArg('ansi')) { + PhutilConsoleFormatter::disableANSI(false); + } + + if ($this->getArg('help')) { + $this->showHelp = true; + } + + $xprofile = $this->getArg('xprofile'); + if ($xprofile) { + if (!function_exists('xhprof_enable')) { + throw new Exception( + pht("To use '%s', you must install XHProf.", '--xprofile')); + } + + xhprof_enable(0); + register_shutdown_function(array($this, 'shutdownProfiler')); + } + + $recon = $this->getArg('recon'); + if ($recon) { + $remote_console = PhutilConsole::newRemoteConsole(); + $remote_console->beginRedirectOut(); + PhutilConsole::setConsole($remote_console); + } else if ($this->getArg('trace')) { + $server = new PhutilConsoleServer(); + $server->setEnableLog(true); + $console = PhutilConsole::newConsoleForServer($server); + PhutilConsole::setConsole($console); + } + + return $this; + } + + +/* -( Reading Arguments )-------------------------------------------------- */ + + + public function getArg($name) { + if (empty($this->specs[$name])) { + throw new PhutilArgumentSpecificationException( + pht("No specification exists for argument '%s'!", $name)); + } + + if (idx($this->results, $name) !== null) { + return $this->results[$name]; + } + + return $this->specs[$name]->getDefault(); + } + + public function getUnconsumedArgumentVector() { + return $this->argv; + } + + public function setUnconsumedArgumentVector(array $argv) { + $this->argv = $argv; + return $this; + } + + +/* -( Command Help )------------------------------------------------------- */ + + + public function setSynopsis($synopsis) { + $this->synopsis = $synopsis; + return $this; + } + + public function setTagline($tagline) { + $this->tagline = $tagline; + return $this; + } + + public function printHelpAndExit() { + echo $this->renderHelp(); + exit(self::PARSE_ERROR_CODE); + } + + public function renderHelp() { + $out = array(); + $more = array(); + + if ($this->bin) { + $out[] = $this->format('**%s**', pht('NAME')); + $name = $this->indent(6, '**%s**', basename($this->bin)); + if ($this->tagline) { + $name .= $this->format(' - '.$this->tagline); + } + $out[] = $name; + $out[] = null; + } + + if ($this->synopsis) { + $out[] = $this->format('**%s**', pht('SYNOPSIS')); + $out[] = $this->indent(6, $this->synopsis); + $out[] = null; + } + + if ($this->workflows) { + $has_help = false; + $out[] = $this->format('**%s**', pht('WORKFLOWS')); + $out[] = null; + $flows = $this->workflows; + ksort($flows); + foreach ($flows as $workflow) { + if ($workflow->getName() == 'help') { + $has_help = true; + } + $out[] = $this->renderWorkflowHelp( + $workflow->getName(), + $show_details = false); + } + if ($has_help) { + $more[] = pht( + 'Use **%s** __command__ for a detailed command reference.', 'help'); + } + } + + $specs = $this->renderArgumentSpecs($this->specs); + if ($specs) { + $out[] = $this->format('**%s**', pht('OPTION REFERENCE')); + $out[] = null; + $out[] = $specs; + } + + // If we have standard options but no --show-standard-options, print out + // a quick hint about it. + if (!empty($this->specs['show-standard-options']) && + !$this->getArg('show-standard-options')) { + $more[] = pht( + 'Use __%s__ to show additional options.', '--show-standard-options'); + } + + $out[] = null; + + if ($more) { + foreach ($more as $hint) { + $out[] = $this->indent(0, $hint); + } + $out[] = null; + } + + return implode("\n", $out); + } + + public function renderWorkflowHelp( + $workflow_name, + $show_details = false) { + + $out = array(); + + $indent = ($show_details ? 0 : 6); + + $workflow = idx($this->workflows, strtolower($workflow_name)); + if (!$workflow) { + $out[] = $this->indent( + $indent, + pht('There is no **%s** workflow.', $workflow_name)); + } else { + $out[] = $this->indent($indent, $workflow->getExamples()); + $out[] = $this->indent($indent, $workflow->getSynopsis()); + if ($show_details) { + $full_help = $workflow->getHelp(); + if ($full_help) { + $out[] = null; + $out[] = $this->indent($indent, $full_help); + } + $specs = $this->renderArgumentSpecs($workflow->getArguments()); + if ($specs) { + $out[] = null; + $out[] = $specs; + } + } + } + + $out[] = null; + + return implode("\n", $out); + } + + public function printUsageException(PhutilArgumentUsageException $ex) { + $message = tsprintf( + "**%s** %B\n", + pht('Usage Exception:'), + $ex->getMessage()); + + $this->logMessage($message); + } + + + private function logMessage($message) { + fwrite(STDERR, $message); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + private function filterWildcardArgv(array $argv) { + foreach ($argv as $key => $value) { + if ($value == '--') { + unset($argv[$key]); + break; + } else if ( + is_string($value) && + !strncmp($value, '-', 1) && + strlen($value) > 1) { + + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' is unrecognized. Use '%s' to indicate ". + "the end of flags.", + $value, + '--')); + } + } + return array_values($argv); + } + + private function mergeSpecs(array $specs) { + + $short_map = mpull($this->specs, null, 'getShortAlias'); + unset($short_map[null]); + + $wildcard = null; + foreach ($this->specs as $spec) { + if ($spec->getWildcard()) { + $wildcard = $spec; + break; + } + } + + foreach ($specs as $spec) { + $spec->validate(); + $name = $spec->getName(); + + if (isset($this->specs[$name])) { + throw new PhutilArgumentSpecificationException( + pht("Two argument specifications have the same name ('%s').", $name)); + } + + $short = $spec->getShortAlias(); + if ($short) { + if (isset($short_map[$short])) { + throw new PhutilArgumentSpecificationException( + pht( + "Two argument specifications have the same short alias ('%s').", + $short)); + } + $short_map[$short] = $spec; + } + + if ($spec->getWildcard()) { + if ($wildcard) { + throw new PhutilArgumentSpecificationException( + pht( + 'Two argument specifications are marked as wildcard arguments. '. + 'You can have a maximum of one wildcard argument.')); + } else { + $wildcard = $spec; + } + } + + $this->specs[$name] = $spec; + } + + foreach ($this->specs as $name => $spec) { + foreach ($spec->getConflicts() as $conflict => $reason) { + if (empty($this->specs[$conflict])) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument '%s' conflicts with unspecified argument '%s'.", + $name, + $conflict)); + } + if ($conflict == $name) { + throw new PhutilArgumentSpecificationException( + pht("Argument '%s' conflicts with itself!", $name)); + } + } + } + + } + + private function renderArgumentSpecs(array $specs) { + foreach ($specs as $key => $spec) { + if ($spec->getWildcard()) { + unset($specs[$key]); + } + } + + $out = array(); + + $no_standard_options = + !empty($this->specs['show-standard-options']) && + !$this->getArg('show-standard-options'); + + $specs = msort($specs, 'getName'); + foreach ($specs as $spec) { + if ($spec->getStandard() && $no_standard_options) { + // If this is a standard argument and the user didn't pass + // --show-standard-options, skip it. + continue; + } + $name = $this->indent(6, '__--%s__', $spec->getName()); + $short = null; + if ($spec->getShortAlias()) { + $short = $this->format(', __-%s__', $spec->getShortAlias()); + } + if ($spec->getParamName()) { + $param = $this->format(' __%s__', $spec->getParamName()); + $name .= $param; + if ($short) { + $short .= $param; + } + } + $out[] = $name.$short; + $out[] = $this->indent(10, $spec->getHelp()); + $out[] = null; + } + + return implode("\n", $out); + } + + private function format($str /* , ... */) { + $args = func_get_args(); + return call_user_func_array( + 'phutil_console_format', + $args); + } + + private function indent($level, $str /* , ... */) { + $args = func_get_args(); + $args = array_slice($args, 1); + $text = call_user_func_array(array($this, 'format'), $args); + return phutil_console_wrap($text, $level); + } + + /** + * @phutil-external-symbol function xhprof_disable + */ + public function shutdownProfiler() { + $data = xhprof_disable(); + $data = json_encode($data); + Filesystem::writeFile($this->getArg('xprofile'), $data); + } + + public static function isTraceModeEnabled() { + return self::$traceModeEnabled; + } + + private function raiseUnknownWorkflow($flow, array $maybe) { + if ($maybe) { + sort($maybe); + + $maybe_list = id(new PhutilConsoleList()) + ->setWrap(false) + ->setBullet(null) + ->addItems($maybe) + ->drawConsoleString(); + + $message = tsprintf( + "%B\n%B", + pht( + 'Invalid command "%s". Did you mean:', + $flow), + $maybe_list); + } else { + $names = mpull($this->workflows, 'getName'); + sort($names); + + $message = tsprintf( + '%B', + pht( + 'Invalid command "%s". Valid commands are: %s.', + $flow, + implode(', ', $names))); + } + + if (isset($this->workflows['help'])) { + $binary = basename($this->bin); + $message = tsprintf( + "%B\n%s", + $message, + pht( + 'For details on available commands, run `%s`.', + "{$binary} help")); + } + + throw new PhutilArgumentUsageException($message); + } + +} diff --git a/src/parser/argument/PhutilArgumentSpecification.php b/src/parser/argument/PhutilArgumentSpecification.php new file mode 100644 index 00000000..71e583b1 --- /dev/null +++ b/src/parser/argument/PhutilArgumentSpecification.php @@ -0,0 +1,268 @@ + 'verbose', + * 'short' => 'v', + * )); + * + * Recognized keys and equivalent verbose methods are: + * + * name setName() + * help setHelp() + * short setShortAlias() + * param setParamName() + * default setDefault() + * conflicts setConflicts() + * wildcard setWildcard() + * repeat setRepeatable() + * + * @param dict Dictionary of quick parameter definitions. + * @return PhutilArgumentSpecification Constructed argument specification. + */ + public static function newQuickSpec(array $spec) { + $recognized_keys = array( + 'name', + 'help', + 'short', + 'param', + 'default', + 'conflicts', + 'wildcard', + 'repeat', + 'standard', + ); + + $unrecognized = array_diff_key( + $spec, + array_fill_keys($recognized_keys, true)); + + foreach ($unrecognized as $key => $ignored) { + throw new PhutilArgumentSpecificationException( + pht( + "Unrecognized key '%s' in argument specification. Recognized keys ". + "are: %s.", + $key, + implode(', ', $recognized_keys))); + } + + $obj = new PhutilArgumentSpecification(); + + foreach ($spec as $key => $value) { + switch ($key) { + case 'name': + $obj->setName($value); + break; + case 'help': + $obj->setHelp($value); + break; + case 'short': + $obj->setShortAlias($value); + break; + case 'param': + $obj->setParamName($value); + break; + case 'default': + $obj->setDefault($value); + break; + case 'conflicts': + $obj->setConflicts($value); + break; + case 'wildcard': + $obj->setWildcard($value); + break; + case 'repeat': + $obj->setRepeatable($value); + break; + case 'standard': + $obj->setStandard($value); + break; + } + } + + $obj->validate(); + + return $obj; + } + + public static function newSpecsFromList(array $specs) { + foreach ($specs as $key => $spec) { + if (is_array($spec)) { + $specs[$key] = self::newQuickSpec( + $spec); + } + } + return $specs; + } + + public function setName($name) { + self::validateName($name); + $this->name = $name; + return $this; + } + + private static function validateName($name) { + if (!preg_match('/^[a-z0-9][a-z0-9-]*$/', $name)) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument names may only contain a-z, 0-9 and -, and must be ". + "at least one character long. '%s' is invalid.", + $name)); + } + } + + public function getName() { + return $this->name; + } + + public function setHelp($help) { + $this->help = $help; + return $this; + } + + public function getHelp() { + return $this->help; + } + + public function setShortAlias($short_alias) { + self::validateShortAlias($short_alias); + $this->shortAlias = $short_alias; + return $this; + } + + private static function validateShortAlias($alias) { + if (strlen($alias) !== 1) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument short aliases must be exactly one character long. ". + "'%s' is invalid.", + $alias)); + } + if (!preg_match('/^[a-zA-Z0-9]$/', $alias)) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument short aliases may only be in a-z, A-Z and 0-9. ". + "'%s' is invalid.", + $alias)); + } + } + + public function getShortAlias() { + return $this->shortAlias; + } + + public function setParamName($param_name) { + $this->paramName = $param_name; + return $this; + } + + public function getParamName() { + return $this->paramName; + } + + public function setDefault($default) { + $this->default = $default; + return $this; + } + + public function getDefault() { + if ($this->getParamName() === null) { + if ($this->getRepeatable()) { + return 0; + } else { + return false; + } + } else { + if ($this->getRepeatable()) { + return array(); + } else { + return $this->default; + } + } + } + + public function setConflicts(array $conflicts) { + $this->conflicts = $conflicts; + return $this; + } + + public function getConflicts() { + return $this->conflicts; + } + + public function setWildcard($wildcard) { + $this->wildcard = $wildcard; + return $this; + } + + public function getWildcard() { + return $this->wildcard; + } + + public function setRepeatable($repeatable) { + $this->repeatable = $repeatable; + return $this; + } + + public function getRepeatable() { + return $this->repeatable; + } + + public function setStandard($standard) { + $this->standard = $standard; + return $this; + } + + public function getStandard() { + return $this->standard; + } + + public function validate() { + if ($this->name === null) { + throw new PhutilArgumentSpecificationException( + pht("Argument specification MUST have a 'name'.")); + } + + if ($this->getWildcard()) { + if ($this->getParamName()) { + throw new PhutilArgumentSpecificationException( + pht('Wildcard arguments may not specify a parameter.')); + } + if ($this->getRepeatable()) { + throw new PhutilArgumentSpecificationException( + pht('Wildcard arguments may not be repeatable.')); + } + } + + if ($this->default !== null) { + if ($this->getRepeatable()) { + throw new PhutilArgumentSpecificationException( + pht( + 'Repeatable arguments may not have a default (always array() for '. + 'arguments which accept a parameter, or 0 for arguments which do '. + 'not).')); + } else if ($this->getParamName() === null) { + throw new PhutilArgumentSpecificationException( + pht('Flag arguments may not have a default (always false).')); + } + } + } + +} diff --git a/src/parser/argument/PhutilArgumentSpellingCorrector.php b/src/parser/argument/PhutilArgumentSpellingCorrector.php new file mode 100644 index 00000000..dd999123 --- /dev/null +++ b/src/parser/argument/PhutilArgumentSpellingCorrector.php @@ -0,0 +1,155 @@ +setInsertCost(4) + ->setDeleteCost(4) + ->setReplaceCost(3) + ->setTransposeCost(2); + + return id(new self()) + ->setEditDistanceMatrix($matrix) + ->setMode(self::MODE_COMMANDS) + ->setMaximumDistance($max_distance); + } + + + /** + * Build a new corrector with parameters for correcting flags, like + * fixing "--nolint" into "--no-lint". + * + * @return PhutilArgumentSpellingCorrector Configured corrector. + */ + public static function newFlagCorrector() { + // When correcting flag spelling, we're stricter than we are when + // correcting command spelling: we allow only one inserted or deleted + // character. It is mainly to handle cases like "--no-lint" versus + // "--nolint" or "--reviewer" versus "--reviewers". + $max_distance = 1; + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(1) + ->setDeleteCost(1) + ->setReplaceCost(10); + + return id(new self()) + ->setEditDistanceMatrix($matrix) + ->setMode(self::MODE_FLAGS) + ->setMaximumDistance($max_distance); + } + + public function setMode($mode) { + $this->mode = $mode; + return $this; + } + + public function getMode() { + return $this->mode; + } + + public function setEditDistanceMatrix(PhutilEditDistanceMatrix $matrix) { + $this->editDistanceMatrix = $matrix; + return $this; + } + + public function getEditDistanceMatrix() { + return $this->editDistanceMatrix; + } + + public function setMaximumDistance($maximum_distance) { + $this->maximumDistance = $maximum_distance; + return $this; + } + + public function getMaximumDistance() { + return $this->maximumDistance; + } + + public function correctSpelling($input, array $options) { + $matrix = $this->getEditDistanceMatrix(); + if (!$matrix) { + throw new PhutilInvalidStateException('setEditDistanceMatrix'); + } + + $max_distance = $this->getMaximumDistance(); + if (!$max_distance) { + throw new PhutilInvalidStateException('setMaximumDistance'); + } + + // If we're correcting commands, never correct an input which begins + // with "-", since this is almost certainly intended to be a flag. + if ($this->getMode() === self::MODE_COMMANDS) { + if (preg_match('/^-/', $input)) { + return array(); + } + } + + $input = $this->normalizeString($input); + foreach ($options as $key => $option) { + $options[$key] = $this->normalizeString($option); + } + + $distances = array(); + $inputv = phutil_utf8v($input); + foreach ($options as $option) { + $optionv = phutil_utf8v($option); + $matrix->setSequences($optionv, $inputv); + $distances[$option] = $matrix->getEditDistance(); + } + + asort($distances); + $best = min($max_distance, head($distances)); + foreach ($distances as $option => $distance) { + if ($distance > $best) { + unset($distances[$option]); + } + } + + // Before filtering, check if we have multiple equidistant matches and + // return them if we do. This prevents us from, e.g., matching "alnd" with + // both "land" and "amend", then dropping "land" for being too short, and + // incorrectly completing to "amend". + if (count($distances) > 1) { + return array_keys($distances); + } + + foreach ($distances as $option => $distance) { + if (phutil_utf8_strlen($option) < $distance) { + unset($distances[$option]); + } + } + + return array_keys($distances); + } + + private function normalizeString($string) { + return phutil_utf8_strtolower($string); + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php b/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php new file mode 100644 index 00000000..5d722f29 --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php @@ -0,0 +1,426 @@ + 'flag', + ), + ); + + $args = new PhutilArgumentParser(array('bin')); + $args->parseFull($specs); + $this->assertEqual(false, $args->getArg('flag')); + + $args = new PhutilArgumentParser(array('bin', '--flag')); + $args->parseFull($specs); + $this->assertEqual(true, $args->getArg('flag')); + } + + public function testWildcards() { + $specs = array( + array( + 'name' => 'flag', + ), + array( + 'name' => 'files', + 'wildcard' => true, + ), + ); + + $args = new PhutilArgumentParser(array('bin', '--flag', 'a', 'b')); + $args->parseFull($specs); + $this->assertEqual(true, $args->getArg('flag')); + $this->assertEqual( + array('a', 'b'), + $args->getArg('files')); + + $caught = null; + try { + $args = new PhutilArgumentParser(array('bin', '--derp', 'a', 'b')); + $args->parseFull($specs); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + + $args = new PhutilArgumentParser(array('bin', '--', '--derp', 'a', 'b')); + $args->parseFull($specs); + $this->assertEqual( + array('--derp', 'a', 'b'), + $args->getArg('files')); + } + + public function testPartialParse() { + $specs = array( + array( + 'name' => 'flag', + ), + ); + + $args = new PhutilArgumentParser(array('bin', 'a', '--flag', '--', 'b')); + $args->parsePartial($specs); + + $this->assertEqual( + array('a', '--', 'b'), + $args->getUnconsumedArgumentVector()); + } + + public function testBadArg() { + $args = new PhutilArgumentParser(array('bin')); + $args->parseFull(array()); + + $caught = null; + try { + $args->getArg('flag'); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateNames() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + ), + array( + 'name' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateNamesWithParsePartial() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parsePartial( + array( + array( + 'name' => 'x', + ), + )); + $args->parsePartial( + array( + array( + 'name' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateShortAliases() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'short' => 'x', + ), + array( + 'name' => 'y', + 'short' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateWildcards() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'wildcard' => true, + ), + array( + 'name' => 'y', + 'wildcard' => true, + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicatePartialWildcards() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parsePartial( + array( + array( + 'name' => 'x', + 'wildcard' => true, + ), + )); + $args->parsePartial( + array( + array( + 'name' => 'y', + 'wildcard' => true, + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictSpecificationWithUnrecognizedArg() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'conflicts' => array( + 'y' => true, + ), + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictSpecificationWithSelf() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'conflicts' => array( + 'x' => true, + ), + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnrecognizedFlag() { + $args = new PhutilArgumentParser(array('bin', '--flag')); + $caught = null; + try { + $args->parseFull(array()); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateFlag() { + $args = new PhutilArgumentParser(array('bin', '--flag', '--flag')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'flag', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testMissingParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--with')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'with', + 'param' => 'stuff', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testExtraParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--true=apple')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'true', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--true', '--false')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'true', + 'conflicts' => array( + 'false' => true, + ), + ), + array( + 'name' => 'false', + 'conflicts' => array( + 'true' => true, + ), + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testParameterValues() { + $specs = array( + array( + 'name' => 'a', + 'param' => 'value', + ), + array( + 'name' => 'b', + 'param' => 'value', + ), + array( + 'name' => 'cee', + 'short' => 'c', + 'param' => 'value', + ), + array( + 'name' => 'dee', + 'short' => 'd', + 'param' => 'value', + ), + ); + + $args = new PhutilArgumentParser( + array( + 'bin', + '--a', + 'a', + '--b=b', + '-c', + 'c', + '-d=d', + )); + $args->parseFull($specs); + + $this->assertEqual('a', $args->getArg('a')); + $this->assertEqual('b', $args->getArg('b')); + $this->assertEqual('c', $args->getArg('cee')); + $this->assertEqual('d', $args->getArg('dee')); + } + + public function testStdinValidParameter() { + $specs = array( + array( + 'name' => 'file', + 'param' => 'file', + ), + ); + + $args = new PhutilArgumentParser( + array( + 'bin', + '-', + '--file', + '-', + )); + $args->parsePartial($specs); + + $this->assertEqual('-', $args->getArg('file')); + } + + public function testRepeatableFlag() { + $specs = array( + array( + 'name' => 'verbose', + 'short' => 'v', + 'repeat' => true, + ), + ); + + $args = new PhutilArgumentParser(array('bin', '-v', '-v', '-v')); + $args->parseFull($specs); + + $this->assertEqual(3, $args->getArg('verbose')); + } + + public function testRepeatableParam() { + $specs = array( + array( + 'name' => 'eat', + 'param' => 'fruit', + 'repeat' => true, + ), + ); + + $args = new PhutilArgumentParser(array( + 'bin', + '--eat', + 'apple', + '--eat', + 'pear', + '--eat=orange', + )); + $args->parseFull($specs); + + $this->assertEqual( + array('apple', 'pear', 'orange'), + $args->getArg('eat')); + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php b/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php new file mode 100644 index 00000000..f49ad365 --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php @@ -0,0 +1,142 @@ + true, + 'xx' => true, + '!' => false, + 'XX' => false, + '1=' => false, + '--' => false, + + 'no-stuff' => true, + '-stuff' => false, + ); + + foreach ($names as $name => $valid) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec( + array( + 'name' => $name, + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$valid, + $caught instanceof Exception, + pht("Argument name '%s'.", $name)); + } + } + + public function testAliases() { + $aliases = array( + 'a' => true, + '1' => true, + + 'no' => false, + '-' => false, + '_' => false, + ' ' => false, + '' => false, + ); + + foreach ($aliases as $alias => $valid) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec( + array( + 'name' => 'example', + 'short' => $alias, + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$valid, + $caught instanceof Exception, + pht("Arg alias '%s'.", $alias)); + } + } + + public function testSpecs() { + $good_specs = array( + array( + 'name' => 'verbose', + ), + array( + 'name' => 'verbose', + 'short' => 'v', + 'help' => 'Derp.', + 'param' => 'level', + 'default' => 'y', + 'conflicts' => array( + 'quiet' => true, + ), + 'wildcard' => false, + ), + array( + 'name' => 'files', + 'wildcard' => true, + ), + ); + + $bad_specs = array( + array( + ), + array( + 'alias' => 'v', + ), + array( + 'name' => 'derp', + 'fruit' => 'apple', + ), + array( + 'name' => 'x', + 'default' => 'y', + ), + array( + 'name' => 'x', + 'param' => 'y', + 'default' => 'z', + 'repeat' => true, + ), + array( + 'name' => 'x', + 'wildcard' => true, + 'repeat' => true, + ), + array( + 'name' => 'x', + 'param' => 'y', + 'wildcard' => true, + ), + + ); + + $cases = array( + array(true, $good_specs), + array(false, $bad_specs), + ); + + foreach ($cases as $case) { + list($expect, $specs) = $case; + foreach ($specs as $spec) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec($spec); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$expect, + $caught instanceof Exception, + pht('Spec validity for: %s', print_r($spec, true))); + } + } + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php b/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php new file mode 100644 index 00000000..ce0e23ec --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php @@ -0,0 +1,94 @@ +assertCommandCorrection( + array('land'), + 'alnd', + array('land', 'amend')); + + $this->assertCommandCorrection( + array('branch'), + 'brnach', + array('branch', 'browse')); + + $this->assertCommandCorrection( + array(), + 'test', + array('list', 'unit')); + + $this->assertCommandCorrection( + array('list'), + 'lists', + array('list')); + + $this->assertCommandCorrection( + array('diff'), + 'dfif', + array('diff')); + + $this->assertCommandCorrection( + array('unit'), + 'uint', + array('unit', 'lint', 'list')); + + $this->assertCommandCorrection( + array('list', 'lint'), + 'nilt', + array('unit', 'lint', 'list')); + } + + private function assertCommandCorrection($expect, $input, $commands) { + $result = PhutilArgumentSpellingCorrector::newCommandCorrector() + ->correctSpelling($input, $commands); + + sort($result); + sort($expect); + + $commands = implode(', ', $commands); + + $this->assertEqual( + $expect, + $result, + pht('Correction of %s against: %s', $input, $commands)); + } + + public function testFlagCorrection() { + $this->assertFlagCorrection( + array('nolint'), + 'no-lint', + array('nolint', 'nounit')); + + $this->assertFlagCorrection( + array('reviewers'), + 'reviewer', + array('reviewers', 'cc')); + + $this->assertFlagCorrection( + array(), + 'onlint', + array('nolint')); + + $this->assertFlagCorrection( + array(), + 'nolind', + array('nolint')); + } + + private function assertFlagCorrection($expect, $input, $flags) { + $result = PhutilArgumentSpellingCorrector::newFlagCorrector() + ->correctSpelling($input, $flags); + + sort($result); + sort($expect); + + $flags = implode(', ', $flags); + + $this->assertEqual( + $expect, + $result, + pht('Correction of %s against: %s', $input, $flags)); + } + +} diff --git a/src/parser/argument/exception/PhutilArgumentParserException.php b/src/parser/argument/exception/PhutilArgumentParserException.php new file mode 100644 index 00000000..9927a577 --- /dev/null +++ b/src/parser/argument/exception/PhutilArgumentParserException.php @@ -0,0 +1,3 @@ +setTagline('simple calculator example'); + * $args->setSynopsis(<<setName('add') + * ->setExamples('**add** __n__ ...') + * ->setSynopsis('Compute the sum of a list of numbers.') + * ->setArguments( + * array( + * array( + * 'name' => 'numbers', + * 'wildcard' => true, + * ), + * )); + * + * $mul_workflow = id(new PhutilArgumentWorkflow()) + * ->setName('mul') + * ->setExamples('**mul** __n__ ...') + * ->setSynopsis('Compute the product of a list of numbers.') + * ->setArguments( + * array( + * array( + * 'name' => 'numbers', + * 'wildcard' => true, + * ), + * )); + * + * $flow = $args->parseWorkflows( + * array( + * $add_workflow, + * $mul_workflow, + * new PhutilHelpArgumentWorkflow(), + * )); + * + * $nums = $args->getArg('numbers'); + * if (empty($nums)) { + * echo "You must provide one or more numbers!\n"; + * exit(1); + * } + * + * foreach ($nums as $num) { + * if (!is_numeric($num)) { + * echo "Number '{$num}' is not numeric!\n"; + * exit(1); + * } + * } + * + * switch ($flow->getName()) { + * case 'add': + * echo array_sum($nums)."\n"; + * break; + * case 'mul': + * echo array_product($nums)."\n"; + * break; + * } + * + * You can also subclass this class and return `true` from + * @{method:isExecutable}. In this case, the parser will automatically select + * your workflow when the user invokes it. + * + * @concrete-extensible + */ +class PhutilArgumentWorkflow extends Phobject { + + private $name; + private $synopsis; + private $specs = array(); + private $examples; + private $help; + private $argv; + + final public function __construct() { + $this->didConstruct(); + } + + public function setName($name) { + $this->name = $name; + return $this; + } + + public function getName() { + return $this->name; + } + + /** + * Provide brief usage examples of common calling conventions, like: + * + * $workflow->setExamples("**delete** __file__ [__options__]"); + * + * This text is shown in both brief and detailed help, and should give the + * user a quick reference for common uses. You can separate several common + * uses with newlines, but usually should not provide more than 2-3 examples. + */ + final public function setExamples($examples) { + $this->examples = $examples; + return $this; + } + + final public function getExamples() { + if (!$this->examples) { + return '**'.$this->name.'**'; + } + return $this->examples; + } + + /** + * Provide a brief description of the command, like "Delete a file.". + * + * This text is shown in both brief and detailed help, and should give the + * user a general idea of what the workflow does. + */ + final public function setSynopsis($synopsis) { + $this->synopsis = $synopsis; + return $this; + } + + final public function getSynopsis() { + return $this->synopsis; + } + + + /** + * Provide a full explanation of the command. This text is shown only in + * detailed help. + */ + final public function getHelp() { + return $this->help; + } + + final public function setHelp($help) { + $this->help = $help; + return $this; + } + + final public function setArguments(array $specs) { + $specs = PhutilArgumentSpecification::newSpecsFromList($specs); + $this->specs = $specs; + return $this; + } + + final public function getArguments() { + return $this->specs; + } + + final public function setArgv(PhutilArgumentParser $argv) { + $this->argv = $argv; + return $this; + } + + final public function getArgv() { + return $this->argv; + } + + protected function didConstruct() { + return null; + } + + public function isExecutable() { + return false; + } + + public function execute(PhutilArgumentParser $args) { + throw new Exception(pht("This workflow isn't executable!")); + } + + /** + * Normally, workflow arguments are parsed fully, so unexpected arguments will + * raise an error. You can return `true` from this method to parse workflow + * arguments only partially. This will allow you to manually parse remaining + * arguments or delegate to a second level of workflows. + * + * @return bool True to partially parse workflow arguments (default false). + */ + public function shouldParsePartial() { + return false; + } + +} diff --git a/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php new file mode 100644 index 00000000..d464e1cf --- /dev/null +++ b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php @@ -0,0 +1,45 @@ +setName('help'); + $this->setExamples(<<setSynopsis(<<setArguments( + array( + array( + 'name' => 'help-with-what', + 'wildcard' => true, + ), + )); + } + + public function isExecutable() { + return true; + } + + public function execute(PhutilArgumentParser $args) { + $with = $args->getArg('help-with-what'); + + if (!$with) { + $args->printHelpAndExit(); + } else { + foreach ($with as $thing) { + echo phutil_console_format( + "**%s**\n\n", + pht('%s WORKFLOW', strtoupper($thing))); + echo $args->renderWorkflowHelp($thing, $show_flags = true); + echo "\n"; + } + exit(PhutilArgumentParser::PARSE_ERROR_CODE); + } + } + +} diff --git a/src/parser/exception/PhutilINIParserException.php b/src/parser/exception/PhutilINIParserException.php new file mode 100644 index 00000000..22a4c8ac --- /dev/null +++ b/src/parser/exception/PhutilINIParserException.php @@ -0,0 +1,3 @@ +sourceLine = $line; + $this->sourceChar = $char; + $this->sourceToken = $token; + $this->expected = $expected; + + parent::__construct( + pht('Parse error on line %d at column %d: %s', $line, $char, $message)); + } + + public function getSourceLine() { + return $this->sourceLine; + } + + public function getSourceChar() { + return $this->sourceChar; + } + + public function getSourceToken() { + return $this->sourceToken; + } + + public function getExpectedTokens() { + return $this->expected; + } + +} diff --git a/src/parser/exception/PhutilTypeCheckException.php b/src/parser/exception/PhutilTypeCheckException.php new file mode 100644 index 00000000..b23494b7 --- /dev/null +++ b/src/parser/exception/PhutilTypeCheckException.php @@ -0,0 +1,40 @@ +getType() == 'regex') { + if (is_string($value)) { + $message = pht( + "Expected a regular expression, but '%s' is not valid: %s", + $value, + $err); + } else { + $message = pht( + 'Expected a regular expression, but value is not valid: %s', + $err); + } + } else { + $message = pht( + "Expected type '%s', got type '%s'.", + $type->toString(), + PhutilTypeSpec::getTypeOf($value)); + } + + parent::__construct($invalid.' '.$message); + } + +} diff --git a/src/parser/exception/PhutilTypeExtraParametersException.php b/src/parser/exception/PhutilTypeExtraParametersException.php new file mode 100644 index 00000000..c37b1da0 --- /dev/null +++ b/src/parser/exception/PhutilTypeExtraParametersException.php @@ -0,0 +1,21 @@ +parameters; + } + + public function __construct(array $extra) { + $message = pht( + 'Got unexpected parameters: %s', + implode(', ', array_keys($extra))); + + parent::__construct($message); + + $this->parameters = $extra; + } + +} diff --git a/src/parser/exception/PhutilTypeMissingParametersException.php b/src/parser/exception/PhutilTypeMissingParametersException.php new file mode 100644 index 00000000..c37a9a71 --- /dev/null +++ b/src/parser/exception/PhutilTypeMissingParametersException.php @@ -0,0 +1,21 @@ +parameters; + } + + public function __construct(array $missing) { + $message = pht( + 'Missing required parameters: %s', + implode(', ', $missing)); + + parent::__construct($message); + + $this->parameters = $missing; + } + +} diff --git a/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php b/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php new file mode 100644 index 00000000..74f86c24 --- /dev/null +++ b/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php @@ -0,0 +1,4 @@ +content = $content; + return $this; + } + + public function getContent() { + return $this->content; + } + + public function isContentNode() { + return ($this->content !== null); + } + + public function setTagName($tag_name) { + $this->tagName = $tag_name; + return $this; + } + + public function getTagName() { + return $this->tagName; + } + + public function appendChild(PhutilDOMNode $node) { + $node->parentNode = $this; + $this->children[] = $node; + return $this; + } + + public function getChildren() { + return $this->children; + } + + public function getParentNode() { + return $this->parentNode; + } + + public function setAttributes(array $attributes) { + $this->attributes = $attributes; + return $this; + } + + public function getAttributes() { + return $this->attributes; + } + + public function setRawHead($raw_string) { + $this->rawHead = $raw_string; + return $this; + } + + public function setRawTail($raw_tail) { + $this->rawTail = $raw_tail; + return $this; + } + + public function newRawString() { + $raw = array(); + $raw[] = $this->rawHead; + + foreach ($this->getChildren() as $child) { + $raw[] = $child->newRawString(); + } + + $raw[] = $this->rawTail; + + return implode('', $raw); + } + + public function toDictionary() { + if ($this->isContentNode()) { + return array( + 'content' => $this->content, + ); + } else { + $children = array(); + + foreach ($this->getChildren() as $child) { + $children[] = $child->toDictionary(); + } + + return array( + 'tag' => $this->getTagName(), + 'attributes' => $this->getAttributes(), + 'children' => $children, + ); + } + } + + /** + * Get a list of the children of a given DOM node, treating unexpected + * tags as if they were raw content. + */ + public function selectChildrenWithTags(array $tag_list) { + $tag_map = array_fuse($tag_list); + + $nodes = array(); + foreach ($this->getChildren() as $child) { + // If this is already a content node, just keep it as-is. + if ($child->isContentNode()) { + $nodes[] = $child; + continue; + } + + $tag_name = $child->getTagName(); + + // If this is a tag that we're allowing, keep it as-is. + if (isset($tag_map[$tag_name])) { + $nodes[] = $child; + continue; + } + + // Otherwise, this is some other tag. Convert it into a content + // node. + + $raw_string = $child->newRawString(); + + $nodes[] = id(new self()) + ->setContent($raw_string) + ->setRawHead($raw_string); + } + + return $this->mergeContentNodes($nodes); + } + + public function newRawContentString() { + $content_node = $this->selectChildrenWithTags(array()); + + if (!$content_node) { + return ''; + } + + return head($content_node)->newRawString(); + } + + public function mergeContent() { + $this->children = $this->mergeContentNodes($this->children); + + foreach ($this->getChildren() as $child) { + $child->parentNode = $this; + $child->mergeContent(); + } + + return $this; + } + + /** + * Given a list of nodes, combine sequences of multiple adjacent content + * nodes into single nodes. + */ + private function mergeContentNodes(array $nodes) { + $list = array(); + $content_block = array(); + foreach ($nodes as $node) { + if ($node->isContentNode()) { + $content_block[] = $node; + continue; + } + + $list[] = $content_block; + $content_block = array(); + + $list[] = $node; + } + + $list[] = $content_block; + + $results = array(); + foreach ($list as $item) { + if (!is_array($item)) { + $results[] = $item; + continue; + } + + if (!$item) { + continue; + } + + $parts = array(); + foreach ($item as $content_node) { + $parts[] = $content_node->newRawString(); + } + $parts = implode('', $parts); + + if (!strlen($parts)) { + continue; + } + + $results[] = id(new self()) + ->setContent($parts) + ->setRawHead($parts); + } + + return $results; + } + +} diff --git a/src/parser/html/PhutilHTMLParser.php b/src/parser/html/PhutilHTMLParser.php new file mode 100644 index 00000000..66e82a55 --- /dev/null +++ b/src/parser/html/PhutilHTMLParser.php @@ -0,0 +1,434 @@ +"). Non-tag + // content is anything else. + + $segment_pos = 0; + $segments = array(); + $in_tag = false; + + for ($ii = 0; $ii < strlen($corpus); $ii++) { + $c = $corpus[$ii]; + + if ($in_tag && ($c === '>')) { + if ($segment_pos !== null) { + $segments[] = array( + 'tag' => $in_tag, + 'pos' => $segment_pos, + 'end' => $ii + 1, + ); + } + + $segment_pos = $ii + 1; + $in_tag = false; + continue; + } + + // When we encounter a "<", we start a new tag whether we're already in + // a tag or not. We want to parse "1 < 2" as a single tag with + // the content "1 < 2". + + if ($c === '<') { + $segments[] = array( + 'tag' => false, + 'pos' => $segment_pos, + 'end' => $ii, + ); + + $segment_pos = $ii; + $in_tag = true; + continue; + } + } + + // Add whatever content was left at the end of the string. If we were in + // a tag but did not find a closing ">", we treat this as normal content. + $segments[] = array( + 'tag' => false, + 'pos' => $segment_pos, + 'end' => $ii, + ); + + // Slice the marked segments out of the raw corpus so we get a list of + // "tag" strings and a list of "non-tag" strings. + + $parts = array(); + $corpus_length = strlen($corpus); + foreach ($segments as $segment) { + $tag = $segment['tag']; + $pos = $segment['pos']; + $len = $segment['end'] - $pos; + + // If this is a tag, we'll drop the "<" at the beginning and the ">" + // at the end here. + if ($tag) { + $slice_pos = $pos + 1; + $slice_len = $len - 2; + } else { + $slice_pos = $pos; + $slice_len = $len; + } + + if (($slice_pos < $corpus_length) && ($slice_len > 0)) { + $content = substr($corpus, $slice_pos, $slice_len); + } else { + $content = ''; + } + + $parts[] = array( + 'tag' => $tag, + 'pos' => $pos, + 'len' => $len, + 'content' => $content, + ); + } + + $root = new PhutilDOMNode(); + $this->setCursor($root); + + foreach ($parts as $part) { + $tag = $this->newTagDOMNode($part); + + if ($tag !== null) { + continue; + } + + $content = $part['content']; + + // If this part is a tag, restore the angle brackets. + if ($part['tag']) { + $content = '<'.$content.'>'; + } + + $node = id(new PhutilDOMNode()) + ->setContent($content) + ->setRawHead($content); + + $this->getCursor()->appendChild($node); + } + + $root->mergeContent(); + + return $root; + } + + private function newTagDOMNode(array $part) { + if (!$part['tag']) { + return null; + } + + $raw_content = $part['content']; + $content = $raw_content; + + $content = trim($content); + $content_len = strlen($content); + + // If the tag content begins with "/", like "", strip the slash + // off and mark this as a closing tag. + $is_close = false; + if ($content_len > 0 && $content[0] === '/') { + $is_close = true; + $content = substr($content, 1); + $content = trim($content); + $content_len = strlen($content); + } + + // If the tag content ends with "/", like "", strip the slash off + // and mark this as self-closing. + $self_close = false; + if ($content_len > 0 && $content[$content_len - 1] === '/') { + $self_close = true; + $content = substr($content, 0, $content_len - 1); + $content = trim($content); + $content_len = strlen($content); + } + + // If this tag is both a closing tag and a self-closing tag, it is + // not formatted correctly. Treat it as content. + if ($self_close && $is_close) { + return null; + } + + // Now, split the rest of the tag into the tag name and tag attributes. + $pieces = preg_split('/\s+/', $content, 2); + $tag_name = $pieces[0]; + + if (count($pieces) > 1) { + $attributes = $pieces[1]; + } else { + $attributes = ''; + } + + // If there's no tag name, this tag is not valid. Treat it as content. + if (!strlen($tag_name)) { + return null; + } + + // If this is a closing tag with attributes, it's not valid. Treat it + // as content. + if ($is_close && strlen($attributes)) { + return null; + } + + $tag_name = phutil_utf8_strtolower($tag_name); + + // If we find a valid closing tag, try to find a matching tag on the stack. + // If we find a matching tag, close it. + // If we do not find a matching tag, treat the closing tag as content. + if ($is_close) { + $cursor = $this->getCursor(); + + while ($cursor) { + if ($cursor->getTagName() === $tag_name) { + // Add this raw content to the raw content of the tag we're closing. + $cursor->setRawTail('<'.$raw_content.'>'); + + $parent = $cursor->getParentNode(); + $this->setCursor($parent); + + return true; + } + $cursor = $cursor->getParentNode(); + } + + return null; + } + + if (strlen($attributes)) { + $attribute_map = $this->parseAttributes($attributes); + // If the attributes can't be parsed, treat the tag as content. + if ($attribute_map === null) { + return null; + } + } else { + $attribute_map = array(); + } + + $node = id(new PhutilDOMNode()) + ->setTagName($tag_name) + ->setAttributes($attribute_map) + ->setRawHead('<'.$raw_content.'>'); + + $cursor = $this->getCursor(); + $cursor->appendChild($node); + + if (!$self_close) { + $this->setCursor($node); + } + + return $node; + } + + private function setCursor(PhutilDOMNode $cursor) { + $this->cursor = $cursor; + return $this; + } + + private function getCursor() { + return $this->cursor; + } + + private function parseAttributes($attributes) { + $state = 'key'; + + $whitespace = array( + ' ' => true, + "\n" => true, + "\t" => true, + "\r" => true, + ); + + $map = array(); + $len = strlen($attributes); + $key_pos = null; + for ($ii = 0; $ii < $len; $ii++) { + $c = $attributes[$ii]; + $is_space = isset($whitespace[$c]); + + switch ($state) { + case 'key': + // We're looking for the start of an attribute name. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // If we see "". + if (isset($map[$name_value])) { + return null; + } + } + + // If we find an "=", that's the end of the name. Next, we're going + // to parse a value. + if ($c === '=') { + $state = 'value'; + break; + } + + // If we find whitespace, that's the end of the name. We're going + // to look for an "=". + if ($is_space) { + $state = 'equals'; + break; + } + + break; + case 'equals': + // We've parsed the name of an attribute and are looking for an + // "=" character. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // This is the "=" we're looking for, so we're good to go. + if ($c === '=') { + $state = 'value'; + break; + } + + // If this is anything else, this is an attribute name with no + // value. Treat it as "true" and move on. This corresponds to an + // input like "". + $map[$name_value] = true; + $name_pos = $ii; + $state = 'name'; + break; + case 'value': + // We've parsed an "=" and are looking for the start of a value. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // Don't accept "parseDocument($input); + + // We're just testing the child list of the root node since this + // reduces the amount of boilerplate in the test cases. + $list = array(); + foreach ($document->getChildren() as $child) { + $list[] = $child->toDictionary(); + } + + $this->assertEqual( + $expect, + $list, + pht('DOM tree for "%s".', $test)); + } + } + + public function testSelectChildrenWithTags() { + $input = 'x'; + $document = id(new PhutilHTMLParser()) + ->parseDocument($input); + + $children = $document->selectChildrenWithTags(array('a')); + + $list = array(); + foreach ($children as $child) { + $list[] = $child->toDictionary(); + } + + $this->assertEqual( + array( + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => 'x', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + ), + $list, + pht('Child selection of: %s.', $input)); + } + +} diff --git a/src/parser/html/__tests__/data/attributes-basic.txt b/src/parser/html/__tests__/data/attributes-basic.txt new file mode 100644 index 00000000..040647da --- /dev/null +++ b/src/parser/html/__tests__/data/attributes-basic.txt @@ -0,0 +1,13 @@ + +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": { + "b": "1", + "c": true, + "d": "e" + }, + "children": [] + } +] diff --git a/src/parser/html/__tests__/data/content-angle.txt b/src/parser/html/__tests__/data/content-angle.txt new file mode 100644 index 00000000..d2573320 --- /dev/null +++ b/src/parser/html/__tests__/data/content-angle.txt @@ -0,0 +1,7 @@ +o< quack +~~~~~~~~~~ +[ + { + "content": "o< quack" + } +] diff --git a/src/parser/html/__tests__/data/content-simple.txt b/src/parser/html/__tests__/data/content-simple.txt new file mode 100644 index 00000000..6ecf430b --- /dev/null +++ b/src/parser/html/__tests__/data/content-simple.txt @@ -0,0 +1,7 @@ +quack +~~~~~~~~~~ +[ + { + "content": "quack" + } +] diff --git a/src/parser/html/__tests__/data/tag-angle.txt b/src/parser/html/__tests__/data/tag-angle.txt new file mode 100644 index 00000000..00ad9a2b --- /dev/null +++ b/src/parser/html/__tests__/data/tag-angle.txt @@ -0,0 +1,13 @@ +1 < 2 +~~~~~~~~~~ +[ + { + "tag": "math", + "attributes": {}, + "children": [ + { + "content": "1 < 2" + } + ] + } +] diff --git a/src/parser/html/__tests__/data/tag-mismatch.txt b/src/parser/html/__tests__/data/tag-mismatch.txt new file mode 100644 index 00000000..e04b40e6 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-mismatch.txt @@ -0,0 +1,21 @@ + +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": {}, + "children": [ + { + "tag": "b", + "attributes": {}, + "children": [ + { + "tag": "c", + "attributes": {}, + "children": [] + } + ] + } + ] + } +] diff --git a/src/parser/html/__tests__/data/tag-simple.txt b/src/parser/html/__tests__/data/tag-simple.txt new file mode 100644 index 00000000..fcf07d40 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-simple.txt @@ -0,0 +1,135 @@ + + +< a/> + + +< a /> +< a / > + + +< a>< /a> +< a >< /a > + + +< a>< / a> +< a >< / a > +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + } +] diff --git a/src/parser/html/__tests__/data/tag-table.txt b/src/parser/html/__tests__/data/tag-table.txt new file mode 100644 index 00000000..ec6106ed --- /dev/null +++ b/src/parser/html/__tests__/data/tag-table.txt @@ -0,0 +1,39 @@ +
ab
+~~~~~~~~~~ +[ + { + "tag": "table", + "attributes": {}, + "children": [ + { + "tag": "tr", + "attributes": {}, + "children": [ + { + "tag": "td", + "attributes": {}, + "children": [ + { + "content": "a" + } + ] + }, + { + "tag": "td", + "attributes": {}, + "children": [ + { + "content": "b" + } + ] + }, + { + "tag": "td", + "attributes": {}, + "children": [] + } + ] + } + ] + } +] diff --git a/src/parser/http/PhutilHTTPResponse.php b/src/parser/http/PhutilHTTPResponse.php new file mode 100644 index 00000000..756847a7 --- /dev/null +++ b/src/parser/http/PhutilHTTPResponse.php @@ -0,0 +1,62 @@ +body = new PhutilRope(); + } + + public function setHeaders(array $headers) { + $this->headers = $headers; + return $this; + } + + public function getHeaders() { + return $this->headers; + } + + public function setStatus(HTTPFutureResponseStatus $status) { + $this->status = $status; + return $this; + } + + public function getStatus() { + return $this->status; + } + + public function appendBody($bytes) { + if ($this->writeHandle !== null) { + $result = @fwrite($this->writeHandle, $bytes); + if ($result !== strlen($bytes)) { + throw new Exception( + pht('Failed to write response to disk. (Maybe the disk is full?)')); + } + } else { + $this->body->append($bytes); + } + } + + public function getBody() { + if ($this->writeHandle !== null) { + return null; + } + + return $this->body->getAsString(); + } + + public function setWriteHandle($write_handle) { + $this->writeHandle = $write_handle; + return $this; + } + + public function getWriteHandle() { + return $this->writeHandle; + } + +} diff --git a/src/parser/http/PhutilHTTPResponseParser.php b/src/parser/http/PhutilHTTPResponseParser.php new file mode 100644 index 00000000..0197d006 --- /dev/null +++ b/src/parser/http/PhutilHTTPResponseParser.php @@ -0,0 +1,207 @@ +followLocationHeaders = $follow_location_headers; + return $this; + } + + public function getFollowLocationHeaders() { + return $this->followLocationHeaders; + } + + public function setWriteHandle($write_handle) { + $this->writeHandle = $write_handle; + return $this; + } + + public function getWriteHandle() { + return $this->writeHandle; + } + + public function setProgressSink(PhutilProgressSink $progress_sink) { + $this->progressSink = $progress_sink; + return $this; + } + + public function getProgressSink() { + return $this->progressSink; + } + + public function readBytes($bytes) { + if ($this->state == 'discard') { + return $this; + } + + $this->buffer .= $bytes; + + while (true) { + if ($this->state == 'headers') { + $matches = null; + + $ok = preg_match( + "/(\r?\n\r?\n)/", + $this->buffer, + $matches, + PREG_OFFSET_CAPTURE); + if (!$ok) { + break; + } + + $headers_len = $matches[1][1]; + $boundary_len = strlen($matches[1][0]); + $raw_headers = substr($this->buffer, 0, $headers_len); + $this->buffer = substr($this->buffer, $headers_len + $boundary_len); + + $header_lines = phutil_split_lines($raw_headers); + $first_line = array_shift($header_lines); + $response_valid = true; + + $matches = null; + $ok = preg_match( + '(^HTTP/\S+\s+(\d+)(?:\s+(.*))?$)i', + $first_line, + $matches); + + if ($ok) { + $http_code = (int)$matches[1]; + $http_status = phutil_utf8_strtolower($matches[2]); + } else { + $response_valid = false; + } + + $header_list = array(); + $saw_location = false; + foreach ($header_lines as $header_line) { + $pos = strpos($header_line, ':'); + if ($pos === false) { + $response_valid = false; + break; + } + + $name = substr($header_line, 0, $pos); + $value = ltrim(substr($header_line, $pos + 1), ' '); + + if (phutil_utf8_strtolower($name) == 'location') { + $saw_location = true; + } + + $header_list[] = array( + $name, + $value, + ); + } + + // If the response didn't start with a properly formatted "HTTP/..." + // line, or any of the header lines were not formatted correctly, add + // a malformed response to the response list and discard anything else + // we're given. + if (!$response_valid) { + $malformed = new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $raw_headers); + + $this->newHTTPResponse() + ->setStatus($malformed); + + $this->buffer = ''; + $this->state = 'discard'; + break; + } + + // Otherwise, we have a valid set of response headers. + $response_status = new HTTPFutureHTTPResponseStatus( + $http_code, + null, + $header_list); + + $this->newHTTPResponse() + ->setStatus($response_status) + ->setHeaders($header_list); + + $is_https_proxy = + ($http_code === 200) && + ($http_status === 'connection established'); + + if ($http_code === 100) { + // If this is "HTTP/1.1 100 Continue", this is just the server + // telling us that everything is okay. This response won't have + // a body associated with it. + $more_headers = true; + } else if ($is_https_proxy) { + // If this is "HTTP/1.1 200 Connection Established", this is a + // response to a CONNECT request made automatically by cURL to + // an HTTPS proxy. This response won't have a body associated + // with it, and the real body will follow later. + $more_headers = true; + } else if ($saw_location && $this->followLocationHeaders) { + // If we're following location headers and this response had + // a location header, cURL will automatically follow it. This + // response shouldn't have a body. + $more_headers = true; + } else { + $more_headers = false; + } + + // If we're expecting more headers, we're going to stay in the + // "headers" state and parse another set of headers. Otherwise, + // we transition to the "body" state and look for a body. + if (!$more_headers) { + $this->state = 'body'; + } + + continue; + } + + if ($this->state == 'body') { + if (strlen($this->buffer)) { + $bytes = $this->buffer; + $this->buffer = ''; + + $this->response->appendBody($bytes); + + $sink = $this->getProgressSink(); + if ($sink) { + $sink->didMakeProgress(strlen($bytes)); + } + } + break; + } + } + + return $this; + } + + public function getResponses() { + if ($this->state !== 'body') { + throw new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $this->buffer); + } + + return $this->responses; + } + + private function newHTTPResponse() { + $response = new PhutilHTTPResponse(); + + $write_handle = $this->getWriteHandle(); + if ($write_handle) { + $response->setWriteHandle($write_handle); + } + + $this->responses[] = $response; + $this->response = $response; + return $response; + } + +} diff --git a/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php b/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php new file mode 100644 index 00000000..7b5e373a --- /dev/null +++ b/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php @@ -0,0 +1,145 @@ +assertParse( + array( + array( + 'headers' => array( + array('Duck', 'Quack'), + ), + 'body' => 'I am the very model of a modern major general.', + ), + ), + $input); + + $input = <<assertParse( + array( + array( + 'code' => 200, + 'headers' => array( + array('X-I-Am-A-Proxy-Server', 'Hello'), + ), + 'body' => '', + ), + array( + 'code' => 100, + 'headers' => array( + array('X-Everything-Is-Fine', 'true'), + ), + 'body' => '', + ), + array( + 'code' => 302, + 'headers' => array( + array('Location', 'Over-There'), + ), + 'body' => '', + ), + array( + 'code' => 404, + 'headers' => array(), + 'body' => 'Not all who wander are lost.', + ), + ), + $input, + id(new PhutilHTTPResponseParser()) + ->setFollowLocationHeaders(true)); + + $input = <<assertParse( + array( + array( + 'code' => 200, + 'headers' => array( + array('Reason', 'none'), + ), + 'body' => + 'This response has no "reason-phrase", which is unusual but valid.', + ), + ), + $input, + id(new PhutilHTTPResponseParser())); + } + + private function assertParse(array $expect, $input, $parser = null) { + if ($parser === null) { + $parser = new PhutilHTTPResponseParser(); + } + + // Submit the input in little bits to try to catch any weird parser bugs. + $length = strlen($input); + $pos = 0; + while ($pos < $length) { + $next_len = mt_rand(1, 32); + $piece = substr($input, $pos, $next_len); + $pos = $pos + $next_len; + + $parser->readBytes($piece); + } + + $responses = $parser->getResponses(); + + $this->assertEqual(count($expect), count($responses)); + + $expect = array_values($expect); + $responses = array_values($responses); + + for ($ii = 0; $ii < count($expect); $ii++) { + $expect_map = $expect[$ii]; + $actual = $responses[$ii]; + + foreach ($expect_map as $key => $spec) { + switch ($key) { + case 'headers': + $this->assertEqual($spec, $actual->getHeaders()); + break; + case 'body': + $this->assertEqual($spec, $actual->getBody()); + break; + case 'code': + $status = $actual->getStatus(); + $this->assertTrue($status instanceof HTTPFutureHTTPResponseStatus); + $this->assertEqual($spec, $status->getStatusCode()); + break; + default: + throw new Exception( + pht( + 'Unknown HTTPResponseParser test ("%s").', + $key)); + } + } + } + } + +} diff --git a/src/parser/xhpast/__tests__/PHPASTParserTestCase.php b/src/parser/xhpast/__tests__/PHPASTParserTestCase.php new file mode 100644 index 00000000..73dcbc69 --- /dev/null +++ b/src/parser/xhpast/__tests__/PHPASTParserTestCase.php @@ -0,0 +1,136 @@ +assertSkipped( + pht('%s is not built or not up to date.', 'xhpast')); + } + } + + $dir = dirname(__FILE__).'/data/'; + foreach (Filesystem::listDirectory($dir) as $file) { + if (preg_match('/\.test$/', $file)) { + $this->executeParserTest($file, $dir.$file); + } + } + } + + private function executeParserTest($name, $file) { + $contents = Filesystem::readFile($file); + $contents = preg_split('/^~{4,}\n/m', $contents); + + if (count($contents) < 2) { + throw new Exception( + pht( + "Expected '%s' separating test case and results.", + '~~~~~~~~~~')); + } + + list($data, $options, $expect) = array_merge($contents, array(null)); + + $options = id(new PhutilSimpleOptions())->parse($options); + + $type = null; + foreach ($options as $key => $value) { + switch ($key) { + case 'pass': + case 'fail-syntax': + case 'fail-parse': + if ($type !== null) { + throw new Exception( + pht( + 'Test file "%s" unexpectedly specifies multiple expected '. + 'test outcomes.', + $name)); + } + $type = $key; + break; + case 'comment': + // Human readable comment providing test case information. + break; + case 'rtrim': + // Allows construction of tests which rely on EOF without newlines. + $data = rtrim($data); + break; + default: + throw new Exception( + pht( + 'Test file "%s" has unknown option "%s" in its options '. + 'string.', + $name, + $key)); + } + } + + if ($type === null) { + throw new Exception( + pht( + 'Test file "%s" does not specify a test result (like "pass") in '. + 'its options string.', + $name)); + } + + $future = PhutilXHPASTBinary::getParserFuture($data); + list($err, $stdout, $stderr) = $future->resolve(); + + switch ($type) { + case 'pass': + case 'fail-parse': + $this->assertEqual(0, $err, pht('Exit code for "%s".', $name)); + + if (!strlen($expect)) { + // If there's no "expect" data in the test case, that's OK. + break; + } + + try { + $expect = phutil_json_decode($expect); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Expect data for test "%s" is not valid JSON.', + $name), + $ex); + } + + try { + $stdout = phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Output for test file "%s" is not valid JSON.', + $name), + $ex); + } + + $json = new PhutilJSON(); + + $expect_nice = $json->encodeFormatted($expect); + $stdout_nice = $json->encodeFormatted($stdout); + + if ($type == 'pass') { + $this->assertEqual( + $expect_nice, + $stdout_nice, + pht('Parser output for "%s".', $name)); + } else { + $this->assertFalse( + ($expect_nice == $stdout_nice), + pht('Expected parser to parse "%s" incorrectly.', $name)); + } + break; + case 'fail-syntax': + $this->assertEqual(1, $err, pht('Exit code for "%s".', $name)); + $this->assertTrue( + (bool)preg_match('/syntax error/', $stderr), + pht('Expect "syntax error" in stderr or "%s".', $name)); + break; + } + } + +} diff --git a/src/parser/xhpast/__tests__/data/anonymous_class.php.test b/src/parser/xhpast/__tests__/data/anonymous_class.php.test new file mode 100644 index 00000000..7b0b4a3e --- /dev/null +++ b/src/parser/xhpast/__tests__/data/anonymous_class.php.test @@ -0,0 +1,595 @@ +num = $num; + } +}; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 64, + [ + [ + 9006, + 0, + 63, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 12, + [ + [ + 9077, + 2, + 11, + [ + [ + 9047, + 2, + 2 + ], + [ + 9081, + 4, + 4 + ], + [ + 9074, + 6, + 11, + [ + [ + 9051, + 10, + 11, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 10, + 11 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 14, + 63, + [ + [ + 9077, + 14, + 62, + [ + [ + 9047, + 14, + 14 + ], + [ + 9081, + 16, + 16 + ], + [ + 9074, + 18, + 62, + [ + [ + 9051, + 25, + 62, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9054, + 25, + 27, + [ + [ + 9090, + 27, + 27 + ] + ] + ], + [ + 9055, + 29, + 31, + [ + [ + 9090, + 31, + 31 + ] + ] + ], + [ + 9006, + 33, + 62, + [ + [ + 9004, + 35, + 38, + [ + [ + 9063, + 35, + 37, + [ + [ + 9070, + 35, + 35, + [ + [ + 9013, + 35, + 35 + ] + ] + ], + [ + 9064, + 37, + 37, + [ + [ + 9047, + 37, + 37 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 40, + 60, + [ + [ + 9067, + 40, + 60, + [ + [ + 9068, + 40, + 40, + [ + [ + 9013, + 40, + 40 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 44, + 44 + ], + [ + 9059, + 45, + 47, + [ + [ + 9060, + 46, + 46, + [ + [ + 9005 + ], + [ + 9047, + 46, + 46 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 49, + 60, + [ + [ + 9004, + 51, + 58, + [ + [ + 9077, + 51, + 57, + [ + [ + 9092, + 51, + 53, + [ + [ + 9047, + 51, + 51 + ], + [ + 9013, + 53, + 53 + ] + ] + ], + [ + 9081, + 55, + 55 + ], + [ + 9047, + 57, + 57 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9095, + 21, + 23, + [ + [ + 9086, + 22, + 22 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 40, + 1 + ], + [ + 309, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 313, + 4 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 11 + ], + [ + 40, + 1 + ], + [ + 313, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 5 + ], + [ + 313, + 5 + ], + [ + 362, + 2 + ], + [ + 311, + 3 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 4 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/base-fail-parse.php.test b/src/parser/xhpast/__tests__/data/base-fail-parse.php.test new file mode 100644 index 00000000..0bcf228d --- /dev/null +++ b/src/parser/xhpast/__tests__/data/base-fail-parse.php.test @@ -0,0 +1,8 @@ + 2 <=> 3; +~~~~~~~~~~ +fail-syntax, comment=Spaceship operator is non-associative diff --git a/src/parser/xhpast/__tests__/data/operator-spaceship.php.test b/src/parser/xhpast/__tests__/data/operator-spaceship.php.test new file mode 100644 index 00000000..7ba45bc5 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/operator-spaceship.php.test @@ -0,0 +1,93 @@ + 2; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 8, + [ + [ + 9006, + 0, + 7, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 7, + [ + [ + 9077, + 2, + 6, + [ + [ + 9086, + 2, + 2 + ], + [ + 9081, + 4, + 4 + ], + [ + 9086, + 6, + 6 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 377, + 1 + ], + [ + 285, + 3 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/optional-parameter.php.test b/src/parser/xhpast/__tests__/data/optional-parameter.php.test new file mode 100644 index 00000000..5d032b7f --- /dev/null +++ b/src/parser/xhpast/__tests__/data/optional-parameter.php.test @@ -0,0 +1,282 @@ +b; + +new a->c(); +~~~~~~~~~~ +fail-syntax diff --git a/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test b/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test new file mode 100644 index 00000000..d123e7f3 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test @@ -0,0 +1,663 @@ +b; + +$e = (new a)->c(); + +(new a)->b; + +(new a)->c(); +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 74, + [ + [ + 9006, + 0, + 73, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 25, + [ + [ + 9051, + 2, + 25, + [ + [ + 9052, + 2, + 2 + ], + [ + 9090, + 4, + 4 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 6, + 25, + [ + [ + 9004, + 8, + 11, + [ + [ + 9063, + 8, + 10, + [ + [ + 9070, + 8, + 8, + [ + [ + 9013, + 8, + 8 + ] + ] + ], + [ + 9064, + 10, + 10, + [ + [ + 9047, + 10, + 10 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 13, + 23, + [ + [ + 9067, + 13, + 23, + [ + [ + 9068, + 13, + 13, + [ + [ + 9013, + 13, + 13 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 17, + 17 + ], + [ + 9059, + 18, + 19 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 21, + 23 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 27, + 38, + [ + [ + 9077, + 27, + 37, + [ + [ + 9047, + 27, + 27 + ], + [ + 9081, + 29, + 29 + ], + [ + 9092, + 31, + 37, + [ + [ + 9074, + 31, + 35, + [ + [ + 9090, + 34, + 34 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 37, + 37 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 40, + 53, + [ + [ + 9077, + 40, + 52, + [ + [ + 9047, + 40, + 40 + ], + [ + 9081, + 42, + 42 + ], + [ + 9102, + 44, + 52, + [ + [ + 9092, + 44, + 50, + [ + [ + 9074, + 44, + 48, + [ + [ + 9090, + 47, + 47 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 50, + 50 + ] + ] + ], + [ + 9095, + 51, + 52 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 55, + 62, + [ + [ + 9092, + 55, + 61, + [ + [ + 9074, + 55, + 59, + [ + [ + 9090, + 58, + 58 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 61, + 61 + ] + ] + ] + ] + ], + [ + 9004, + 64, + 73, + [ + [ + 9102, + 64, + 72, + [ + [ + 9092, + 64, + 70, + [ + [ + 9074, + 64, + 68, + [ + [ + 9090, + 67, + 67 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 70, + 70 + ] + ] + ], + [ + 9095, + 71, + 72 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 2 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-array-dereference-2.test b/src/parser/xhpast/__tests__/data/php-array-dereference-2.test new file mode 100644 index 00000000..ac288ed7 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-array-dereference-2.test @@ -0,0 +1,185 @@ +getStatus()['running']) { + // do something +} +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 19, + [ + [ + 9006, + 0, + 18, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 18, + [ + [ + 9015, + 2, + 18, + [ + [ + 9017, + 2, + 18, + [ + [ + 9016, + 4, + 13, + [ + [ + 9102, + 5, + 12, + [ + [ + 9092, + 5, + 7, + [ + [ + 9047, + 5, + 5 + ], + [ + 9013, + 7, + 7 + ] + ] + ], + [ + 9100, + 8, + 12, + [ + [ + 9095, + 8, + 9 + ], + [ + 9087, + 11, + 11 + ] + ] + ] + ] + ] + ] + ], + [ + 9006, + 15, + 18 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 362, + 2 + ], + [ + 311, + 9 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 91, + 1 + ], + [ + 319, + 9 + ], + [ + 93, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 371, + 16 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-array-dereference-3.test b/src/parser/xhpast/__tests__/data/php-array-dereference-3.test new file mode 100644 index 00000000..08e06908 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-array-dereference-3.test @@ -0,0 +1,209 @@ + $y) {} +foreach ($x as $k => &$y) {} + +foreach (array() as $x) {} +foreach (array() as $k => $y) {} + +foreach ($x as $y): +endforeach; + +declare(x=1); + +declare(y=1) { +} + +declare(z=1): +enddeclare; + +try {} catch (C $x) {} +try {} catch (C $x) {} catch (D $x) {} + +throw 1; + +clone $q; +$x + $x; +$x - $x; +$x * $x; +$x / $x; +$x . $x; +$x % $x; +$x & $x; +$x | $x; +$x ^ $x; +$x << $x; +$x >> $x; +$x++; +++$x; +$x--; +--$x; ++$x; +-$x; +!$x; +~$x; +$x == $x; +$x === $x; +$x != $x; +$x !== $x; +$x = $x; +$x < $x; +$x <= $x; +$x > $x; +$x >= $x; +$x instanceof $x; +($x); +($x ? $x : $x); +($x ?: $x); +$x || $x; +$x && $x; +$x and $x; +$x or $x; +$x xor $x; +$x += $x; +$x -= $x; +$x *= $x; +$x /= $x; +$x .= $x; +$x %= $x; +$x &= $x; +$x |= $x; +$x ^= $x; +$x <<= $x; +$x >>= $x; +(int)$x; +(double)$x; +(string)$x; +(binary)$x; +(array)$x; +(object)$x; +(bool)$x; +(unset)$x; +$x[] = $x; + +@$x; + +__LINE__; +__FILE__; +__DIR__; +__CLASS__; +__METHOD__; +__FUNCTION__; +__NAMESPACE__; + +goto lbl; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 1376, + [ + [ + 9006, + 0, + 1375, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 3, + [ + [ + 9086, + 2, + 2 + ] + ] + ], + [ + 9004, + 5, + 9, + [ + [ + 9082, + 5, + 8, + [ + [ + 9093, + 6, + 8, + [ + [ + 9094, + 7, + 7, + [ + [ + 9005 + ], + [ + 9086, + 7, + 7 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 11, + 18, + [ + [ + 9050, + 11, + 18, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 13, + 13 + ], + [ + 9059, + 14, + 15 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 17, + 18 + ] + ] + ] + ] + ], + [ + 9004, + 20, + 28, + [ + [ + 9050, + 20, + 28, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 22, + 22 + ], + [ + 9059, + 23, + 25, + [ + [ + 9060, + 24, + 24, + [ + [ + 9005 + ], + [ + 9047, + 24, + 24 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 27, + 28 + ] + ] + ] + ] + ], + [ + 9004, + 30, + 39, + [ + [ + 9050, + 30, + 39, + [ + [ + 9005 + ], + [ + 9048, + 32, + 32 + ], + [ + 9013, + 33, + 33 + ], + [ + 9059, + 34, + 36, + [ + [ + 9060, + 35, + 35, + [ + [ + 9005 + ], + [ + 9047, + 35, + 35 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 38, + 39 + ] + ] + ] + ] + ], + [ + 9004, + 41, + 50, + [ + [ + 9050, + 41, + 50, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 43, + 43 + ], + [ + 9059, + 44, + 47, + [ + [ + 9060, + 45, + 45, + [ + [ + 9005 + ], + [ + 9049, + 45, + 46, + [ + [ + 9047, + 46, + 46 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 49, + 50 + ] + ] + ] + ] + ], + [ + 9004, + 52, + 62, + [ + [ + 9050, + 52, + 62, + [ + [ + 9005 + ], + [ + 9048, + 54, + 54 + ], + [ + 9013, + 55, + 55 + ], + [ + 9059, + 56, + 59, + [ + [ + 9060, + 57, + 57, + [ + [ + 9005 + ], + [ + 9049, + 57, + 58, + [ + [ + 9047, + 58, + 58 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 61, + 62 + ] + ] + ] + ] + ], + [ + 9004, + 64, + 74, + [ + [ + 9050, + 64, + 74, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 66, + 66 + ], + [ + 9059, + 67, + 71, + [ + [ + 9060, + 68, + 70, + [ + [ + 9090, + 68, + 68 + ], + [ + 9047, + 70, + 70 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 73, + 74 + ] + ] + ] + ] + ], + [ + 9004, + 76, + 86, + [ + [ + 9050, + 76, + 86, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 78, + 78 + ], + [ + 9059, + 79, + 83, + [ + [ + 9060, + 80, + 82, + [ + [ + 9061, + 80, + 80 + ], + [ + 9047, + 82, + 82 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 85, + 86 + ] + ] + ] + ] + ], + [ + 9004, + 88, + 104, + [ + [ + 9050, + 88, + 104, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 90, + 90 + ], + [ + 9059, + 91, + 101, + [ + [ + 9060, + 92, + 100, + [ + [ + 9061, + 92, + 92 + ], + [ + 9047, + 94, + 94 + ], + [ + 9082, + 98, + 100, + [ + [ + 9093, + 99, + 100 + ] + ] + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 103, + 104 + ] + ] + ] + ] + ], + [ + 9004, + 106, + 118, + [ + [ + 9050, + 106, + 118, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 108, + 108 + ], + [ + 9059, + 109, + 115, + [ + [ + 9060, + 110, + 114, + [ + [ + 9005 + ], + [ + 9047, + 110, + 110 + ], + [ + 9001, + 114, + 114 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 117, + 118 + ] + ] + ] + ] + ], + [ + 9004, + 120, + 134, + [ + [ + 9050, + 120, + 134, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 122, + 122 + ], + [ + 9059, + 123, + 131, + [ + [ + 9060, + 124, + 130, + [ + [ + 9090, + 124, + 124 + ], + [ + 9047, + 126, + 126 + ], + [ + 9001, + 130, + 130 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 133, + 134 + ] + ] + ] + ] + ], + [ + 9004, + 136, + 141, + [ + [ + 9051, + 136, + 141, + [ + [ + 9052, + 136, + 136 + ], + [ + 9090, + 138, + 138 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 140, + 141 + ] + ] + ] + ] + ], + [ + 9004, + 143, + 152, + [ + [ + 9051, + 143, + 152, + [ + [ + 9052, + 143, + 143 + ], + [ + 9090, + 145, + 145 + ], + [ + 9054, + 147, + 149, + [ + [ + 9090, + 149, + 149 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 151, + 152 + ] + ] + ] + ] + ], + [ + 9004, + 154, + 167, + [ + [ + 9051, + 154, + 167, + [ + [ + 9052, + 154, + 154 + ], + [ + 9090, + 156, + 156 + ], + [ + 9054, + 158, + 160, + [ + [ + 9090, + 160, + 160 + ] + ] + ], + [ + 9055, + 162, + 164, + [ + [ + 9090, + 164, + 164 + ] + ] + ], + [ + 9006, + 166, + 167 + ] + ] + ] + ] + ], + [ + 9004, + 169, + 185, + [ + [ + 9051, + 169, + 185, + [ + [ + 9052, + 169, + 169 + ], + [ + 9090, + 171, + 171 + ], + [ + 9054, + 173, + 175, + [ + [ + 9090, + 175, + 175 + ] + ] + ], + [ + 9055, + 177, + 182, + [ + [ + 9090, + 179, + 179 + ], + [ + 9090, + 182, + 182 + ] + ] + ], + [ + 9006, + 184, + 185 + ] + ] + ] + ] + ], + [ + 9004, + 187, + 194, + [ + [ + 9051, + 187, + 194, + [ + [ + 9052, + 187, + 189, + [ + [ + 9013, + 187, + 187 + ] + ] + ], + [ + 9090, + 191, + 191 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 193, + 194 + ] + ] + ] + ] + ], + [ + 9004, + 196, + 203, + [ + [ + 9051, + 196, + 203, + [ + [ + 9052, + 196, + 198, + [ + [ + 9013, + 196, + 196 + ] + ] + ], + [ + 9090, + 200, + 200 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 202, + 203 + ] + ] + ] + ] + ], + [ + 9004, + 205, + 354, + [ + [ + 9051, + 205, + 354, + [ + [ + 9052, + 205, + 207, + [ + [ + 9013, + 205, + 205 + ] + ] + ], + [ + 9090, + 209, + 209 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 211, + 354, + [ + [ + 9004, + 213, + 220, + [ + [ + 9065, + 213, + 219, + [ + [ + 9066, + 215, + 219, + [ + [ + 9013, + 215, + 215 + ], + [ + 9086, + 219, + 219 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 222, + 236, + [ + [ + 9065, + 222, + 235, + [ + [ + 9066, + 224, + 228, + [ + [ + 9013, + 224, + 224 + ], + [ + 9086, + 228, + 228 + ] + ] + ], + [ + 9066, + 231, + 235, + [ + [ + 9013, + 231, + 231 + ], + [ + 9086, + 235, + 235 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 238, + 241, + [ + [ + 9063, + 238, + 240, + [ + [ + 9070, + 238, + 238, + [ + [ + 9013, + 238, + 238 + ] + ] + ], + [ + 9064, + 240, + 240, + [ + [ + 9047, + 240, + 240 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 243, + 249, + [ + [ + 9063, + 243, + 248, + [ + [ + 9070, + 243, + 243, + [ + [ + 9013, + 243, + 243 + ] + ] + ], + [ + 9064, + 245, + 245, + [ + [ + 9047, + 245, + 245 + ], + [ + 9005 + ] + ] + ], + [ + 9064, + 248, + 248, + [ + [ + 9047, + 248, + 248 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 251, + 254, + [ + [ + 9063, + 251, + 253, + [ + [ + 9070, + 251, + 251, + [ + [ + 9013, + 251, + 251 + ] + ] + ], + [ + 9064, + 253, + 253, + [ + [ + 9047, + 253, + 253 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 256, + 262, + [ + [ + 9063, + 256, + 261, + [ + [ + 9070, + 256, + 256, + [ + [ + 9013, + 256, + 256 + ] + ] + ], + [ + 9064, + 258, + 258, + [ + [ + 9047, + 258, + 258 + ], + [ + 9005 + ] + ] + ], + [ + 9064, + 261, + 261, + [ + [ + 9047, + 261, + 261 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 264, + 271, + [ + [ + 9063, + 264, + 270, + [ + [ + 9070, + 264, + 264, + [ + [ + 9013, + 264, + 264 + ] + ] + ], + [ + 9064, + 266, + 270, + [ + [ + 9047, + 266, + 266 + ], + [ + 9086, + 270, + 270 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 273, + 289, + [ + [ + 9063, + 273, + 288, + [ + [ + 9070, + 273, + 275, + [ + [ + 9013, + 273, + 273 + ], + [ + 9013, + 275, + 275 + ] + ] + ], + [ + 9064, + 277, + 281, + [ + [ + 9047, + 277, + 277 + ], + [ + 9086, + 281, + 281 + ] + ] + ], + [ + 9064, + 284, + 288, + [ + [ + 9047, + 284, + 284 + ], + [ + 9086, + 288, + 288 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 291, + 298, + [ + [ + 9067, + 291, + 298, + [ + [ + 9068 + ], + [ + 9005 + ], + [ + 9013, + 293, + 293 + ], + [ + 9059, + 294, + 295 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 297, + 298 + ] + ] + ] + ] + ], + [ + 9004, + 300, + 309, + [ + [ + 9067, + 300, + 309, + [ + [ + 9068, + 300, + 300, + [ + [ + 9013, + 300, + 300 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 304, + 304 + ], + [ + 9059, + 305, + 306 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 308, + 309 + ] + ] + ] + ] + ], + [ + 9004, + 311, + 320, + [ + [ + 9067, + 311, + 320, + [ + [ + 9068, + 311, + 311, + [ + [ + 9013, + 311, + 311 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 315, + 315 + ], + [ + 9059, + 316, + 317 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 319, + 320 + ] + ] + ] + ] + ], + [ + 9004, + 322, + 331, + [ + [ + 9067, + 322, + 331, + [ + [ + 9068, + 322, + 322, + [ + [ + 9013, + 322, + 322 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 326, + 326 + ], + [ + 9059, + 327, + 328 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 330, + 331 + ] + ] + ] + ] + ], + [ + 9004, + 333, + 341, + [ + [ + 9067, + 333, + 341, + [ + [ + 9068 + ], + [ + 9048, + 335, + 335 + ], + [ + 9013, + 336, + 336 + ], + [ + 9059, + 337, + 338 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 340, + 341 + ] + ] + ] + ] + ], + [ + 9004, + 343, + 352, + [ + [ + 9067, + 343, + 352, + [ + [ + 9068, + 343, + 343, + [ + [ + 9013, + 343, + 343 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 347, + 347 + ], + [ + 9059, + 348, + 349 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 351, + 352 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 356, + 373, + [ + [ + 9051, + 356, + 373, + [ + [ + 9052, + 356, + 358, + [ + [ + 9013, + 356, + 356 + ] + ] + ], + [ + 9090, + 360, + 360 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 362, + 373, + [ + [ + 9004, + 364, + 370, + [ + [ + 9067, + 364, + 370, + [ + [ + 9068, + 364, + 364, + [ + [ + 9013, + 364, + 364 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 368, + 368 + ], + [ + 9059, + 369, + 370 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 375, + 380, + [ + [ + 9056, + 375, + 380, + [ + [ + 9052 + ], + [ + 9090, + 377, + 377 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 379, + 380 + ] + ] + ] + ] + ], + [ + 9004, + 382, + 391, + [ + [ + 9056, + 382, + 391, + [ + [ + 9052 + ], + [ + 9090, + 384, + 384 + ], + [ + 9054, + 386, + 388, + [ + [ + 9090, + 388, + 388 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 390, + 391 + ] + ] + ] + ] + ], + [ + 9004, + 393, + 405, + [ + [ + 9056, + 393, + 405, + [ + [ + 9052 + ], + [ + 9090, + 395, + 395 + ], + [ + 9054, + 397, + 402, + [ + [ + 9090, + 399, + 399 + ], + [ + 9090, + 402, + 402 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 404, + 405 + ] + ] + ] + ] + ], + [ + 9004, + 407, + 410, + [ + [ + 9009, + 407, + 409, + [ + [ + 9010, + 409, + 409, + [ + [ + 9001, + 409, + 409 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 412, + 418, + [ + [ + 9009, + 412, + 417, + [ + [ + 9010, + 414, + 414, + [ + [ + 9001, + 414, + 414 + ], + [ + 9005 + ] + ] + ], + [ + 9010, + 417, + 417, + [ + [ + 9001, + 417, + 417 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 420, + 446, + [ + [ + 9009, + 420, + 445, + [ + [ + 9010, + 422, + 426, + [ + [ + 9001, + 422, + 422 + ], + [ + 9013, + 426, + 426 + ] + ] + ], + [ + 9010, + 429, + 433, + [ + [ + 9001, + 429, + 429 + ], + [ + 9013, + 433, + 433 + ] + ] + ], + [ + 9010, + 436, + 437, + [ + [ + 9001, + 436, + 437 + ], + [ + 9005 + ] + ] + ], + [ + 9010, + 440, + 445, + [ + [ + 9001, + 440, + 441 + ], + [ + 9013, + 445, + 445 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 448, + 455, + [ + [ + 9011, + 448, + 454, + [ + [ + 9012, + 450, + 454, + [ + [ + 9013, + 450, + 450 + ], + [ + 9086, + 454, + 454 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 457, + 471, + [ + [ + 9011, + 457, + 470, + [ + [ + 9012, + 459, + 463, + [ + [ + 9013, + 459, + 459 + ], + [ + 9086, + 463, + 463 + ] + ] + ], + [ + 9012, + 466, + 470, + [ + [ + 9013, + 466, + 466 + ], + [ + 9086, + 470, + 470 + ] + ] + ] + ] + ] + ] + ], + [ + 9014, + 473, + 474, + [ + [ + 9013, + 473, + 473 + ] + ] + ], + [ + 9004, + 476, + 483, + [ + [ + 9015, + 476, + 483, + [ + [ + 9017, + 476, + 483, + [ + [ + 9016, + 478, + 480, + [ + [ + 9086, + 479, + 479 + ] + ] + ], + [ + 9006, + 482, + 483 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 485, + 497, + [ + [ + 9015, + 485, + 497, + [ + [ + 9017, + 485, + 492, + [ + [ + 9016, + 487, + 489, + [ + [ + 9086, + 488, + 488 + ] + ] + ], + [ + 9006, + 491, + 492 + ] + ] + ], + [ + 9019, + 494, + 497, + [ + [ + 9006, + 496, + 497 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 499, + 520, + [ + [ + 9015, + 499, + 520, + [ + [ + 9017, + 499, + 506, + [ + [ + 9016, + 501, + 503, + [ + [ + 9086, + 502, + 502 + ] + ] + ], + [ + 9006, + 505, + 506 + ] + ] + ], + [ + 9018, + 508, + 515, + [ + [ + 9016, + 510, + 512, + [ + [ + 9086, + 511, + 511 + ] + ] + ], + [ + 9006, + 514, + 515 + ] + ] + ], + [ + 9019, + 517, + 520, + [ + [ + 9006, + 519, + 520 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 522, + 547, + [ + [ + 9015, + 522, + 547, + [ + [ + 9017, + 522, + 529, + [ + [ + 9016, + 524, + 526, + [ + [ + 9086, + 525, + 525 + ] + ] + ], + [ + 9006, + 528, + 529 + ] + ] + ], + [ + 9018, + 531, + 538, + [ + [ + 9016, + 533, + 535, + [ + [ + 9086, + 534, + 534 + ] + ] + ], + [ + 9006, + 537, + 538 + ] + ] + ], + [ + 9018, + 540, + 547, + [ + [ + 9016, + 542, + 544, + [ + [ + 9086, + 543, + 543 + ] + ] + ], + [ + 9006, + 546, + 547 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 549, + 557, + [ + [ + 9015, + 549, + 556, + [ + [ + 9017, + 549, + 553, + [ + [ + 9016, + 551, + 553, + [ + [ + 9086, + 552, + 552 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 559, + 570, + [ + [ + 9015, + 559, + 569, + [ + [ + 9017, + 559, + 563, + [ + [ + 9016, + 561, + 563, + [ + [ + 9086, + 562, + 562 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9019, + 566, + 566, + [ + [ + 9006 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 572, + 587, + [ + [ + 9015, + 572, + 586, + [ + [ + 9017, + 572, + 576, + [ + [ + 9016, + 574, + 576, + [ + [ + 9086, + 575, + 575 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 579, + 582, + [ + [ + 9086, + 582, + 582 + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 589, + 611, + [ + [ + 9015, + 589, + 610, + [ + [ + 9017, + 589, + 593, + [ + [ + 9016, + 591, + 593, + [ + [ + 9086, + 592, + 592 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 596, + 599, + [ + [ + 9086, + 599, + 599 + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 603, + 606, + [ + [ + 9086, + 606, + 606 + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 613, + 620, + [ + [ + 9020, + 613, + 620, + [ + [ + 9016, + 615, + 617, + [ + [ + 9086, + 616, + 616 + ] + ] + ], + [ + 9006, + 619, + 620 + ] + ] + ] + ] + ], + [ + 9004, + 622, + 630, + [ + [ + 9020, + 622, + 630, + [ + [ + 9016, + 624, + 626, + [ + [ + 9086, + 625, + 625 + ] + ] + ], + [ + 9006, + 627, + 630 + ] + ] + ] + ] + ], + [ + 9004, + 632, + 642, + [ + [ + 9021, + 632, + 641, + [ + [ + 9006, + 634, + 635 + ], + [ + 9016, + 639, + 641, + [ + [ + 9086, + 640, + 640 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 644, + 652, + [ + [ + 9022, + 644, + 652, + [ + [ + 9023, + 646, + 649, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ], + [ + 9006, + 651, + 652 + ] + ] + ] + ] + ], + [ + 9004, + 654, + 663, + [ + [ + 9022, + 654, + 663, + [ + [ + 9023, + 656, + 659, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ], + [ + 9006, + 660, + 663 + ] + ] + ] + ] + ], + [ + 9004, + 665, + 695, + [ + [ + 9024, + 665, + 695, + [ + [ + 9016, + 667, + 669, + [ + [ + 9086, + 668, + 668 + ] + ] + ], + [ + 9006, + 671, + 695, + [ + [ + 9057, + 673, + 679, + [ + [ + 9086, + 675, + 675 + ], + [ + 9006, + 678, + 679, + [ + [ + 9004, + 678, + 679, + [ + [ + 9025, + 678, + 678, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9057, + 681, + 687, + [ + [ + 9086, + 683, + 683 + ], + [ + 9006, + 686, + 687, + [ + [ + 9004, + 686, + 687, + [ + [ + 9025, + 686, + 686, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9058, + 689, + 693, + [ + [ + 9006, + 692, + 693, + [ + [ + 9004, + 692, + 693, + [ + [ + 9026, + 692, + 692, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 697, + 704, + [ + [ + 9024, + 697, + 704, + [ + [ + 9016, + 698, + 700, + [ + [ + 9086, + 699, + 699 + ] + ] + ], + [ + 9006, + 702, + 704, + [ + [ + 9004, + 703, + 703 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 706, + 713, + [ + [ + 9024, + 706, + 713, + [ + [ + 9016, + 707, + 709, + [ + [ + 9086, + 708, + 708 + ] + ] + ], + [ + 9006, + 710, + 713 + ] + ] + ] + ] + ], + [ + 9004, + 715, + 716, + [ + [ + 9025, + 715, + 715, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 718, + 721, + [ + [ + 9025, + 718, + 720, + [ + [ + 9086, + 720, + 720 + ] + ] + ] + ] + ], + [ + 9004, + 723, + 724, + [ + [ + 9026, + 723, + 723, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 726, + 729, + [ + [ + 9026, + 726, + 728, + [ + [ + 9086, + 728, + 728 + ] + ] + ] + ] + ], + [ + 9004, + 731, + 732, + [ + [ + 9027, + 731, + 731, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 734, + 737, + [ + [ + 9027, + 734, + 736, + [ + [ + 9086, + 736, + 736 + ] + ] + ] + ] + ], + [ + 9004, + 739, + 742, + [ + [ + 9027, + 739, + 741, + [ + [ + 9047, + 741, + 741 + ] + ] + ] + ] + ], + [ + 9004, + 744, + 747, + [ + [ + 9028, + 744, + 746, + [ + [ + 9047, + 746, + 746 + ] + ] + ] + ] + ], + [ + 9004, + 749, + 755, + [ + [ + 9028, + 749, + 754, + [ + [ + 9047, + 751, + 751 + ], + [ + 9047, + 754, + 754 + ] + ] + ] + ] + ], + [ + 9004, + 757, + 761, + [ + [ + 9028, + 757, + 760, + [ + [ + 9062, + 759, + 760, + [ + [ + 9047, + 760, + 760 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 763, + 771, + [ + [ + 9028, + 763, + 769, + [ + [ + 9062, + 765, + 769, + [ + [ + 9103, + 767, + 769, + [ + [ + 9047, + 767, + 767 + ], + [ + 9081, + 768, + 768 + ], + [ + 9047, + 769, + 769 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 773, + 776, + [ + [ + 9030, + 773, + 775, + [ + [ + 9031, + 775, + 775, + [ + [ + 9047, + 775, + 775 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 778, + 784, + [ + [ + 9030, + 778, + 783, + [ + [ + 9031, + 780, + 780, + [ + [ + 9047, + 780, + 780 + ], + [ + 9005 + ] + ] + ], + [ + 9031, + 783, + 783, + [ + [ + 9047, + 783, + 783 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 786, + 789, + [ + [ + 9032, + 786, + 788, + [ + [ + 9086, + 788, + 788 + ] + ] + ] + ] + ], + [ + 9004, + 791, + 797, + [ + [ + 9032, + 791, + 796, + [ + [ + 9086, + 793, + 793 + ], + [ + 9086, + 796, + 796 + ] + ] + ] + ] + ], + [ + 9004, + 799, + 806, + [ + [ + 9035, + 799, + 805, + [ + [ + 9047, + 801, + 801 + ], + [ + 9047, + 804, + 804 + ] + ] + ] + ] + ], + [ + 9004, + 808, + 819, + [ + [ + 9037, + 808, + 819, + [ + [ + 9038, + 810, + 816, + [ + [ + 9047, + 811, + 811 + ], + [ + 9005 + ], + [ + 9047, + 815, + 815 + ] + ] + ], + [ + 9006, + 818, + 819 + ] + ] + ] + ] + ], + [ + 9004, + 821, + 836, + [ + [ + 9037, + 821, + 836, + [ + [ + 9038, + 823, + 833, + [ + [ + 9047, + 824, + 824 + ], + [ + 9047, + 828, + 828 + ], + [ + 9047, + 832, + 832 + ] + ] + ], + [ + 9006, + 835, + 836 + ] + ] + ] + ] + ], + [ + 9004, + 838, + 854, + [ + [ + 9037, + 838, + 854, + [ + [ + 9038, + 840, + 851, + [ + [ + 9047, + 841, + 841 + ], + [ + 9047, + 845, + 845 + ], + [ + 9049, + 849, + 850, + [ + [ + 9047, + 850, + 850 + ] + ] + ] + ] + ], + [ + 9006, + 853, + 854 + ] + ] + ] + ] + ], + [ + 9004, + 856, + 869, + [ + [ + 9037, + 856, + 869, + [ + [ + 9038, + 858, + 866, + [ + [ + 9082, + 859, + 861, + [ + [ + 9093, + 860, + 861 + ] + ] + ], + [ + 9005 + ], + [ + 9047, + 865, + 865 + ] + ] + ], + [ + 9006, + 868, + 869 + ] + ] + ] + ] + ], + [ + 9004, + 871, + 888, + [ + [ + 9037, + 871, + 888, + [ + [ + 9038, + 873, + 885, + [ + [ + 9082, + 874, + 876, + [ + [ + 9093, + 875, + 876 + ] + ] + ], + [ + 9047, + 880, + 880 + ], + [ + 9047, + 884, + 884 + ] + ] + ], + [ + 9006, + 887, + 888 + ] + ] + ] + ] + ], + [ + 9004, + 890, + 902, + [ + [ + 9037, + 890, + 902, + [ + [ + 9038, + 892, + 898, + [ + [ + 9047, + 893, + 893 + ], + [ + 9005 + ], + [ + 9047, + 897, + 897 + ] + ] + ], + [ + 9006, + 899, + 902 + ] + ] + ] + ] + ], + [ + 9004, + 904, + 910, + [ + [ + 9044, + 904, + 910, + [ + [ + 9045, + 906, + 908, + [ + [ + 9046, + 906, + 908, + [ + [ + 9013, + 906, + 906 + ], + [ + 9086, + 908, + 908 + ] + ] + ] + ] + ], + [ + 9004, + 910, + 910, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 912, + 921, + [ + [ + 9044, + 912, + 921, + [ + [ + 9045, + 914, + 916, + [ + [ + 9046, + 914, + 916, + [ + [ + 9013, + 914, + 914 + ], + [ + 9086, + 916, + 916 + ] + ] + ] + ] + ], + [ + 9006, + 919, + 921 + ] + ] + ] + ] + ], + [ + 9004, + 923, + 932, + [ + [ + 9044, + 923, + 932, + [ + [ + 9045, + 925, + 927, + [ + [ + 9046, + 925, + 927, + [ + [ + 9013, + 925, + 925 + ], + [ + 9086, + 927, + 927 + ] + ] + ] + ] + ], + [ + 9006, + 929, + 932 + ] + ] + ] + ] + ], + [ + 9004, + 934, + 948, + [ + [ + 9041, + 934, + 948, + [ + [ + 9006, + 936, + 937 + ], + [ + 9042, + 939, + 948, + [ + [ + 9043, + 939, + 948, + [ + [ + 9090, + 942, + 942 + ], + [ + 9047, + 944, + 944 + ], + [ + 9006, + 947, + 948 + ] + ] + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 950, + 975, + [ + [ + 9041, + 950, + 975, + [ + [ + 9006, + 952, + 953 + ], + [ + 9042, + 955, + 975, + [ + [ + 9043, + 955, + 964, + [ + [ + 9090, + 958, + 958 + ], + [ + 9047, + 960, + 960 + ], + [ + 9006, + 963, + 964 + ] + ] + ], + [ + 9043, + 966, + 975, + [ + [ + 9090, + 969, + 969 + ], + [ + 9047, + 971, + 971 + ], + [ + 9006, + 974, + 975 + ] + ] + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 977, + 980, + [ + [ + 9039, + 977, + 979, + [ + [ + 9086, + 979, + 979 + ] + ] + ] + ] + ], + [ + 9004, + 982, + 985, + [ + [ + 9075, + 982, + 984, + [ + [ + 9081, + 982, + 982 + ], + [ + 9047, + 984, + 984 + ] + ] + ] + ] + ], + [ + 9004, + 987, + 992, + [ + [ + 9077, + 987, + 991, + [ + [ + 9047, + 987, + 987 + ], + [ + 9081, + 989, + 989 + ], + [ + 9047, + 991, + 991 + ] + ] + ] + ] + ], + [ + 9004, + 994, + 999, + [ + [ + 9077, + 994, + 998, + [ + [ + 9047, + 994, + 994 + ], + [ + 9081, + 996, + 996 + ], + [ + 9047, + 998, + 998 + ] + ] + ] + ] + ], + [ + 9004, + 1001, + 1006, + [ + [ + 9077, + 1001, + 1005, + [ + [ + 9047, + 1001, + 1001 + ], + [ + 9081, + 1003, + 1003 + ], + [ + 9047, + 1005, + 1005 + ] + ] + ] + ] + ], + [ + 9004, + 1008, + 1013, + [ + [ + 9077, + 1008, + 1012, + [ + [ + 9047, + 1008, + 1008 + ], + [ + 9081, + 1010, + 1010 + ], + [ + 9047, + 1012, + 1012 + ] + ] + ] + ] + ], + [ + 9004, + 1015, + 1020, + [ + [ + 9103, + 1015, + 1019, + [ + [ + 9047, + 1015, + 1015 + ], + [ + 9081, + 1017, + 1017 + ], + [ + 9047, + 1019, + 1019 + ] + ] + ] + ] + ], + [ + 9004, + 1022, + 1027, + [ + [ + 9077, + 1022, + 1026, + [ + [ + 9047, + 1022, + 1022 + ], + [ + 9081, + 1024, + 1024 + ], + [ + 9047, + 1026, + 1026 + ] + ] + ] + ] + ], + [ + 9004, + 1029, + 1034, + [ + [ + 9077, + 1029, + 1033, + [ + [ + 9047, + 1029, + 1029 + ], + [ + 9081, + 1031, + 1031 + ], + [ + 9047, + 1033, + 1033 + ] + ] + ] + ] + ], + [ + 9004, + 1036, + 1041, + [ + [ + 9077, + 1036, + 1040, + [ + [ + 9047, + 1036, + 1036 + ], + [ + 9081, + 1038, + 1038 + ], + [ + 9047, + 1040, + 1040 + ] + ] + ] + ] + ], + [ + 9004, + 1043, + 1048, + [ + [ + 9077, + 1043, + 1047, + [ + [ + 9047, + 1043, + 1043 + ], + [ + 9081, + 1045, + 1045 + ], + [ + 9047, + 1047, + 1047 + ] + ] + ] + ] + ], + [ + 9004, + 1050, + 1055, + [ + [ + 9077, + 1050, + 1054, + [ + [ + 9047, + 1050, + 1050 + ], + [ + 9081, + 1052, + 1052 + ], + [ + 9047, + 1054, + 1054 + ] + ] + ] + ] + ], + [ + 9004, + 1057, + 1062, + [ + [ + 9077, + 1057, + 1061, + [ + [ + 9047, + 1057, + 1057 + ], + [ + 9081, + 1059, + 1059 + ], + [ + 9047, + 1061, + 1061 + ] + ] + ] + ] + ], + [ + 9004, + 1064, + 1066, + [ + [ + 9076, + 1064, + 1065, + [ + [ + 9047, + 1064, + 1064 + ], + [ + 9081, + 1065, + 1065 + ] + ] + ] + ] + ], + [ + 9004, + 1068, + 1070, + [ + [ + 9075, + 1068, + 1069, + [ + [ + 9081, + 1068, + 1068 + ], + [ + 9047, + 1069, + 1069 + ] + ] + ] + ] + ], + [ + 9004, + 1072, + 1074, + [ + [ + 9076, + 1072, + 1073, + [ + [ + 9047, + 1072, + 1072 + ], + [ + 9081, + 1073, + 1073 + ] + ] + ] + ] + ], + [ + 9004, + 1076, + 1078, + [ + [ + 9075, + 1076, + 1077, + [ + [ + 9081, + 1076, + 1076 + ], + [ + 9047, + 1077, + 1077 + ] + ] + ] + ] + ], + [ + 9004, + 1080, + 1082, + [ + [ + 9075, + 1080, + 1081, + [ + [ + 9081, + 1080, + 1080 + ], + [ + 9047, + 1081, + 1081 + ] + ] + ] + ] + ], + [ + 9004, + 1084, + 1086, + [ + [ + 9075, + 1084, + 1085, + [ + [ + 9081, + 1084, + 1084 + ], + [ + 9047, + 1085, + 1085 + ] + ] + ] + ] + ], + [ + 9004, + 1088, + 1090, + [ + [ + 9075, + 1088, + 1089, + [ + [ + 9081, + 1088, + 1088 + ], + [ + 9047, + 1089, + 1089 + ] + ] + ] + ] + ], + [ + 9004, + 1092, + 1094, + [ + [ + 9075, + 1092, + 1093, + [ + [ + 9081, + 1092, + 1092 + ], + [ + 9047, + 1093, + 1093 + ] + ] + ] + ] + ], + [ + 9004, + 1096, + 1101, + [ + [ + 9077, + 1096, + 1100, + [ + [ + 9047, + 1096, + 1096 + ], + [ + 9081, + 1098, + 1098 + ], + [ + 9047, + 1100, + 1100 + ] + ] + ] + ] + ], + [ + 9004, + 1103, + 1108, + [ + [ + 9077, + 1103, + 1107, + [ + [ + 9047, + 1103, + 1103 + ], + [ + 9081, + 1105, + 1105 + ], + [ + 9047, + 1107, + 1107 + ] + ] + ] + ] + ], + [ + 9004, + 1110, + 1115, + [ + [ + 9077, + 1110, + 1114, + [ + [ + 9047, + 1110, + 1110 + ], + [ + 9081, + 1112, + 1112 + ], + [ + 9047, + 1114, + 1114 + ] + ] + ] + ] + ], + [ + 9004, + 1117, + 1122, + [ + [ + 9077, + 1117, + 1121, + [ + [ + 9047, + 1117, + 1117 + ], + [ + 9081, + 1119, + 1119 + ], + [ + 9047, + 1121, + 1121 + ] + ] + ] + ] + ], + [ + 9004, + 1124, + 1129, + [ + [ + 9077, + 1124, + 1128, + [ + [ + 9047, + 1124, + 1124 + ], + [ + 9081, + 1126, + 1126 + ], + [ + 9047, + 1128, + 1128 + ] + ] + ] + ] + ], + [ + 9004, + 1131, + 1136, + [ + [ + 9077, + 1131, + 1135, + [ + [ + 9047, + 1131, + 1131 + ], + [ + 9081, + 1133, + 1133 + ], + [ + 9047, + 1135, + 1135 + ] + ] + ] + ] + ], + [ + 9004, + 1138, + 1143, + [ + [ + 9077, + 1138, + 1142, + [ + [ + 9047, + 1138, + 1138 + ], + [ + 9081, + 1140, + 1140 + ], + [ + 9047, + 1142, + 1142 + ] + ] + ] + ] + ], + [ + 9004, + 1145, + 1150, + [ + [ + 9077, + 1145, + 1149, + [ + [ + 9047, + 1145, + 1145 + ], + [ + 9081, + 1147, + 1147 + ], + [ + 9047, + 1149, + 1149 + ] + ] + ] + ] + ], + [ + 9004, + 1152, + 1157, + [ + [ + 9077, + 1152, + 1156, + [ + [ + 9047, + 1152, + 1152 + ], + [ + 9081, + 1154, + 1154 + ], + [ + 9047, + 1156, + 1156 + ] + ] + ] + ] + ], + [ + 9004, + 1159, + 1164, + [ + [ + 9077, + 1159, + 1163, + [ + [ + 9047, + 1159, + 1159 + ], + [ + 9081, + 1161, + 1161 + ], + [ + 9047, + 1163, + 1163 + ] + ] + ] + ] + ], + [ + 9004, + 1166, + 1169, + [ + [ + 9104, + 1166, + 1168, + [ + [ + 9047, + 1167, + 1167 + ] + ] + ] + ] + ], + [ + 9004, + 1171, + 1182, + [ + [ + 9104, + 1171, + 1181, + [ + [ + 9078, + 1172, + 1180, + [ + [ + 9047, + 1172, + 1172 + ], + [ + 9081, + 1174, + 1174 + ], + [ + 9047, + 1176, + 1176 + ], + [ + 9081, + 1178, + 1178 + ], + [ + 9047, + 1180, + 1180 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 1184, + 1192, + [ + [ + 9104, + 1184, + 1191, + [ + [ + 9078, + 1185, + 1190, + [ + [ + 9047, + 1185, + 1185 + ], + [ + 9081, + 1187, + 1187 + ], + [ + 9005 + ], + [ + 9081, + 1188, + 1188 + ], + [ + 9047, + 1190, + 1190 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 1194, + 1199, + [ + [ + 9077, + 1194, + 1198, + [ + [ + 9047, + 1194, + 1194 + ], + [ + 9081, + 1196, + 1196 + ], + [ + 9047, + 1198, + 1198 + ] + ] + ] + ] + ], + [ + 9004, + 1201, + 1206, + [ + [ + 9077, + 1201, + 1205, + [ + [ + 9047, + 1201, + 1201 + ], + [ + 9081, + 1203, + 1203 + ], + [ + 9047, + 1205, + 1205 + ] + ] + ] + ] + ], + [ + 9004, + 1208, + 1213, + [ + [ + 9077, + 1208, + 1212, + [ + [ + 9047, + 1208, + 1208 + ], + [ + 9081, + 1210, + 1210 + ], + [ + 9047, + 1212, + 1212 + ] + ] + ] + ] + ], + [ + 9004, + 1215, + 1220, + [ + [ + 9077, + 1215, + 1219, + [ + [ + 9047, + 1215, + 1215 + ], + [ + 9081, + 1217, + 1217 + ], + [ + 9047, + 1219, + 1219 + ] + ] + ] + ] + ], + [ + 9004, + 1222, + 1227, + [ + [ + 9077, + 1222, + 1226, + [ + [ + 9047, + 1222, + 1222 + ], + [ + 9081, + 1224, + 1224 + ], + [ + 9047, + 1226, + 1226 + ] + ] + ] + ] + ], + [ + 9004, + 1229, + 1234, + [ + [ + 9077, + 1229, + 1233, + [ + [ + 9047, + 1229, + 1229 + ], + [ + 9081, + 1231, + 1231 + ], + [ + 9047, + 1233, + 1233 + ] + ] + ] + ] + ], + [ + 9004, + 1236, + 1241, + [ + [ + 9077, + 1236, + 1240, + [ + [ + 9047, + 1236, + 1236 + ], + [ + 9081, + 1238, + 1238 + ], + [ + 9047, + 1240, + 1240 + ] + ] + ] + ] + ], + [ + 9004, + 1243, + 1248, + [ + [ + 9077, + 1243, + 1247, + [ + [ + 9047, + 1243, + 1243 + ], + [ + 9081, + 1245, + 1245 + ], + [ + 9047, + 1247, + 1247 + ] + ] + ] + ] + ], + [ + 9004, + 1250, + 1255, + [ + [ + 9077, + 1250, + 1254, + [ + [ + 9047, + 1250, + 1250 + ], + [ + 9081, + 1252, + 1252 + ], + [ + 9047, + 1254, + 1254 + ] + ] + ] + ] + ], + [ + 9004, + 1257, + 1262, + [ + [ + 9077, + 1257, + 1261, + [ + [ + 9047, + 1257, + 1257 + ], + [ + 9081, + 1259, + 1259 + ], + [ + 9047, + 1261, + 1261 + ] + ] + ] + ] + ], + [ + 9004, + 1264, + 1269, + [ + [ + 9077, + 1264, + 1268, + [ + [ + 9047, + 1264, + 1264 + ], + [ + 9081, + 1266, + 1266 + ], + [ + 9047, + 1268, + 1268 + ] + ] + ] + ] + ], + [ + 9004, + 1271, + 1276, + [ + [ + 9077, + 1271, + 1275, + [ + [ + 9047, + 1271, + 1271 + ], + [ + 9081, + 1273, + 1273 + ], + [ + 9047, + 1275, + 1275 + ] + ] + ] + ] + ], + [ + 9004, + 1278, + 1283, + [ + [ + 9077, + 1278, + 1282, + [ + [ + 9047, + 1278, + 1278 + ], + [ + 9081, + 1280, + 1280 + ], + [ + 9047, + 1282, + 1282 + ] + ] + ] + ] + ], + [ + 9004, + 1285, + 1290, + [ + [ + 9077, + 1285, + 1289, + [ + [ + 9047, + 1285, + 1285 + ], + [ + 9081, + 1287, + 1287 + ], + [ + 9047, + 1289, + 1289 + ] + ] + ] + ] + ], + [ + 9004, + 1292, + 1297, + [ + [ + 9077, + 1292, + 1296, + [ + [ + 9047, + 1292, + 1292 + ], + [ + 9081, + 1294, + 1294 + ], + [ + 9047, + 1296, + 1296 + ] + ] + ] + ] + ], + [ + 9004, + 1299, + 1304, + [ + [ + 9077, + 1299, + 1303, + [ + [ + 9047, + 1299, + 1299 + ], + [ + 9081, + 1301, + 1301 + ], + [ + 9047, + 1303, + 1303 + ] + ] + ] + ] + ], + [ + 9004, + 1306, + 1308, + [ + [ + 9079, + 1306, + 1307, + [ + [ + 9080, + 1306, + 1306 + ], + [ + 9047, + 1307, + 1307 + ] + ] + ] + ] + ], + [ + 9004, + 1310, + 1312, + [ + [ + 9079, + 1310, + 1311, + [ + [ + 9080, + 1310, + 1310 + ], + [ + 9047, + 1311, + 1311 + ] + ] + ] + ] + ], + [ + 9004, + 1314, + 1316, + [ + [ + 9079, + 1314, + 1315, + [ + [ + 9080, + 1314, + 1314 + ], + [ + 9047, + 1315, + 1315 + ] + ] + ] + ] + ], + [ + 9004, + 1318, + 1320, + [ + [ + 9079, + 1318, + 1319, + [ + [ + 9080, + 1318, + 1318 + ], + [ + 9047, + 1319, + 1319 + ] + ] + ] + ] + ], + [ + 9004, + 1322, + 1324, + [ + [ + 9079, + 1322, + 1323, + [ + [ + 9080, + 1322, + 1322 + ], + [ + 9047, + 1323, + 1323 + ] + ] + ] + ] + ], + [ + 9004, + 1326, + 1328, + [ + [ + 9079, + 1326, + 1327, + [ + [ + 9080, + 1326, + 1326 + ], + [ + 9047, + 1327, + 1327 + ] + ] + ] + ] + ], + [ + 9004, + 1330, + 1332, + [ + [ + 9079, + 1330, + 1331, + [ + [ + 9080, + 1330, + 1330 + ], + [ + 9047, + 1331, + 1331 + ] + ] + ] + ] + ], + [ + 9004, + 1334, + 1336, + [ + [ + 9079, + 1334, + 1335, + [ + [ + 9080, + 1334, + 1334 + ], + [ + 9047, + 1335, + 1335 + ] + ] + ] + ] + ], + [ + 9004, + 1338, + 1345, + [ + [ + 9077, + 1338, + 1344, + [ + [ + 9100, + 1338, + 1340, + [ + [ + 9047, + 1338, + 1338 + ], + [ + 9005 + ] + ] + ], + [ + 9081, + 1342, + 1342 + ], + [ + 9047, + 1344, + 1344 + ] + ] + ] + ] + ], + [ + 9004, + 1347, + 1349, + [ + [ + 9075, + 1347, + 1348, + [ + [ + 9081, + 1347, + 1347 + ], + [ + 9047, + 1348, + 1348 + ] + ] + ] + ] + ], + [ + 9004, + 1351, + 1352, + [ + [ + 9088, + 1351, + 1351 + ] + ] + ], + [ + 9004, + 1354, + 1355, + [ + [ + 9088, + 1354, + 1354 + ] + ] + ], + [ + 9004, + 1357, + 1358, + [ + [ + 9088, + 1357, + 1357 + ] + ] + ], + [ + 9004, + 1360, + 1361, + [ + [ + 9088, + 1360, + 1360 + ] + ] + ], + [ + 9004, + 1363, + 1364, + [ + [ + 9088, + 1363, + 1363 + ] + ] + ], + [ + 9004, + 1366, + 1367, + [ + [ + 9088, + 1366, + 1366 + ] + ] + ], + [ + 9004, + 1369, + 1370, + [ + [ + 9088, + 1369, + 1369 + ] + ] + ], + [ + 9004, + 1372, + 1375, + [ + [ + 9040, + 1372, + 1374, + [ + [ + 9013, + 1374, + 1374 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 349, + 5 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 349, + 5 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 353, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 353, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 351, + 9 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 5 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 351, + 9 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 389, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 389, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 3 + ], + [ + 58, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 324, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 322, + 2 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 325, + 3 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 59, + 1 + ], + [ + 59, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 325, + 3 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 59, + 1 + ], + [ + 59, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 326, + 6 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 332, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 334, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 5 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 334, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 5 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 335, + 7 + ], + [ + 58, + 1 + ], + [ + 377, + 5 + ], + [ + 337, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 332, + 6 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 59, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 332, + 6 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 333, + 9 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 336, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 337, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 337, + 8 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 36, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 36, + 1 + ], + [ + 123, + 1 + ], + [ + 313, + 2 + ], + [ + 46, + 1 + ], + [ + 313, + 2 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 321, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 321, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 354, + 5 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 328, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 330, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 342, + 3 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 342, + 3 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 344, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 303, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 43, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 45, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 42, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 47, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 46, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 37, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 124, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 94, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 288, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 289, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 291, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 291, + 2 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 292, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 292, + 2 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 43, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 45, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 33, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 126, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 281, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 283, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 282, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 284, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 60, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 286, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 62, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 287, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 290, + 10 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 63, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 63, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 279, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 280, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 265, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 263, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 264, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 267, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 268, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 269, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 270, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 271, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 272, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 273, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 274, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 275, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 276, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 277, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 293, + 5 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 294, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 295, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 295, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 298, + 7 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 299, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 300, + 6 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 301, + 7 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 91, + 1 + ], + [ + 93, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 64, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 369, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 370, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 388, + 7 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 366, + 9 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 367, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 368, + 12 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 387, + 13 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 338, + 4 + ], + [ + 377, + 1 + ], + [ + 311, + 3 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-tags.php.test b/src/parser/xhpast/__tests__/data/php-tags.php.test new file mode 100644 index 00000000..d96ae106 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-tags.php.test @@ -0,0 +1,215 @@ + + + +
+ +~~~~~~~~~~ +pass, comment="Omits ASP tags since parser support is off as built." +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 21, + [ + [ + 9006, + 0, + 21, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 3, + [ + [ + 9086, + 2, + 2 + ] + ] + ], + [ + 9004, + 5, + 5, + [ + [ + 9005 + ] + ] + ], + [ + 9007, + 6, + 6 + ], + [ + 9004, + 8, + 9, + [ + [ + 9086, + 8, + 8 + ] + ] + ], + [ + 9004, + 11, + 11, + [ + [ + 9005 + ] + ] + ], + [ + 9007, + 12, + 12 + ], + [ + 9004, + 14, + 15, + [ + [ + 9086, + 14, + 14 + ] + ] + ], + [ + 9004, + 17, + 17, + [ + [ + 9005 + ] + ] + ], + [ + 9034, + 18, + 18 + ], + [ + 9034, + 19, + 19 + ], + [ + 9034, + 20, + 20 + ], + [ + 9034, + 21, + 21 + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 373, + 2 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 374, + 3 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 315, + 1 + ], + [ + 315, + 5 + ], + [ + 315, + 1 + ], + [ + 315, + 5 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-traits.php.test b/src/parser/xhpast/__tests__/data/php-traits.php.test new file mode 100644 index 00000000..060ea50c --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-traits.php.test @@ -0,0 +1,938 @@ + $z; + + $data = (yield $a); + $data = (yield $b => $c); +} +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 54, + [ + [ + 9006, + 0, + 53, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 53, + [ + [ + 9050, + 2, + 53, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 4, + 4 + ], + [ + 9059, + 5, + 6 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 8, + 53, + [ + [ + 9004, + 10, + 11, + [ + [ + 9112, + 10, + 10, + [ + [ + 9005 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 13, + 16, + [ + [ + 9112, + 13, + 15, + [ + [ + 9047, + 15, + 15, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 18, + 25, + [ + [ + 9112, + 18, + 24, + [ + [ + 9047, + 20, + 20 + ], + [ + 9047, + 24, + 24 + ] + ] + ] + ] + ], + [ + 9004, + 27, + 36, + [ + [ + 9077, + 27, + 35, + [ + [ + 9047, + 27, + 27 + ], + [ + 9081, + 29, + 29 + ], + [ + 9112, + 31, + 35, + [ + [ + 9047, + 34, + 34, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 38, + 51, + [ + [ + 9077, + 38, + 50, + [ + [ + 9047, + 38, + 38 + ], + [ + 9081, + 40, + 40 + ], + [ + 9112, + 42, + 50, + [ + [ + 9047, + 45, + 45 + ], + [ + 9047, + 49, + 49 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 313, + 5 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 313, + 5 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/return-type.php.test b/src/parser/xhpast/__tests__/data/return-type.php.test new file mode 100644 index 00000000..6b3c4737 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/return-type.php.test @@ -0,0 +1,2197 @@ + $right; +} else if ($node instanceof Node\Expr\BinaryOp\GreaterOrEqual) { + return $left >= $right; +} else if ($node instanceof Node\Expr\BinaryOp\Identical) { + return $left === $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalAnd) { + return $left && $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalOr) { + return $left || $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalXor) { + return $left xor $right; +} else if ($node instanceof Node\Expr\BinaryOp\Minus) { + return $left - $right; +} else if ($node instanceof Node\Expr\BinaryOp\Mod) { + return $left % $right; +} else if ($node instanceof Node\Expr\BinaryOp\Mul) { + return $left * $right; +} else if ($node instanceof Node\Expr\BinaryOp\NotEqual) { + return $left != $right; +} else if ($node instanceof Node\Expr\BinaryOp\NotIdentical) { + return $left !== $right; +} else if ($node instanceof Node\Expr\BinaryOp\Plus) { + return $left + $right; +} else if ($node instanceof Node\Expr\BinaryOp\Pow) { + return pow($left, $right); +} else if ($node instanceof Node\Expr\BinaryOp\ShiftLeft) { + return $left << $right; +} else if ($node instanceof Node\Expr\BinaryOp\ShiftRight) { + return $left >> $right; +} else if ($node instanceof Node\Expr\BinaryOp\Smaller) { + return $left < $right; +} else if ($node instanceof Node\Expr\BinaryOp\SmallerOrEqual) { + return $left <= $right; +} else if ($node instanceof Node\Expr\BinaryOp\Spaceship) { + if ($left < $right) { + return -1; + } else if ($left == $right) { + return 0; + } else { + return 1; + } +} +~~~~~~~~~~ +pass diff --git a/src/parser/xhpast/api/XHPASTNode.php b/src/parser/xhpast/api/XHPASTNode.php new file mode 100644 index 00000000..0f0f9911 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTNode.php @@ -0,0 +1,301 @@ +getTypeName(), array( + 'n_STRING_SCALAR', + 'n_NUMERIC_SCALAR', + )); + } + + public function getDocblockToken() { + if ($this->l == -1) { + return null; + } + $tokens = $this->tree->getRawTokenStream(); + + for ($ii = $this->l - 1; $ii >= 0; $ii--) { + if ($tokens[$ii]->getTypeName() == 'T_DOC_COMMENT') { + return $tokens[$ii]; + } + if (!$tokens[$ii]->isAnyWhitespace()) { + return null; + } + } + + return null; + } + + public function evalStatic() { + switch ($this->getTypeName()) { + case 'n_STATEMENT': + return $this->getChildByIndex(0)->evalStatic(); + break; + case 'n_STRING_SCALAR': + return (string)$this->getStringLiteralValue(); + case 'n_NUMERIC_SCALAR': + $value = $this->getSemanticString(); + if (preg_match('/^0x/i', $value)) { + // Hex + $value = base_convert(substr($value, 2), 16, 10); + } else if (preg_match('/^0\d+$/i', $value)) { + // Octal + $value = base_convert(substr($value, 1), 8, 10); + } + return +$value; + case 'n_SYMBOL_NAME': + $value = $this->getSemanticString(); + if ($value == 'INF') { + return INF; + } + switch (strtolower($value)) { + case 'true': + return true; + case 'false': + return false; + case 'null': + return null; + default: + throw new Exception(pht('Unrecognized symbol name.')); + } + break; + case 'n_UNARY_PREFIX_EXPRESSION': + $operator = $this->getChildOfType(0, 'n_OPERATOR'); + $operand = $this->getChildByIndex(1); + switch ($operator->getSemanticString()) { + case '-': + return -$operand->evalStatic(); + break; + case '+': + return $operand->evalStatic(); + break; + default: + throw new Exception( + pht('Unexpected operator in static expression.')); + } + break; + case 'n_ARRAY_LITERAL': + $result = array(); + $values = $this->getChildOfType(0, 'n_ARRAY_VALUE_LIST'); + foreach ($values->getChildren() as $child) { + $key = $child->getChildByIndex(0); + $val = $child->getChildByIndex(1); + if ($key->getTypeName() == 'n_EMPTY') { + $result[] = $val->evalStatic(); + } else { + $result[$key->evalStatic()] = $val->evalStatic(); + } + } + return $result; + case 'n_CONCATENATION_LIST': + $result = ''; + foreach ($this->getChildren() as $child) { + if ($child->getTypeName() == 'n_OPERATOR') { + continue; + } + $result .= $child->evalStatic(); + } + return $result; + default: + throw new Exception( + pht( + 'Unexpected node during static evaluation, of type: %s', + $this->getTypeName())); + } + } + + public function isConstantString() { + return $this->checkIsConstantString(); + } + + public function isConstantStringWithMagicConstants() { + return $this->checkIsConstantString(array('n_MAGIC_SCALAR')); + } + + private function checkIsConstantString(array $additional_types = array()) { + switch ($this->getTypeName()) { + case 'n_HEREDOC': + case 'n_STRING_SCALAR': + return !$this->getStringVariables(); + + case 'n_CONCATENATION_LIST': + foreach ($this->getChildren() as $child) { + if ($child->getTypeName() == 'n_OPERATOR') { + continue; + } + if (!$child->checkIsConstantString($additional_types)) { + return false; + } + } + return true; + + default: + if (in_array($this->getTypeName(), $additional_types)) { + return true; + } + + return false; + } + } + + public function getStringVariables() { + $value = $this->getConcreteString(); + + switch ($this->getTypeName()) { + case 'n_HEREDOC': + if (preg_match("/^<<<\s*'/", $value)) { // Nowdoc: <<<'EOT' + return array(); + } + break; + + case 'n_STRING_SCALAR': + if ($value[0] == "'") { + return array(); + } + break; + + default: + throw new Exception(pht('Unexpected type %s.', $this->getTypeName())); + } + + // We extract just the variable names and ignore properties and array keys. + $re = '/\\\\.|(\$|\{\$|\${)([a-z_\x7F-\xFF][a-z0-9_\x7F-\xFF]*)/i'; + $matches = null; + preg_match_all($re, $value, $matches, PREG_OFFSET_CAPTURE); + return ipull(array_filter($matches[2]), 0, 1); + } + + public function getStringLiteralValue() { + if ($this->getTypeName() != 'n_STRING_SCALAR') { + return null; + } + + $value = $this->getSemanticString(); + $type = $value[0]; + $value = preg_replace('/^b?[\'"]|[\'"]$/i', '', $value); + $esc = false; + $len = strlen($value); + $out = ''; + + if ($type == "'") { + // Single quoted strings treat everything as a literal except "\\" and + // "\'". + return str_replace( + array('\\\\', '\\\''), + array('\\', "'"), + $value); + } + + // Double quoted strings treat "\X" as a literal if X isn't specifically + // a character which needs to be escaped -- e.g., "\q" and "\'" are + // literally "\q" and "\'". stripcslashes() is too aggressive, so find + // all these under-escaped backslashes and escape them. + + for ($ii = 0; $ii < $len; $ii++) { + $c = $value[$ii]; + if ($esc) { + $esc = false; + switch ($c) { + case 'x': + $u = isset($value[$ii + 1]) ? $value[$ii + 1] : null; + if (!preg_match('/^[a-f0-9]/i', $u)) { + // PHP treats \x followed by anything which is not a hex digit + // as a literal \x. + $out .= '\\\\'.$c; + break; + } + /* fallthrough */ + case 'n': + case 'r': + case 'f': + case 'v': + case '"': + case '$': + case 't': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + $out .= '\\'.$c; + break; + case 'e': + // Since PHP 5.4.0, this means "esc". However, stripcslashes() does + // not perform this conversion. + $out .= chr(27); + break; + default: + $out .= '\\\\'.$c; + break; + } + } else if ($c == '\\') { + $esc = true; + } else { + $out .= $c; + } + } + + return stripcslashes($out); + } + + /** + * Determines the parent namespace for a node. + * + * Traverses the AST upwards from a given node in order to determine the + * namespace in which the node is declared. + * + * To prevent any possible ambiguity, the returned namespace will always be + * prefixed with the namespace separator. + * + * @param XHPASTNode The input node. + * @return string|null The namespace which contains the input node, or + * `null` if no such node exists. + */ + public function getNamespace() { + $namespaces = $this + ->getTree() + ->getRootNode() + ->selectDescendantsOfType('n_NAMESPACE') + ->getRawNodes(); + + foreach (array_reverse($namespaces) as $namespace) { + if ($namespace->isAfter($this)) { + continue; + } + + $body = $namespace->getChildByIndex(1); + if ($body->getTypeName() != 'n_EMPTY') { + if (!$body->containsDescendant($this)) { + continue; + } + } + + return $namespace->getNamespaceName(); + } + + return null; + } + + /** + * Returns the namespace name from a node of type `n_NAMESPACE`. + * + * @return string|null + */ + private function getNamespaceName() { + if ($this->getTypeName() != 'n_NAMESPACE') { + return null; + } + + $namespace_name = $this->getChildByIndex(0); + if ($namespace_name->getTypeName() == 'n_EMPTY') { + return null; + } + + return '\\'.$namespace_name->getConcreteString(); + } + +} diff --git a/src/parser/xhpast/api/XHPASTSyntaxErrorException.php b/src/parser/xhpast/api/XHPASTSyntaxErrorException.php new file mode 100644 index 00000000..395b07ff --- /dev/null +++ b/src/parser/xhpast/api/XHPASTSyntaxErrorException.php @@ -0,0 +1,16 @@ +errorLine = $line; + parent::__construct($message); + } + + public function getErrorLine() { + return $this->errorLine; + } + +} diff --git a/src/parser/xhpast/api/XHPASTToken.php b/src/parser/xhpast/api/XHPASTToken.php new file mode 100644 index 00000000..6013c8b1 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTToken.php @@ -0,0 +1,39 @@ +typeName)) { + $type_id = $this->typeID; + if ($type_id <= 255) { + $this->typeName = chr($type_id); + } + $this->typeName = parent::getTypeName(); + } + return $this->typeName; + } + + public function isComment() { + static $type_ids = null; + if ($type_ids === null) { + $type_ids = array( + $this->tree->getTokenTypeIDFromTypeName('T_COMMENT') => true, + $this->tree->getTokenTypeIDFromTypeName('T_DOC_COMMENT') => true, + ); + } + + return isset($type_ids[$this->typeID]); + } + + public function isAnyWhitespace() { + static $type_ids = null; + if ($type_ids === null) { + $type_ids = array( + $this->tree->getTokenTypeIDFromTypeName('T_WHITESPACE') => true, + ); + } + + return isset($type_ids[$this->typeID]); + } + +} diff --git a/src/parser/xhpast/api/XHPASTTree.php b/src/parser/xhpast/api/XHPASTTree.php new file mode 100644 index 00000000..2fa08a89 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTTree.php @@ -0,0 +1,78 @@ +setTreeType('XHP'); + $this->setNodeConstants(xhp_parser_node_constants()); + $this->setTokenConstants(xhpast_parser_token_constants()); + + parent::__construct($tree, $stream, $source); + } + + public function newNode($id, array $data, AASTTree $tree) { + return new XHPASTNode($id, $data, $tree); + } + + public function newToken($id, $type, $value, $offset, AASTTree $tree) { + return new XHPASTToken($id, $type, $value, $offset, $tree); + } + + public static function newFromData($php_source) { + $future = PhutilXHPASTBinary::getParserFuture($php_source); + return self::newFromDataAndResolvedExecFuture( + $php_source, + $future->resolve()); + } + + public static function newStatementFromString($string) { + $string = 'getRootNode()->selectDescendantsOfType('n_STATEMENT'); + if (count($statements) != 1) { + throw new Exception( + pht('String does not parse into exactly one statement!')); + } + // Return the first one, trying to use reset() with iterators ends in tears. + foreach ($statements as $statement) { + return $statement; + } + } + + public static function newFromDataAndResolvedExecFuture( + $php_source, + array $resolved) { + + list($err, $stdout, $stderr) = $resolved; + if ($err) { + if ($err == 1) { + $matches = null; + $is_syntax = preg_match( + '/^XHPAST Parse Error: (.*) on line (\d+)/s', + $stderr, + $matches); + if ($is_syntax) { + throw new XHPASTSyntaxErrorException($matches[2], trim($stderr)); + } + } + throw new Exception( + pht( + '%s failed to parse file data %d: %s', + 'XHPAST', + $err, + $stderr)); + } + + $data = null; + try { + $data = phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('%s: failed to decode tree.', 'XHPAST'), + $ex); + } + + return new XHPASTTree($data['tree'], $data['stream'], $php_source); + } + +} diff --git a/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php b/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php new file mode 100644 index 00000000..8e4ecbb1 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php @@ -0,0 +1,101 @@ +assertStringVariables(array(), '""'); + $this->assertStringVariables(array(2 => 'abc'), '"$abc"'); + $this->assertStringVariables(array(), '"\$abc"'); + $this->assertStringVariables(array(2 => 'a'), '"$a[1]"'); + $this->assertStringVariables(array(3 => 'a'), '"{$a[1]}"'); + $this->assertStringVariables(array(2 => 'a', 5 => 'a'), '"$a $a"'); + + $this->assertStringVariables(array(), "''"); + $this->assertStringVariables(array(), "'\$a'"); + + $this->assertStringVariables(array(), "<<assertStringVariables(array(8 => 'a'), "<<assertStringVariables(array(), "<<<'EOT'\n\$a\nEOT"); + } + + private function assertStringVariables($expected, $string) { + $statement = XHPASTTree::newStatementFromString($string); + $this->assertEqual( + $expected, + $statement->getChildByIndex(0)->getStringVariables(), + $string); + } + + public function testGetNamespace() { + $dir = dirname(__FILE__).'/namespace/'; + $files = id(new FileFinder($dir)) + ->withType('f') + ->withSuffix('php.test') + ->find(); + + foreach ($files as $file) { + list($tree, $expect) = $this->readTestData($dir.'/'.$file); + + $root = $tree->getRootNode(); + $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); + + foreach ($classes as $class) { + $id = (string)$class->getID(); + + if (idx($expect, $id, false) === false) { + throw new Exception( + pht( + 'No expected value for node %d in file "%s".', + $class->getID(), + $file)); + } + + $this->assertEqual( + $expect[$id], + $class->getNamespace()); + } + } + } + + /** + * Reads and parses test data from a specified file. + * + * This method reads and parses test data from a file. The file is expected + * to have the following structure + * + * ``` + * The first element of the pair is the + * `XHPASTTree` contained within the test file. + * The second element of the pair is the + * "expect" data. + */ + private function readTestData($file) { + $contents = Filesystem::readFile($file); + $contents = preg_split('/^~{10}$/m', $contents); + + if (count($contents) < 2) { + throw new Exception( + pht( + "Expected '%s' separating test case and results.", + '~~~~~~~~~~')); + } + + list($data, $expect) = $contents; + + $tree = XHPASTTree::newFromData($data); + $expect = phutil_json_decode($expect); + + return array($tree, $expect); + } + +} diff --git a/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php b/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php new file mode 100644 index 00000000..dfea2c14 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php @@ -0,0 +1,140 @@ +assertEval(1, '1'); + $this->assertEval('a', '"a"'); + $this->assertEval(-1.1, '-1.1'); + $this->assertEval( + array('foo', 'bar', -1, +2, -3.4, +4.3, 1e10, 1e-5, -2.3e7), + "array('foo', 'bar', -1, +2, -3.4, +4.3, 1e10, 1e-5, -2.3e7)"); + $this->assertEval( + array(), + 'array()'); + $this->assertEval( + array(42 => 7, 'a' => 5, 1, 2, 3, 4, 1 => 'goo'), + "array(42 => 7, 'a' => 5, 1, 2, 3, 4, 1 => 'goo')"); + $this->assertEval( + array('a' => 'a', 'b' => array(1, 2, array(3))), + "array('a' => 'a', 'b' => array(1, 2, array(3)))"); + $this->assertEval( + array(true, false, null), + 'array(true, false, null)'); + + // Duplicate keys + $this->assertEval( + array(0 => '1', 0 => '2'), + "array(0 => '1', 0 => '2')"); + + $this->assertEval('simple string', "'simple string'"); + $this->assertEval('42', "'42'"); + $this->assertEval('binary string', "b'binary string'"); + $this->assertEval(3.1415926, '3.1415926'); + $this->assertEval(42, '42'); + $this->assertEval( + array(2147483648, 2147483647, -2147483648, -2147483647), + 'array(2147483648, 2147483647, -2147483648, -2147483647)'); + + $this->assertEval(INF, 'INF'); + $this->assertEval(-INF, '-INF'); + + $this->assertEval(0x1b, '0x1b'); + $this->assertEval(0X0A, '0X0A'); + + // Octal + $this->assertEval(010, '010'); + // TODO: this passes on < PHP 7 for some reason but fails on PHP 7 correctly + //$this->assertEval(080, '080'); // Invalid! + + // Leading 0, but float, not octal. + $this->assertEval(0.11e1, '0.11e1'); + $this->assertEval(0e1, '0e1'); + + $this->assertEval(0, '0'); + + // Static evaluation treats '$' as a literal dollar glyph. + $this->assertEval('$asdf', '"$asdf"'); + + $this->assertEval( + '\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z'. + '\1\2\3\4\5\6\7\8\9\0'. + '\!\@\#\$\%\^\&\*\(\)'. + '\`\~\\\|\[\]\{\}\<\>\,\.\/\?\:\;\-\_\=\+', + + "'\\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q". + "\\r\\s\\t\\u\\v\\w\\x\\y\\z". + "\\1\\2\\3\\4\\5\\6\\7\\8\\9\\0". + "\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)". + "\\`\\~\\\\\\|\\[\\]\\{\\}\\<\\>\\,\\.\\/\\?\\:\\;\\-\\_\\=\\+". + "'"); + + // After PHP 5.4.0, "\e" means "escape", not "backslash e". We implement the + // newer rules, but if we're running in an older version of PHP we can not + // express them with "\e". + $this->assertEval(chr(27), '"\\e"'); + + $this->assertEval( + "\a\b\c\d\x1B\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z". + "\1\2\3\4\5\6\7\8\9\0". + "\!\@\#\$\%\^\&\*\(\)". + "\`\~\\\|\[\]\{\}\<\>\,\.\/\?\:\;\-\_\=\+", + + '"\\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q'. + '\\r\\s\\t\\u\\v\\w\\x\\y\\z'. + '\\1\\2\\3\\4\\5\\6\\7\\8\\9\\0'. + '\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)'. + '\\`\\~\\\\\\|\\[\\]\\{\\}\\<\\>\\,\\.\\/\\?\\:\\;\\-\\_\\=\\+"'); + + $this->assertEval( + '\' "', + "'\\' \"'"); + + $this->assertEval( + '\\ \\\\ ', + '\'\\\\ \\\\\\\\ \''); + + $this->assertEval( + '\ \\ ', + "'\\ \\\\ '"); + + $this->assertEval( + '\x92', + '\'\x92\''); + + $this->assertEval( + "\x92", + '"\x92"'); + + $this->assertEval( + "\x", + '"\x"'); + + $this->assertEval( + "\x1", + '"\x1"'); + + $this->assertEval( + "\x000 !", + '"\x000 !"'); + + $this->assertEval( + "\x0", + '"\x0"'); + + $this->assertEval( + "\xg", + '"\xg"'); + } + + private function assertEval($value, $string) { + $this->assertEqual( + $value, + XHPASTTree::newStatementFromString($string)->evalStatic(), + $string); + } + +} diff --git a/src/parser/xhpast/api/__tests__/namespace/braces.lint-test b/src/parser/xhpast/api/__tests__/namespace/braces.lint-test new file mode 100644 index 00000000..b9864a17 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/namespace/braces.lint-test @@ -0,0 +1,18 @@ +write($data); + + return $future; + } + + /** + * Returns the path to the XHPAST binary. + * + * @return string + */ + public static function getPath() { + if (phutil_is_windows()) { + return dirname(__FILE__).'\\xhpast.exe'; + } + return dirname(__FILE__).'/xhpast'; + } + + /** + * Returns the XHPAST version. + * + * @return string + */ + public static function getVersion() { + if (self::$version === null) { + $bin = self::getPath(); + + if (Filesystem::pathExists($bin)) { + list($err, $stdout) = exec_manual('%s --version', $bin); + if (!$err) { + self::$version = trim($stdout); + } + } + } + + return self::$version; + } + + /** + * Checks if XHPAST is built and up-to-date. + * + * @return bool + */ + public static function isAvailable() { + return self::getVersion() == self::EXPECTED_VERSION; + } + +} diff --git a/src/parser/xhpast/bin/xhpast.exe b/src/parser/xhpast/bin/xhpast.exe new file mode 100644 index 00000000..ab691840 Binary files /dev/null and b/src/parser/xhpast/bin/xhpast.exe differ diff --git a/src/parser/xhpast/parser_nodes.php b/src/parser/xhpast/parser_nodes.php new file mode 100644 index 00000000..b2b1b834 --- /dev/null +++ b/src/parser/xhpast/parser_nodes.php @@ -0,0 +1,127 @@ + 'n_PROGRAM', + 9001 => 'n_SYMBOL_NAME', + 9002 => 'n_HALT_COMPILER', + 9003 => 'n_NAMESPACE', + 9004 => 'n_STATEMENT', + 9005 => 'n_EMPTY', + 9006 => 'n_STATEMENT_LIST', + 9007 => 'n_OPEN_TAG', + 9008 => 'n_CLOSE_TAG', + 9009 => 'n_USE_LIST', + 9010 => 'n_USE', + 9011 => 'n_CONSTANT_DECLARATION_LIST', + 9012 => 'n_CONSTANT_DECLARATION', + 9013 => 'n_STRING', + 9014 => 'n_LABEL', + 9015 => 'n_CONDITION_LIST', + 9016 => 'n_CONTROL_CONDITION', + 9017 => 'n_IF', + 9018 => 'n_ELSEIF', + 9019 => 'n_ELSE', + 9020 => 'n_WHILE', + 9021 => 'n_DO_WHILE', + 9022 => 'n_FOR', + 9023 => 'n_FOR_EXPRESSION', + 9024 => 'n_SWITCH', + 9025 => 'n_BREAK', + 9026 => 'n_CONTINUE', + 9027 => 'n_RETURN', + 9028 => 'n_GLOBAL_DECLARATION_LIST', + 9029 => 'n_GLOBAL_DECLARATION', + 9030 => 'n_STATIC_DECLARATION_LIST', + 9031 => 'n_STATIC_DECLARATION', + 9032 => 'n_ECHO_LIST', + 9033 => 'n_ECHO', + 9034 => 'n_INLINE_HTML', + 9035 => 'n_UNSET_LIST', + 9036 => 'n_UNSET', + 9037 => 'n_FOREACH', + 9038 => 'n_FOREACH_EXPRESSION', + 9039 => 'n_THROW', + 9040 => 'n_GOTO', + 9041 => 'n_TRY', + 9042 => 'n_CATCH_LIST', + 9043 => 'n_CATCH', + 9044 => 'n_DECLARE', + 9045 => 'n_DECLARE_DECLARATION_LIST', + 9046 => 'n_DECLARE_DECLARATION', + 9047 => 'n_VARIABLE', + 9048 => 'n_REFERENCE', + 9049 => 'n_VARIABLE_REFERENCE', + 9050 => 'n_FUNCTION_DECLARATION', + 9051 => 'n_CLASS_DECLARATION', + 9052 => 'n_CLASS_ATTRIBUTES', + 9053 => 'n_EXTENDS', + 9054 => 'n_EXTENDS_LIST', + 9055 => 'n_IMPLEMENTS_LIST', + 9056 => 'n_INTERFACE_DECLARATION', + 9057 => 'n_CASE', + 9058 => 'n_DEFAULT', + 9059 => 'n_DECLARATION_PARAMETER_LIST', + 9060 => 'n_DECLARATION_PARAMETER', + 9061 => 'n_TYPE_NAME', + 9062 => 'n_VARIABLE_VARIABLE', + 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', + 9064 => 'n_CLASS_MEMBER_DECLARATION', + 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', + 9066 => 'n_CLASS_CONSTANT_DECLARATION', + 9067 => 'n_METHOD_DECLARATION', + 9068 => 'n_METHOD_MODIFIER_LIST', + 9069 => 'n_FUNCTION_MODIFIER_LIST', + 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', + 9071 => 'n_EXPRESSION_LIST', + 9072 => 'n_LIST', + 9073 => 'n_ASSIGNMENT', + 9074 => 'n_NEW', + 9075 => 'n_UNARY_PREFIX_EXPRESSION', + 9076 => 'n_UNARY_POSTFIX_EXPRESSION', + 9077 => 'n_BINARY_EXPRESSION', + 9078 => 'n_TERNARY_EXPRESSION', + 9079 => 'n_CAST_EXPRESSION', + 9080 => 'n_CAST', + 9081 => 'n_OPERATOR', + 9082 => 'n_ARRAY_LITERAL', + 9083 => 'n_EXIT_EXPRESSION', + 9084 => 'n_BACKTICKS_EXPRESSION', + 9085 => 'n_LEXICAL_VARIABLE_LIST', + 9086 => 'n_NUMERIC_SCALAR', + 9087 => 'n_STRING_SCALAR', + 9088 => 'n_MAGIC_SCALAR', + 9089 => 'n_CLASS_STATIC_ACCESS', + 9090 => 'n_CLASS_NAME', + 9091 => 'n_MAGIC_CLASS_KEYWORD', + 9092 => 'n_OBJECT_PROPERTY_ACCESS', + 9093 => 'n_ARRAY_VALUE_LIST', + 9094 => 'n_ARRAY_VALUE', + 9095 => 'n_CALL_PARAMETER_LIST', + 9096 => 'n_VARIABLE_EXPRESSION', + 9097 => 'n_INCLUDE_FILE', + 9098 => 'n_HEREDOC', + 9099 => 'n_FUNCTION_CALL', + 9100 => 'n_INDEX_ACCESS', + 9101 => 'n_ASSIGNMENT_LIST', + 9102 => 'n_METHOD_CALL', + 9103 => 'n_CONCATENATION_LIST', + 9104 => 'n_PARENTHETICAL_EXPRESSION', + 9105 => 'n_TRAIT_USE', + 9106 => 'n_TRAIT_USE_LIST', + 9107 => 'n_TRAIT_ADAPTATION_LIST', + 9108 => 'n_TRAIT_INSTEADOF', + 9109 => 'n_TRAIT_REFERENCE_LIST', + 9110 => 'n_TRAIT_METHOD_REFERENCE', + 9111 => 'n_TRAIT_AS', + 9112 => 'n_YIELD', + 9113 => 'n_FINALLY', + 9114 => 'n_UNPACK', + 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', + ); +} diff --git a/src/parser/xhpast/parser_tokens.php b/src/parser/xhpast/parser_tokens.php new file mode 100644 index 00000000..83021901 --- /dev/null +++ b/src/parser/xhpast/parser_tokens.php @@ -0,0 +1,147 @@ + 'T_INCLUDE', + 259 => 'T_INCLUDE_ONCE', + 260 => 'T_EVAL', + 261 => 'T_REQUIRE', + 262 => 'T_REQUIRE_ONCE', + 263 => 'T_LOGICAL_OR', + 264 => 'T_LOGICAL_XOR', + 265 => 'T_LOGICAL_AND', + 266 => 'T_PRINT', + 267 => 'T_PLUS_EQUAL', + 268 => 'T_MINUS_EQUAL', + 269 => 'T_MUL_EQUAL', + 270 => 'T_DIV_EQUAL', + 271 => 'T_CONCAT_EQUAL', + 272 => 'T_MOD_EQUAL', + 273 => 'T_AND_EQUAL', + 274 => 'T_OR_EQUAL', + 275 => 'T_XOR_EQUAL', + 276 => 'T_SL_EQUAL', + 277 => 'T_SR_EQUAL', + 278 => 'T_COALESCE', + 279 => 'T_BOOLEAN_OR', + 280 => 'T_BOOLEAN_AND', + 281 => 'T_IS_EQUAL', + 282 => 'T_IS_NOT_EQUAL', + 283 => 'T_IS_IDENTICAL', + 284 => 'T_IS_NOT_IDENTICAL', + 285 => 'T_SPACESHIP', + 286 => 'T_IS_SMALLER_OR_EQUAL', + 287 => 'T_IS_GREATER_OR_EQUAL', + 288 => 'T_SL', + 289 => 'T_SR', + 290 => 'T_INSTANCEOF', + 291 => 'T_INC', + 292 => 'T_DEC', + 293 => 'T_INT_CAST', + 294 => 'T_DOUBLE_CAST', + 295 => 'T_STRING_CAST', + 296 => 'T_UNICODE_CAST', + 297 => 'T_BINARY_CAST', + 298 => 'T_ARRAY_CAST', + 299 => 'T_OBJECT_CAST', + 300 => 'T_BOOL_CAST', + 301 => 'T_UNSET_CAST', + 302 => 'T_NEW', + 303 => 'T_CLONE', + 304 => 'T_EXIT', + 305 => 'T_IF', + 306 => 'T_ELSEIF', + 307 => 'T_ELSE', + 308 => 'T_ENDIF', + 309 => 'T_LNUMBER', + 310 => 'T_DNUMBER', + 311 => 'T_STRING', + 312 => 'T_STRING_VARNAME', + 313 => 'T_VARIABLE', + 314 => 'T_NUM_STRING', + 315 => 'T_INLINE_HTML', + 316 => 'T_CHARACTER', + 317 => 'T_BAD_CHARACTER', + 318 => 'T_ENCAPSED_AND_WHITESPACE', + 319 => 'T_CONSTANT_ENCAPSED_STRING', + 320 => 'T_BACKTICKS_EXPR', + 321 => 'T_ECHO', + 322 => 'T_DO', + 323 => 'T_WHILE', + 324 => 'T_ENDWHILE', + 325 => 'T_FOR', + 326 => 'T_ENDFOR', + 327 => 'T_FOREACH', + 328 => 'T_ENDFOREACH', + 329 => 'T_DECLARE', + 330 => 'T_ENDDECLARE', + 331 => 'T_AS', + 332 => 'T_SWITCH', + 333 => 'T_ENDSWITCH', + 334 => 'T_CASE', + 335 => 'T_DEFAULT', + 336 => 'T_BREAK', + 337 => 'T_CONTINUE', + 338 => 'T_GOTO', + 339 => 'T_FUNCTION', + 340 => 'T_CONST', + 341 => 'T_RETURN', + 342 => 'T_TRY', + 343 => 'T_CATCH', + 344 => 'T_THROW', + 345 => 'T_USE', + 346 => 'T_GLOBAL', + 347 => 'T_STATIC', + 348 => 'T_ABSTRACT', + 349 => 'T_FINAL', + 350 => 'T_PRIVATE', + 351 => 'T_PROTECTED', + 352 => 'T_PUBLIC', + 353 => 'T_VAR', + 354 => 'T_UNSET', + 355 => 'T_ISSET', + 356 => 'T_EMPTY', + 357 => 'T_HALT_COMPILER', + 358 => 'T_CLASS', + 359 => 'T_INTERFACE', + 360 => 'T_EXTENDS', + 361 => 'T_IMPLEMENTS', + 362 => 'T_OBJECT_OPERATOR', + 363 => 'T_DOUBLE_ARROW', + 364 => 'T_LIST', + 365 => 'T_ARRAY', + 366 => 'T_CLASS_C', + 367 => 'T_METHOD_C', + 368 => 'T_FUNC_C', + 369 => 'T_LINE', + 370 => 'T_FILE', + 371 => 'T_COMMENT', + 372 => 'T_DOC_COMMENT', + 373 => 'T_OPEN_TAG', + 374 => 'T_OPEN_TAG_WITH_ECHO', + 375 => 'T_OPEN_TAG_FAKE', + 376 => 'T_CLOSE_TAG', + 377 => 'T_WHITESPACE', + 378 => 'T_START_HEREDOC', + 379 => 'T_END_HEREDOC', + 380 => 'T_HEREDOC', + 381 => 'T_DOLLAR_OPEN_CURLY_BRACES', + 382 => 'T_CURLY_OPEN', + 383 => 'T_PAAMAYIM_NEKUDOTAYIM', + 384 => 'T_BINARY_DOUBLE', + 385 => 'T_BINARY_HEREDOC', + 386 => 'T_NAMESPACE', + 387 => 'T_NS_C', + 388 => 'T_DIR', + 389 => 'T_NS_SEPARATOR', + 390 => 'T_INSTEADOF', + 391 => 'T_CALLABLE', + 392 => 'T_TRAIT', + 393 => 'T_TRAIT_C', + 394 => 'T_YIELD', + 395 => 'T_FINALLY', + 396 => 'T_ELLIPSIS', + ); +} diff --git a/src/phage/__tests__/PhageAgentTestCase.php b/src/phage/__tests__/PhageAgentTestCase.php new file mode 100644 index 00000000..4973081a --- /dev/null +++ b/src/phage/__tests__/PhageAgentTestCase.php @@ -0,0 +1,49 @@ +runBootloaderTests(new PhagePHPAgentBootloader()); + } + + private function runBootloaderTests(PhageAgentBootloader $boot) { + $name = get_class($boot); + + $exec = new ExecFuture('%C', $boot->getBootCommand()); + $exec->write($boot->getBootSequence(), $keep_open = true); + + $exec_channel = new PhutilExecChannel($exec); + $agent = new PhutilJSONProtocolChannel($exec_channel); + + $agent->write( + array( + 'type' => 'EXEC', + 'key' => 1, + 'command' => 'echo phage', + 'timeout' => null, + )); + + $this->agentExpect( + $agent, + array( + 'type' => 'RSLV', + 'key' => 1, + 'err' => 0, + 'stdout' => "phage\n", + 'stderr' => '', + 'timeout' => false, + ), + pht("'%s' for %s", 'echo phage', $name)); + + $agent->write( + array( + 'type' => 'EXIT', + )); + } + + private function agentExpect(PhutilChannel $agent, $expect, $what) { + $message = $agent->waitForMessage(); + $this->assertEqual($expect, $message, $what); + } + +} diff --git a/src/phage/action/PhageAction.php b/src/phage/action/PhageAction.php new file mode 100644 index 00000000..a18b0f0c --- /dev/null +++ b/src/phage/action/PhageAction.php @@ -0,0 +1,49 @@ +requireContainerAction(); + + return $this->actions; + } + + final public function addAction(PhageAction $action) { + $this->requireContainerAction(); + + $this->willAddAction($action); + + $this->actions[] = $action; + } + + protected function getAllWaitingChannels() { + if (!$this->isContainerAction()) { + throw new PhutilMethodNotImplementedException(); + } + + $channels = array(); + foreach ($this->getActions() as $action) { + foreach ($action->getAllWaitingChannels() as $channel) { + $channels[] = $channel; + } + } + + return $channels; + } + + private function requireContainerAction() { + if (!$this->isContainerAction()) { + throw new Exception(pht('This is not a container action.')); + } + } + +} diff --git a/src/phage/action/PhageAgentAction.php b/src/phage/action/PhageAgentAction.php new file mode 100644 index 00000000..9a84b476 --- /dev/null +++ b/src/phage/action/PhageAgentAction.php @@ -0,0 +1,274 @@ +isExiting) { + throw new Exception( + pht( + 'You can not add new actions to an exiting agent.')); + } + + $key = 'command/'.$this->commandKey++; + + $this->commands[$key] = array( + 'key' => $key, + 'command' => $action, + ); + + $this->queued[$key] = $key; + } + + public function isActiveAgent() { + return $this->isActive; + } + + final public function setLimit($limit) { + $this->limit = $limit; + return $this; + } + + final public function getLimit() { + return $this->limit; + } + + final public function setThrottle($throttle) { + $this->throttle = $throttle; + return $this; + } + + final public function getThrottle() { + return $this->throttle; + } + + abstract protected function newAgentFuture(PhutilCommandString $command); + + protected function getAllWaitingChannels() { + $channels = array(); + + if ($this->isActiveAgent()) { + $channels[] = $this->channel; + } + + return $channels; + } + + public function startAgent() { + $bootloader = new PhagePHPAgentBootloader(); + + $future = $this->newAgentFuture($bootloader->getBootCommand()); + + $future->write($bootloader->getBootSequence(), $keep_open = true); + + $channel = new PhutilExecChannel($future); + $channel->setStderrHandler(array($this, 'didReadAgentStderr')); + + $channel = new PhutilJSONProtocolChannel($channel); + + $this->future = $future; + $this->channel = $channel; + $this->isActive = true; + } + + private function updateQueue() { + // If we don't have anything waiting in queue, we have nothing to do. + if (!$this->queued) { + return false; + } + + $now = microtime(true); + + // If we're throttling commands and recently started one, don't start + // another one yet. + $throttle = $this->getThrottle(); + if ($throttle) { + if ($this->waitUntil && ($now < $this->waitUntil)) { + return false; + } + } + + // If we're limiting parallelism and the active list is full, don't + // start anything else yet. + $limit = $this->getLimit(); + if ($limit) { + if (count($this->active) >= $limit) { + return false; + } + } + + // Move a command out of the queue and tell the agent to execute it. + $key = head($this->queued); + unset($this->queued[$key]); + + $this->active[$key] = $key; + $command = $this->commands[$key]['command']; + + $channel = $this->getChannel(); + + $channel->write( + array( + 'type' => 'EXEC', + 'key' => $key, + 'command' => $command->getCommand()->getUnmaskedString(), + 'timeout' => $command->getTimeout(), + )); + + if ($throttle) { + $this->waitUntil = ($now + $throttle); + } + + return true; + } + + private function getChannel() { + return $this->channel; + } + + public function updateAgent() { + if (!$this->isActiveAgent()) { + return; + } + + $channel = $this->channel; + + while (true) { + do { + $did_update = $this->updateQueue(); + } while ($did_update); + + $is_open = $channel->update(); + + $message = $channel->read(); + if ($message !== null) { + switch ($message['type']) { + case 'TEXT': + $key = $message['key']; + $this->writeOutput($key, $message['kind'], $message['text']); + break; + case 'RSLV': + $key = $message['key']; + $command = $this->commands[$key]['command']; + + $this->writeOutput($key, 'stdout', $message['stdout']); + $this->writeOutput($key, 'stderr', $message['stderr']); + + $exit_code = $message['err']; + + $command->setExitCode($exit_code); + $command->setDidTimeout((bool)idx($message, 'timeout')); + + if ($exit_code != 0) { + $exit_code = $this->formatOutput( + pht( + 'Command ("%s") exited nonzero ("%s")!', + $command->getCommand(), + $exit_code), + $command->getLabel()); + + fprintf(STDOUT, '%s', $exit_code); + } + + unset($this->active[$key]); + + if (!$this->active && !$this->queued) { + $channel->write( + array( + 'type' => 'EXIT', + 'key' => 'exit', + )); + + $this->isExiting = true; + break; + } + } + } + + if (!$is_open) { + if ($this->isExiting) { + $this->isActive = false; + break; + } else { + throw new Exception(pht('Channel closed unexpectedly!')); + } + } + + if ($message === null) { + break; + } + } + } + + private function writeOutput($key, $kind, $text) { + if (!strlen($text)) { + return; + } + + switch ($kind) { + case 'stdout': + $target = STDOUT; + break; + case 'stderr': + $target = STDERR; + break; + default: + throw new Exception(pht('Unknown output kind "%s".', $kind)); + } + + $command = $this->commands[$key]['command']; + + $label = $command->getLabel(); + if (!strlen($label)) { + $label = pht('Unknown Command'); + } + + $text = $this->formatOutput($text, $label); + fprintf($target, '%s', $text); + } + + private function formatOutput($output, $context) { + $output = phutil_split_lines($output, false); + foreach ($output as $key => $line) { + $output[$key] = tsprintf("[%s] %R\n", $context, $line); + } + $output = implode('', $output); + + return $output; + } + + public function didReadAgentStderr($channel, $stderr) { + throw new Exception( + pht( + 'Unexpected output on agent stderr: %s.', + $stderr)); + } + +} diff --git a/src/phage/action/PhageExecuteAction.php b/src/phage/action/PhageExecuteAction.php new file mode 100644 index 00000000..811b2892 --- /dev/null +++ b/src/phage/action/PhageExecuteAction.php @@ -0,0 +1,62 @@ +command = $command; + return $this; + } + + public function getCommand() { + return $this->command; + } + + public function setLabel($label) { + $this->label = $label; + return $this; + } + + public function getLabel() { + return $this->label; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + public function setExitCode($exit_code) { + $this->exitCode = $exit_code; + return $this; + } + + public function getExitCode() { + return $this->exitCode; + } + + public function setDidTimeout($did_timeout) { + $this->didTimeout = $did_timeout; + return $this; + } + + public function getDidTimeout() { + return $this->didTimeout; + } + +} diff --git a/src/phage/action/PhageLocalAction.php b/src/phage/action/PhageLocalAction.php new file mode 100644 index 00000000..2e02193c --- /dev/null +++ b/src/phage/action/PhageLocalAction.php @@ -0,0 +1,10 @@ +getAgents(); + foreach ($agents as $agent) { + $agent->startAgent(); + } + + while (true) { + $channels = $this->getAllWaitingChannels(); + PhutilChannel::waitForAny($channels); + + $agents = $this->getActiveAgents(); + if (!$agents) { + break; + } + + foreach ($agents as $agent) { + $agent->updateAgent(); + } + } + } + + protected function getAgents() { + return $this->getActions(); + } + + protected function getActiveAgents() { + $agents = $this->getAgents(); + + foreach ($agents as $key => $agent) { + if (!$agent->isActiveAgent()) { + unset($agents[$key]); + } + } + + return $agents; + } + + +} diff --git a/src/phage/agent/PhagePHPAgent.php b/src/phage/agent/PhagePHPAgent.php new file mode 100644 index 00000000..e3beebca --- /dev/null +++ b/src/phage/agent/PhagePHPAgent.php @@ -0,0 +1,145 @@ +stdin = $stdin; + } + + public function execute() { + while (true) { + if ($this->exec) { + $iterator = new FutureIterator($this->exec); + $iterator->setUpdateInterval(0.050); + foreach ($iterator as $key => $future) { + if ($future === null) { + foreach ($this->exec as $read_key => $read_future) { + $this->readFuture($read_key, $read_future); + } + + break; + } else { + $this->resolveFuture($key, $future); + } + } + } else { + PhutilChannel::waitForAny(array($this->getMaster())); + } + + $this->processInput(); + } + } + + private function getMaster() { + if (!$this->master) { + $raw_channel = new PhutilSocketChannel( + $this->stdin, + fopen('php://stdout', 'w')); + + $json_channel = new PhutilJSONProtocolChannel($raw_channel); + $this->master = $json_channel; + } + + return $this->master; + } + + private function processInput() { + $channel = $this->getMaster(); + + $open = $channel->update(); + if (!$open) { + throw new Exception(pht('Channel closed!')); + } + + while (true) { + $command = $channel->read(); + if ($command === null) { + break; + } + $this->processCommand($command); + } + } + + private function processCommand(array $spec) { + switch ($spec['type']) { + case 'EXEC': + $key = $spec['key']; + $cmd = $spec['command']; + + $future = new ExecFuture('%C', $cmd); + + $timeout = $spec['timeout']; + if ($timeout) { + $future->setTimeout(ceil($timeout)); + } + + $future->isReady(); + + $this->exec[$key] = $future; + break; + case 'EXIT': + $this->terminateAgent(); + break; + } + } + + private function readFuture($key, ExecFuture $future) { + $master = $this->getMaster(); + + list($stdout, $stderr) = $future->read(); + $future->discardBuffers(); + + if (strlen($stdout)) { + $master->write( + array( + 'type' => 'TEXT', + 'key' => $key, + 'kind' => 'stdout', + 'text' => $stdout, + )); + } + + if (strlen($stderr)) { + $master->write( + array( + 'type' => 'TEXT', + 'key' => $key, + 'kind' => 'stderr', + 'text' => $stderr, + )); + } + } + + private function resolveFuture($key, ExecFuture $future) { + $result = $future->resolve(); + $master = $this->getMaster(); + + $master->write( + array( + 'type' => 'RSLV', + 'key' => $key, + 'err' => $result[0], + 'stdout' => $result[1], + 'stderr' => $result[2], + 'timeout' => (bool)$future->getWasKilledByTimeout(), + )); + + unset($this->exec[$key]); + } + + public function __destruct() { + $this->terminateAgent(); + } + + private function terminateAgent() { + foreach ($this->exec as $key => $future) { + $future->resolveKill(); + } + exit(0); + } + +} diff --git a/src/phage/bootloader/PhageAgentBootloader.php b/src/phage/bootloader/PhageAgentBootloader.php new file mode 100644 index 00000000..d99b4aa3 --- /dev/null +++ b/src/phage/bootloader/PhageAgentBootloader.php @@ -0,0 +1,9 @@ +buildBootSequence(); + $len = $this->bootLength; + + // We need to run a command which will bootload a full agent by reading + // and evaluating source code from stdin. This is the smallest bootstrap + // I was able to construct: + // + // - Using `fread(STDIN, ...)` is only good up to 8192 bytes. + // - Using `fread(STDIN, ...)` or various other constructs prevents us + // from opening STDIN later. + // + // Instead, we `fread()` a second-stage bootstrap which has enough code + // to do arbitrary-length reads from stdin. The second-stage bootstrap + // reads and evaluates the main agent program. + + return csprintf( + 'php -r %s', + "eval(fread(\$I=fopen('php://stdin', 'r'), {$len})); /* phage! */"); + } + + public function getBootSequence() { + $boot = $this->buildBootSequence(); + return $boot->toString(); + } + + private function buildBootSequence() { + if (!$this->bootSequence) { + $files = array( + 'utils/utils.php', + 'object/Phobject.php', + 'utils/PhutilRope.php', + 'xsprintf/xsprintf.php', + 'xsprintf/csprintf.php', + 'xsprintf/PhutilCommandString.php', + 'future/Future.php', + 'future/FutureIterator.php', + 'future/exec/PhutilExecutableFuture.php', + 'future/exec/ExecFuture.php', + 'future/exec/CommandException.php', + 'channel/PhutilChannel.php', + 'channel/PhutilSocketChannel.php', + 'channel/PhutilChannelChannel.php', + 'channel/PhutilProtocolChannel.php', + 'channel/PhutilJSONProtocolChannel.php', + 'phage/agent/PhagePHPAgent.php', + ); + + $main_sequence = new PhutilBallOfPHP(); + $root = phutil_get_library_root('arcanist'); + foreach ($files as $file) { + $main_sequence->addFile($root.'/'.$file); + } + + // NOTE: If we use id() here, we don't get a stack trace out of it when + // we call a nonexistent method from inside "execute()"? Not exactly sure + // what's going on here, but just sweep it under the rug for now. + + $main_sequence->addText('$A = new PhagePHPAgent($I); $A->execute();'); + $main_length = strlen($main_sequence->toString()); + + $boot_sequence = new PhutilBallOfPHP(); + $boot = ' + $length = '.$main_length.'; + $buffer = ""; + while (strlen($buffer) < $length) { + $data = fread($I, $length - strlen($buffer)); + if (!strlen($data)) { + exit(1); + } + $buffer .= $data; + } + + eval($buffer);'; + $boot_sequence->addText($boot); + $boot_length = strlen($boot_sequence->toString()); + $boot_sequence->addText($main_sequence->toString()); + + if (strlen($boot_length) > 8192) { + throw new Exception(pht('Stage 1 bootloader is too large!')); + } + + $this->bootSequence = $boot_sequence; + $this->bootLength = $boot_length; + $this->mainLength = $main_length; + } + + return $this->bootSequence; + } + +} diff --git a/src/phage/util/PhutilBallOfPHP.php b/src/phage/util/PhutilBallOfPHP.php new file mode 100644 index 00000000..697a7bf2 --- /dev/null +++ b/src/phage/util/PhutilBallOfPHP.php @@ -0,0 +1,32 @@ +parts[] = substr($data, 6); + return $this; + } + + public function addText($text) { + $this->parts[] = $text; + } + + public function toString() { + return implode('', $this->parts); + } + +} diff --git a/src/progress/PhutilConsoleProgressSink.php b/src/progress/PhutilConsoleProgressSink.php new file mode 100644 index 00000000..11a61895 --- /dev/null +++ b/src/progress/PhutilConsoleProgressSink.php @@ -0,0 +1,115 @@ +shouldPublishToConsole()) { + return; + } + + $completed = $this->getCompletedWork(); + $total = $this->getTotalWork(); + + if ($total !== null) { + $percent = ($completed / $total); + $percent = min(1, $percent); + $percent = max(0, $percent); + } else { + $percent = null; + } + + // TODO: In TTY mode, draw a nice ASCII progress bar. + + if ($percent !== null) { + $marker = sprintf('% 3.1f%%', 100 * $percent); + } else { + $marker = sprintf('% 16d', $completed); + } + + $message = pht('[%s] Working...', $marker); + + if ($this->isTTY()) { + $this->overwriteLine($message); + } else { + $this->printLine($message."\n"); + } + + $this->didPublishToConsole(); + } + + protected function publishCompletion() { + $this->printLine("\n"); + } + + protected function publishFailure() { + $this->printLine("\n"); + } + + private function shouldPublishToConsole() { + if (!$this->lastUpdate) { + return true; + } + + // Limit the number of times per second we actually write to the console. + if ($this->isTTY()) { + $writes_per_second = 5; + } else { + $writes_per_second = 0.5; + } + + $now = microtime(true); + if (($now - $this->lastUpdate) < (1.0 / $writes_per_second)) { + return false; + } + + return true; + } + + private function didPublishToConsole() { + $this->lastUpdate = microtime(true); + } + + private function isTTY() { + if ($this->isTTY === null) { + $this->isTTY = (function_exists('posix_isatty') && posix_isatty(STDERR)); + } + return $this->isTTY; + } + + private function getWidth() { + if ($this->width === null) { + $width = phutil_console_get_terminal_width(); + $width = min(nonempty($width, 78), 78); + $this->width = $width; + } + + return $this->width; + } + + private function overwriteLine($line) { + $head = "\r"; + $tail = ''; + + if ($this->lineWidth) { + $line_len = strlen($line); + + if ($line_len < $this->lineWidth) { + $tail = str_repeat(' ', $this->lineWidth - $line_len); + } + + $this->lineWidth = strlen($line); + } + + $this->printLine($head.$line.$tail); + } + + private function printLine($line) { + fprintf(STDERR, '%s', $line); + } +} diff --git a/src/progress/PhutilProgressSink.php b/src/progress/PhutilProgressSink.php new file mode 100644 index 00000000..8b2a5065 --- /dev/null +++ b/src/progress/PhutilProgressSink.php @@ -0,0 +1,54 @@ +isRunning = true; + } + + public function __destruct() { + if ($this->isRunning) { + $this->didFailWork(); + } + } + + final public function setTotalWork($total_work) { + $this->totalWork = $total_work; + return $this; + } + + final public function getTotalWork() { + return $this->totalWork; + } + + final public function getCompletedWork() { + return $this->completedWork; + } + + final public function didMakeProgress($amount = 1) { + if ($this->isRunning) { + $this->completedWork += $amount; + $this->publishProgress(); + } + } + + final public function didCompleteWork() { + $this->isRunning = false; + $this->publishCompletion(); + } + + final public function didFailWork() { + $this->isRunning = false; + $this->publishFailure(); + } + + abstract protected function publishProgress(); + abstract protected function publishCompletion(); + abstract protected function publishFailure(); + +} diff --git a/src/readableserializer/PhutilReadableSerializer.php b/src/readableserializer/PhutilReadableSerializer.php new file mode 100644 index 00000000..7ef9d844 --- /dev/null +++ b/src/readableserializer/PhutilReadableSerializer.php @@ -0,0 +1,189 @@ + 1) { + $str .= 'of size '.count($value).' starting with: '; + } + reset($value); // Prevent key() from giving warning message in HPHP. + $str .= '{ '.self::printShort(key($value)).' => '. + self::printShort(head($value)).' }'; + } + return $str; + } else { + // NOTE: Avoid PhutilUTF8StringTruncator here since the data may not be + // UTF8 anyway, it's slow for large inputs, and it might not be loaded + // yet. + $limit = 1024; + $str = self::printableValue($value); + if (strlen($str) > $limit) { + if (is_string($value)) { + $str = "'".substr($str, 1, $limit)."...'"; + } else { + $str = substr($str, 0, $limit).'...'; + } + } + + return $str; + } + } + + + /** + * Dump some debug output about an object's members without the + * potential recursive explosion of verbosity that comes with `print_r()`. + * + * To print any number of member variables, pass null for `$max_members`. + * + * @param wild Any value. + * @param int Maximum depth to print for nested arrays and objects. + * @param int Maximum number of values to print at each level. + * @return string Human-readable shallow representation of the value. + * @task print + */ + public static function printShallow( + $value, + $max_depth = 2, + $max_members = 25) { + + return self::printShallowRecursive($value, $max_depth, $max_members, 0, ''); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Implementation for @{method:printShallow}. + * + * @param wild Any value. + * @param int Maximum depth to print for nested arrays and objects. + * @param int Maximum number of values to print at each level. + * @param int Current depth. + * @param string Indentation string. + * @return string Human-readable shallow representation of the value. + * @task internal + */ + private static function printShallowRecursive( + $value, + $max_depth, + $max_members, + $depth, + $indent) { + + if (!is_object($value) && !is_array($value)) { + return self::addIndentation(self::printableValue($value), $indent, 1); + } + + $ret = ''; + if (is_object($value)) { + $ret = get_class($value)."\nwith members "; + $value = array_filter(@(array)$value); + + // Remove null characters that magically appear around keys for + // member variables of parent classes. + $transformed = array(); + foreach ($value as $key => $x) { + $transformed[str_replace("\0", ' ', $key)] = $x; + } + $value = $transformed; + } + + if ($max_members !== null) { + $value = array_slice($value, 0, $max_members, $preserve_keys = true); + } + + $shallow = array(); + if ($depth < $max_depth) { + foreach ($value as $k => $v) { + $shallow[$k] = self::printShallowRecursive( + $v, + $max_depth, + $max_members, + $depth + 1, + ' '); + } + } else { + foreach ($value as $k => $v) { + // Extra indentation is for empty arrays, because they wrap on multiple + // lines and lookup stupid without the extra indentation + $shallow[$k] = self::addIndentation(self::printShort($v), $indent, 1); + } + } + + return self::addIndentation($ret.print_r($shallow, true), $indent, 1); + } + + + /** + * Adds indentation to the beginning of every line starting from + * `$first_line`. + * + * @param string Printed value. + * @param string String to indent with. + * @param int Index of first line to indent. + * @return string + * @task internal + */ + private static function addIndentation($value, $indent, $first_line) { + $lines = explode("\n", $value); + $out = array(); + foreach ($lines as $index => $line) { + $out[] = $index >= $first_line ? $indent.$line : $line; + } + + return implode("\n", $out); + } + +} diff --git a/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php b/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php new file mode 100644 index 00000000..b38368a4 --- /dev/null +++ b/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + $expect, + PhutilReadableSerializer::printableValue($value)); + } + } + +} diff --git a/src/serviceprofiler/PhutilServiceProfiler.php b/src/serviceprofiler/PhutilServiceProfiler.php new file mode 100644 index 00000000..7ab8a12e --- /dev/null +++ b/src/serviceprofiler/PhutilServiceProfiler.php @@ -0,0 +1,222 @@ +discardMode = true; + } + + public function setCollectStackTraces($collect_stack_traces) { + $this->collectStackTraces = $collect_stack_traces; + return $this; + } + + public function getCollectStackTraces() { + return $this->collectStackTraces; + } + + public static function getInstance() { + if (empty(self::$instance)) { + self::$instance = new PhutilServiceProfiler(); + } + return self::$instance; + } + + public function beginServiceCall(array $data) { + $data['begin'] = microtime(true); + + if ($this->collectStackTraces) { + $trace = debug_backtrace(); + $trace = PhutilErrorHandler::formatStacktrace($trace); + $data['trace'] = $trace; + } + + $id = $this->logSize++; + $this->events[$id] = $data; + foreach ($this->listeners as $listener) { + call_user_func($listener, 'begin', $id, $data); + } + return $id; + } + + public function endServiceCall($call_id, array $data) { + $data = ($this->events[$call_id] + $data); + $data['end'] = microtime(true); + $data['duration'] = ($data['end'] - $data['begin']); + $this->events[$call_id] = $data; + foreach ($this->listeners as $listener) { + call_user_func($listener, 'end', $call_id, $data); + } + if ($this->discardMode) { + unset($this->events[$call_id]); + } + } + + public function getServiceCallLog() { + return $this->events; + } + + public function addListener($callback) { + $this->listeners[] = $callback; + } + + public static function installEchoListener() { + $instance = self::getInstance(); + $instance->addListener(array(__CLASS__, 'echoListener')); + } + + public static function echoListener($type, $id, $data) { + $is_begin = false; + $is_end = false; + + switch ($type) { + case 'begin': + $is_begin = true; + $mark = '>>>'; + break; + case 'end': + $is_end = true; + $mark = '<<<'; + break; + default: + $mark = null; + break; + } + + $type = idx($data, 'type', 'mystery'); + + $desc = null; + if ($is_begin) { + switch ($type) { + case 'connect': + $desc = $data['database']; + break; + case 'query': + $desc = substr($data['query'], 0, 512); + break; + case 'multi-query': + $desc = array(); + foreach ($data['queries'] as $query) { + $desc[] = substr($query, 0, 256); + } + $desc = implode('; ', $desc); + break; + case 'exec': + $desc = '$ '.$data['command']; + break; + case 'conduit': + if (isset($data['size'])) { + $desc = $data['method'].'() '; + $desc .= pht('', new PhutilNumber($data['size'])); + } else { + $desc = $data['method'].'()'; + } + break; + case 'http': + if (isset($data['proxy'])) { + $proxy = phutil_censor_credentials($data['proxy']); + } else { + $proxy = null; + } + + $uri = phutil_censor_credentials($data['uri']); + + if (strlen($proxy)) { + $desc = "{$proxy} >> {$uri}"; + } else { + $desc = $uri; + } + + break; + case 'lint': + $desc = $data['linter']; + if (isset($data['paths'])) { + $desc .= ' '.pht('', phutil_count($data['paths'])); + } + break; + case 'lock': + $desc = $data['name']; + break; + case 'event': + $desc = $data['kind'].' '; + $desc .= pht('', new PhutilNumber($data['count'])); + break; + case 'ldap': + $call = idx($data, 'call', '?'); + $params = array(); + switch ($call) { + case 'connect': + $params[] = $data['host'].':'.$data['port']; + break; + case 'start-tls': + break; + case 'bind': + $params[] = $data['user']; + break; + case 'search': + $params[] = $data['dn']; + $params[] = $data['query']; + break; + default: + $params[] = '?'; + break; + } + $desc = "{$call} (".implode(', ', $params).")"; + break; + } + } else if ($is_end) { + $desc = pht( + '%s us', + new PhutilNumber((int)(1000000 * $data['duration']))); + } + + $instance = self::getInstance(); + if (!$instance->zeroTime) { + $instance->zeroTime = microtime(true); + } + $elapsed = microtime(true) - $instance->zeroTime; + + $console = PhutilConsole::getConsole(); + $console->writeLog( + "%s [%s] (+%s) <%s> %s\n", + $mark, + $id, + pht('%s', new PhutilNumber((int)(1000 * $elapsed))), + $type, + self::escapeProfilerStringForDisplay($desc)); + } + + private static function escapeProfilerStringForDisplay($string) { + // Convert tabs and newlines to spaces and collapse blocks of whitespace, + // most often formatting in queries. + $string = preg_replace('/\s{2,}/', ' ', $string); + + // Replace sequences of binary characters with printable text. We allow + // some printable characters to appear in between unprintable characters + // to try to collapse the entire run. + $string = preg_replace( + '/[\x00-\x1F\x7F-\xFF](.{0,12}[\x00-\x1F\x7F-\xFF])*/', + '<...binary data...>', + $string); + + return $string; + } + + +} diff --git a/src/symbols/PhutilClassMapQuery.php b/src/symbols/PhutilClassMapQuery.php new file mode 100644 index 00000000..738b14c5 --- /dev/null +++ b/src/symbols/PhutilClassMapQuery.php @@ -0,0 +1,332 @@ +ancestorClass = $class; + return $this; + } + + + /** + * Provide a method to select a unique key for each instance. + * + * If you provide a method here, the map will be keyed with these values, + * instead of with class names. Exceptions will be raised if entries are + * not unique. + * + * You must provide a method here to use @{method:setExpandMethod}. + * + * @param string Name of the unique key method. + * @param bool If true, then classes which return `null` will be filtered + * from the results. + * @return this + * @task config + */ + public function setUniqueMethod($unique_method, $filter_null = false) { + $this->uniqueMethod = $unique_method; + $this->filterNull = $filter_null; + return $this; + } + + + /** + * Provide a method to expand each concrete subclass into available instances. + * + * With some class maps, each class is allowed to provide multiple entries + * in the map by returning alternatives from some method with a default + * implementation like this: + * + * public function generateVariants() { + * return array($this); + * } + * + * For example, a "color" class may really generate and configure several + * instances in the final class map: + * + * public function generateVariants() { + * return array( + * self::newColor('red'), + * self::newColor('green'), + * self::newColor('blue'), + * ); + * } + * + * This allows multiple entires in the final map to share an entire + * implementation, rather than requiring that they each have their own unique + * subclass. + * + * This pattern is most useful if several variants are nearly identical (so + * the stub subclasses would be essentially empty) or the available variants + * are driven by configuration. + * + * If a class map uses this pattern, it must also provide a unique key for + * each instance with @{method:setUniqueMethod}. + * + * @param string Name of the expansion method. + * @return this + * @task config + */ + public function setExpandMethod($expand_method) { + $this->expandMethod = $expand_method; + return $this; + } + + + /** + * Provide a method to sort the final map. + * + * The map will be sorted using @{function:msort} and passing this method + * name. + * + * @param string Name of the sorting method. + * @return this + * @task config + */ + public function setSortMethod($sort_method) { + $this->sortMethod = $sort_method; + return $this; + } + + + /** + * Provide a method to filter the map. + * + * @param string Name of the filtering method. + * @return this + * @task config + */ + public function setFilterMethod($filter_method) { + $this->filterMethod = $filter_method; + return $this; + } + + +/* -( Executing the Query )------------------------------------------------ */ + + + /** + * Execute the query as configured. + * + * @return map Realized class map. + * @task exec + */ + public function execute() { + $cache_key = $this->getCacheKey(); + + if (!isset(self::$cache[$cache_key])) { + self::$cache[$cache_key] = $this->loadMap(); + } + + return self::$cache[$cache_key]; + } + + + /** + * Delete all class map caches. + * + * @return void + * @task exec + */ + public static function deleteCaches() { + self::$cache = array(); + } + + + /** + * Generate the core query results. + * + * This method is used to fill the cache. + * + * @return map Realized class map. + * @task exec + */ + private function loadMap() { + $ancestor = $this->ancestorClass; + if (!strlen($ancestor)) { + throw new PhutilInvalidStateException('setAncestorClass'); + } + + if (!class_exists($ancestor) && !interface_exists($ancestor)) { + throw new Exception( + pht( + 'Trying to execute a class map query for descendants of class '. + '"%s", but no such class or interface exists.', + $ancestor)); + } + + $expand = $this->expandMethod; + $filter = $this->filterMethod; + $unique = $this->uniqueMethod; + $sort = $this->sortMethod; + + if (strlen($expand)) { + if (!strlen($unique)) { + throw new Exception( + pht( + 'Trying to execute a class map query for descendants of class '. + '"%s", but the query specifies an "expand method" ("%s") without '. + 'specifying a "unique method". Class maps which support expansion '. + 'must have unique keys.', + $ancestor, + $expand)); + } + } + + $objects = id(new PhutilSymbolLoader()) + ->setAncestorClass($ancestor) + ->loadObjects(); + + // Apply the "expand" mechanism, if it is configured. + if (strlen($expand)) { + $list = array(); + foreach ($objects as $object) { + foreach (call_user_func(array($object, $expand)) as $instance) { + $list[] = $instance; + } + } + } else { + $list = $objects; + } + + // Apply the "unique" mechanism, if it is configured. + if (strlen($unique)) { + $map = array(); + foreach ($list as $object) { + $key = call_user_func(array($object, $unique)); + + if ($key === null && $this->filterNull) { + continue; + } + + if (empty($map[$key])) { + $map[$key] = $object; + continue; + } + + throw new Exception( + pht( + 'Two objects (of classes "%s" and "%s", descendants of ancestor '. + 'class "%s") returned the same key from "%s" ("%s"), but each '. + 'object in this class map must be identified by a unique key.', + get_class($object), + get_class($map[$key]), + $ancestor, + $unique.'()', + $key)); + } + } else { + $map = $list; + } + + // Apply the "filter" mechanism, if it is configured. + if (strlen($filter)) { + $map = mfilter($map, $filter); + } + + // Apply the "sort" mechanism, if it is configured. + if (strlen($sort)) { + if ($map) { + // The "sort" method may return scalars (which we want to sort with + // "msort()"), or may return PhutilSortVector objects (which we want + // to sort with "msortv()"). + $item = call_user_func(array(head($map), $sort)); + + // Since we may be early in the stack, use a string to avoid triggering + // autoload in old versions of PHP. + $vector_class = 'PhutilSortVector'; + if ($item instanceof $vector_class) { + $map = msortv($map, $sort); + } else { + $map = msort($map, $sort); + } + } + } + + return $map; + } + + +/* -( Managing the Map Cache )--------------------------------------------- */ + + + /** + * Return a cache key for this query. + * + * @return string Cache key. + * @task cache + */ + public function getCacheKey() { + $parts = array( + $this->ancestorClass, + $this->uniqueMethod, + $this->filterNull, + $this->expandMethod, + $this->filterMethod, + $this->sortMethod, + ); + return implode(':', $parts); + } + +} diff --git a/src/symbols/PhutilSymbolLoader.php b/src/symbols/PhutilSymbolLoader.php new file mode 100644 index 00000000..cdf23369 --- /dev/null +++ b/src/symbols/PhutilSymbolLoader.php @@ -0,0 +1,413 @@ +setType('class') + * ->setLibrary('example') + * ->selectAndLoadSymbols(); + * ``` + * + * When you execute the loading query, it returns a dictionary of matching + * symbols: + * + * ```lang=php + * array( + * 'class$Example' => array( + * 'type' => 'class', + * 'name' => 'Example', + * 'library' => 'libexample', + * 'where' => 'examples/example.php', + * ), + * // ... more ... + * ); + * ``` + * + * The **library** and **where** keys show where the symbol is defined. The + * **type** and **name** keys identify the symbol itself. + * + * NOTE: This class must not use libphutil functions, including @{function:id} + * and @{function:idx}. + * + * @task config Configuring the Query + * @task load Loading Symbols + * @task internal Internals + */ +final class PhutilSymbolLoader { + + private $type; + private $library; + private $base; + private $name; + private $concrete; + private $pathPrefix; + + private $suppressLoad; + + + /** + * Select the type of symbol to load, either `class`, `function` or + * `interface`. + * + * @param string Type of symbol to load. + * @return this + * + * @task config + */ + public function setType($type) { + $this->type = $type; + return $this; + } + + + /** + * Restrict the symbol query to a specific library; only symbols from this + * library will be loaded. + * + * @param string Library name. + * @return this + * + * @task config + */ + public function setLibrary($library) { + // Validate the library name; this throws if the library in not loaded. + $bootloader = PhutilBootloader::getInstance(); + $bootloader->getLibraryRoot($library); + + $this->library = $library; + return $this; + } + + + /** + * Restrict the symbol query to a specific path prefix; only symbols defined + * in files below that path will be selected. + * + * @param string Path relative to library root, like "apps/cheese/". + * @return this + * + * @task config + */ + public function setPathPrefix($path) { + $this->pathPrefix = str_replace(DIRECTORY_SEPARATOR, '/', $path); + return $this; + } + + + /** + * Restrict the symbol query to a single symbol name, e.g. a specific class + * or function name. + * + * @param string Symbol name. + * @return this + * + * @task config + */ + public function setName($name) { + $this->name = $name; + return $this; + } + + + /** + * Restrict the symbol query to only descendants of some class. This will + * strictly select descendants, the base class will not be selected. This + * implies loading only classes. + * + * @param string Base class name. + * @return this + * + * @task config + */ + public function setAncestorClass($base) { + $this->base = $base; + return $this; + } + + + /** + * Restrict the symbol query to only concrete symbols; this will filter out + * abstract classes. + * + * NOTE: This currently causes class symbols to load, even if you run + * @{method:selectSymbolsWithoutLoading}. + * + * @param bool True if the query should load only concrete symbols. + * @return this + * + * @task config + */ + public function setConcreteOnly($concrete) { + $this->concrete = $concrete; + return $this; + } + + +/* -( Load )--------------------------------------------------------------- */ + + + /** + * Execute the query and select matching symbols, then load them so they can + * be used. + * + * @return dict A dictionary of matching symbols. See top-level class + * documentation for details. These symbols will be loaded + * and available. + * + * @task load + */ + public function selectAndLoadSymbols() { + $map = array(); + + $bootloader = PhutilBootloader::getInstance(); + + if ($this->library) { + $libraries = array($this->library); + } else { + $libraries = $bootloader->getAllLibraries(); + } + + if ($this->type) { + $types = array($this->type); + } else { + $types = array( + 'class', + 'function', + ); + } + + $names = null; + if ($this->base) { + $names = $this->selectDescendantsOf( + $bootloader->getClassTree(), + $this->base); + } + + $symbols = array(); + foreach ($libraries as $library) { + $map = $bootloader->getLibraryMap($library); + foreach ($types as $type) { + if ($type == 'interface') { + $lookup_map = $map['class']; + } else { + $lookup_map = $map[$type]; + } + + // As an optimization, we filter the list of candidate symbols in + // several passes, applying a name-based filter first if possible since + // it is highly selective and guaranteed to match at most one symbol. + // This is the common case and we land here through `__autoload()` so + // it's worthwhile to micro-optimize a bit because this code path is + // very hot and we save 5-10ms per page for a very moderate increase in + // complexity. + + if ($this->name) { + // If we have a name filter, just pick the matching name out if it + // exists. + if (isset($lookup_map[$this->name])) { + $filtered_map = array( + $this->name => $lookup_map[$this->name], + ); + } else { + $filtered_map = array(); + } + } else if ($names !== null) { + $filtered_map = array(); + foreach ($names as $name => $ignored) { + if (isset($lookup_map[$name])) { + $filtered_map[$name] = $lookup_map[$name]; + } + } + } else { + // Otherwise, start with everything. + $filtered_map = $lookup_map; + } + + if ($this->pathPrefix) { + $len = strlen($this->pathPrefix); + foreach ($filtered_map as $name => $where) { + if (strncmp($where, $this->pathPrefix, $len) !== 0) { + unset($filtered_map[$name]); + } + } + } + + foreach ($filtered_map as $name => $where) { + $symbols[$type.'$'.$name] = array( + 'type' => $type, + 'name' => $name, + 'library' => $library, + 'where' => $where, + ); + } + } + } + + if (!$this->suppressLoad) { + $caught = null; + foreach ($symbols as $symbol) { + try { + $this->loadSymbol($symbol); + } catch (Exception $ex) { + $caught = $ex; + } + } + if ($caught) { + // NOTE: We try to load everything even if we fail to load something, + // primarily to make it possible to remove functions from a libphutil + // library without breaking library startup. + throw $caught; + } + } + + + if ($this->concrete) { + // Remove 'abstract' classes. + foreach ($symbols as $key => $symbol) { + if ($symbol['type'] == 'class') { + $reflection = new ReflectionClass($symbol['name']); + if ($reflection->isAbstract()) { + unset($symbols[$key]); + } + } + } + } + + return $symbols; + } + + + /** + * Execute the query and select matching symbols, but do not load them. This + * will perform slightly better if you are only interested in the existence + * of the symbols and don't plan to use them; otherwise, use + * @{method:selectAndLoadSymbols}. + * + * @return dict A dictionary of matching symbols. See top-level class + * documentation for details. + * + * @task load + */ + public function selectSymbolsWithoutLoading() { + $this->suppressLoad = true; + $result = $this->selectAndLoadSymbols(); + $this->suppressLoad = false; + return $result; + } + + + /** + * Select symbols matching the query and then instantiate them, returning + * concrete objects. This is a convenience method which simplifies symbol + * handling if you are only interested in building objects. + * + * If you want to do more than build objects, or want to build objects with + * varying constructor arguments, use @{method:selectAndLoadSymbols} for + * fine-grained control over results. + * + * This method implicitly restricts the query to match only concrete + * classes. + * + * @param list List of constructor arguments. + * @return map Map of class names to constructed objects. + */ + public function loadObjects(array $argv = array()) { + $symbols = $this + ->setConcreteOnly(true) + ->setType('class') + ->selectAndLoadSymbols(); + + $objects = array(); + foreach ($symbols as $symbol) { + $objects[$symbol['name']] = newv($symbol['name'], $argv); + } + + return $objects; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + private function selectDescendantsOf(array $tree, $root) { + $result = array(); + + if (empty($tree[$root])) { + // No known descendants. + return array(); + } + + foreach ($tree[$root] as $child) { + $result[$child] = true; + if (!empty($tree[$child])) { + $result += $this->selectDescendantsOf($tree, $child); + } + } + return $result; + } + + + /** + * @task internal + */ + private function loadSymbol(array $symbol_spec) { + // Check if we've already loaded the symbol; bail if we have. + $name = $symbol_spec['name']; + $is_function = ($symbol_spec['type'] == 'function'); + + if ($is_function) { + if (function_exists($name)) { + return; + } + } else { + if (class_exists($name, false) || interface_exists($name, false)) { + return; + } + } + + $lib_name = $symbol_spec['library']; + $where = $symbol_spec['where']; + $bootloader = PhutilBootloader::getInstance(); + + $bootloader->loadLibrarySource($lib_name, $where); + + // Check that we successfully loaded the symbol from wherever it was + // supposed to be defined. + + $load_failed = null; + if ($is_function) { + if (!function_exists($name)) { + $load_failed = 'function'; + } + } else { + if (!class_exists($name, false) && !interface_exists($name, false)) { + $load_failed = 'class/interface'; + } + } + + if ($load_failed !== null) { + $lib_path = phutil_get_library_root($lib_name); + throw new PhutilMissingSymbolException( + $name, + $load_failed, + pht( + 'The symbol map for library "%s" (at "%s") claims this symbol '. + '(of type "%s") is defined in "%s", but loading that source file '. + 'did not cause the symbol to become defined.', + $lib_name, + $lib_path, + $load_failed, + $where)); + } + } + +} diff --git a/src/utils/AbstractDirectedGraph.php b/src/utils/AbstractDirectedGraph.php new file mode 100644 index 00000000..509f0f5f --- /dev/null +++ b/src/utils/AbstractDirectedGraph.php @@ -0,0 +1,337 @@ +addNodes( + * array( + * $object->getPHID() => $object->getChildPHIDs(), + * )); + * $detector->loadGraph(); + * + * Now you can query the graph, e.g. by detecting cycles: + * + * $cycle = $detector->detectCycles($object->getPHID()); + * + * If ##$cycle## is empty, no graph cycle is reachable from the node. If it + * is nonempty, it contains a list of nodes which form a graph cycle. + * + * NOTE: Nodes must be represented with scalars. + * + * @task build Graph Construction + * @task cycle Cycle Detection + * @task explore Graph Exploration + */ +abstract class AbstractDirectedGraph extends Phobject { + + + private $knownNodes = array(); + private $graphLoaded = false; + + +/* -( Graph Construction )------------------------------------------------- */ + + + /** + * Load the edges for a list of nodes. You must override this method. You + * will be passed a list of nodes, and should return a dictionary mapping + * each node to the list of nodes that can be reached by following its the + * edges which originate at it: for example, the child nodes of an object + * which has a parent-child relationship to other objects. + * + * The intent of this method is to allow you to issue a single query per + * graph level for graphs which are stored as edge tables in the database. + * Generally, you will load all the objects which correspond to the list of + * nodes, and then return a map from each of their IDs to all their children. + * + * NOTE: You must return an entry for every node you are passed, even if it + * is invalid or can not be loaded. Either return an empty array (if this is + * acceptable for your application) or throw an exception if you can't satisfy + * this requirement. + * + * @param list A list of nodes. + * @return dict A map of nodes to the nodes reachable along their edges. + * There must be an entry for each node you were provided. + * @task build + */ + abstract protected function loadEdges(array $nodes); + + + /** + * Seed the graph with known nodes. Often, you will provide the candidate + * edges that a user is trying to create here, or the initial set of edges + * you know about. + * + * @param dict A map of nodes to the nodes reachable along their edges. + * @return this + * @task build + */ + final public function addNodes(array $nodes) { + if ($this->graphLoaded) { + throw new Exception( + pht( + 'Call %s before calling %s. You can not add more nodes '. + 'once you have loaded the graph.', + __FUNCTION__.'()', + 'loadGraph()')); + } + + $this->knownNodes += $nodes; + return $this; + } + + final public function getNodes() { + return $this->knownNodes; + } + + /** + * Get the nodes in topological order. + * + * This method requires the graph be acyclic. For graphs which may contain + * cycles, see @{method:getNodesInRoughTopologicalOrder}. + */ + final public function getNodesInTopologicalOrder() { + $sorted = array(); + $nodes = $this->getNodes(); + + $inverse_map = array(); + foreach ($nodes as $node => $edges) { + if (!isset($inverse_map[$node])) { + $inverse_map[$node] = array(); + } + foreach ($edges as $edge) { + if (!isset($inverse_map[$edge])) { + $inverse_map[$edge] = array(); + } + $inverse_map[$edge][$node] = $node; + } + } + + $end_nodes = array(); + foreach ($inverse_map as $node => $edges) { + if (empty($edges)) { + $end_nodes[] = $node; + } + } + + while (!empty($end_nodes)) { + $current_node = array_pop($end_nodes); + $sorted[] = $current_node; + $current_edges = $nodes[$current_node]; + foreach ($current_edges as $index => $current_edge) { + // delete the edge from the normal map + unset($nodes[$current_node][$index]); + // and from the inverse map which is modestly trickier + $inverse_nodes = $inverse_map[$current_edge]; + unset($inverse_nodes[$current_node]); + $inverse_map[$current_edge] = $inverse_nodes; + // no more edges means this is an "end node" now + if (empty($inverse_map[$current_edge])) { + $end_nodes[] = $current_edge; + } + } + } + + return $sorted; + } + + /** + * Get the nodes in topological order, or some roughly similar order if + * the graph contains cycles. + * + * This method will return an ordering for cyclic graphs. The method will + * attempt to make it look like a topological ordering, but since cyclic + * graphs have no complete toplogical ordering, you might get anything. + * + * If you know the graph is acyclic and want an actual topological order, + * use @{method:getNodesInTopologicalOrder}. + */ + final public function getNodesInRoughTopologicalOrder() { + $nodes = $this->getNodes(); + $edges = $this->loadEdges($nodes); + + $results = array(); + $completed = array(); + + $depth = 0; + while (true) { + $next = array(); + + foreach ($nodes as $node) { + if (isset($completed[$node])) { + continue; + } + + $capable = true; + foreach ($edges[$node] as $edge) { + if (!isset($completed[$edge])) { + $capable = false; + break; + } + } + + if ($capable) { + $next[] = $node; + } + } + + if (count($next) === 0) { + // No more nodes to traverse; we are deadlocked if the number + // of completed nodes is less than the total number of nodes. + break; + } + + foreach ($next as $node) { + $results[] = array( + 'node' => $node, + 'depth' => $depth, + 'cycle' => false, + ); + + $completed[$node] = true; + } + + $depth++; + } + + foreach ($nodes as $node) { + if (!isset($completed[$node])) { + $results[] = array( + 'node' => $node, + 'depth' => $depth, + 'cycle' => true, + ); + } + } + + return $results; + } + + /** + * Load the graph, building it out so operations can be performed on it. This + * constructs the graph level-by-level, calling @{method:loadEdges} to + * expand the graph at each stage until it is complete. + * + * @return this + * @task build + */ + final public function loadGraph() { + + $new_nodes = $this->knownNodes; + while (true) { + $load = array(); + foreach ($new_nodes as $node => $edges) { + foreach ($edges as $edge) { + if (!isset($this->knownNodes[$edge])) { + $load[$edge] = true; + } + } + } + + if (empty($load)) { + break; + } + + $load = array_keys($load); + + $new_nodes = $this->loadEdges($load); + foreach ($load as $node) { + if (!isset($new_nodes[$node]) || !is_array($new_nodes[$node])) { + throw new Exception( + pht( + '%s must return an edge list array for each provided '. + 'node, or the cycle detection algorithm may not terminate.', + 'loadEdges()')); + } + } + + $this->addNodes($new_nodes); + } + + $this->graphLoaded = true; + return $this; + } + + +/* -( Cycle Detection )---------------------------------------------------- */ + + + /** + * Detect if there are any cycles reachable from a given node. + * + * If cycles are reachable, it returns a list of nodes which create a cycle. + * Note that this list may include nodes which aren't actually part of the + * cycle, but lie on the graph between the specified node and the cycle. + * For example, it might return something like this (when passed "A"): + * + * A, B, C, D, E, C + * + * This means you can walk from A to B to C to D to E and then back to C, + * which forms a cycle. A and B are included even though they are not part + * of the cycle. When presenting information about graph cycles to users, + * including these nodes is generally useful. This also shouldn't ever happen + * if you've vetted prior edges before writing them, because it means there + * is a preexisting cycle in the graph. + * + * NOTE: This only detects cycles reachable from a node. It does not detect + * cycles in the entire graph. + * + * @param scalar The node to walk from, looking for graph cycles. + * @return list|null Returns null if no cycles are reachable from the node, + * or a list of nodes that form a cycle. + * @task cycle + */ + final public function detectCycles($node) { + if (!$this->graphLoaded) { + throw new Exception( + pht( + 'Call %s to build the graph out before calling %s.', + 'loadGraph()', + __FUNCTION__.'()')); + } + if (!isset($this->knownNodes[$node])) { + throw new Exception( + pht( + "The node '%s' is not known. Call %s to seed the graph with nodes.", + $node, + 'addNodes()')); + } + + $visited = array(); + return $this->performCycleDetection($node, $visited); + } + + + /** + * Internal cycle detection implementation. Recursively walks the graph, + * keeping track of where it's been, and returns the first cycle it finds. + * + * @param scalar The node to walk from. + * @param list Previously visited nodes. + * @return null|list Null if no cycles are found, or a list of nodes + * which cycle. + * @task cycle + */ + final private function performCycleDetection($node, array $visited) { + $visited[$node] = true; + foreach ($this->knownNodes[$node] as $edge) { + if (isset($visited[$edge])) { + $result = array_keys($visited); + $result[] = $edge; + return $result; + } + $result = $this->performCycleDetection($edge, $visited); + if ($result) { + return $result; + } + } + return null; + } + +} diff --git a/src/utils/CaseInsensitiveArray.php b/src/utils/CaseInsensitiveArray.php new file mode 100644 index 00000000..5f8cae53 --- /dev/null +++ b/src/utils/CaseInsensitiveArray.php @@ -0,0 +1,121 @@ +toArray()); // array('key' => 'foobar') + * ``` + * + * Note that it is not possible to reuse case variants of a key. That is, if + * the array contains key `xyz` then it is not possible to use any of the + * following case variants as an array key: `xyZ`, `xYz`, `xYZ`, `Xyz`, `XyZ`, + * `XYz`, `XYZ`. In order to use a case variant as a key, it is necessary to + * first unset the original case variant. + * + * ```lang=php + * $array = new CaseInsensitiveArray(array('key' => 'foo', 'KEY' => 'bar')); + * var_dump($array->toArray()); // array('key' => 'bar') + * + * $array['KEY'] = 'baz'; + * var_dump($array->toArray()); // array('key' => 'baz') + * + * unset($array['key']); + * $array['KEY'] = 'baz'; + * var_dump($array->toArray()); // array('KEY' => 'baz') + * ``` + */ +final class CaseInsensitiveArray extends PhutilArray { + + /** + * Mapping between original and case-invariant keys. + * + * All keys in the parent `PhutilArray` are indexed using the case-invariant + * key rather than the original key. + * + * @var map + */ + private $keys = array(); + + /** + * Construct a new array object. + * + * @param array The input array. + */ + public function __construct(array $data = array()) { + foreach ($data as $key => $value) { + $this->offsetSet($key, $value); + } + } + + public function getKeys() { + return array_values($this->keys); + } + + public function offsetExists($key) { + $key = $this->transformKey($key); + return array_key_exists($key, $this->keys); + } + + public function offsetGet($key) { + $key = $this->transformKey($key); + return parent::offsetGet($this->keys[$key]); + } + + public function offsetSet($key, $value) { + $transformed_key = $this->transformKey($key); + + if (isset($this->keys[$transformed_key])) { + // If the key already exists, reuse it and override the + // existing value. + $key = $this->keys[$transformed_key]; + } else { + // If the key doesn't yet, create a new array element. + $this->keys[$transformed_key] = $key; + } + + parent::offsetSet($key, $value); + } + + public function offsetUnset($key) { + $key = $this->transformKey($key); + + parent::offsetUnset($this->keys[$key]); + unset($this->keys[$key]); + } + + /** + * Transform an array key. + * + * This method transforms an array key to be case-invariant. We //could// + * just call [[http://php.net/manual/en/function.strtolower.php | + * `strtolower`]] directly, but this method allows us to contain the key + * transformation logic within a single method, should it ever change. + * + * Theoretically, we should be able to use any of the following functions + * for the purpose of key transformations: + * + * - [[http://php.net/manual/en/function.strtolower.php | `strtolower`]] + * - [[http://php.net/manual/en/function.strtoupper.php | `strtoupper`]] + * - Some creative use of other + * [[http://php.net/manual/en/book.strings.php | string transformation]] + * functions. + * + * @param string The input key. + * @return string The transformed key. + */ + private function transformKey($key) { + return phutil_utf8_strtolower($key); + } + +} diff --git a/src/utils/PhutilArray.php b/src/utils/PhutilArray.php new file mode 100644 index 00000000..8656bab3 --- /dev/null +++ b/src/utils/PhutilArray.php @@ -0,0 +1,80 @@ +data = $initial_value; + } + + +/* -( Conversion )--------------------------------------------------------- */ + + + public function toArray() { + return iterator_to_array($this, true); + } + + +/* -( Countable Interface )------------------------------------------------ */ + + + public function count() { + return count($this->data); + } + + +/* -( Iterator Interface )------------------------------------------------- */ + + + public function current() { + return current($this->data); + } + + public function key() { + return key($this->data); + } + + public function next() { + return next($this->data); + } + + public function rewind() { + reset($this->data); + } + + public function valid() { + return (key($this->data) !== null); + } + + +/* -( ArrayAccess Interface )---------------------------------------------- */ + + + public function offsetExists($key) { + return array_key_exists($key, $this->data); + } + + public function offsetGet($key) { + return $this->data[$key]; + } + + public function offsetSet($key, $value) { + $this->data[$key] = $value; + } + + public function offsetUnset($key) { + unset($this->data[$key]); + } + +} diff --git a/src/utils/PhutilArrayWithDefaultValue.php b/src/utils/PhutilArrayWithDefaultValue.php new file mode 100644 index 00000000..3ae4928a --- /dev/null +++ b/src/utils/PhutilArrayWithDefaultValue.php @@ -0,0 +1,49 @@ +defaultValue = $default_value; + return $this; + } + + public function offsetExists($key) { + return true; + } + + public function offsetGet($key) { + if (!parent::offsetExists($key)) { + $this->offsetSet($key, $this->defaultValue); + } + return parent::offsetGet($key); + } + +} diff --git a/src/utils/PhutilBufferedIterator.php b/src/utils/PhutilBufferedIterator.php new file mode 100644 index 00000000..3f40b65d --- /dev/null +++ b/src/utils/PhutilBufferedIterator.php @@ -0,0 +1,138 @@ + List of results. + * @task impl + */ + abstract protected function loadPage(); + + +/* -( Configuration )------------------------------------------------------ */ + + + /** + * Get the configured page size. + * + * @return int Page size. + * @task config + */ + final public function getPageSize() { + return $this->pageSize; + } + + + /** + * Configure the page size. Note that implementations may ignore this. + * + * @param int Page size. + * @return this + * @task config + */ + final public function setPageSize($size) { + $this->pageSize = $size; + return $this; + } + + +/* -( Iterator Implementation )-------------------------------------------- */ + + + /** + * @task iterator + */ + final public function rewind() { + $this->didRewind(); + $this->data = array(); + $this->naturalKey = 0; + $this->next(); + } + + + /** + * @task iterator + */ + final public function valid() { + return (bool)count($this->data); + } + + + /** + * @task iterator + */ + final public function current() { + return end($this->data); + } + + + /** + * By default, the iterator assigns a "natural" key (0, 1, 2, ...) to each + * result. This method is intentionally nonfinal so you can substitute a + * different behavior by overriding it if you prefer. + * + * @return scalar Key for the current result (as per @{method:current}). + * @task iterator + */ + public function key() { + return $this->naturalKey; + } + + + /** + * @task iterator + */ + final public function next() { + if ($this->data) { + $this->naturalKey++; + array_pop($this->data); + if ($this->data) { + return; + } + } + + $data = $this->loadPage(); + + // NOTE: Reverse the results so we can use array_pop() to discard them, + // since it doesn't have the O(N) key reassignment behavior of + // array_shift(). + + $this->data = array_reverse($data); + } + +} diff --git a/src/utils/PhutilCallbackFilterIterator.php b/src/utils/PhutilCallbackFilterIterator.php new file mode 100644 index 00000000..2eab78df --- /dev/null +++ b/src/utils/PhutilCallbackFilterIterator.php @@ -0,0 +1,25 @@ +callback = $callback; + } + + public function accept() { + return call_user_func($this->callback, $this->current()); + } + +} diff --git a/src/utils/PhutilChunkedIterator.php b/src/utils/PhutilChunkedIterator.php new file mode 100644 index 00000000..a002c5fe --- /dev/null +++ b/src/utils/PhutilChunkedIterator.php @@ -0,0 +1,60 @@ +iterator = $iterator; + $this->size = $size; + } + + public function rewind() { + $this->iterator->rewind(); + $this->next(); + $this->key = 0; + } + + /** + * @return int + */ + public function key() { + return $this->key; + } + + /** + * @return array + */ + public function current() { + return $this->current; + } + + public function next() { + $this->current = array(); + while ($this->iterator->valid()) { + $key = $this->iterator->key(); + $this->current[$key] = $this->iterator->current(); + $this->iterator->next(); + if (count($this->current) >= $this->size) { + break; + } + } + $this->key++; + } + + public function valid() { + return (bool)$this->current; + } + +} diff --git a/src/utils/PhutilCowsay.php b/src/utils/PhutilCowsay.php new file mode 100644 index 00000000..ccbeccf4 --- /dev/null +++ b/src/utils/PhutilCowsay.php @@ -0,0 +1,147 @@ +template = $template; + return $this; + } + + public function setEyes($eyes) { + $this->eyes = $eyes; + return $this; + } + + public function setTongue($tongue) { + $this->tongue = $tongue; + return $this; + } + + public function setAction($action) { + $this->action = $action; + return $this; + } + + public function setText($text) { + $this->text = $text; + return $this; + } + + public function renderCow() { + $width = 40; + $template = $this->template; + + // Real ".cow" files are Perl scripts which define a variable called + // "$the_cow". We aren't going to interpret Perl, so strip all this stuff + // (and any comments in the file) away. + $template = phutil_split_lines($template, true); + $keep = array(); + $is_perl_cowfile = false; + foreach ($template as $key => $line) { + if (preg_match('/^#/', $line)) { + continue; + } + if (preg_match('/^\s*\\$the_cow/', $line)) { + $is_perl_cowfile = true; + continue; + } + if (preg_match('/^\s*EOC\s*$/', $line)) { + continue; + } + $keep[] = $line; + } + $template = implode('', $keep); + + // Original .cow files are perl scripts which contain escaped sequences. + // We attempt to unescape here by replacing any character preceded by a + // backslash/escape with just that character. + if ($is_perl_cowfile) { + $template = preg_replace( + '/\\\\(.)/', + '$1', + $template); + } + + $template = preg_replace_callback( + '/\\$([a-z]+)/', + array($this, 'replaceTemplateVariable'), + $template); + if ($template === false) { + throw new Exception( + pht( + 'Failed to replace template variables while rendering cow!')); + } + + $lines = $this->text; + + // TODO: It would be nice to use a utf8 soft wrap here instead, but we + // do not currently have one. Soft wrap first, then force to utf8. + $lines = wordwrap($lines, $width - 4, "\n", true); + $lines = phutil_split_lines($lines, false); + foreach ($lines as $key => $line) { + $lines[$key] = phutil_utf8ize($line); + } + + if ($this->action == 'think') { + $borders = '((()))'; + } else { + if (count($lines) == 1) { + $borders = '<<<>>>'; + } else { + $borders = '/|\\\\|/'; + } + } + + $size = 0; + foreach ($lines as $line) { + $size = max(strlen($line), $size); + } + + $balloon = array(); + $balloon[] = ' '.str_repeat('_', $size + 2); + $lines = array_values($lines); + $last = (count($lines) - 1); + foreach ($lines as $idx => $line) { + if ($idx == 0) { + $l = $borders[0]; + $r = $borders[3]; + } else if ($idx == $last) { + $l = $borders[2]; + $r = $borders[5]; + } else { + $l = $borders[1]; + $r = $borders[4]; + } + $balloon[] = $l.' '.str_pad($line, $size).' '.$r; + + } + $balloon[] = ' '.str_repeat('-', $size + 2); + $balloon = implode("\n", $balloon); + + return rtrim($balloon."\n".$template); + } + + public function replaceTemplateVariable($matches) { + switch ($matches[1]) { + case 'eyes': + return str_pad($this->eyes, 2); + case 'tongue': + return str_pad($this->tongue, 2); + case 'thoughts': + return ($this->action == 'say' ? '\\' : 'o'); + default: + return $matches[0]; + } + } + + +} diff --git a/src/utils/PhutilDirectedScalarGraph.php b/src/utils/PhutilDirectedScalarGraph.php new file mode 100644 index 00000000..36cef1b1 --- /dev/null +++ b/src/utils/PhutilDirectedScalarGraph.php @@ -0,0 +1,17 @@ +setSequences(str_split('ran'), str_split('rat')); + * + * $cost = $matrix->getEditDistance(); + * + * Edit distance computation is slow and requires a large amount of memory; + * both are roughly O(N * M) in the length of the strings. + * + * You can customize the cost of insertions, deletions and replacements. By + * default, each has a cost of 1. + * + * $matrix->setReplaceCost(1); + * + * By default, transpositions are not evaluated (i.e., the algorithm is + * Levenshtein). You can cause transpositions to be evaluated by setting a + * transpose cost (which will change the algorithm to Damerau-Levenshtein): + * + * $matrix->setTransposeCost(1); + * + * You can also provide a cost to alter the type of operation being applied. + * Many strings have several equivalently expensive edit sequences, but one + * some sequences are more readable to humans than others. Providing a small + * cost to alter operation type tends to smooth out the sequence and produce + * long runs of a single operation, which are generally more readable. For + * example, these strings: + * + * (x) + * ((x)) + * + * ...have edit strings "issis" and "isssi", which describe edit operations with + * the same cost, but the latter string is more comprehensible to human viewers. + * + * If you set an alter cost, you must call @{method:setComputeString} to enable + * type computation. The alter cost should generally be smaller than `c / N`, + * where `c` is the smallest operational cost and `N` is the length of the + * longest string. For example, if you are using the default costs (insert = 1, + * delete = 1, replace = 1) and computing edit distances for strings of fewer + * than 1,000 characters, you might set the alter cost to 0.001. + */ +final class PhutilEditDistanceMatrix extends Phobject { + + private $insertCost = 1; + private $deleteCost = 1; + private $replaceCost = 1; + private $transposeCost = null; + private $alterCost = 0; + private $maximumLength; + private $computeString; + private $applySmoothing = self::SMOOTHING_NONE; + private $reachedMaximumLength; + + private $x; + private $y; + private $prefix; + private $suffix; + + private $distanceMatrix = null; + private $typeMatrix = null; + + const SMOOTHING_NONE = 'none'; + const SMOOTHING_INTERNAL = 'internal'; + const SMOOTHING_FULL = 'full'; + + public function setMaximumLength($maximum_length) { + $this->maximumLength = $maximum_length; + return $this; + } + + public function getMaximumLength() { + return coalesce($this->maximumLength, $this->getInfinity()); + } + + public function didReachMaximumLength() { + return $this->reachedMaximumLength; + } + + public function setComputeString($compute_string) { + $this->computeString = $compute_string; + return $this; + } + + public function getComputeString() { + return $this->computeString; + } + + public function setTransposeCost($transpose_cost) { + $this->transposeCost = $transpose_cost; + return $this; + } + + public function getTransposeCost() { + return $this->transposeCost; + } + + public function setReplaceCost($replace_cost) { + $this->replaceCost = $replace_cost; + return $this; + } + + public function getReplaceCost() { + return $this->replaceCost; + } + + public function setDeleteCost($delete_cost) { + $this->deleteCost = $delete_cost; + return $this; + } + + public function getDeleteCost() { + return $this->deleteCost; + } + + public function setInsertCost($insert_cost) { + $this->insertCost = $insert_cost; + return $this; + } + + public function getInsertCost() { + return $this->insertCost; + } + + public function setAlterCost($alter_cost) { + $this->alterCost = $alter_cost; + return $this; + } + + public function getAlterCost() { + return $this->alterCost; + } + + public function setApplySmoothing($apply_smoothing) { + $this->applySmoothing = $apply_smoothing; + return $this; + } + + public function getApplySmoothing() { + return $this->applySmoothing; + } + + public function setSequences(array $x, array $y) { + + // NOTE: We strip common prefixes and suffixes from the inputs because + // the runtime of the edit distance algorithm is large and it is common + // to diff similar strings. + + $xl = count($x); + $yl = count($y); + $l = min($xl, $yl); + + $prefix_l = 0; + $suffix_l = 0; + + for ($ii = 0; $ii < $l; $ii++) { + if ($x[$ii] !== $y[$ii]) { + break; + } + $prefix_l++; + } + + for ($ii = 1; $ii <= ($l - $prefix_l); $ii++) { + if ($x[$xl - $ii] !== $y[$yl - $ii]) { + break; + } + $suffix_l++; + } + + $this->prefix = array_slice($x, 0, $prefix_l); + $this->suffix = array_slice($x, $xl - $suffix_l); + + $this->x = array_slice($x, $prefix_l, $xl - ($suffix_l + $prefix_l)); + $this->y = array_slice($y, $prefix_l, $yl - ($suffix_l + $prefix_l)); + $this->distanceMatrix = null; + + return $this; + } + + private function requireSequences() { + if ($this->x === null) { + throw new PhutilInvalidStateException('setSequences'); + } + } + + public function getEditDistance() { + $this->requireSequences(); + + $x = $this->x; + $y = $this->y; + + if (!$x) { + return $this->insertCost * count($y); + } + + if (!$y) { + return $this->deleteCost * count($x); + } + + $max = $this->getMaximumLength(); + if (count($x) > $max || count($y) > $max) { + $this->reachedMaximumLength = true; + return ($this->insertCost * count($y)) + ($this->deleteCost * count($x)); + } + + if ($x === $y) { + return 0; + } + + $matrix = $this->getDistanceMatrix(); + + return $matrix[count($x)][count($y)]; + } + + /** + * Return a string representing the edits between the sequences. The string + * has these characters: + * + * - s (same): Same character in both strings. + * - i (insert): Character inserted. + * - d (delete): Character deleted. + * - x (replace): Character replaced. + * - t (transpose): Character transposed. + */ + public function getEditString() { + $this->requireSequences(); + + $x = $this->x; + $y = $this->y; + + if (!$x && !$y) { + return $this->padEditString(''); + } + + if (!$x) { + return $this->padEditString(str_repeat('i', count($y))); + } + + if (!$y) { + return $this->padEditString(str_repeat('d', count($x))); + } + + if ($x === $y) { + return $this->padEditString(str_repeat('s', count($x))); + } + + $max = $this->getMaximumLength(); + if (count($x) > $max || count($y) > $max) { + $this->reachedMaximumLength = true; + return $this->padEditString( + str_repeat('d', count($x)). + str_repeat('i', count($y))); + } + + $matrix = $this->getTypeMatrix(); + + $xx = count($x); + $yy = count($y); + + $transposes = array(); + $str = ''; + while (true) { + $type = $matrix[$xx][$yy]; + + if (is_array($type)) { + $chr = 't'; + $transposes[$type[0]][$type[1]] = true; + $type = $type[2]; + } else { + $chr = $type; + } + + if (isset($transposes[$xx][$yy])) { + $chr = 't'; + } + + if ($type == 's' || $type == 'x') { + $xx -= 1; + $yy -= 1; + } else if ($type == 'i') { + $yy -= 1; + } else if ($type == 'd') { + $xx -= 1; + } else { + throw new Exception(pht("Unknown type '%s' in type matrix.", $type)); + } + + $str .= $chr; + + if ($xx <= 0 && $yy <= 0) { + break; + } + } + + $str = strrev($str); + + // For full smoothing, we pad the edit string before smoothing it, so + // ranges of similar characters at the beginning or end of the string can + // also be smoothed. + + // For internal smoothing, we only smooth ranges within the change itself. + + $smoothing = $this->getApplySmoothing(); + switch ($smoothing) { + case self::SMOOTHING_FULL: + $str = $this->padEditString($str); + $str = $this->applySmoothing($str, true); + break; + case self::SMOOTHING_INTERNAL: + $str = $this->applySmoothing($str, false); + $str = $this->padEditString($str); + break; + case self::SMOOTHING_NONE: + $str = $this->padEditString($str); + break; + default: + throw new Exception( + pht( + 'Unknown smoothing type "%s".', + $smoothing)); + } + + return $str; + } + + private function padEditString($str) { + if ($this->prefix) { + $str = str_repeat('s', count($this->prefix)).$str; + } + if ($this->suffix) { + $str = $str.str_repeat('s', count($this->suffix)); + } + return $str; + } + + private function getTypeMatrix() { + if (!$this->computeString) { + throw new PhutilInvalidStateException('setComputeString'); + } + if ($this->typeMatrix === null) { + $this->computeMatrix($this->x, $this->y); + } + return $this->typeMatrix; + } + + private function getDistanceMatrix() { + if ($this->distanceMatrix === null) { + $this->computeMatrix($this->x, $this->y); + } + return $this->distanceMatrix; + } + + private function computeMatrix(array $x, array $y) { + $xl = count($x); + $yl = count($y); + + $m = array(); + + $infinity = $this->getInfinity(); + + $use_damerau = ($this->transposeCost !== null); + if ($use_damerau) { + // Initialize the default cost of a transpose. + $m[-1][-1] = $infinity; + + // Initialize the character position dictionary for Damerau. + $d = array(); + foreach ($x as $c) { + $d[$c] = -1; + } + foreach ($y as $c) { + $d[$c] = -1; + } + + // Initialize the transpose costs for Damerau. + for ($xx = 0; $xx <= $xl; $xx++) { + $m[$xx][-1] = $infinity; + } + + for ($yy = 0; $yy <= $yl; $yy++) { + $m[-1][$yy] = $infinity; + } + } + + // Initialize the top row of the matrix. + for ($xx = 0; $xx <= $xl; $xx++) { + $m[$xx][0] = $xx * $this->deleteCost; + } + + // Initialize the left column of the matrix. + $cost = 0; + for ($yy = 0; $yy <= $yl; $yy++) { + $m[0][$yy] = $yy * $this->insertCost; + } + + $use_types = ($this->computeString); + if ($use_types) { + $t = array(); + for ($xx = 0; $xx <= $xl; $xx++) { + $t[$xx][0] = 'd'; + } + for ($yy = 0; $yy <= $yl; $yy++) { + $t[0][$yy] = 'i'; + } + $t[0][0] = 's'; + } + + $alt_cost = $this->getAlterCost(); + if ($alt_cost && !$use_types) { + throw new Exception( + pht( + 'If you provide an alter cost with %s, you must enable '. + 'type computation with %s.', + 'setAlterCost()', + 'setComputeStrings()')); + } + + // Build the edit distance matrix. + for ($xx = 1; $xx <= $xl; $xx++) { + $last_dy = -1; + for ($yy = 1; $yy <= $yl; $yy++) { + if ($use_damerau) { + $dx = $d[$y[$yy - 1]]; + $dy = $last_dy; + } + + if ($x[$xx - 1] === $y[$yy - 1]) { + $rep_cost = $m[$xx - 1][$yy - 1] + 0; + $rep_type = 's'; + } else { + $rep_cost = $m[$xx - 1][$yy - 1] + $this->replaceCost; + $rep_type = 'x'; + } + + $del_cost = $m[$xx - 1][$yy ] + $this->deleteCost; + $ins_cost = $m[$xx ][$yy - 1] + $this->insertCost; + if ($alt_cost) { + $del_char = $t[$xx - 1][$yy ]; + $ins_char = $t[$xx ][$yy - 1]; + $rep_char = $t[$xx - 1][$yy - 1]; + + if ($del_char !== 'd') { + $del_cost += $alt_cost; + } + if ($ins_char !== 'i') { + $ins_cost += $alt_cost; + } + if ($rep_char !== $rep_type) { + $rep_cost += $alt_cost; + } + } + + if ($rep_cost <= $del_cost && $rep_cost <= $ins_cost) { + $cost = $rep_cost; + $type = $rep_type; + if ($rep_type === 's') { + $last_dy = $yy - 1; + } + } else if ($ins_cost <= $del_cost) { + $cost = $ins_cost; + $type = 'i'; + } else { + $cost = $del_cost; + $type = 'd'; + } + + if ($use_damerau) { + $trn_count = (($xx - $dx - 2) + ($yy - $dy - 2) + 1); + $trn_cost = $m[$dx][$dy] + ($trn_count * $this->transposeCost); + if ($trn_cost < $cost) { + $cost = $trn_cost; + $type = array($dx + 1, $dy + 1, $type); + } + } + + $m[$xx][$yy] = $cost; + if ($use_types) { + $t[$xx][$yy] = $type; + } + } + + if ($use_damerau) { + $d[$x[$xx - 1]] = ($xx - 1); + } + } + + $this->distanceMatrix = $m; + if ($use_types) { + $this->typeMatrix = $t; + } + } + + private function getInfinity() { + return INF; + } + + private function printMatrix(array $m) { + $x = $this->x; + $y = $this->y; + + $p = '% 8s '; + printf($p, ' '); + foreach (head($m) as $yk => $yv) { + printf($p, idx($y, $yk - 1, '-')); + } + echo "\n"; + foreach ($m as $xk => $xv) { + printf($p, idx($x, $xk - 1, '-')); + foreach ($xv as $yk => $yv) { + printf($p, ($yv == $this->getInfinity() ? 'inf' : $yv)); + } + echo "\n"; + } + } + + private function printTypeMatrix(array $t) { + $x = $this->x; + $y = $this->y; + + $p = '% 8s '; + printf($p, ' '); + foreach (head($t) as $yk => $yv) { + printf($p, idx($y, $yk - 1, '-')); + } + echo "\n"; + foreach ($t as $xk => $xv) { + printf($p, idx($x, $xk - 1, '-')); + foreach ($xv as $yk => $yv) { + printf($p, ($yv == $this->getInfinity() ? 'inf' : $yv)); + } + echo "\n"; + } + } + + private function applySmoothing($str, $full) { + if ($full) { + $prefix = '(^|[xdi])'; + $suffix = '([xdi]|\z)'; + } else { + $prefix = '([xdi])'; + $suffix = '([xdi])'; + } + + // Smooth the string out, by replacing short runs of similar characters + // with 'x' operations. This makes the result more readable to humans, + // since there are fewer choppy runs of short added and removed substrings. + do { + $original = $str; + $str = preg_replace('/'.$prefix.'(s{3})'.$suffix.'/', '$1xxx$3', $str); + $str = preg_replace('/'.$prefix.'(s{2})'.$suffix.'/', '$1xx$3', $str); + $str = preg_replace('/'.$prefix.'(s{1})'.$suffix.'/', '$1x$3', $str); + } while ($str != $original); + + return $str; + } + +} diff --git a/src/utils/PhutilExampleBufferedIterator.php b/src/utils/PhutilExampleBufferedIterator.php new file mode 100644 index 00000000..b684eec1 --- /dev/null +++ b/src/utils/PhutilExampleBufferedIterator.php @@ -0,0 +1,32 @@ +cursor = 0; + } + + protected function loadPage() { + $result = $this->query($this->cursor, $this->getPageSize()); + $this->cursor += count($result); + return $result; + } + + public function setExampleData(array $data) { + $this->data = $data; + } + + private function query($cursor, $limit) { + // NOTE: Normally you'd load or generate results from some external source + // here. Since this is an example, we just use a premade dataset. + + return array_slice($this->data, $cursor, $limit); + } + +} diff --git a/src/utils/PhutilExecutionEnvironment.php b/src/utils/PhutilExecutionEnvironment.php new file mode 100644 index 00000000..58281899 --- /dev/null +++ b/src/utils/PhutilExecutionEnvironment.php @@ -0,0 +1,16 @@ +algorithm = $algorithm; + return $this; + } + + public function getAlgorithm() { + return $this->algorithm; + } + + public function getHash() { + $hash = $this->getHashResource(); + return hash_final($hash, $raw_output = false); + } + + protected function didReadValue($value) { + $hash = $this->getHashResource(); + + hash_update($hash, $value); + + return $value; + } + + private function getHashResource() { + if (!$this->hash) { + $algorithm = $this->getAlgorithm(); + $this->hash = hash_init($algorithm); + } + return $this->hash; + } + +} diff --git a/src/utils/PhutilLunarPhase.php b/src/utils/PhutilLunarPhase.php new file mode 100644 index 00000000..8b55e3b5 --- /dev/null +++ b/src/utils/PhutilLunarPhase.php @@ -0,0 +1,43 @@ +isFull(); + */ +final class PhutilLunarPhase extends Phobject { + + private $epoch; + + public function __construct($epoch) { + $this->epoch = $epoch; + } + + private function getPhase() { + // (Aug 11, 1999) A new moon. + $new_moon_epoch = 934354800; + + // Number of seconds in the lunar phase. + $phase_length = 2551442.8768992; + + return fmod($this->epoch - $new_moon_epoch, $phase_length) / $phase_length; + } + + public function isFull() { + return abs($this->getPhase() - 0.5) < 0.02; + } + + public function isNew() { + return $this->getPhase() < 0.02 || $this->getPhase() > 0.98; + } + + public function isWaxing() { + return $this->getPhase() < 0.5; + } + + public function isWaning() { + return $this->getPhase() > 0.5; + } + +} diff --git a/src/utils/PhutilProxyIterator.php b/src/utils/PhutilProxyIterator.php new file mode 100644 index 00000000..f75a9f96 --- /dev/null +++ b/src/utils/PhutilProxyIterator.php @@ -0,0 +1,57 @@ +iterator = $iterator; + } + + protected function didReadValue($value) { + return $value; + } + + +/* -( Iterator Implementation )-------------------------------------------- */ + + + final public function rewind() { + $this->iterator->rewind(); + $this->update(); + } + + final public function valid() { + return $this->valid; + } + + final public function current() { + return $this->value; + } + + final public function key() { + return $this->key; + } + + final public function next() { + $this->iterator->next(); + $this->update(); + } + + private function update() { + $this->key = $this->iterator->key(); + $this->valid = $this->iterator->valid(); + + if ($this->valid) { + $value = $this->iterator->current(); + $value = $this->didReadValue($value); + $this->value = $value; + } + } + +} diff --git a/src/utils/PhutilRope.php b/src/utils/PhutilRope.php new file mode 100644 index 00000000..31d7aa27 --- /dev/null +++ b/src/utils/PhutilRope.php @@ -0,0 +1,144 @@ +length += $len; + + if ($len <= $this->segmentSize) { + $this->buffers[] = $string; + } else { + for ($cursor = 0; $cursor < $len; $cursor += $this->segmentSize) { + $this->buffers[] = substr($string, $cursor, $this->segmentSize); + } + } + + return $this; + } + + + /** + * Get the length of the rope. + * + * @return int Length of the rope in bytes. + */ + public function getByteLength() { + return $this->length; + } + + + /** + * Get an arbitrary, nonempty prefix of the rope. + * + * @return string Some rope prefix. + */ + public function getAnyPrefix() { + $result = reset($this->buffers); + if ($result === false) { + return null; + } + + return $result; + } + + + /** + * Get prefix bytes of the rope, up to some maximum size. + * + * @param int Maximum number of bytes to read. + * @return string Bytes. + */ + public function getPrefixBytes($length) { + $result = array(); + + $remaining_bytes = $length; + foreach ($this->buffers as $buf) { + $length = strlen($buf); + if ($length <= $remaining_bytes) { + $result[] = $buf; + $remaining_bytes -= $length; + } else { + $result[] = substr($buf, 0, $remaining_bytes); + $remaining_bytes = 0; + } + if (!$remaining_bytes) { + break; + } + } + + return implode('', $result); + } + + + /** + * Return the entire rope as a normal string. + * + * @return string Normal string. + */ + public function getAsString() { + return implode('', $this->buffers); + } + + + /** + * Remove a specified number of bytes from the head of the rope. + * + * @param int Bytes to remove. + * @return this + */ + public function removeBytesFromHead($remove) { + if ($remove <= 0) { + throw new InvalidArgumentException( + pht('Length must be larger than 0!')); + } + + $remaining_bytes = $remove; + foreach ($this->buffers as $key => $buf) { + $len = strlen($buf); + if ($len <= $remaining_bytes) { + unset($this->buffers[$key]); + $remaining_bytes -= $len; + if (!$remaining_bytes) { + break; + } + } else { + $this->buffers[$key] = substr($buf, $remaining_bytes); + break; + } + } + + if ($this->buffers) { + $this->length -= $remove; + } else { + $this->length = 0; + } + + return $this; + } + +} diff --git a/src/utils/PhutilSortVector.php b/src/utils/PhutilSortVector.php new file mode 100644 index 00000000..00146070 --- /dev/null +++ b/src/utils/PhutilSortVector.php @@ -0,0 +1,54 @@ +parts[] = sprintf('%s%020u', $prefix, $value); + return $this; + } + + public function addString($value) { + if (strlen($value) && (strpos("\0", $value) !== false)) { + throw new Exception( + pht( + 'String components of a sort vector must not contain NULL bytes.')); + } + + $this->parts[] = $value; + return $this; + } + + public function __toString() { + return implode("\0", $this->parts); + } + + /** + * This allows you to sort a list of sort vectors using @{function:msortv}. + */ + public function getSelf() { + return $this; + } + +} diff --git a/src/utils/PhutilStreamIterator.php b/src/utils/PhutilStreamIterator.php new file mode 100644 index 00000000..067b98f9 --- /dev/null +++ b/src/utils/PhutilStreamIterator.php @@ -0,0 +1,68 @@ +stream = $stream; + } + +/* -( Iterator Implementation )-------------------------------------------- */ + + + public function rewind() { + if ($this->started) { + // When you first foreach() an iterator the rewind() method gets called + // so we have to work the first time. + throw new Exception( + pht('Stream iterators can not be rewound!')); + } + + $this->started = true; + $this->naturalKey = -1; + $this->next(); + } + + public function valid() { + return ($this->data !== null); + } + + public function current() { + return $this->data; + } + + public function key() { + return $this->naturalKey; + } + + public function next() { + $stream = $this->stream; + + if (!$stream) { + return; + } + + if (feof($stream)) { + fclose($stream); + $this->stream = null; + $this->data = null; + return; + } + + $bytes = fread($stream, 64 * 1024); + if ($bytes === false) { + throw new Exception( + pht('Failed to fread() from request input stream.')); + } + + $this->data = $bytes; + $this->naturalKey++; + } + +} diff --git a/src/utils/PhutilSystem.php b/src/utils/PhutilSystem.php new file mode 100644 index 00000000..6c6d5dcd --- /dev/null +++ b/src/utils/PhutilSystem.php @@ -0,0 +1,164 @@ + Dictionary of memory information. + * @task memory + */ + public static function getSystemMemoryInformation() { + $meminfo_path = '/proc/meminfo'; + if (Filesystem::pathExists($meminfo_path)) { + $meminfo_data = Filesystem::readFile($meminfo_path); + return self::parseMemInfo($meminfo_data); + } else if (Filesystem::binaryExists('vm_stat')) { + list($vm_stat_stdout) = execx('vm_stat'); + return self::parseVMStat($vm_stat_stdout); + } else { + throw new Exception( + pht( + 'Unable to access %s or `%s` on this system to '. + 'get system memory information.', + '/proc/meminfo', + 'vm_stat')); + } + } + + + /** + * Parse the output of `/proc/meminfo`. + * + * See @{method:getSystemMemoryInformation}. This method is used to get memory + * information on Linux. + * + * @param string Raw `/proc/meminfo`. + * @return map Parsed memory information. + * @task memory + */ + public static function parseMemInfo($data) { + $data = phutil_split_lines($data); + + $map = array(); + foreach ($data as $line) { + list($key, $value) = explode(':', $line, 2); + $key = trim($key); + $value = trim($value); + + $matches = null; + if (preg_match('/^(\d+) kB\z/', $value, $matches)) { + $value = (int)$matches[1] * 1024; + } + + $map[$key] = $value; + } + + $expect = array( + 'MemTotal', + 'MemFree', + 'Buffers', + 'Cached', + ); + foreach ($expect as $key) { + if (!array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Expected to find "%s" in "%s" output, but did not.', + $key, + '/proc/meminfo')); + } + } + + $total = $map['MemTotal']; + $free = $map['MemFree'] + $map['Buffers'] + $map['Cached']; + + return array( + 'total' => $total, + 'free' => $free, + ); + } + + + /** + * Parse the output of `vm_stat`. + * + * See @{method:getSystemMemoryInformation}. This method is used to get memory + * information on Mac OS X. + * + * @param string Raw `vm_stat` output. + * @return map Parsed memory information. + * @task memory + */ + public static function parseVMStat($data) { + $data = phutil_split_lines($data); + + $page_size = null; + $map = array(); + + foreach ($data as $line) { + list($key, $value) = explode(':', $line, 2); + $key = trim($key); + $value = trim($value); + + $matches = null; + if (preg_match('/page size of (\d+) bytes/', $value, $matches)) { + $page_size = (int)$matches[1]; + continue; + } + + $value = trim($value, '.'); + $map[$key] = $value; + } + + if (!$page_size) { + throw new Exception( + pht( + 'Expected to find "%s" in `%s` output, but did not.', + 'page size', + 'vm_stat')); + } + + $expect = array( + 'Pages free', + 'Pages active', + 'Pages inactive', + 'Pages wired down', + ); + foreach ($expect as $key) { + if (!array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Expected to find "%s" in `%s` output, but did not.', + $key, + 'vm_stat')); + } + } + + // NOTE: This calculation probably isn't quite right. In particular, + // the numbers don't exactly add up, and "Pages inactive" includes a + // bunch of disk cache. So these numbers aren't totally reliable and they + // aren't directly comparable to the /proc/meminfo numbers. + + $free = $map['Pages free']; + $active = $map['Pages active']; + $inactive = $map['Pages inactive']; + $wired = $map['Pages wired down']; + + return array( + 'total' => ($free + $active + $inactive + $wired) * $page_size, + 'free' => ($free) * $page_size, + ); + } + +} diff --git a/src/utils/PhutilUTF8StringTruncator.php b/src/utils/PhutilUTF8StringTruncator.php new file mode 100644 index 00000000..888a7ee8 --- /dev/null +++ b/src/utils/PhutilUTF8StringTruncator.php @@ -0,0 +1,295 @@ +setMaximumGlyphs(80) + * ->truncateString($long); + * + * Byte limits restrict the number of bytes the result may contain. They are + * appropriate when you care about how much storage a string requires. + * + * Codepoint limits restrict the number of codepoints the result may contain. + * Since codepoints may have up to 4 bytes, the resulting strings may require + * have more than this many bytes. This kind of limit is appropriate when you + * are using UTF-8 storage. + * + * Glyph limits restrict the display size of the string. Because a single glyph + * may have an arbitrary number of combining characters, this does not impose + * a storage size limit on the string: a string with only one glyph may require + * an arbitrarily large number of bytes. + * + * You can set more than one limit; the smallest limit will be used. + * + * NOTE: This function makes a best effort to apply some reasonable rules but + * will not work well for the full range of unicode languages. + */ +final class PhutilUTF8StringTruncator extends Phobject { + + private $maximumBytes; + private $maximumCodepoints; + private $maximumGlyphs; + private $minimumLimit; + + private $terminator = "\xE2\x80\xA6"; + private $terminatorBytes = 3; + private $terminatorCodepoints = 1; + private $terminatorGlyphs = 1; + + public function setMaximumBytes($maximum_bytes) { + $this->maximumBytes = $maximum_bytes; + $this->didUpdateMaxima(); + return $this; + } + + public function setMaximumCodepoints($maximum_codepoints) { + $this->maximumCodepoints = $maximum_codepoints; + $this->didUpdateMaxima(); + return $this; + } + + public function setMaximumGlyphs($maximum_glyphs) { + $this->maximumGlyphs = $maximum_glyphs; + $this->didUpdateMaxima(); + return $this; + } + + private function didUpdateMaxima() { + $this->minimumLimit = INF; + + if ($this->maximumBytes) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumBytes); + } + + if ($this->maximumCodepoints) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumCodepoints); + } + + if ($this->maximumGlyphs) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumGlyphs); + } + } + + public function setTerminator($terminator) { + $this->terminator = $terminator; + $this->terminatorBytes = strlen($terminator); + $this->terminatorCodepoints = count(phutil_utf8v($terminator)); + $this->terminatorGlyphs = count(phutil_utf8v_combined($terminator)); + return $this; + } + + public function truncateString($string) { + // First, check if the string has fewer bytes than the most restrictive + // limit. Codepoints and glyphs always take up at least one byte, so we can + // just return the string unmodified if we're under all of the limits. + $byte_len = strlen($string); + if ($byte_len <= $this->minimumLimit) { + return $string; + } + + // We're going to vectorize the string so we can deal with it in terms + // of unicode characters. If the string is huge (like 10MB) and we are + // only extracting a tiny piece of it (like the first 1024 bytes), we + // want to avoid vectorizing the entire string in cases where there is + // no possibility that we'll need all of it. Try to compute a "hard limit": + // an upper bound on the number of bytes we can ever need to process. + + $hard_limits = array(); + if ($this->maximumBytes) { + $hard_limits[] = $this->maximumBytes; + } + + if ($this->maximumCodepoints) { + // No UTF8 character is longer than 6 bytes, so we can impose a ceiling + // if we have a codepoint limit. + $hard_limits[] = ($this->maximumCodepoints * 6); + } + + if ($hard_limits) { + // Add a few more bytes onto the end so that we have a little more of + // the string than we actually need and can get the right terminator + // behavior. + $hard_limit = max($hard_limits) + 32; + } else { + $hard_limit = null; + } + + // Build a vector of characters first. + $string_pv = phutil_utf8v($string, $hard_limit); + $point_len = count($string_pv); + + // We always need the combined vector, even if we're only doing byte or + // codepoint truncation, because we don't want to truncate to half of a + // combining character. + $string_gv = phutil_utf8v_combine_characters($string_pv); + $glyph_len = count($string_gv); + + // Now, check if we're still over the limits. For example, a string may + // be over the raw byte limit but under the glyph limit if it contains + // several multibyte characters. + + $too_long = false; + if ($this->maximumBytes && ($byte_len > $this->maximumBytes)) { + $too_long = true; + } + if ($this->maximumCodepoints && ($point_len > $this->maximumCodepoints)) { + $too_long = true; + } + if ($this->maximumGlyphs && ($glyph_len > $this->maximumGlyphs)) { + $too_long = true; + } + + if (!$too_long) { + return $string; + } + + // This string is legitimately longer than at least one of the limits, so + // we need to truncate it. Find the minimum cutoff point: this is the last + // glyph we can possibly return while satisfying the limits and having space + // for the terminator. + + $cutoff = $glyph_len; + if ($this->maximumBytes) { + if ($byte_len <= $this->maximumBytes) { + $cutoff = $glyph_len; + } else { + $bytes = $this->terminatorBytes; + for ($ii = 0; $ii < $glyph_len; $ii++) { + $bytes += strlen($string_gv[$ii]); + if ($bytes > $this->maximumBytes) { + $cutoff = $ii; + break; + } + } + } + } + + if ($this->maximumCodepoints) { + if ($point_len <= $this->maximumCodepoints) { + $cutoff = min($cutoff, $glyph_len); + } else { + $points = 0; + for ($ii = 0; $ii < $glyph_len; $ii++) { + $glyph_bytes = strlen($string_gv[$ii]); + while ($points < $point_len) { + $glyph_bytes -= strlen($string_pv[$points]); + $points++; + if ($glyph_bytes <= 0) { + break; + } + } + $points_total = $points + $this->terminatorCodepoints; + if ($points_total > $this->maximumCodepoints) { + $cutoff = min($cutoff, $ii); + break; + } + } + } + } + + if ($this->maximumGlyphs) { + if ($glyph_len <= $this->maximumGlyphs) { + $cutoff = min($cutoff, $glyph_len); + } else { + $cutoff = min($cutoff, $this->maximumGlyphs - $this->terminatorGlyphs); + } + } + + // If we don't have enough characters for anything, just return the + // terminator. + if ($cutoff <= 0) { + return $this->terminator; + } + + // Otherwise, we're going to try to cut the string off somewhere reasonable + // rather than somewhere arbitrary. + + // NOTE: This is not complete, and there are many other word boundary + // characters and reasonable places to break words in the UTF-8 character + // space. For now, this gives us reasonable behavior for latin languages. We + // don't necessarily have access to PCRE+Unicode so there isn't a great way + // for us to look up character attributes. + + // If we encounter these, prefer to break on them instead of cutting the + // string off in the middle of a word. + static $break_characters = array( + ' ' => true, + "\n" => true, + ';' => true, + ':' => true, + '[' => true, + '(' => true, + ',' => true, + '-' => true, + ); + + // If we encounter these, shorten to this character exactly without + // appending the terminal. + static $stop_characters = array( + '.' => true, + '!' => true, + '?' => true, + ); + + // Search backward in the string, looking for reasonable places to break it. + $word_boundary = null; + $stop_boundary = null; + $any_nonboundary = false; + + // If we do a word break with a terminal, we have to look beyond at least + // the number of characters in the terminal. If the terminal is longer than + // the required length, we'll skip this whole block and return it on its + // own. + + // Only search backward for a while. At some point we don't get a better + // result by looking through the whole string, and if this is "MMM..." or + // a non-latin language without word break characters we're just wasting + // time. + + // See PHI654. We also only look for a break near the end of the text, + // relative to the length of the text. If the text is something like + // "O123: MMMMMM..." or "See path/to/long/thing", we want to cut the very + // long word in half, not just render "O123..." or "See...". + + $search = max(0, $cutoff - 256, $cutoff / 2); + for ($ii = min($cutoff, $glyph_len - 1); $ii >= $search; $ii--) { + $c = $string_gv[$ii]; + + if (isset($break_characters[$c])) { + $word_boundary = $ii; + } else if (isset($stop_characters[$c])) { + $stop_boundary = $ii + 1; + break; + } else { + $any_nonboundary = true; + if ($word_boundary !== null) { + break; + } + } + } + + if ($stop_boundary !== null) { + // We found a character like ".". Cut the string there, without appending + // the terminal. + $string_part = array_slice($string_gv, 0, $stop_boundary); + return implode('', $string_part); + } + + // If we didn't find any boundary characters or we found ONLY boundary + // characters, just break at the maximum character length. + if ($word_boundary === null || !$any_nonboundary) { + $word_boundary = $cutoff; + } + + $string_part = array_slice($string_gv, 0, $word_boundary); + $string_part = implode('', $string_part); + + return $string_part.$this->terminator; + } + +} diff --git a/src/utils/__tests__/AbstractDirectedGraphTestCase.php b/src/utils/__tests__/AbstractDirectedGraphTestCase.php new file mode 100644 index 00000000..19128d6f --- /dev/null +++ b/src/utils/__tests__/AbstractDirectedGraphTestCase.php @@ -0,0 +1,179 @@ + array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Trivial Graph')); + } + + public function testNoncyclicGraph() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D'), + 'C' => array(), + 'D' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Noncyclic Graph')); + } + + public function testTrivialCyclicGraph() { + $graph = array( + 'A' => array('A'), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(array('A', 'A'), $cycle, pht('Trivial Cycle')); + } + + public function testCyclicGraph() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D'), + 'C' => array('E', 'F'), + 'D' => array(), + 'E' => array(), + 'F' => array('G', 'C'), + 'G' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(array('A', 'C', 'F', 'C'), $cycle, pht('Cyclic Graph')); + } + + public function testNonTreeGraph() { + // This graph is non-cyclic, but C is both a child and a grandchild of A. + // This is permitted. + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('C'), + 'C' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Non-tree graph')); + } + + public function testEdgeLoadFailure() { + $graph = array( + 'A' => array('B'), + ); + + $raised = null; + try { + $this->findGraphCycle($graph); + } catch (Exception $ex) { + $raised = $ex; + } + + $this->assertTrue( + (bool)$raised, + pht('Exception raised by unloadable edges.')); + } + + public function testTopologicalOrder() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D', 'E'), + 'C' => array(), + 'D' => array(), + 'E' => array(), + ); + + $sorted = $this->getTopologicalOrder($graph); + + $this->assertEqual( + array('A', 'C', 'B', 'E', 'D'), + $sorted, + pht('Topologically sorted tree.')); + + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('C'), + 'C' => array('D', 'E'), + 'D' => array('E'), + 'E' => array(), + ); + + $sorted = $this->getTopologicalOrder($graph); + + $this->assertEqual( + array('A', 'B', 'C', 'D', 'E'), + $sorted, + pht('Topologically sorted tree with nesting.')); + } + + public function testRoughTopologicalOrder() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D', 'E'), + 'C' => array(), + 'D' => array(), + 'E' => array(), + 'F' => array('H'), + 'G' => array('F', 'E'), + 'H' => array('G'), + ); + + $sorted = $this->getRoughTopologicalOrder($graph); + + $this->assertEqual(count($graph), count($sorted)); + + $this->assertEqual('C', $sorted[0]['node']); + $this->assertEqual('D', $sorted[1]['node']); + $this->assertEqual('E', $sorted[2]['node']); + $this->assertEqual('B', $sorted[3]['node']); + $this->assertEqual('A', $sorted[4]['node']); + $this->assertEqual('F', $sorted[5]['node']); + $this->assertEqual('G', $sorted[6]['node']); + $this->assertEqual('H', $sorted[7]['node']); + + $this->assertEqual(0, $sorted[0]['depth']); + $this->assertEqual(0, $sorted[1]['depth']); + $this->assertEqual(0, $sorted[2]['depth']); + $this->assertEqual(1, $sorted[3]['depth']); + $this->assertEqual(2, $sorted[4]['depth']); + $this->assertEqual(3, $sorted[5]['depth']); + $this->assertEqual(3, $sorted[6]['depth']); + $this->assertEqual(3, $sorted[7]['depth']); + + $this->assertEqual(false, $sorted[0]['cycle']); + $this->assertEqual(false, $sorted[1]['cycle']); + $this->assertEqual(false, $sorted[2]['cycle']); + $this->assertEqual(false, $sorted[3]['cycle']); + $this->assertEqual(false, $sorted[4]['cycle']); + $this->assertEqual(true, $sorted[5]['cycle']); + $this->assertEqual(true, $sorted[6]['cycle']); + $this->assertEqual(true, $sorted[7]['cycle']); + } + + private function findGraphCycle(array $graph, $seed = 'A', $search = 'A') { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_select_keys($graph, array($seed))); + $detector->loadGraph(); + return $detector->detectCycles($search); + } + + private function getTopologicalOrder(array $graph, $seed = 'A') { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_select_keys($graph, array($seed))); + $detector->loadGraph(); + return $detector->getNodesInTopologicalOrder(); + } + + private function getRoughTopologicalOrder(array $graph) { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_keys($graph)); + return $detector->getNodesInRoughTopologicalOrder(); + } + +} diff --git a/src/utils/__tests__/CaseInsensitiveArrayTestCase.php b/src/utils/__tests__/CaseInsensitiveArrayTestCase.php new file mode 100644 index 00000000..cddf17bd --- /dev/null +++ b/src/utils/__tests__/CaseInsensitiveArrayTestCase.php @@ -0,0 +1,109 @@ +assertEqual(0, count($array)); + + $array['key'] = 'foo'; + $this->assertEqual(1, count($array)); + + $array['KEY'] = 'bar'; + $this->assertEqual(1, count($array)); + } + + public function testGetKeys() { + $input = array( + 'key' => true, + 'KEY' => true, + 'kEy' => true, + + 'foo' => false, + 'value' => false, + ); + $expected = array( + 'key', + 'foo', + 'value', + ); + + $array = new CaseInsensitiveArray($input); + $this->assertEqual($expected, $array->getKeys()); + } + + public function testOffsetExists() { + $input = array('key' => 'value'); + $expectations = array( + 'key' => true, + 'KEY' => true, + 'kEy' => true, + + 'foo' => false, + 'value' => false, + ); + + $array = new CaseInsensitiveArray($input); + + foreach ($expectations as $key => $expectation) { + if ($expectation) { + $this->assertTrue(isset($array[$key])); + } else { + $this->assertFalse(isset($array[$key])); + } + } + } + + public function testOffsetGet() { + $input = array('key' => 'value'); + $expectations = array( + 'key' => 'value', + 'KEY' => 'value', + 'kEy' => 'value', + + 'foo' => null, + 'value' => null, + ); + + $array = new CaseInsensitiveArray($input); + + foreach ($expectations as $key => $expectation) { + $this->assertEqual($expectation, @$array[$key]); + } + } + + public function testOffsetSet() { + $input = array(); + $data = array( + 'key' => 'foo', + 'KEY' => 'bar', + 'kEy' => 'baz', + ); + $expected = array('key' => 'baz'); + + $array = new CaseInsensitiveArray($input); + + foreach ($data as $key => $value) { + $array[$key] = $value; + } + + $this->assertEqual($expected, $array->toArray()); + } + + public function testOffsetUnset() { + $input = array('key' => 'value'); + $data = array( + 'KEY', + ); + $expected = array(); + + $array = new CaseInsensitiveArray($input); + + foreach ($data as $key) { + unset($array[$key]); + } + + $this->assertEqual($expected, $array->toArray()); + } + +} diff --git a/src/utils/__tests__/MFilterTestHelper.php b/src/utils/__tests__/MFilterTestHelper.php new file mode 100644 index 00000000..4a6ae20d --- /dev/null +++ b/src/utils/__tests__/MFilterTestHelper.php @@ -0,0 +1,27 @@ +h = $h_value; + $this->i = $i_value; + $this->j = $j_value; + } + + public function getH() { + return $this->h; + } + + public function getI() { + return $this->i; + } + + public function getJ() { + return $this->j; + } + +} diff --git a/src/utils/__tests__/PhutilArrayTestCase.php b/src/utils/__tests__/PhutilArrayTestCase.php new file mode 100644 index 00000000..e8140463 --- /dev/null +++ b/src/utils/__tests__/PhutilArrayTestCase.php @@ -0,0 +1,72 @@ +assertEqual(0, $a[99]); + $a[99] = 1; + $this->assertEqual(1, $a[99]); + + $a->setDefaultValue('default'); + $this->assertEqual('default', $a['key']); + + $this->assertEqual( + array( + 99 => 1, + 'key' => 'default', + ), + $a->toArray()); + + $init = array( + 'apple' => 'red', + ); + + $b = new PhutilArrayWithDefaultValue($init); + $this->assertEqual($init, $b->toArray()); + + $fruits = array( + 'apple', + 'cherry', + 'banana', + 'cherry', + 'cherry', + 'apple', + 'banana', + 'plum', + 'cherry', + 'cherry', + ); + + $counts = new PhutilArrayWithDefaultValue(); + foreach ($fruits as $fruit) { + $counts[$fruit] += 1; + } + $this->assertEqual( + array( + 'apple' => 2, + 'cherry' => 5, + 'banana' => 2, + 'plum' => 1, + ), + $counts->toArray()); + + $masks = array( + 1, + 2, + 4, + ); + + $bitmask = new PhutilArrayWithDefaultValue(); + foreach ($masks as $mask) { + $bitmask['value'] |= $mask; + } + + $this->assertEqual(7, $bitmask['value']); + } + +} diff --git a/src/utils/__tests__/PhutilBufferedIteratorTestCase.php b/src/utils/__tests__/PhutilBufferedIteratorTestCase.php new file mode 100644 index 00000000..7db6b4e6 --- /dev/null +++ b/src/utils/__tests__/PhutilBufferedIteratorTestCase.php @@ -0,0 +1,25 @@ +setPageSize(3); + $iterator->setExampleData($expect); + + $results = array(); + foreach ($iterator as $key => $value) { + $results[$key] = $value; + } + + $this->assertEqual( + $expect, + $results); + } + +} diff --git a/src/utils/__tests__/PhutilChunkedIteratorTestCase.php b/src/utils/__tests__/PhutilChunkedIteratorTestCase.php new file mode 100644 index 00000000..2f9a55bb --- /dev/null +++ b/src/utils/__tests__/PhutilChunkedIteratorTestCase.php @@ -0,0 +1,29 @@ + 1, 1 => 3), + array(2 => 5), + ); + + $iterator = new PhutilChunkedIterator( + new ArrayIterator(array(1, 3, 5)), + 2); + + $this->assertEqual( + $expect, + iterator_to_array($iterator)); + + for ($i = 0; $i < 2; $i++) { + foreach ($iterator as $key => $actual) { + $this->assertEqual(idx($expect, $key), $actual); + } + } + } + +} diff --git a/src/utils/__tests__/PhutilCowsayTestCase.php b/src/utils/__tests__/PhutilCowsayTestCase.php new file mode 100644 index 00000000..eaed7fa0 --- /dev/null +++ b/src/utils/__tests__/PhutilCowsayTestCase.php @@ -0,0 +1,60 @@ +setTemplate($template); + + if (idx($spec, 'text') !== null) { + $cowsay->setText($spec['text']); + } + + if (idx($spec, 'eyes') !== null) { + $cowsay->setEyes($spec['eyes']); + } + + if (idx($spec, 'tongue') !== null) { + $cowsay->setTongue($spec['tongue']); + } + + if (idx($spec, 'action') !== null) { + $cowsay->setAction($spec['action']); + } + + $actual = $cowsay->renderCow(); + + $this->assertEqual( + rtrim($expect), + rtrim($actual), + pht('Cowsay Test Case "%s"', $test)); + } + } + +} diff --git a/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php b/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php new file mode 100644 index 00000000..1328fe84 --- /dev/null +++ b/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php @@ -0,0 +1,207 @@ +assertDistance(0, '', ''); + $this->assertDistance(27, '', 'xxx', 9); + $this->assertDistance(27, 'xxx', '', 1, 9); + + // Both inputs identical. + $this->assertDistance(0, 'x', 'x'); + $this->assertDistance(0, 'xyzabc', 'xyzabc'); + + // Simple edits. + $this->assertDistance(1, 'cat', 'car'); + $this->assertDistance(1, 'cat', 'cut'); + $this->assertDistance(1, 'cat', 'bat'); + $this->assertDistance(2, 'cat', 'bar'); + $this->assertDistance(3, 'cat', 'dog'); + + // Inserts. + $this->assertDistance(1, 'cat', 'cats'); + $this->assertDistance(1, 'cat', 'cast'); + $this->assertDistance(1, 'cat', 'xcat'); + $this->assertDistance(1, 'cat', 'cxat'); + + // Deletes. + $this->assertDistance(1, 'cat', 'ca'); + $this->assertDistance(1, 'cat', 'ct'); + $this->assertDistance(1, 'cat', 'at'); + + // Replacements. + $this->assertDistance(1, 'xxxxx', 'xxxxy'); + $this->assertDistance(1, 'xxxxx', 'xxyxx'); + $this->assertDistance(1, 'yxxxx', 'xxxxx'); + + // Costs. + $this->assertDistance(27, 'x', 'xxxx', 9); + $this->assertDistance(27, 'xxxx', 'x', 1, 9); + $this->assertDistance(27, 'xxxxx', 'xyyyx', 5, 5, 9); + + // Misc. + $this->assertDistance( + 13, + 'The quick brown fox jumped over the lazy dog!', + // dddddd r ii i iii + 'The brown fox pumped over those lazy dogs!~~~'); + } + + public function testDamerauEditDistance() { + + // Simple adjacent transpositions. + $this->assertDistance(1, 'abcd', 'abdc', 3, 3, 3, 1); + $this->assertDistance(1, 'abcd', 'bacd', 3, 3, 3, 1); + $this->assertDistance(2, 'abcd', 'badc', 3, 3, 3, 1); + + // Transpositions with other edits. + $this->assertDistance(7, 'abcd', 'baaa', 3, 3, 3, 1); + $this->assertDistance(7, 'abcd', 'babb', 3, 3, 3, 1); + + // Sequences of adjacent transpositions. + $this->assertDistance(3, 'abcd', 'cbad', 3, 3, 3, 1); + $this->assertDistance(5, 'abcd', 'dbca', 3, 3, 3, 1); + + // Misc. + $this->assertDistance( + 11, + 'Cozy lummox gives smart squid who asks for job pen.', + // t d r i i i ttt ii + 'Cozy lummxo give smarp squid, whom tasks for boj a pen.'); + } + + public function testEditString() { + $this->assertEditString('', '', ''); + $this->assertEditString('iii', '', 'aaa'); + $this->assertEditString('ddd', 'aaa', ''); + + $this->assertEditString('sss', 'aaa', 'aaa'); + $this->assertEditString( + 'xssisssisx', + 'Qz(ab)zQ', + 'Rz((ab))zR', + 1, 1, 1, null, 0.001); + + $this->assertEditString('xxs', 'cat', 'rot'); + + $this->assertEditString( + 'xxsssxxsssixsxxxsssdssssssssxssxsixsissssddddsdxxsssss', + 'Cozy lummox gives smart squid who asks for job pen.', + 'Lazy hammock takes mart squad that basks in pen.'); + } + + public function testDamerauEditString() { + $this->assertEditString('xxss', 'land', 'alnd'); + $this->assertEditString('ttss', 'land', 'alnd', 1, 1, 1, 1); + $this->assertEditString('tsts', 'land', 'nald', 3, 3, 3, 1); + } + + public function testEditMatrixMaximumLength() { + // These tests are hitting the maximum length limit; the expected costs + // and strings are degenerate. + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(3) + ->setDeleteCost(7) + ->setMaximumLength(1) + ->setSequences(array('X', 'a', 'a', 'Y'), array('Q', 'a', 'a', 'R')); + + $this->assertEqual( + 40, + $matrix->getEditDistance()); + + $this->assertEqual( + 'ddddiiii', + $matrix->getEditString()); + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(3) + ->setDeleteCost(7) + ->setMaximumLength(1) + ->setSequences( + array('f', 'f', 'X', 'a', 'a', 'Y', 'g', 'g'), + array('f', 'f', 'Q', 'a', 'a', 'R', 'g', 'g')); + + $this->assertEqual( + 40, + $matrix->getEditDistance()); + + $this->assertEqual( + 'ssddddiiiiss', + $matrix->getEditString()); + } + + private function assertDistance( + $expect, + $x, $y, + $ins = 1, $del = 1, + $rep = 1, $trn = null, + $alt = 0) { + + $matrix = $this->buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt); + $cost = $matrix->getEditDistance(); + + $desc = array($ins, $del, $rep, ($trn === null ? '-' : $trn)); + $desc = implode(', ', $desc); + + $this->assertEqual( + $expect, + $cost, + pht( + "Edit distance of '%s' -> '%s' with costs (%s).", + $x, + $y, + $desc)); + } + + private function assertEditString( + $expect, + $x, $y, + $ins = 1, $del = 1, + $rep = 1, $trn = null, + $alt = 0) { + + $matrix = $this->buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt); + $matrix->setComputeString(true); + + $string = $matrix->getEditString(); + + $desc = array($ins, $del, $rep); + $desc[] = ($trn === null ? '-' : $trn); + $desc[] = ($alt === 0 ? '-' : $alt); + $desc = implode(', ', $desc); + + $this->assertEqual( + $expect, + $string, + pht( + "Edit string of '%s' -> '%s' with costs (%s).", + $x, + $y, + $desc)); + } + + private function buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt) { + if (!strlen($x)) { + $xv = array(); + } else { + $xv = str_split($x); + } + + if (!strlen($y)) { + $yv = array(); + } else { + $yv = str_split($y); + } + + return id(new PhutilEditDistanceMatrix()) + ->setSequences($xv, $yv) + ->setInsertCost($ins) + ->setDeleteCost($del) + ->setReplaceCost($rep) + ->setTransposeCost($trn) + ->setAlterCost($alt); + } + +} diff --git a/src/utils/__tests__/PhutilHashingIteratorTestCase.php b/src/utils/__tests__/PhutilHashingIteratorTestCase.php new file mode 100644 index 00000000..121bf0d8 --- /dev/null +++ b/src/utils/__tests__/PhutilHashingIteratorTestCase.php @@ -0,0 +1,45 @@ +setAlgorithm($algorithm); + + $rope = new PhutilRope(); + foreach ($hashing_iterator as $block) { + $rope->append($block); + } + + $expect_data = Filesystem::readFile($path); + $actual_data = $rope->getAsString(); + + $this->assertEqual( + $expect_data, + $actual_data, + pht('Data should be read correctly.')); + + $expect_hash = + 'd50af03db6c8b63084664f352d12bffb8f58022bdd67e3aba21f01e11c3b8939'; + + $single_hash = hash($algorithm, $expect_data, $raw_output = false); + $actual_hash = $hashing_iterator->getHash(); + + $this->assertEqual( + $expect_hash, + $single_hash, + pht('Expected hash should match freshly computed hash.')); + + $this->assertEqual( + $expect_hash, + $actual_hash, + pht('Expected hash should also match iterator actual hash.')); + } + +} diff --git a/src/utils/__tests__/PhutilLunarPhaseTestCase.php b/src/utils/__tests__/PhutilLunarPhaseTestCase.php new file mode 100644 index 00000000..ce004f51 --- /dev/null +++ b/src/utils/__tests__/PhutilLunarPhaseTestCase.php @@ -0,0 +1,58 @@ +assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + // May 22, 2005 + $moon = new PhutilLunarPhase(1116745200); + $this->assertTrue($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + // May 23, 2005 + $moon = new PhutilLunarPhase(1116831600); + $this->assertTrue($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // May 30, 2005 + $moon = new PhutilLunarPhase(1117436400); + $this->assertFalse($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // June 05, 2005 + $moon = new PhutilLunarPhase(1117954800); + $this->assertFalse($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // June 06, 2005 + $moon = new PhutilLunarPhase(1118041200); + $this->assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // Oct 4, 2013 + $moon = new PhutilLunarPhase(1380897327); + $this->assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + } + + +} diff --git a/src/utils/__tests__/PhutilRopeTestCase.php b/src/utils/__tests__/PhutilRopeTestCase.php new file mode 100644 index 00000000..a397f8d9 --- /dev/null +++ b/src/utils/__tests__/PhutilRopeTestCase.php @@ -0,0 +1,56 @@ +append('aaa'); + $rope->append('bbb'); + + $this->assertEqual(6, $rope->getByteLength()); + $this->assertEqual('aaabbb', $rope->getAsString()); + + $rope->removeBytesFromHead(2); + + $this->assertEqual(4, $rope->getByteLength()); + $this->assertEqual('abbb', $rope->getAsString()); + + $rope->removeBytesFromHead(4); + + $this->assertEqual(0, $rope->getByteLength()); + $this->assertEqual('', $rope->getAsString()); + } + + public function testMoreRopeOperations() { + $rope = new PhutilRope(); + $rope->append('aaa'); + $rope->append('bbb'); + $rope->append('ccc'); + $rope->append('rrrrddddddddd'); + $rope->removeBytesFromHead(4); + + $string = $rope->getAsString(); + $this->assertEqual('bbcccrrrrddddddddd', $string); + $this->assertEqual(strlen($string), $rope->getByteLength()); + + $rope = new PhutilRope(); + $rope->append('aaa'); + $rope->append('bbb'); + $rope->removeBytesFromHead(6); + + $string = $rope->getAsString(); + $this->assertEqual('', $string); + $this->assertEqual(0, $rope->getByteLength()); + + + $rope = new PhutilRope(); + $rope->append('a'); + $rope->append('b'); + $rope->append('c'); + $rope->removeBytesFromHead(1024); + + $string = $rope->getAsString(); + $this->assertEqual('', $string); + $this->assertEqual(0, $rope->getByteLength()); + } +} diff --git a/src/utils/__tests__/PhutilSystemTestCase.php b/src/utils/__tests__/PhutilSystemTestCase.php new file mode 100644 index 00000000..447a79d7 --- /dev/null +++ b/src/utils/__tests__/PhutilSystemTestCase.php @@ -0,0 +1,43 @@ + array( + 'total' => 16503578624, + 'free' => 1732366336, + ), + ); + + $dir = dirname(__FILE__).'/memory'; + foreach ($tests as $input => $expect) { + $raw = Filesystem::readFile($dir.'/'.$input); + $actual = PhutilSystem::parseVMStat($raw); + $this->assertEqual( + $expect, + $actual, + pht('Parse of "%s".', $input)); + } + } + + public function testParseMeminfo() { + $tests = array( + 'meminfo.ubuntu14.txt' => array( + 'total' => 7843336192, + 'free' => 3758297088, + ), + ); + + $dir = dirname(__FILE__).'/memory'; + foreach ($tests as $input => $expect) { + $raw = Filesystem::readFile($dir.'/'.$input); + $actual = PhutilSystem::parseMemInfo($raw); + $this->assertEqual( + $expect, + $actual, + pht('Parse of "%s".', $input)); + } + } + +} diff --git a/src/utils/__tests__/PhutilUTF8TestCase.php b/src/utils/__tests__/PhutilUTF8TestCase.php new file mode 100644 index 00000000..84c35cb3 --- /dev/null +++ b/src/utils/__tests__/PhutilUTF8TestCase.php @@ -0,0 +1,813 @@ +assertEqual($input, phutil_utf8ize($input)); + } + + public function testUTF8izeUTF8Ignored() { + $input = "\xc3\x9c \xc3\xbc \xe6\x9d\xb1!"; + $this->assertEqual($input, phutil_utf8ize($input)); + } + + public function testUTF8izeLongStringNosegfault() { + // For some reason my laptop is segfaulting on long inputs inside + // preg_match(). Forestall this craziness in the common case, at least. + phutil_utf8ize(str_repeat('x', 1024 * 1024)); + $this->assertTrue(true); + } + + public function testUTF8izeInvalidUTF8Fixed() { + $input = + "\xc3 this has \xe6\x9d some invalid utf8 \xe6"; + $expect = + "\xEF\xBF\xBD this has \xEF\xBF\xBD\xEF\xBF\xBD some invalid utf8 ". + "\xEF\xBF\xBD"; + $result = phutil_utf8ize($input); + $this->assertEqual($expect, $result); + } + + public function testUTF8izeOwlIsCuteAndFerocious() { + // This was once a ferocious owl when we used to use "?" as the replacement + // character instead of U+FFFD, but now he is sort of not as cute or + // ferocious. + $input = "M(o\xEE\xFF\xFFo)M"; + $expect = "M(o\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBDo)M"; + $result = phutil_utf8ize($input); + $this->assertEqual($expect, $result); + } + + public function testOverlongFormFiltering() { + $bad = "\xEF\xBF\xBD"; + + $map = array( + 'quack' => 'quack', + + // This is U+1000, a valid character. + "\xE1\x80\x80" => "\xE1\x80\x80", + + // This is a 2-byte encoding of U+0000. + "\xC0\x80" => "{$bad}{$bad}", + + // This is a 3-byte encoding of U+0020. + "\xE0\x80\xA0" => "{$bad}{$bad}{$bad}", + + "A \xE0\x83\x83" => "A {$bad}{$bad}{$bad}", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8ize($input); + $this->assertEqual( + $expect, + $actual, + pht('Overlong form canonicalization of: %s', $input)); + } + } + + public function testSurrogateFiltering() { + $bad = "\xEF\xBF\xBD"; + + $map = array( + "A \xED\xA9\x98" => "A {$bad}{$bad}{$bad}", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8ize($input); + $this->assertEqual( + $expect, + $actual, + pht('Surrogate filtering: %s', $input)); + } + } + + + public function testUTF8CodepointEncoding() { + $map = array( + 0x20 => ' ', + 0x7E => '~', + 0xE9 => "\xC3\xA9", + 0x2603 => "\xE2\x98\x83", + 0x1F417 => "\xF0\x9F\x90\x97", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8_encode_codepoint($input); + $this->assertEqual( + $expect, + $actual, + pht('UTF8 codepoint encoding of "%s".', $input)); + } + } + + public function testUTF8len() { + $strings = array( + '' => 0, + 'x' => 1, + "\xEF\xBF\xBD" => 1, + "x\xe6\x9d\xb1y" => 3, + 'xyz' => 3, + 'quack' => 5, + ); + foreach ($strings as $str => $expect) { + $this->assertEqual($expect, phutil_utf8_strlen($str), 'Length of '.$str); + } + } + + public function testUTF8v() { + $strings = array( + '' => array(), + 'x' => array('x'), + 'quack' => array('q', 'u', 'a', 'c', 'k'), + "x\xe6\x9d\xb1y" => array('x', "\xe6\x9d\xb1", 'y'), + + // This is a combining character. + "x\xCD\xA0y" => array('x', "\xCD\xA0", 'y'), + ); + foreach ($strings as $str => $expect) { + $this->assertEqual($expect, phutil_utf8v($str), 'Vector of '.$str); + } + } + + public function testUTF8vCodepoints() { + $strings = array( + '' => array(), + 'x' => array(0x78), + 'quack' => array(0x71, 0x75, 0x61, 0x63, 0x6B), + "x\xe6\x9d\xb1y" => array(0x78, 0x6771, 0x79), + + "\xC2\xBB" => array(0x00BB), + "\xE2\x98\x83" => array(0x2603), + "\xEF\xBF\xBF" => array(0xFFFF), + "\xF0\x9F\x92\xA9" => array(0x1F4A9), + + // This is a combining character. + "x\xCD\xA0y" => array(0x78, 0x0360, 0x79), + ); + foreach ($strings as $str => $expect) { + $this->assertEqual( + $expect, + phutil_utf8v_codepoints($str), + pht('Codepoint Vector of %s', $str)); + } + } + + public function testUTF8ConsoleStrlen() { + $strings = array( + '' => 0, + "\0" => 0, + 'x' => 1, + + // Double-width chinese character. + "\xe6\x9d\xb1" => 2, + + // Combining character. + "x\xCD\xA0y" => 2, + + // Combining plus double-width. + "\xe6\x9d\xb1\xCD\xA0y" => 3, + + // Colors and formatting. + "\x1B[1mx\x1B[m" => 1, + "\x1B[1m\x1B[31mx\x1B[m" => 1, + ); + foreach ($strings as $str => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_console_strlen($str), + pht('Console Length of %s', $str)); + } + } + + public function testUTF8shorten() { + $inputs = array( + array('1erp derp derp', 9, '', '1erp derp'), + array('2erp derp derp', 12, '...', '2erp derp...'), + array('derpxderpxderp', 12, '...', 'derpxderp...'), + array("derp\xE2\x99\x83derpderp", 12, '...', "derp\xE2\x99\x83derp..."), + array('', 12, '...', ''), + array('derp', 12, '...', 'derp'), + array('11111', 5, '2222', '11111'), + array('111111', 5, '2222', '12222'), + + array('D1rp. Derp derp.', 7, '...', 'D1rp.'), + + // "D2rp." is a better shortening of this, but it's dramatically more + // complicated to implement with the newer byte/glyph/character + // shortening code. + array('D2rp. Derp derp.', 5, '...', 'D2...'), + array('D3rp. Derp derp.', 4, '...', 'D...'), + array('D4rp. Derp derp.', 14, '...', 'D4rp. Derp...'), + array('D5rpderp, derp derp', 16, '...', 'D5rpderp...'), + array('D6rpderp, derp derp', 17, '...', 'D6rpderp, derp...'), + + // Strings with combining characters. + array("Gr\xCD\xA0mpyCatSmiles", 8, '...', "Gr\xCD\xA0mpy..."), + array("X\xCD\xA0\xCD\xA0\xCD\xA0Y", 1, '', "X\xCD\xA0\xCD\xA0\xCD\xA0"), + + array( + 'Derp, supercalafragalisticexpialadoshus', + 30, + '...', + 'Derp, supercalafragalistice...', + ), + + // If a string has only word-break characters in it, we should just cut + // it, not produce only the terminal. + array('((((((((((', 8, '...', '(((((...'), + + // Terminal is longer than requested input. + array('derp', 3, 'quack', 'quack'), + + array( + 'O123: com/oracle/java/path/to/application/source/ThingFactory.java', + 32, + '...', + 'O123: com/oracle/java/path/to...', + ), + ); + + foreach ($inputs as $input) { + list($string, $length, $terminal, $expect) = $input; + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs($length) + ->setTerminator($terminal) + ->truncateString($string); + $this->assertEqual($expect, $result, pht('Shortening of %s', $string)); + } + } + + public function testUTF8StringTruncator() { + $cases = array( + array( + "o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0", + 6, + "o\xCD\xA0!", + 6, + "o\xCD\xA0o\xCD\xA0!", + 6, + "o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0", + ), + array( + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + 6, + '!', + 6, + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + 6, + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + ), + array( + "X\xCD\xA0\xCD\xA0\xCD\xA0YZ", + 6, + '!', + 5, + "X\xCD\xA0\xCD\xA0\xCD\xA0!", + 2, + "X\xCD\xA0\xCD\xA0\xCD\xA0!", + ), + array( + "\xE2\x98\x83\xE2\x98\x83\xE2\x98\x83\xE2\x98\x83", + 4, + "\xE2\x98\x83!", + 3, + "\xE2\x98\x83\xE2\x98\x83!", + 3, + "\xE2\x98\x83\xE2\x98\x83!", + ), + ); + + foreach ($cases as $case) { + list($input, $b_len, $b_out, $p_len, $p_out, $g_len, $g_out) = $case; + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumBytes($b_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($b_out, $result, pht('byte-short of %s', $input)); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumCodepoints($p_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($p_out, $result, pht('codepoint-short of %s', $input)); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs($g_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($g_out, $result, pht('glyph-short of %s', $input)); + } + } + + public function testUTF8LargeTruncation() { + // This is testing that our performance is reasonable when truncating a + // large input into a small output. Runtime should be on the order of the + // output size, not the input size. + + $whale = "\xF0\x9F\x90\xB3"; + $input = str_repeat($whale, 1024 * 1024); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumBytes(16) + ->setTerminator('!') + ->truncateString($input); + + $this->assertEqual( + str_repeat($whale, 3).'!', + $result, + pht('Large truncation.')); + } + + public function testUTF8Wrap() { + $inputs = array( + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'aa&aaaa', + 3, + array( + 'aa&', + 'aaa', + 'a', + ), + ), + array( + "aa\xe6\x9d\xb1aaaa", + 3, + array( + "aa\xe6\x9d\xb1", + 'aaa', + 'a', + ), + ), + array( + '', + 80, + array( + ), + ), + array( + 'a', + 80, + array( + 'a', + ), + ), + ); + + foreach ($inputs as $input) { + list($string, $width, $expect) = $input; + $this->assertEqual( + $expect, + phutil_utf8_hard_wrap_html($string, $width), + pht("Wrapping of '%s'.", $string)); + } + } + + public function testUTF8NonHTMLWrap() { + $inputs = array( + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'abracadabra!', + 4, + array( + 'abra', + 'cada', + 'bra!', + ), + ), + array( + '', + 10, + array( + ), + ), + array( + 'a', + 20, + array( + 'a', + ), + ), + array( + "aa\xe6\x9d\xb1aaaa", + 3, + array( + "aa\xe6\x9d\xb1", + 'aaa', + 'a', + ), + ), + array( + "mmm\nmmm\nmmmm", + 3, + array( + 'mmm', + 'mmm', + 'mmm', + 'm', + ), + ), + ); + + foreach ($inputs as $input) { + list($string, $width, $expect) = $input; + $this->assertEqual( + $expect, + phutil_utf8_hard_wrap($string, $width), + pht("Wrapping of '%s'", $string)); + } + } + + public function testUTF8ConvertParams() { + $caught = null; + try { + phutil_utf8_convert('', 'utf8', ''); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught, pht('Requires source encoding.')); + + $caught = null; + try { + phutil_utf8_convert('', '', 'utf8'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught, pht('Requires target encoding.')); + } + + + public function testUTF8Convert() { + if (!function_exists('mb_convert_encoding')) { + $this->assertSkipped(pht('Requires %s extension.', 'mbstring')); + } + + // "[ae]gis se[n]or [(c)] 1970 [+/-] 1 [degree]" + $input = "\xE6gis SE\xD1OR \xA9 1970 \xB11\xB0"; + $expect = "\xC3\xA6gis SE\xC3\x91OR \xC2\xA9 1970 \xC2\xB11\xC2\xB0"; + $output = phutil_utf8_convert($input, 'UTF-8', 'ISO-8859-1'); + + $this->assertEqual($expect, $output, pht('Conversion from ISO-8859-1.')); + + $caught = null; + try { + phutil_utf8_convert('xyz', 'moon language', 'UTF-8'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue((bool)$caught, pht('Conversion with bogus encoding.')); + } + + + public function testUTF8ucwords() { + $tests = array( + '' => '', + 'x' => 'X', + 'X' => 'X', + 'five short graybles' => 'Five Short Graybles', + 'xXxSNiPeRKiLLeRxXx' => 'XXxSNiPeRKiLLeRxXx', + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_ucwords($input), + 'phutil_utf8_ucwords("'.$input.'")'); + } + } + + public function testUTF8strtolower() { + $tests = array( + '' => '', + 'a' => 'a', + 'A' => 'a', + '!' => '!', + 'OMG!~ LOLolol ROFLwaffle11~' => 'omg!~ lololol roflwaffle11~', + "\xE2\x98\x83" => "\xE2\x98\x83", + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_strtolower($input), + 'phutil_utf8_strtolower("'.$input.'")'); + } + } + + public function testUTF8strtoupper() { + $tests = array( + '' => '', + 'a' => 'A', + 'A' => 'A', + '!' => '!', + 'Cats have 9 lives.' => 'CATS HAVE 9 LIVES.', + "\xE2\x98\x83" => "\xE2\x98\x83", + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_strtoupper($input), + 'phutil_utf8_strtoupper("'.$input.'")'); + } + } + + public function testUTF8IsCombiningCharacter() { + $character = "\xCD\xA0"; + $this->assertEqual( + true, + phutil_utf8_is_combining_character($character)); + + $character = 'a'; + $this->assertEqual( + false, + phutil_utf8_is_combining_character($character)); + } + + public function testUTF8vCombined() { + // Empty string. + $string = ''; + $this->assertEqual(array(), phutil_utf8v_combined($string)); + + // Single character. + $string = 'x'; + $this->assertEqual(array('x'), phutil_utf8v_combined($string)); + + // No combining characters. + $string = 'cat'; + $this->assertEqual(array('c', 'a', 't'), phutil_utf8v_combined($string)); + + // String with a combining character in the middle. + $string = "ca\xCD\xA0t"; + $this->assertEqual( + array('c', "a\xCD\xA0", 't'), + phutil_utf8v_combined($string)); + + // String starting with a combined character. + $string = "c\xCD\xA0at"; + $this->assertEqual( + array("c\xCD\xA0", 'a', 't'), + phutil_utf8v_combined($string)); + + // String with trailing combining character. + $string = "cat\xCD\xA0"; + $this->assertEqual( + array('c', 'a', "t\xCD\xA0"), + phutil_utf8v_combined($string)); + + // String with muliple combined characters. + $string = "c\xCD\xA0a\xCD\xA0t\xCD\xA0"; + $this->assertEqual( + array("c\xCD\xA0", "a\xCD\xA0", "t\xCD\xA0"), + phutil_utf8v_combined($string)); + + // String with multiple combining characters. + $string = "ca\xCD\xA0\xCD\xA0t"; + $this->assertEqual( + array('c', "a\xCD\xA0\xCD\xA0", 't'), + phutil_utf8v_combined($string)); + + // String beginning with a combining character. + $string = "\xCD\xA0\xCD\xA0c"; + $this->assertEqual( + array(" \xCD\xA0\xCD\xA0", 'c'), + phutil_utf8v_combined($string)); + } + + public function testUTF8BMPSegfaults() { + // This test case fails by segfaulting, or passes by not segfaulting. See + // the function implementation for details. + $input = str_repeat("\xEF\xBF\xBF", 1024 * 32); + phutil_is_utf8_with_only_bmp_characters($input); + + $this->assertTrue(true); + } + + public function testCJK() { + $map = array( + '' => false, + 'a' => false, + '.' => false, + "\xE2\x98\x83" => false, + "\xE5\xA0\xB1" => true, + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8_is_cjk($input); + + $this->assertEqual($expect, $actual, pht('CJK: "%s"', $input)); + } + } + + public function testUTF8BMP() { + $tests = array( + '' => array( + true, + true, + pht('empty string'), + ), + 'a' => array( + true, + true, + 'a', + ), + "a\xCD\xA0\xCD\xA0" => array( + true, + true, + pht('%s with combining', 'a'), + ), + "\xE2\x98\x83" => array( + true, + true, + pht('snowman'), + ), + + // This is the last character in BMP, U+FFFF. + "\xEF\xBF\xBF" => array( + true, + true, + 'U+FFFF', + ), + + // This isn't valid. + "\xEF\xBF\xC0" => array( + false, + false, + pht('Invalid, byte range.'), + ), + + // This is an invalid nonminimal representation. + "\xF0\x81\x80\x80" => array( + false, + false, + pht('Nonminimal 4-byte character.'), + ), + + // This is the first character above BMP, U+10000. + "\xF0\x90\x80\x80" => array( + true, + false, + 'U+10000', + ), + "\xF0\x9D\x84\x9E" => array( + true, + false, + 'gclef', + ), + + "musical \xF0\x9D\x84\x9E g-clef" => array( + true, + false, + pht('gclef text'), + ), + "\xF0\x9D\x84" => array( + false, + false, + pht('Invalid, truncated.'), + ), + + "\xE0\x80\x80" => array( + false, + false, + pht('Nonminimal 3-byte character.'), + ), + + // Partial BMP characters. + "\xCD" => array( + false, + false, + pht('Partial 2-byte character.'), + ), + "\xE0\xA0" => array( + false, + false, + pht('Partial BMP 0xE0 character.'), + ), + "\xE2\x98" => array( + false, + false, + pht('Partial BMP cahracter.'), + ), + ); + + foreach ($tests as $input => $test) { + list($expect_utf8, $expect_bmp, $test_name) = $test; + + // Depending on what's installed on the system, this may use an + // extension. + $this->assertEqual( + $expect_utf8, + phutil_is_utf8($input), + pht('is_utf(%s)', $test_name)); + + // Also test this against the pure PHP implementation, explicitly. + $this->assertEqual( + $expect_utf8, + phutil_is_utf8_slowly($input), + pht('is_utf_slowly(%s)', $test_name)); + + $this->assertEqual( + $expect_bmp, + phutil_is_utf8_with_only_bmp_characters($input), + pht('is_utf_bmp(%s)', $test_name)); + } + } + + public function testSystemLocaleManagement() { + $original_locale = phutil_get_system_locale(); + $this->assertTrue( + (strlen($original_locale) > 0), + pht('System has some identifiable locale.')); + + $this->assertFalse( + phutil_is_system_locale_available('duck.quack'), + pht('Imaginary locale should be unavailable.')); + + $this->assertEqual( + $original_locale, + phutil_get_system_locale(), + pht('Testing locale availability should not change the locale.')); + + $this->assertTrue( + phutil_is_system_locale_available($original_locale), + pht('The current locale should be available.')); + + $caught = null; + try { + phutil_set_system_locale('duck.quack'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof Exception), + pht('Setting an imaginary locale should raise an exception.')); + + // We need two locales for the next part because one of them might be the + // current locale, and we want to make sure we can actually change the + // locale value. + + // If the current locale was "zz_ZZ", and then we do this: + // + // set_locale("zz_ZZ"); + // assert("zz_ZZ" == get_locale()); + // + // ...the test could pass even if "set_locale(...)" does nothing. + + $has_us = phutil_is_system_locale_available('en_US.UTF-8'); + $has_gb = phutil_is_system_locale_available('en_GB.UTF-8'); + if (!$has_us || !$has_gb) { + $this->assertSkipped( + pht( + 'System does not have en_US + en_GB to do locale adjustment '. + 'tests.')); + } + + phutil_set_system_locale('en_US.UTF-8'); + $this->assertEqual( + 'en_US.UTF-8', + phutil_get_system_locale(), + pht('Set locale to en_US.')); + + phutil_set_system_locale('en_GB.UTF-8'); + $this->assertEqual( + 'en_GB.UTF-8', + phutil_get_system_locale(), + pht('Set locale to en_GB.')); + + // Put things back the way they were. + phutil_set_system_locale($original_locale); + } + +} diff --git a/src/utils/__tests__/PhutilUtilsTestCase.php b/src/utils/__tests__/PhutilUtilsTestCase.php new file mode 100644 index 00000000..530babcb --- /dev/null +++ b/src/utils/__tests__/PhutilUtilsTestCase.php @@ -0,0 +1,969 @@ +assertTrue($caught instanceof InvalidArgumentException); + } + + + public function testMFilterWithEmptyValueFiltered() { + $a = new MFilterTestHelper('o', 'p', 'q'); + $b = new MFilterTestHelper('o', '', 'q'); + $c = new MFilterTestHelper('o', 'p', 'q'); + + $list = array( + 'a' => $a, + 'b' => $b, + 'c' => $c, + ); + + $actual = mfilter($list, 'getI'); + $expected = array( + 'a' => $a, + 'c' => $c, + ); + + $this->assertEqual($expected, $actual); + } + + public function testMFilterWithEmptyValueNegateFiltered() { + $a = new MFilterTestHelper('o', 'p', 'q'); + $b = new MFilterTestHelper('o', '', 'q'); + $c = new MFilterTestHelper('o', 'p', 'q'); + + $list = array( + 'a' => $a, + 'b' => $b, + 'c' => $c, + ); + + $actual = mfilter($list, 'getI', true); + $expected = array( + 'b' => $b, + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterInvalidIndexThrowException() { + $caught = null; + try { + ifilter(array(), null); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + + public function testIFilterWithEmptyValueFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $actual = ifilter($list, 'i'); + $expected = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterIndexNotExistsAllFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $actual = ifilter($list, 'NoneExisting'); + $expected = array(); + + $this->assertEqual($expected, $actual); + } + + + public function testIFilterWithEmptyValueNegateFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $actual = ifilter($list, 'i', true); + $expected = array( + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterIndexNotExistsNotFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $actual = ifilter($list, 'NoneExisting', true); + $expected = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testmergevMergingBasicallyWorksCorrectly() { + $this->assertEqual( + array(), + array_mergev( + array( + // + ))); + + $this->assertEqual( + array(), + array_mergev( + array( + array(), + array(), + array(), + ))); + + $this->assertEqual( + array(1, 2, 3, 4, 5), + array_mergev( + array( + array(1, 2), + array(3), + array(), + array(4, 5), + ))); + + $not_valid = array( + 'scalar' => array(1), + 'array plus scalar' => array(array(), 1), + 'null' => array(null), + ); + + foreach ($not_valid as $key => $invalid_input) { + $caught = null; + try { + array_mergev($invalid_input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof InvalidArgumentException), + pht('%s invalid on %s', 'array_mergev()', $key)); + } + } + + public function testNonempty() { + $this->assertEqual( + 'zebra', + nonempty(false, null, 0, '', array(), 'zebra')); + + $this->assertEqual( + null, + nonempty()); + + $this->assertEqual( + false, + nonempty(null, false)); + + $this->assertEqual( + null, + nonempty(false, null)); + } + + protected function tryAssertInstancesOfArray($input) { + assert_instances_of($input, 'array'); + } + + protected function tryAssertInstancesOfStdClass($input) { + assert_instances_of($input, 'stdClass'); + } + + public function testAssertInstancesOf() { + $object = new stdClass(); + $inputs = array( + 'empty' => array(), + 'stdClass' => array($object, $object), + __CLASS__ => array($object, $this), + 'array' => array(array(), array()), + 'integer' => array($object, 1), + ); + + $this->tryTestCases( + $inputs, + array(true, true, false, false, false), + array($this, 'tryAssertInstancesOfStdClass'), + 'InvalidArgumentException'); + + $this->tryTestCases( + $inputs, + array(true, false, false, true, false), + array($this, 'tryAssertInstancesOfArray'), + 'InvalidArgumentException'); + } + + public function testAssertSameKeys() { + $cases = array( + array(true, array(), array()), + array(true, array(0), array(1)), + + array(false, array(0), array()), + array(false, array(), array(0)), + + array(false, array('a' => 1), array('b' => 1)), + + // Make sure "null" values survive "isset()" tests. + array(true, array('a' => 1), array('a' => null)), + + // Key order should not matter. + array(true, array('a' => 1, 'b' => 1), array('b' => 1, 'a' => 1)), + ); + + foreach ($cases as $case) { + list($same_keys, $expect, $input) = $case; + + $caught = null; + try { + assert_same_keys($expect, $input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertEqual($same_keys, ($caught === null)); + } + } + + public function testAssertStringLike() { + $this->assertEqual( + null, + assert_stringlike(null)); + + $this->assertEqual( + null, + assert_stringlike('')); + + $this->assertEqual( + null, + assert_stringlike('Hello World')); + + $this->assertEqual( + null, + assert_stringlike(1)); + + $this->assertEqual( + null, + assert_stringlike(9.9999)); + + $this->assertEqual( + null, + assert_stringlike(true)); + + $obj = new Exception('.'); + $this->assertEqual( + null, + assert_stringlike($obj)); + + $obj = (object)array(); + + try { + assert_stringlike($obj); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + + $array = array( + 'foo' => 'bar', + 'bar' => 'foo', + ); + + try { + assert_stringlike($array); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + + $tmp = new TempFile(); + $resource = fopen($tmp, 'r'); + + try { + assert_stringlike($resource); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + fclose($resource); + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + + public function testCoalesce() { + $this->assertEqual( + 'zebra', + coalesce(null, 'zebra')); + + $this->assertEqual( + null, + coalesce()); + + $this->assertEqual( + false, + coalesce(false, null)); + + $this->assertEqual( + false, + coalesce(null, false)); + } + + public function testHeadLast() { + $this->assertEqual( + 'a', + head(explode('.', 'a.b'))); + $this->assertEqual( + 'b', + last(explode('.', 'a.b'))); + } + + public function testHeadKeyLastKey() { + $this->assertEqual( + 'a', + head_key(array('a' => 0, 'b' => 1))); + $this->assertEqual( + 'b', + last_key(array('a' => 0, 'b' => 1))); + $this->assertEqual(null, head_key(array())); + $this->assertEqual(null, last_key(array())); + } + + public function testID() { + $this->assertEqual(true, id(true)); + $this->assertEqual(false, id(false)); + } + + public function testIdx() { + $array = array( + 'present' => true, + 'null' => null, + ); + $this->assertEqual(true, idx($array, 'present')); + $this->assertEqual(true, idx($array, 'present', false)); + $this->assertEqual(null, idx($array, 'null')); + $this->assertEqual(null, idx($array, 'null', false)); + $this->assertEqual(null, idx($array, 'missing')); + $this->assertEqual(false, idx($array, 'missing', false)); + } + + public function testSplitLines() { + $retain_cases = array( + '' => array(''), + 'x' => array('x'), + "x\n" => array("x\n"), + "\n" => array("\n"), + "\n\n\n" => array("\n", "\n", "\n"), + "\r\n" => array("\r\n"), + "x\r\ny\n" => array("x\r\n", "y\n"), + "x\ry\nz\r\n" => array("x\ry\n", "z\r\n"), + "x\ry\nz\r\n\n" => array("x\ry\n", "z\r\n", "\n"), + ); + + foreach ($retain_cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_split_lines($input, $retain_endings = true), + pht('(Retained) %s', addcslashes($input, "\r\n\\"))); + } + + $discard_cases = array( + '' => array(''), + 'x' => array('x'), + "x\n" => array('x'), + "\n" => array(''), + "\n\n\n" => array('', '', ''), + "\r\n" => array(''), + "x\r\ny\n" => array('x', 'y'), + "x\ry\nz\r\n" => array("x\ry", 'z'), + "x\ry\nz\r\n\n" => array("x\ry", 'z', ''), + ); + + foreach ($discard_cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_split_lines($input, $retain_endings = false), + pht('(Discarded) %s', addcslashes($input, "\r\n\\"))); + } + } + + public function testArrayFuse() { + $this->assertEqual(array(), array_fuse(array())); + $this->assertEqual(array('x' => 'x'), array_fuse(array('x'))); + } + + public function testArrayInterleave() { + $this->assertEqual(array(), array_interleave('x', array())); + $this->assertEqual(array('y'), array_interleave('x', array('y'))); + + $this->assertEqual( + array('y', 'x', 'z'), + array_interleave('x', array('y', 'z'))); + + $this->assertEqual( + array('y', 'x', 'z'), + array_interleave( + 'x', + array( + 'kangaroo' => 'y', + 'marmoset' => 'z', + ))); + + $obj1 = (object)array(); + $obj2 = (object)array(); + + $this->assertEqual( + array($obj1, $obj2, $obj1, $obj2, $obj1), + array_interleave( + $obj2, + array( + $obj1, + $obj1, + $obj1, + ))); + + $implode_tests = array( + '' => array(1, 2, 3), + 'x' => array(1, 2, 3), + 'y' => array(), + 'z' => array(1), + ); + + foreach ($implode_tests as $x => $y) { + $this->assertEqual( + implode('', array_interleave($x, $y)), + implode($x, $y)); + } + } + + public function testLoggableString() { + $this->assertEqual( + '', + phutil_loggable_string('')); + + $this->assertEqual( + "a\\nb", + phutil_loggable_string("a\nb")); + + $this->assertEqual( + "a\\x01b", + phutil_loggable_string("a\x01b")); + + $this->assertEqual( + "a\\x1Fb", + phutil_loggable_string("a\x1Fb")); + } + + public function testPhutilUnits() { + $cases = array( + '0 seconds in seconds' => 0, + '1 second in seconds' => 1, + '2 seconds in seconds' => 2, + '100 seconds in seconds' => 100, + '2 minutes in seconds' => 120, + '1 hour in seconds' => 3600, + '1 day in seconds' => 86400, + '3 days in seconds' => 259200, + '128 bits in bytes' => 16, + '1 byte in bytes' => 1, + '8 bits in bytes' => 1, + '1 minute in milliseconds' => 60000, + '2 minutes in microseconds' => 120000000, + ); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_units($input), + 'phutil_units("'.$input.'")'); + } + + $bad_cases = array( + 'quack', + '3 years in seconds', + '1 day in days', + '-1 minutes in seconds', + '1.5 minutes in seconds', + '7 bits in bytes', + '2 hours in bytes', + '1 dram in bytes', + '24 bits in seconds', + ); + + foreach ($bad_cases as $input) { + $caught = null; + try { + phutil_units($input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof InvalidArgumentException), + 'phutil_units("'.$input.'")'); + } + } + + public function testPhutilJSONDecode() { + $valid_cases = array( + '{}' => array(), + '[]' => array(), + '[1, 2]' => array(1, 2), + '{"a":"b"}' => array('a' => 'b'), + ); + + foreach ($valid_cases as $input => $expect) { + $result = phutil_json_decode($input); + $this->assertEqual($expect, $result, 'phutil_json_decode('.$input.')'); + } + + $invalid_cases = array( + '', + '"a"', + '{,}', + 'null', + '"null"', + ); + + foreach ($invalid_cases as $input) { + $caught = null; + try { + phutil_json_decode($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + } + } + + public function testPhutilINIDecode() { + // Skip the test if we are using an older version of PHP that doesn't + // have the `parse_ini_string` function. + try { + phutil_ini_decode(''); + } catch (PhutilMethodNotImplementedException $ex) { + $this->assertSkipped($ex->getMessage()); + } + + $valid_cases = array( + '' => array(), + 'foo=' => array('foo' => ''), + 'foo=bar' => array('foo' => 'bar'), + 'foo = bar' => array('foo' => 'bar'), + "foo = bar\n" => array('foo' => 'bar'), + "foo\nbar = baz" => array('bar' => 'baz'), + + "[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + "[foo]\n[bar]\nbaz = foo" => array( + 'foo' => array(), + 'bar' => array('baz' => 'foo'), + ), + "[foo]\nbar = baz\n\n[bar]\nbaz = foo" => array( + 'foo' => array('bar' => 'baz'), + 'bar' => array('baz' => 'foo'), + ), + + "; Comment\n[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + "# Comment\n[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + + "foo = true\n[bar]\nbaz = false" + => array('foo' => true, 'bar' => array('baz' => false)), + "foo = 1\nbar = 1.234" => array('foo' => 1, 'bar' => 1.234), + 'x = {"foo": "bar"}' => array('x' => '{"foo": "bar"}'), + ); + + foreach ($valid_cases as $input => $expect) { + $result = phutil_ini_decode($input); + $this->assertEqual($expect, $result, 'phutil_ini_decode('.$input.')'); + } + + $invalid_cases = array( + '[' => new PhutilINIParserException(), + ); + + foreach ($invalid_cases as $input => $expect) { + $caught = null; + try { + phutil_ini_decode($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof $expect); + } + } + + public function testCensorCredentials() { + $cases = array( + '' => '', + 'abc' => 'abc', + + // NOTE: We're liberal about censoring here, since we can't tell + // if this is a truncated password at the end of an input string + // or a domain name. The version with a "/" isn't censored. + 'http://example.com' => 'http://********', + 'http://example.com/' => 'http://example.com/', + + 'http://username@example.com' => 'http://********@example.com', + 'http://user:pass@example.com' => 'http://********@example.com', + + // We censor these because they might be truncated credentials at the end + // of the string. + 'http://user' => 'http://********', + "http://user\n" => "http://********\n", + + 'svn+ssh://user:pass@example.com' => 'svn+ssh://********@example.com', + ); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_censor_credentials($input), + pht('Credential censoring for: %s', $input)); + } + } + + public function testVarExport() { + // Constants + $this->assertEqual('null', phutil_var_export(null)); + $this->assertEqual('true', phutil_var_export(true)); + $this->assertEqual('false', phutil_var_export(false)); + $this->assertEqual("'quack'", phutil_var_export('quack')); + $this->assertEqual('1234567', phutil_var_export(1234567)); + + // Arrays + $this->assertEqual( + 'array()', + phutil_var_export(array())); + $this->assertEqual( + implode("\n", array( + 'array(', + ' 1,', + ' 2,', + ' 3,', + ')', + )), + phutil_var_export(array(1, 2, 3))); + $this->assertEqual( + implode("\n", array( + 'array(', + " 'foo' => 'bar',", + " 'bar' => 'baz',", + ')', + )), + phutil_var_export(array('foo' => 'bar', 'bar' => 'baz'))); + $this->assertEqual( + implode("\n", array( + 'array(', + " 'foo' => array(", + " 'bar' => array(", + " 'baz' => array(),", + ' ),', + ' ),', + ')', + )), + phutil_var_export( + array('foo' => array('bar' => array('baz' => array()))))); + + // NOTE: Object behavior differs across PHP versions. Older versions of + // PHP export objects as "stdClass::__set_state(array())". Newer versions + // of PHP (7.3+) export objects as "(object) array()". + } + + public function testFnmatch() { + $cases = array( + '' => array( + array(''), + array('.', '/'), + ), + '*' => array( + array('file'), + array('dir/', '/dir'), + ), + '**' => array( + array('file', 'dir/', '/dir', 'dir/subdir/file'), + array(), + ), + '**/file' => array( + array('file', 'dir/file', 'dir/subdir/file', 'dir/subdir/subdir/file'), + array('file/', 'file/dir'), + ), + 'file.*' => array( + array('file.php', 'file.a', 'file.'), + array('files.php', 'file.php/blah'), + ), + 'fo?' => array( + array('foo', 'fot'), + array('fooo', 'ffoo', 'fo/', 'foo/'), + ), + 'fo{o,t}' => array( + array('foo', 'fot'), + array('fob', 'fo/', 'foo/'), + ), + 'fo{o,\\,}' => array( + array('foo', 'fo,'), + array('foo/', 'fo,/'), + ), + 'fo{o,\\\\}' => array( + array('foo', 'fo\\'), + array('foo/', 'fo\\/'), + ), + '/foo' => array( + array('/foo'), + array('foo', '/foo/'), + ), + + // Tests for various `fnmatch` flags. + '*.txt' => array( + array( + 'file.txt', + + // FNM_PERIOD + '.secret-file.txt', + ), + array( + // FNM_PATHNAME + 'dir/file.txt', + + // FNM_CASEFOLD + 'file.TXT', + ), + '\\*.txt' => array( + array( + // FNM_NOESCAPE + '*.txt', + ), + array( + 'file.txt', + ), + ), + ), + ); + + $invalid = array( + '{', + 'asdf\\', + ); + + foreach ($cases as $input => $expect) { + list($matches, $no_matches) = $expect; + + foreach ($matches as $match) { + $this->assertTrue( + phutil_fnmatch($input, $match), + pht('Expecting "%s" to match "%s".', $input, $match)); + } + + foreach ($no_matches as $no_match) { + $this->assertFalse( + phutil_fnmatch($input, $no_match), + pht('Expecting "%s" not to match "%s".', $input, $no_match)); + } + } + + foreach ($invalid as $input) { + $caught = null; + try { + phutil_fnmatch($input, ''); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + } + + public function testJSONEncode() { + $in = array( + 'example' => "Not Valid UTF8: \x80", + ); + + $caught = null; + try { + $value = phutil_json_encode($in); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue(($caught instanceof Exception)); + } + + public function testHashComparisons() { + $tests = array( + array('1', '12', false), + array('0', '0e123', false), + array('0e123', '0e124', false), + array('', '0', false), + array('000', '0e0', false), + array('001', '002', false), + array('0', '', false), + array('987654321', '123456789', false), + array('A', 'a', false), + array('123456789', '123456789', true), + array('hunter42', 'hunter42', true), + ); + + foreach ($tests as $key => $test) { + list($u, $v, $expect) = $test; + $actual = phutil_hashes_are_identical($u, $v); + $this->assertEqual( + $expect, + $actual, + pht('Test Case: "%s" vs "%s"', $u, $v)); + } + } + + public function testVectorSortInt() { + $original = array( + ~PHP_INT_MAX, + -2147483648, + -5, + -3, + -1, + 0, + 1, + 2, + 3, + 100, + PHP_INT_MAX, + ); + + $items = $this->shuffleMap($original); + + foreach ($items as $key => $value) { + $items[$key] = (string)id(new PhutilSortVector()) + ->addInt($value); + } + + asort($items, SORT_STRING); + + $this->assertEqual( + array_keys($original), + array_keys($items)); + } + + public function testVectorSortString() { + $original = array( + '', + "\1", + 'A', + 'AB', + 'Z', + "Z\1", + 'ZZZ', + ); + + $items = $this->shuffleMap($original); + + foreach ($items as $key => $value) { + $items[$key] = (string)id(new PhutilSortVector()) + ->addString($value); + } + + asort($items, SORT_STRING); + + $this->assertEqual( + array_keys($original), + array_keys($items)); + } + + private function shuffleMap(array $map) { + $keys = array_keys($map); + shuffle($keys); + return array_select_keys($map, $keys); + } + + public function testQueryStringEncoding() { + $expect = array(); + + // As a starting point, we expect every character to encode as an "%XX" + // escaped version. + foreach (range(0, 255) as $byte) { + $c = chr($byte); + $expect[$c] = sprintf('%%%02X', $byte); + } + + // We expect these characters to not be escaped. + $ranges = array( + range('a', 'z'), + range('A', 'Z'), + range('0', '9'), + array('-', '.', '_', '~'), + ); + + foreach ($ranges as $range) { + foreach ($range as $preserve_char) { + $expect[$preserve_char] = $preserve_char; + } + } + + foreach (range(0, 255) as $byte) { + $c = chr($byte); + + $expect_c = $expect[$c]; + $expect_str = "{$expect_c}={$expect_c}"; + + $actual_str = phutil_build_http_querystring(array($c => $c)); + + $this->assertEqual( + $expect_str, + $actual_str, + pht('HTTP querystring for byte "%s".', sprintf('0x%02x', $byte))); + } + } + + public function testNaturalList() { + $cases = array( + array(true, array()), + array(true, array(0 => true, 1 => true, 2 => true)), + array(true, array('a', 'b', 'c')), + array(false, array(0 => true, 2 => true, 1 => true)), + array(false, array(1 => true)), + array(false, array('sound' => 'quack')), + ); + + foreach ($cases as $case) { + list($expect, $value) = $case; + $this->assertEqual($expect, phutil_is_natural_list($value)); + } + } + + +} diff --git a/src/utils/__tests__/TestAbstractDirectedGraph.php b/src/utils/__tests__/TestAbstractDirectedGraph.php new file mode 100644 index 00000000..b095da60 --- /dev/null +++ b/src/utils/__tests__/TestAbstractDirectedGraph.php @@ -0,0 +1,16 @@ +nodes = $nodes; + return $this; + } + + protected function loadEdges(array $nodes) { + return array_select_keys($this->nodes, $nodes); + } + +} diff --git a/src/utils/__tests__/cowsay/cube.expect b/src/utils/__tests__/cowsay/cube.expect new file mode 100644 index 00000000..79261452 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube.expect @@ -0,0 +1,12 @@ + __________________ +( I made a friend! ) + ------------------ + o + o + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..(<3). || + / ..--.. \\ + | \ .... / || + \---/--\---// diff --git a/src/utils/__tests__/cowsay/cube.test b/src/utils/__tests__/cowsay/cube.test new file mode 100644 index 00000000..01b573fe --- /dev/null +++ b/src/utils/__tests__/cowsay/cube.test @@ -0,0 +1,15 @@ + $thoughts + $thoughts + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..($eyes). || + / ..--.. \\ + | \ .... / || + \---/--\---// +~~~~~~~~~~ +{ + "text": "I made a friend!", + "action": "think", + "eyes": "<3" +} diff --git a/src/utils/__tests__/cowsay/cube_perl.expect b/src/utils/__tests__/cowsay/cube_perl.expect new file mode 100644 index 00000000..79261452 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube_perl.expect @@ -0,0 +1,12 @@ + __________________ +( I made a friend! ) + ------------------ + o + o + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..(<3). || + / ..--.. \\ + | \ .... / || + \---/--\---// diff --git a/src/utils/__tests__/cowsay/cube_perl.test b/src/utils/__tests__/cowsay/cube_perl.test new file mode 100644 index 00000000..d9582d2b --- /dev/null +++ b/src/utils/__tests__/cowsay/cube_perl.test @@ -0,0 +1,17 @@ +# test case for original perl-script cowfile +$the_cow = + $thoughts + $thoughts + /---\\__/---\\\\ + | / .... \\ || + \\ ..--.. // + |..($eyes). || + / ..--.. \\\\ + | \\ .... / || + \\---/--\\---// +~~~~~~~~~~ +{ + "text": "I made a friend!", + "action": "think", + "eyes": "<3" +} diff --git a/src/utils/__tests__/hashingiterator/mostlyprime.txt b/src/utils/__tests__/hashingiterator/mostlyprime.txt new file mode 100644 index 00000000..675d3534 --- /dev/null +++ b/src/utils/__tests__/hashingiterator/mostlyprime.txt @@ -0,0 +1,1007 @@ +This is a data file which we compute a hash of. The contents are meaningless +but it's a slightly better test if it has enough data that it won't fit into +a single stream buffer, since that exercises more code. + +Thus, here is a list of 9,999 of the first 10,000 prime numbers, plus one +number which I have changed so it is not prime. + + 2 3 5 7 9 11 13 17 19 23 + 31 37 41 43 47 53 59 61 67 71 + 73 79 83 89 97 101 103 107 109 113 + 127 131 137 139 149 151 157 163 167 173 + 179 181 191 193 197 199 211 223 227 229 + 233 239 241 251 257 263 269 271 277 281 + 283 293 307 311 313 317 331 337 347 349 + 353 359 367 373 379 383 389 397 401 409 + 419 421 431 433 439 443 449 457 461 463 + 467 479 487 491 499 503 509 521 523 541 + 547 557 563 569 571 577 587 593 599 601 + 607 613 617 619 631 641 643 647 653 659 + 661 673 677 683 691 701 709 719 727 733 + 739 743 751 757 761 769 773 787 797 809 + 811 821 823 827 829 839 853 857 859 863 + 877 881 883 887 907 911 919 929 937 941 + 947 953 967 971 977 983 991 997 1009 1013 + 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 + 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 + 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 + 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 + 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 + 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 + 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 + 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 + 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 + 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 + 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 + 1823 1831 1847 1861 1867 1871 1873 1877 1879 1889 + 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 + 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 + 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 + 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 + 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 + 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 + 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 + 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 + 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 + 2621 2633 2647 2657 2659 2663 2671 2677 2683 2687 + 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 + 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 + 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 + 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 + 3001 3011 3019 3023 3037 3041 3049 3061 3067 3079 + 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 + 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 + 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 + 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 + 3433 3449 3457 3461 3463 3467 3469 3491 3499 3511 + 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 + 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 + 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 + 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 + 3823 3833 3847 3851 3853 3863 3877 3881 3889 3907 + 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 + 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 + 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 + 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 + 4241 4243 4253 4259 4261 4271 4273 4283 4289 4297 + 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 + 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 + 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 + 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 + 4663 4673 4679 4691 4703 4721 4723 4729 4733 4751 + 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 + 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 + 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 + 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 + 5099 5101 5107 5113 5119 5147 5153 5167 5171 5179 + 5189 5197 5209 5227 5231 5233 5237 5261 5273 5279 + 5281 5297 5303 5309 5323 5333 5347 5351 5381 5387 + 5393 5399 5407 5413 5417 5419 5431 5437 5441 5443 + 5449 5471 5477 5479 5483 5501 5503 5507 5519 5521 + 5527 5531 5557 5563 5569 5573 5581 5591 5623 5639 + 5641 5647 5651 5653 5657 5659 5669 5683 5689 5693 + 5701 5711 5717 5737 5741 5743 5749 5779 5783 5791 + 5801 5807 5813 5821 5827 5839 5843 5849 5851 5857 + 5861 5867 5869 5879 5881 5897 5903 5923 5927 5939 + 5953 5981 5987 6007 6011 6029 6037 6043 6047 6053 + 6067 6073 6079 6089 6091 6101 6113 6121 6131 6133 + 6143 6151 6163 6173 6197 6199 6203 6211 6217 6221 + 6229 6247 6257 6263 6269 6271 6277 6287 6299 6301 + 6311 6317 6323 6329 6337 6343 6353 6359 6361 6367 + 6373 6379 6389 6397 6421 6427 6449 6451 6469 6473 + 6481 6491 6521 6529 6547 6551 6553 6563 6569 6571 + 6577 6581 6599 6607 6619 6637 6653 6659 6661 6673 + 6679 6689 6691 6701 6703 6709 6719 6733 6737 6761 + 6763 6779 6781 6791 6793 6803 6823 6827 6829 6833 + 6841 6857 6863 6869 6871 6883 6899 6907 6911 6917 + 6947 6949 6959 6961 6967 6971 6977 6983 6991 6997 + 7001 7013 7019 7027 7039 7043 7057 7069 7079 7103 + 7109 7121 7127 7129 7151 7159 7177 7187 7193 7207 + 7211 7213 7219 7229 7237 7243 7247 7253 7283 7297 + 7307 7309 7321 7331 7333 7349 7351 7369 7393 7411 + 7417 7433 7451 7457 7459 7477 7481 7487 7489 7499 + 7507 7517 7523 7529 7537 7541 7547 7549 7559 7561 + 7573 7577 7583 7589 7591 7603 7607 7621 7639 7643 + 7649 7669 7673 7681 7687 7691 7699 7703 7717 7723 + 7727 7741 7753 7757 7759 7789 7793 7817 7823 7829 + 7841 7853 7867 7873 7877 7879 7883 7901 7907 7919 + 7927 7933 7937 7949 7951 7963 7993 8009 8011 8017 + 8039 8053 8059 8069 8081 8087 8089 8093 8101 8111 + 8117 8123 8147 8161 8167 8171 8179 8191 8209 8219 + 8221 8231 8233 8237 8243 8263 8269 8273 8287 8291 + 8293 8297 8311 8317 8329 8353 8363 8369 8377 8387 + 8389 8419 8423 8429 8431 8443 8447 8461 8467 8501 + 8513 8521 8527 8537 8539 8543 8563 8573 8581 8597 + 8599 8609 8623 8627 8629 8641 8647 8663 8669 8677 + 8681 8689 8693 8699 8707 8713 8719 8731 8737 8741 + 8747 8753 8761 8779 8783 8803 8807 8819 8821 8831 + 8837 8839 8849 8861 8863 8867 8887 8893 8923 8929 + 8933 8941 8951 8963 8969 8971 8999 9001 9007 9011 + 9013 9029 9041 9043 9049 9059 9067 9091 9103 9109 + 9127 9133 9137 9151 9157 9161 9173 9181 9187 9199 + 9203 9209 9221 9227 9239 9241 9257 9277 9281 9283 + 9293 9311 9319 9323 9337 9341 9343 9349 9371 9377 + 9391 9397 9403 9413 9419 9421 9431 9433 9437 9439 + 9461 9463 9467 9473 9479 9491 9497 9511 9521 9533 + 9539 9547 9551 9587 9601 9613 9619 9623 9629 9631 + 9643 9649 9661 9677 9679 9689 9697 9719 9721 9733 + 9739 9743 9749 9767 9769 9781 9787 9791 9803 9811 + 9817 9829 9833 9839 9851 9857 9859 9871 9883 9887 + 9901 9907 9923 9929 9931 9941 9949 9967 9973 10007 + 10009 10037 10039 10061 10067 10069 10079 10091 10093 10099 + 10103 10111 10133 10139 10141 10151 10159 10163 10169 10177 + 10181 10193 10211 10223 10243 10247 10253 10259 10267 10271 + 10273 10289 10301 10303 10313 10321 10331 10333 10337 10343 + 10357 10369 10391 10399 10427 10429 10433 10453 10457 10459 + 10463 10477 10487 10499 10501 10513 10529 10531 10559 10567 + 10589 10597 10601 10607 10613 10627 10631 10639 10651 10657 + 10663 10667 10687 10691 10709 10711 10723 10729 10733 10739 + 10753 10771 10781 10789 10799 10831 10837 10847 10853 10859 + 10861 10867 10883 10889 10891 10903 10909 10937 10939 10949 + 10957 10973 10979 10987 10993 11003 11027 11047 11057 11059 + 11069 11071 11083 11087 11093 11113 11117 11119 11131 11149 + 11159 11161 11171 11173 11177 11197 11213 11239 11243 11251 + 11257 11261 11273 11279 11287 11299 11311 11317 11321 11329 + 11351 11353 11369 11383 11393 11399 11411 11423 11437 11443 + 11447 11467 11471 11483 11489 11491 11497 11503 11519 11527 + 11549 11551 11579 11587 11593 11597 11617 11621 11633 11657 + 11677 11681 11689 11699 11701 11717 11719 11731 11743 11777 + 11779 11783 11789 11801 11807 11813 11821 11827 11831 11833 + 11839 11863 11867 11887 11897 11903 11909 11923 11927 11933 + 11939 11941 11953 11959 11969 11971 11981 11987 12007 12011 + 12037 12041 12043 12049 12071 12073 12097 12101 12107 12109 + 12113 12119 12143 12149 12157 12161 12163 12197 12203 12211 + 12227 12239 12241 12251 12253 12263 12269 12277 12281 12289 + 12301 12323 12329 12343 12347 12373 12377 12379 12391 12401 + 12409 12413 12421 12433 12437 12451 12457 12473 12479 12487 + 12491 12497 12503 12511 12517 12527 12539 12541 12547 12553 + 12569 12577 12583 12589 12601 12611 12613 12619 12637 12641 + 12647 12653 12659 12671 12689 12697 12703 12713 12721 12739 + 12743 12757 12763 12781 12791 12799 12809 12821 12823 12829 + 12841 12853 12889 12893 12899 12907 12911 12917 12919 12923 + 12941 12953 12959 12967 12973 12979 12983 13001 13003 13007 + 13009 13033 13037 13043 13049 13063 13093 13099 13103 13109 + 13121 13127 13147 13151 13159 13163 13171 13177 13183 13187 + 13217 13219 13229 13241 13249 13259 13267 13291 13297 13309 + 13313 13327 13331 13337 13339 13367 13381 13397 13399 13411 + 13417 13421 13441 13451 13457 13463 13469 13477 13487 13499 + 13513 13523 13537 13553 13567 13577 13591 13597 13613 13619 + 13627 13633 13649 13669 13679 13681 13687 13691 13693 13697 + 13709 13711 13721 13723 13729 13751 13757 13759 13763 13781 + 13789 13799 13807 13829 13831 13841 13859 13873 13877 13879 + 13883 13901 13903 13907 13913 13921 13931 13933 13963 13967 + 13997 13999 14009 14011 14029 14033 14051 14057 14071 14081 + 14083 14087 14107 14143 14149 14153 14159 14173 14177 14197 + 14207 14221 14243 14249 14251 14281 14293 14303 14321 14323 + 14327 14341 14347 14369 14387 14389 14401 14407 14411 14419 + 14423 14431 14437 14447 14449 14461 14479 14489 14503 14519 + 14533 14537 14543 14549 14551 14557 14561 14563 14591 14593 + 14621 14627 14629 14633 14639 14653 14657 14669 14683 14699 + 14713 14717 14723 14731 14737 14741 14747 14753 14759 14767 + 14771 14779 14783 14797 14813 14821 14827 14831 14843 14851 + 14867 14869 14879 14887 14891 14897 14923 14929 14939 14947 + 14951 14957 14969 14983 15013 15017 15031 15053 15061 15073 + 15077 15083 15091 15101 15107 15121 15131 15137 15139 15149 + 15161 15173 15187 15193 15199 15217 15227 15233 15241 15259 + 15263 15269 15271 15277 15287 15289 15299 15307 15313 15319 + 15329 15331 15349 15359 15361 15373 15377 15383 15391 15401 + 15413 15427 15439 15443 15451 15461 15467 15473 15493 15497 + 15511 15527 15541 15551 15559 15569 15581 15583 15601 15607 + 15619 15629 15641 15643 15647 15649 15661 15667 15671 15679 + 15683 15727 15731 15733 15737 15739 15749 15761 15767 15773 + 15787 15791 15797 15803 15809 15817 15823 15859 15877 15881 + 15887 15889 15901 15907 15913 15919 15923 15937 15959 15971 + 15973 15991 16001 16007 16033 16057 16061 16063 16067 16069 + 16073 16087 16091 16097 16103 16111 16127 16139 16141 16183 + 16187 16189 16193 16217 16223 16229 16231 16249 16253 16267 + 16273 16301 16319 16333 16339 16349 16361 16363 16369 16381 + 16411 16417 16421 16427 16433 16447 16451 16453 16477 16481 + 16487 16493 16519 16529 16547 16553 16561 16567 16573 16603 + 16607 16619 16631 16633 16649 16651 16657 16661 16673 16691 + 16693 16699 16703 16729 16741 16747 16759 16763 16787 16811 + 16823 16829 16831 16843 16871 16879 16883 16889 16901 16903 + 16921 16927 16931 16937 16943 16963 16979 16981 16987 16993 + 17011 17021 17027 17029 17033 17041 17047 17053 17077 17093 + 17099 17107 17117 17123 17137 17159 17167 17183 17189 17191 + 17203 17207 17209 17231 17239 17257 17291 17293 17299 17317 + 17321 17327 17333 17341 17351 17359 17377 17383 17387 17389 + 17393 17401 17417 17419 17431 17443 17449 17467 17471 17477 + 17483 17489 17491 17497 17509 17519 17539 17551 17569 17573 + 17579 17581 17597 17599 17609 17623 17627 17657 17659 17669 + 17681 17683 17707 17713 17729 17737 17747 17749 17761 17783 + 17789 17791 17807 17827 17837 17839 17851 17863 17881 17891 + 17903 17909 17911 17921 17923 17929 17939 17957 17959 17971 + 17977 17981 17987 17989 18013 18041 18043 18047 18049 18059 + 18061 18077 18089 18097 18119 18121 18127 18131 18133 18143 + 18149 18169 18181 18191 18199 18211 18217 18223 18229 18233 + 18251 18253 18257 18269 18287 18289 18301 18307 18311 18313 + 18329 18341 18353 18367 18371 18379 18397 18401 18413 18427 + 18433 18439 18443 18451 18457 18461 18481 18493 18503 18517 + 18521 18523 18539 18541 18553 18583 18587 18593 18617 18637 + 18661 18671 18679 18691 18701 18713 18719 18731 18743 18749 + 18757 18773 18787 18793 18797 18803 18839 18859 18869 18899 + 18911 18913 18917 18919 18947 18959 18973 18979 19001 19009 + 19013 19031 19037 19051 19069 19073 19079 19081 19087 19121 + 19139 19141 19157 19163 19181 19183 19207 19211 19213 19219 + 19231 19237 19249 19259 19267 19273 19289 19301 19309 19319 + 19333 19373 19379 19381 19387 19391 19403 19417 19421 19423 + 19427 19429 19433 19441 19447 19457 19463 19469 19471 19477 + 19483 19489 19501 19507 19531 19541 19543 19553 19559 19571 + 19577 19583 19597 19603 19609 19661 19681 19687 19697 19699 + 19709 19717 19727 19739 19751 19753 19759 19763 19777 19793 + 19801 19813 19819 19841 19843 19853 19861 19867 19889 19891 + 19913 19919 19927 19937 19949 19961 19963 19973 19979 19991 + 19993 19997 20011 20021 20023 20029 20047 20051 20063 20071 + 20089 20101 20107 20113 20117 20123 20129 20143 20147 20149 + 20161 20173 20177 20183 20201 20219 20231 20233 20249 20261 + 20269 20287 20297 20323 20327 20333 20341 20347 20353 20357 + 20359 20369 20389 20393 20399 20407 20411 20431 20441 20443 + 20477 20479 20483 20507 20509 20521 20533 20543 20549 20551 + 20563 20593 20599 20611 20627 20639 20641 20663 20681 20693 + 20707 20717 20719 20731 20743 20747 20749 20753 20759 20771 + 20773 20789 20807 20809 20849 20857 20873 20879 20887 20897 + 20899 20903 20921 20929 20939 20947 20959 20963 20981 20983 + 21001 21011 21013 21017 21019 21023 21031 21059 21061 21067 + 21089 21101 21107 21121 21139 21143 21149 21157 21163 21169 + 21179 21187 21191 21193 21211 21221 21227 21247 21269 21277 + 21283 21313 21317 21319 21323 21341 21347 21377 21379 21383 + 21391 21397 21401 21407 21419 21433 21467 21481 21487 21491 + 21493 21499 21503 21517 21521 21523 21529 21557 21559 21563 + 21569 21577 21587 21589 21599 21601 21611 21613 21617 21647 + 21649 21661 21673 21683 21701 21713 21727 21737 21739 21751 + 21757 21767 21773 21787 21799 21803 21817 21821 21839 21841 + 21851 21859 21863 21871 21881 21893 21911 21929 21937 21943 + 21961 21977 21991 21997 22003 22013 22027 22031 22037 22039 + 22051 22063 22067 22073 22079 22091 22093 22109 22111 22123 + 22129 22133 22147 22153 22157 22159 22171 22189 22193 22229 + 22247 22259 22271 22273 22277 22279 22283 22291 22303 22307 + 22343 22349 22367 22369 22381 22391 22397 22409 22433 22441 + 22447 22453 22469 22481 22483 22501 22511 22531 22541 22543 + 22549 22567 22571 22573 22613 22619 22621 22637 22639 22643 + 22651 22669 22679 22691 22697 22699 22709 22717 22721 22727 + 22739 22741 22751 22769 22777 22783 22787 22807 22811 22817 + 22853 22859 22861 22871 22877 22901 22907 22921 22937 22943 + 22961 22963 22973 22993 23003 23011 23017 23021 23027 23029 + 23039 23041 23053 23057 23059 23063 23071 23081 23087 23099 + 23117 23131 23143 23159 23167 23173 23189 23197 23201 23203 + 23209 23227 23251 23269 23279 23291 23293 23297 23311 23321 + 23327 23333 23339 23357 23369 23371 23399 23417 23431 23447 + 23459 23473 23497 23509 23531 23537 23539 23549 23557 23561 + 23563 23567 23581 23593 23599 23603 23609 23623 23627 23629 + 23633 23663 23669 23671 23677 23687 23689 23719 23741 23743 + 23747 23753 23761 23767 23773 23789 23801 23813 23819 23827 + 23831 23833 23857 23869 23873 23879 23887 23893 23899 23909 + 23911 23917 23929 23957 23971 23977 23981 23993 24001 24007 + 24019 24023 24029 24043 24049 24061 24071 24077 24083 24091 + 24097 24103 24107 24109 24113 24121 24133 24137 24151 24169 + 24179 24181 24197 24203 24223 24229 24239 24247 24251 24281 + 24317 24329 24337 24359 24371 24373 24379 24391 24407 24413 + 24419 24421 24439 24443 24469 24473 24481 24499 24509 24517 + 24527 24533 24547 24551 24571 24593 24611 24623 24631 24659 + 24671 24677 24683 24691 24697 24709 24733 24749 24763 24767 + 24781 24793 24799 24809 24821 24841 24847 24851 24859 24877 + 24889 24907 24917 24919 24923 24943 24953 24967 24971 24977 + 24979 24989 25013 25031 25033 25037 25057 25073 25087 25097 + 25111 25117 25121 25127 25147 25153 25163 25169 25171 25183 + 25189 25219 25229 25237 25243 25247 25253 25261 25301 25303 + 25307 25309 25321 25339 25343 25349 25357 25367 25373 25391 + 25409 25411 25423 25439 25447 25453 25457 25463 25469 25471 + 25523 25537 25541 25561 25577 25579 25583 25589 25601 25603 + 25609 25621 25633 25639 25643 25657 25667 25673 25679 25693 + 25703 25717 25733 25741 25747 25759 25763 25771 25793 25799 + 25801 25819 25841 25847 25849 25867 25873 25889 25903 25913 + 25919 25931 25933 25939 25943 25951 25969 25981 25997 25999 + 26003 26017 26021 26029 26041 26053 26083 26099 26107 26111 + 26113 26119 26141 26153 26161 26171 26177 26183 26189 26203 + 26209 26227 26237 26249 26251 26261 26263 26267 26293 26297 + 26309 26317 26321 26339 26347 26357 26371 26387 26393 26399 + 26407 26417 26423 26431 26437 26449 26459 26479 26489 26497 + 26501 26513 26539 26557 26561 26573 26591 26597 26627 26633 + 26641 26647 26669 26681 26683 26687 26693 26699 26701 26711 + 26713 26717 26723 26729 26731 26737 26759 26777 26783 26801 + 26813 26821 26833 26839 26849 26861 26863 26879 26881 26891 + 26893 26903 26921 26927 26947 26951 26953 26959 26981 26987 + 26993 27011 27017 27031 27043 27059 27061 27067 27073 27077 + 27091 27103 27107 27109 27127 27143 27179 27191 27197 27211 + 27239 27241 27253 27259 27271 27277 27281 27283 27299 27329 + 27337 27361 27367 27397 27407 27409 27427 27431 27437 27449 + 27457 27479 27481 27487 27509 27527 27529 27539 27541 27551 + 27581 27583 27611 27617 27631 27647 27653 27673 27689 27691 + 27697 27701 27733 27737 27739 27743 27749 27751 27763 27767 + 27773 27779 27791 27793 27799 27803 27809 27817 27823 27827 + 27847 27851 27883 27893 27901 27917 27919 27941 27943 27947 + 27953 27961 27967 27983 27997 28001 28019 28027 28031 28051 + 28057 28069 28081 28087 28097 28099 28109 28111 28123 28151 + 28163 28181 28183 28201 28211 28219 28229 28277 28279 28283 + 28289 28297 28307 28309 28319 28349 28351 28387 28393 28403 + 28409 28411 28429 28433 28439 28447 28463 28477 28493 28499 + 28513 28517 28537 28541 28547 28549 28559 28571 28573 28579 + 28591 28597 28603 28607 28619 28621 28627 28631 28643 28649 + 28657 28661 28663 28669 28687 28697 28703 28711 28723 28729 + 28751 28753 28759 28771 28789 28793 28807 28813 28817 28837 + 28843 28859 28867 28871 28879 28901 28909 28921 28927 28933 + 28949 28961 28979 29009 29017 29021 29023 29027 29033 29059 + 29063 29077 29101 29123 29129 29131 29137 29147 29153 29167 + 29173 29179 29191 29201 29207 29209 29221 29231 29243 29251 + 29269 29287 29297 29303 29311 29327 29333 29339 29347 29363 + 29383 29387 29389 29399 29401 29411 29423 29429 29437 29443 + 29453 29473 29483 29501 29527 29531 29537 29567 29569 29573 + 29581 29587 29599 29611 29629 29633 29641 29663 29669 29671 + 29683 29717 29723 29741 29753 29759 29761 29789 29803 29819 + 29833 29837 29851 29863 29867 29873 29879 29881 29917 29921 + 29927 29947 29959 29983 29989 30011 30013 30029 30047 30059 + 30071 30089 30091 30097 30103 30109 30113 30119 30133 30137 + 30139 30161 30169 30181 30187 30197 30203 30211 30223 30241 + 30253 30259 30269 30271 30293 30307 30313 30319 30323 30341 + 30347 30367 30389 30391 30403 30427 30431 30449 30467 30469 + 30491 30493 30497 30509 30517 30529 30539 30553 30557 30559 + 30577 30593 30631 30637 30643 30649 30661 30671 30677 30689 + 30697 30703 30707 30713 30727 30757 30763 30773 30781 30803 + 30809 30817 30829 30839 30841 30851 30853 30859 30869 30871 + 30881 30893 30911 30931 30937 30941 30949 30971 30977 30983 + 31013 31019 31033 31039 31051 31063 31069 31079 31081 31091 + 31121 31123 31139 31147 31151 31153 31159 31177 31181 31183 + 31189 31193 31219 31223 31231 31237 31247 31249 31253 31259 + 31267 31271 31277 31307 31319 31321 31327 31333 31337 31357 + 31379 31387 31391 31393 31397 31469 31477 31481 31489 31511 + 31513 31517 31531 31541 31543 31547 31567 31573 31583 31601 + 31607 31627 31643 31649 31657 31663 31667 31687 31699 31721 + 31723 31727 31729 31741 31751 31769 31771 31793 31799 31817 + 31847 31849 31859 31873 31883 31891 31907 31957 31963 31973 + 31981 31991 32003 32009 32027 32029 32051 32057 32059 32063 + 32069 32077 32083 32089 32099 32117 32119 32141 32143 32159 + 32173 32183 32189 32191 32203 32213 32233 32237 32251 32257 + 32261 32297 32299 32303 32309 32321 32323 32327 32341 32353 + 32359 32363 32369 32371 32377 32381 32401 32411 32413 32423 + 32429 32441 32443 32467 32479 32491 32497 32503 32507 32531 + 32533 32537 32561 32563 32569 32573 32579 32587 32603 32609 + 32611 32621 32633 32647 32653 32687 32693 32707 32713 32717 + 32719 32749 32771 32779 32783 32789 32797 32801 32803 32831 + 32833 32839 32843 32869 32887 32909 32911 32917 32933 32939 + 32941 32957 32969 32971 32983 32987 32993 32999 33013 33023 + 33029 33037 33049 33053 33071 33073 33083 33091 33107 33113 + 33119 33149 33151 33161 33179 33181 33191 33199 33203 33211 + 33223 33247 33287 33289 33301 33311 33317 33329 33331 33343 + 33347 33349 33353 33359 33377 33391 33403 33409 33413 33427 + 33457 33461 33469 33479 33487 33493 33503 33521 33529 33533 + 33547 33563 33569 33577 33581 33587 33589 33599 33601 33613 + 33617 33619 33623 33629 33637 33641 33647 33679 33703 33713 + 33721 33739 33749 33751 33757 33767 33769 33773 33791 33797 + 33809 33811 33827 33829 33851 33857 33863 33871 33889 33893 + 33911 33923 33931 33937 33941 33961 33967 33997 34019 34031 + 34033 34039 34057 34061 34123 34127 34129 34141 34147 34157 + 34159 34171 34183 34211 34213 34217 34231 34253 34259 34261 + 34267 34273 34283 34297 34301 34303 34313 34319 34327 34337 + 34351 34361 34367 34369 34381 34403 34421 34429 34439 34457 + 34469 34471 34483 34487 34499 34501 34511 34513 34519 34537 + 34543 34549 34583 34589 34591 34603 34607 34613 34631 34649 + 34651 34667 34673 34679 34687 34693 34703 34721 34729 34739 + 34747 34757 34759 34763 34781 34807 34819 34841 34843 34847 + 34849 34871 34877 34883 34897 34913 34919 34939 34949 34961 + 34963 34981 35023 35027 35051 35053 35059 35069 35081 35083 + 35089 35099 35107 35111 35117 35129 35141 35149 35153 35159 + 35171 35201 35221 35227 35251 35257 35267 35279 35281 35291 + 35311 35317 35323 35327 35339 35353 35363 35381 35393 35401 + 35407 35419 35423 35437 35447 35449 35461 35491 35507 35509 + 35521 35527 35531 35533 35537 35543 35569 35573 35591 35593 + 35597 35603 35617 35671 35677 35729 35731 35747 35753 35759 + 35771 35797 35801 35803 35809 35831 35837 35839 35851 35863 + 35869 35879 35897 35899 35911 35923 35933 35951 35963 35969 + 35977 35983 35993 35999 36007 36011 36013 36017 36037 36061 + 36067 36073 36083 36097 36107 36109 36131 36137 36151 36161 + 36187 36191 36209 36217 36229 36241 36251 36263 36269 36277 + 36293 36299 36307 36313 36319 36341 36343 36353 36373 36383 + 36389 36433 36451 36457 36467 36469 36473 36479 36493 36497 + 36523 36527 36529 36541 36551 36559 36563 36571 36583 36587 + 36599 36607 36629 36637 36643 36653 36671 36677 36683 36691 + 36697 36709 36713 36721 36739 36749 36761 36767 36779 36781 + 36787 36791 36793 36809 36821 36833 36847 36857 36871 36877 + 36887 36899 36901 36913 36919 36923 36929 36931 36943 36947 + 36973 36979 36997 37003 37013 37019 37021 37039 37049 37057 + 37061 37087 37097 37117 37123 37139 37159 37171 37181 37189 + 37199 37201 37217 37223 37243 37253 37273 37277 37307 37309 + 37313 37321 37337 37339 37357 37361 37363 37369 37379 37397 + 37409 37423 37441 37447 37463 37483 37489 37493 37501 37507 + 37511 37517 37529 37537 37547 37549 37561 37567 37571 37573 + 37579 37589 37591 37607 37619 37633 37643 37649 37657 37663 + 37691 37693 37699 37717 37747 37781 37783 37799 37811 37813 + 37831 37847 37853 37861 37871 37879 37889 37897 37907 37951 + 37957 37963 37967 37987 37991 37993 37997 38011 38039 38047 + 38053 38069 38083 38113 38119 38149 38153 38167 38177 38183 + 38189 38197 38201 38219 38231 38237 38239 38261 38273 38281 + 38287 38299 38303 38317 38321 38327 38329 38333 38351 38371 + 38377 38393 38431 38447 38449 38453 38459 38461 38501 38543 + 38557 38561 38567 38569 38593 38603 38609 38611 38629 38639 + 38651 38653 38669 38671 38677 38693 38699 38707 38711 38713 + 38723 38729 38737 38747 38749 38767 38783 38791 38803 38821 + 38833 38839 38851 38861 38867 38873 38891 38903 38917 38921 + 38923 38933 38953 38959 38971 38977 38993 39019 39023 39041 + 39043 39047 39079 39089 39097 39103 39107 39113 39119 39133 + 39139 39157 39161 39163 39181 39191 39199 39209 39217 39227 + 39229 39233 39239 39241 39251 39293 39301 39313 39317 39323 + 39341 39343 39359 39367 39371 39373 39383 39397 39409 39419 + 39439 39443 39451 39461 39499 39503 39509 39511 39521 39541 + 39551 39563 39569 39581 39607 39619 39623 39631 39659 39667 + 39671 39679 39703 39709 39719 39727 39733 39749 39761 39769 + 39779 39791 39799 39821 39827 39829 39839 39841 39847 39857 + 39863 39869 39877 39883 39887 39901 39929 39937 39953 39971 + 39979 39983 39989 40009 40013 40031 40037 40039 40063 40087 + 40093 40099 40111 40123 40127 40129 40151 40153 40163 40169 + 40177 40189 40193 40213 40231 40237 40241 40253 40277 40283 + 40289 40343 40351 40357 40361 40387 40423 40427 40429 40433 + 40459 40471 40483 40487 40493 40499 40507 40519 40529 40531 + 40543 40559 40577 40583 40591 40597 40609 40627 40637 40639 + 40693 40697 40699 40709 40739 40751 40759 40763 40771 40787 + 40801 40813 40819 40823 40829 40841 40847 40849 40853 40867 + 40879 40883 40897 40903 40927 40933 40939 40949 40961 40973 + 40993 41011 41017 41023 41039 41047 41051 41057 41077 41081 + 41113 41117 41131 41141 41143 41149 41161 41177 41179 41183 + 41189 41201 41203 41213 41221 41227 41231 41233 41243 41257 + 41263 41269 41281 41299 41333 41341 41351 41357 41381 41387 + 41389 41399 41411 41413 41443 41453 41467 41479 41491 41507 + 41513 41519 41521 41539 41543 41549 41579 41593 41597 41603 + 41609 41611 41617 41621 41627 41641 41647 41651 41659 41669 + 41681 41687 41719 41729 41737 41759 41761 41771 41777 41801 + 41809 41813 41843 41849 41851 41863 41879 41887 41893 41897 + 41903 41911 41927 41941 41947 41953 41957 41959 41969 41981 + 41983 41999 42013 42017 42019 42023 42043 42061 42071 42073 + 42083 42089 42101 42131 42139 42157 42169 42179 42181 42187 + 42193 42197 42209 42221 42223 42227 42239 42257 42281 42283 + 42293 42299 42307 42323 42331 42337 42349 42359 42373 42379 + 42391 42397 42403 42407 42409 42433 42437 42443 42451 42457 + 42461 42463 42467 42473 42487 42491 42499 42509 42533 42557 + 42569 42571 42577 42589 42611 42641 42643 42649 42667 42677 + 42683 42689 42697 42701 42703 42709 42719 42727 42737 42743 + 42751 42767 42773 42787 42793 42797 42821 42829 42839 42841 + 42853 42859 42863 42899 42901 42923 42929 42937 42943 42953 + 42961 42967 42979 42989 43003 43013 43019 43037 43049 43051 + 43063 43067 43093 43103 43117 43133 43151 43159 43177 43189 + 43201 43207 43223 43237 43261 43271 43283 43291 43313 43319 + 43321 43331 43391 43397 43399 43403 43411 43427 43441 43451 + 43457 43481 43487 43499 43517 43541 43543 43573 43577 43579 + 43591 43597 43607 43609 43613 43627 43633 43649 43651 43661 + 43669 43691 43711 43717 43721 43753 43759 43777 43781 43783 + 43787 43789 43793 43801 43853 43867 43889 43891 43913 43933 + 43943 43951 43961 43963 43969 43973 43987 43991 43997 44017 + 44021 44027 44029 44041 44053 44059 44071 44087 44089 44101 + 44111 44119 44123 44129 44131 44159 44171 44179 44189 44201 + 44203 44207 44221 44249 44257 44263 44267 44269 44273 44279 + 44281 44293 44351 44357 44371 44381 44383 44389 44417 44449 + 44453 44483 44491 44497 44501 44507 44519 44531 44533 44537 + 44543 44549 44563 44579 44587 44617 44621 44623 44633 44641 + 44647 44651 44657 44683 44687 44699 44701 44711 44729 44741 + 44753 44771 44773 44777 44789 44797 44809 44819 44839 44843 + 44851 44867 44879 44887 44893 44909 44917 44927 44939 44953 + 44959 44963 44971 44983 44987 45007 45013 45053 45061 45077 + 45083 45119 45121 45127 45131 45137 45139 45161 45179 45181 + 45191 45197 45233 45247 45259 45263 45281 45289 45293 45307 + 45317 45319 45329 45337 45341 45343 45361 45377 45389 45403 + 45413 45427 45433 45439 45481 45491 45497 45503 45523 45533 + 45541 45553 45557 45569 45587 45589 45599 45613 45631 45641 + 45659 45667 45673 45677 45691 45697 45707 45737 45751 45757 + 45763 45767 45779 45817 45821 45823 45827 45833 45841 45853 + 45863 45869 45887 45893 45943 45949 45953 45959 45971 45979 + 45989 46021 46027 46049 46051 46061 46073 46091 46093 46099 + 46103 46133 46141 46147 46153 46171 46181 46183 46187 46199 + 46219 46229 46237 46261 46271 46273 46279 46301 46307 46309 + 46327 46337 46349 46351 46381 46399 46411 46439 46441 46447 + 46451 46457 46471 46477 46489 46499 46507 46511 46523 46549 + 46559 46567 46573 46589 46591 46601 46619 46633 46639 46643 + 46649 46663 46679 46681 46687 46691 46703 46723 46727 46747 + 46751 46757 46769 46771 46807 46811 46817 46819 46829 46831 + 46853 46861 46867 46877 46889 46901 46919 46933 46957 46993 + 46997 47017 47041 47051 47057 47059 47087 47093 47111 47119 + 47123 47129 47137 47143 47147 47149 47161 47189 47207 47221 + 47237 47251 47269 47279 47287 47293 47297 47303 47309 47317 + 47339 47351 47353 47363 47381 47387 47389 47407 47417 47419 + 47431 47441 47459 47491 47497 47501 47507 47513 47521 47527 + 47533 47543 47563 47569 47581 47591 47599 47609 47623 47629 + 47639 47653 47657 47659 47681 47699 47701 47711 47713 47717 + 47737 47741 47743 47777 47779 47791 47797 47807 47809 47819 + 47837 47843 47857 47869 47881 47903 47911 47917 47933 47939 + 47947 47951 47963 47969 47977 47981 48017 48023 48029 48049 + 48073 48079 48091 48109 48119 48121 48131 48157 48163 48179 + 48187 48193 48197 48221 48239 48247 48259 48271 48281 48299 + 48311 48313 48337 48341 48353 48371 48383 48397 48407 48409 + 48413 48437 48449 48463 48473 48479 48481 48487 48491 48497 + 48523 48527 48533 48539 48541 48563 48571 48589 48593 48611 + 48619 48623 48647 48649 48661 48673 48677 48679 48731 48733 + 48751 48757 48761 48767 48779 48781 48787 48799 48809 48817 + 48821 48823 48847 48857 48859 48869 48871 48883 48889 48907 + 48947 48953 48973 48989 48991 49003 49009 49019 49031 49033 + 49037 49043 49057 49069 49081 49103 49109 49117 49121 49123 + 49139 49157 49169 49171 49177 49193 49199 49201 49207 49211 + 49223 49253 49261 49277 49279 49297 49307 49331 49333 49339 + 49363 49367 49369 49391 49393 49409 49411 49417 49429 49433 + 49451 49459 49463 49477 49481 49499 49523 49529 49531 49537 + 49547 49549 49559 49597 49603 49613 49627 49633 49639 49663 + 49667 49669 49681 49697 49711 49727 49739 49741 49747 49757 + 49783 49787 49789 49801 49807 49811 49823 49831 49843 49853 + 49871 49877 49891 49919 49921 49927 49937 49939 49943 49957 + 49991 49993 49999 50021 50023 50033 50047 50051 50053 50069 + 50077 50087 50093 50101 50111 50119 50123 50129 50131 50147 + 50153 50159 50177 50207 50221 50227 50231 50261 50263 50273 + 50287 50291 50311 50321 50329 50333 50341 50359 50363 50377 + 50383 50387 50411 50417 50423 50441 50459 50461 50497 50503 + 50513 50527 50539 50543 50549 50551 50581 50587 50591 50593 + 50599 50627 50647 50651 50671 50683 50707 50723 50741 50753 + 50767 50773 50777 50789 50821 50833 50839 50849 50857 50867 + 50873 50891 50893 50909 50923 50929 50951 50957 50969 50971 + 50989 50993 51001 51031 51043 51047 51059 51061 51071 51109 + 51131 51133 51137 51151 51157 51169 51193 51197 51199 51203 + 51217 51229 51239 51241 51257 51263 51283 51287 51307 51329 + 51341 51343 51347 51349 51361 51383 51407 51413 51419 51421 + 51427 51431 51437 51439 51449 51461 51473 51479 51481 51487 + 51503 51511 51517 51521 51539 51551 51563 51577 51581 51593 + 51599 51607 51613 51631 51637 51647 51659 51673 51679 51683 + 51691 51713 51719 51721 51749 51767 51769 51787 51797 51803 + 51817 51827 51829 51839 51853 51859 51869 51871 51893 51899 + 51907 51913 51929 51941 51949 51971 51973 51977 51991 52009 + 52021 52027 52051 52057 52067 52069 52081 52103 52121 52127 + 52147 52153 52163 52177 52181 52183 52189 52201 52223 52237 + 52249 52253 52259 52267 52289 52291 52301 52313 52321 52361 + 52363 52369 52379 52387 52391 52433 52453 52457 52489 52501 + 52511 52517 52529 52541 52543 52553 52561 52567 52571 52579 + 52583 52609 52627 52631 52639 52667 52673 52691 52697 52709 + 52711 52721 52727 52733 52747 52757 52769 52783 52807 52813 + 52817 52837 52859 52861 52879 52883 52889 52901 52903 52919 + 52937 52951 52957 52963 52967 52973 52981 52999 53003 53017 + 53047 53051 53069 53077 53087 53089 53093 53101 53113 53117 + 53129 53147 53149 53161 53171 53173 53189 53197 53201 53231 + 53233 53239 53267 53269 53279 53281 53299 53309 53323 53327 + 53353 53359 53377 53381 53401 53407 53411 53419 53437 53441 + 53453 53479 53503 53507 53527 53549 53551 53569 53591 53593 + 53597 53609 53611 53617 53623 53629 53633 53639 53653 53657 + 53681 53693 53699 53717 53719 53731 53759 53773 53777 53783 + 53791 53813 53819 53831 53849 53857 53861 53881 53887 53891 + 53897 53899 53917 53923 53927 53939 53951 53959 53987 53993 + 54001 54011 54013 54037 54049 54059 54083 54091 54101 54121 + 54133 54139 54151 54163 54167 54181 54193 54217 54251 54269 + 54277 54287 54293 54311 54319 54323 54331 54347 54361 54367 + 54371 54377 54401 54403 54409 54413 54419 54421 54437 54443 + 54449 54469 54493 54497 54499 54503 54517 54521 54539 54541 + 54547 54559 54563 54577 54581 54583 54601 54617 54623 54629 + 54631 54647 54667 54673 54679 54709 54713 54721 54727 54751 + 54767 54773 54779 54787 54799 54829 54833 54851 54869 54877 + 54881 54907 54917 54919 54941 54949 54959 54973 54979 54983 + 55001 55009 55021 55049 55051 55057 55061 55073 55079 55103 + 55109 55117 55127 55147 55163 55171 55201 55207 55213 55217 + 55219 55229 55243 55249 55259 55291 55313 55331 55333 55337 + 55339 55343 55351 55373 55381 55399 55411 55439 55441 55457 + 55469 55487 55501 55511 55529 55541 55547 55579 55589 55603 + 55609 55619 55621 55631 55633 55639 55661 55663 55667 55673 + 55681 55691 55697 55711 55717 55721 55733 55763 55787 55793 + 55799 55807 55813 55817 55819 55823 55829 55837 55843 55849 + 55871 55889 55897 55901 55903 55921 55927 55931 55933 55949 + 55967 55987 55997 56003 56009 56039 56041 56053 56081 56087 + 56093 56099 56101 56113 56123 56131 56149 56167 56171 56179 + 56197 56207 56209 56237 56239 56249 56263 56267 56269 56299 + 56311 56333 56359 56369 56377 56383 56393 56401 56417 56431 + 56437 56443 56453 56467 56473 56477 56479 56489 56501 56503 + 56509 56519 56527 56531 56533 56543 56569 56591 56597 56599 + 56611 56629 56633 56659 56663 56671 56681 56687 56701 56711 + 56713 56731 56737 56747 56767 56773 56779 56783 56807 56809 + 56813 56821 56827 56843 56857 56873 56891 56893 56897 56909 + 56911 56921 56923 56929 56941 56951 56957 56963 56983 56989 + 56993 56999 57037 57041 57047 57059 57073 57077 57089 57097 + 57107 57119 57131 57139 57143 57149 57163 57173 57179 57191 + 57193 57203 57221 57223 57241 57251 57259 57269 57271 57283 + 57287 57301 57329 57331 57347 57349 57367 57373 57383 57389 + 57397 57413 57427 57457 57467 57487 57493 57503 57527 57529 + 57557 57559 57571 57587 57593 57601 57637 57641 57649 57653 + 57667 57679 57689 57697 57709 57713 57719 57727 57731 57737 + 57751 57773 57781 57787 57791 57793 57803 57809 57829 57839 + 57847 57853 57859 57881 57899 57901 57917 57923 57943 57947 + 57973 57977 57991 58013 58027 58031 58043 58049 58057 58061 + 58067 58073 58099 58109 58111 58129 58147 58151 58153 58169 + 58171 58189 58193 58199 58207 58211 58217 58229 58231 58237 + 58243 58271 58309 58313 58321 58337 58363 58367 58369 58379 + 58391 58393 58403 58411 58417 58427 58439 58441 58451 58453 + 58477 58481 58511 58537 58543 58549 58567 58573 58579 58601 + 58603 58613 58631 58657 58661 58679 58687 58693 58699 58711 + 58727 58733 58741 58757 58763 58771 58787 58789 58831 58889 + 58897 58901 58907 58909 58913 58921 58937 58943 58963 58967 + 58979 58991 58997 59009 59011 59021 59023 59029 59051 59053 + 59063 59069 59077 59083 59093 59107 59113 59119 59123 59141 + 59149 59159 59167 59183 59197 59207 59209 59219 59221 59233 + 59239 59243 59263 59273 59281 59333 59341 59351 59357 59359 + 59369 59377 59387 59393 59399 59407 59417 59419 59441 59443 + 59447 59453 59467 59471 59473 59497 59509 59513 59539 59557 + 59561 59567 59581 59611 59617 59621 59627 59629 59651 59659 + 59663 59669 59671 59693 59699 59707 59723 59729 59743 59747 + 59753 59771 59779 59791 59797 59809 59833 59863 59879 59887 + 59921 59929 59951 59957 59971 59981 59999 60013 60017 60029 + 60037 60041 60077 60083 60089 60091 60101 60103 60107 60127 + 60133 60139 60149 60161 60167 60169 60209 60217 60223 60251 + 60257 60259 60271 60289 60293 60317 60331 60337 60343 60353 + 60373 60383 60397 60413 60427 60443 60449 60457 60493 60497 + 60509 60521 60527 60539 60589 60601 60607 60611 60617 60623 + 60631 60637 60647 60649 60659 60661 60679 60689 60703 60719 + 60727 60733 60737 60757 60761 60763 60773 60779 60793 60811 + 60821 60859 60869 60887 60889 60899 60901 60913 60917 60919 + 60923 60937 60943 60953 60961 61001 61007 61027 61031 61043 + 61051 61057 61091 61099 61121 61129 61141 61151 61153 61169 + 61211 61223 61231 61253 61261 61283 61291 61297 61331 61333 + 61339 61343 61357 61363 61379 61381 61403 61409 61417 61441 + 61463 61469 61471 61483 61487 61493 61507 61511 61519 61543 + 61547 61553 61559 61561 61583 61603 61609 61613 61627 61631 + 61637 61643 61651 61657 61667 61673 61681 61687 61703 61717 + 61723 61729 61751 61757 61781 61813 61819 61837 61843 61861 + 61871 61879 61909 61927 61933 61949 61961 61967 61979 61981 + 61987 61991 62003 62011 62017 62039 62047 62053 62057 62071 + 62081 62099 62119 62129 62131 62137 62141 62143 62171 62189 + 62191 62201 62207 62213 62219 62233 62273 62297 62299 62303 + 62311 62323 62327 62347 62351 62383 62401 62417 62423 62459 + 62467 62473 62477 62483 62497 62501 62507 62533 62539 62549 + 62563 62581 62591 62597 62603 62617 62627 62633 62639 62653 + 62659 62683 62687 62701 62723 62731 62743 62753 62761 62773 + 62791 62801 62819 62827 62851 62861 62869 62873 62897 62903 + 62921 62927 62929 62939 62969 62971 62981 62983 62987 62989 + 63029 63031 63059 63067 63073 63079 63097 63103 63113 63127 + 63131 63149 63179 63197 63199 63211 63241 63247 63277 63281 + 63299 63311 63313 63317 63331 63337 63347 63353 63361 63367 + 63377 63389 63391 63397 63409 63419 63421 63439 63443 63463 + 63467 63473 63487 63493 63499 63521 63527 63533 63541 63559 + 63577 63587 63589 63599 63601 63607 63611 63617 63629 63647 + 63649 63659 63667 63671 63689 63691 63697 63703 63709 63719 + 63727 63737 63743 63761 63773 63781 63793 63799 63803 63809 + 63823 63839 63841 63853 63857 63863 63901 63907 63913 63929 + 63949 63977 63997 64007 64013 64019 64033 64037 64063 64067 + 64081 64091 64109 64123 64151 64153 64157 64171 64187 64189 + 64217 64223 64231 64237 64271 64279 64283 64301 64303 64319 + 64327 64333 64373 64381 64399 64403 64433 64439 64451 64453 + 64483 64489 64499 64513 64553 64567 64577 64579 64591 64601 + 64609 64613 64621 64627 64633 64661 64663 64667 64679 64693 + 64709 64717 64747 64763 64781 64783 64793 64811 64817 64849 + 64853 64871 64877 64879 64891 64901 64919 64921 64927 64937 + 64951 64969 64997 65003 65011 65027 65029 65033 65053 65063 + 65071 65089 65099 65101 65111 65119 65123 65129 65141 65147 + 65167 65171 65173 65179 65183 65203 65213 65239 65257 65267 + 65269 65287 65293 65309 65323 65327 65353 65357 65371 65381 + 65393 65407 65413 65419 65423 65437 65447 65449 65479 65497 + 65519 65521 65537 65539 65543 65551 65557 65563 65579 65581 + 65587 65599 65609 65617 65629 65633 65647 65651 65657 65677 + 65687 65699 65701 65707 65713 65717 65719 65729 65731 65761 + 65777 65789 65809 65827 65831 65837 65839 65843 65851 65867 + 65881 65899 65921 65927 65929 65951 65957 65963 65981 65983 + 65993 66029 66037 66041 66047 66067 66071 66083 66089 66103 + 66107 66109 66137 66161 66169 66173 66179 66191 66221 66239 + 66271 66293 66301 66337 66343 66347 66359 66361 66373 66377 + 66383 66403 66413 66431 66449 66457 66463 66467 66491 66499 + 66509 66523 66529 66533 66541 66553 66569 66571 66587 66593 + 66601 66617 66629 66643 66653 66683 66697 66701 66713 66721 + 66733 66739 66749 66751 66763 66791 66797 66809 66821 66841 + 66851 66853 66863 66877 66883 66889 66919 66923 66931 66943 + 66947 66949 66959 66973 66977 67003 67021 67033 67043 67049 + 67057 67061 67073 67079 67103 67121 67129 67139 67141 67153 + 67157 67169 67181 67187 67189 67211 67213 67217 67219 67231 + 67247 67261 67271 67273 67289 67307 67339 67343 67349 67369 + 67391 67399 67409 67411 67421 67427 67429 67433 67447 67453 + 67477 67481 67489 67493 67499 67511 67523 67531 67537 67547 + 67559 67567 67577 67579 67589 67601 67607 67619 67631 67651 + 67679 67699 67709 67723 67733 67741 67751 67757 67759 67763 + 67777 67783 67789 67801 67807 67819 67829 67843 67853 67867 + 67883 67891 67901 67927 67931 67933 67939 67943 67957 67961 + 67967 67979 67987 67993 68023 68041 68053 68059 68071 68087 + 68099 68111 68113 68141 68147 68161 68171 68207 68209 68213 + 68219 68227 68239 68261 68279 68281 68311 68329 68351 68371 + 68389 68399 68437 68443 68447 68449 68473 68477 68483 68489 + 68491 68501 68507 68521 68531 68539 68543 68567 68581 68597 + 68611 68633 68639 68659 68669 68683 68687 68699 68711 68713 + 68729 68737 68743 68749 68767 68771 68777 68791 68813 68819 + 68821 68863 68879 68881 68891 68897 68899 68903 68909 68917 + 68927 68947 68963 68993 69001 69011 69019 69029 69031 69061 + 69067 69073 69109 69119 69127 69143 69149 69151 69163 69191 + 69193 69197 69203 69221 69233 69239 69247 69257 69259 69263 + 69313 69317 69337 69341 69371 69379 69383 69389 69401 69403 + 69427 69431 69439 69457 69463 69467 69473 69481 69491 69493 + 69497 69499 69539 69557 69593 69623 69653 69661 69677 69691 + 69697 69709 69737 69739 69761 69763 69767 69779 69809 69821 + 69827 69829 69833 69847 69857 69859 69877 69899 69911 69929 + 69931 69941 69959 69991 69997 70001 70003 70009 70019 70039 + 70051 70061 70067 70079 70099 70111 70117 70121 70123 70139 + 70141 70157 70163 70177 70181 70183 70199 70201 70207 70223 + 70229 70237 70241 70249 70271 70289 70297 70309 70313 70321 + 70327 70351 70373 70379 70381 70393 70423 70429 70439 70451 + 70457 70459 70481 70487 70489 70501 70507 70529 70537 70549 + 70571 70573 70583 70589 70607 70619 70621 70627 70639 70657 + 70663 70667 70687 70709 70717 70729 70753 70769 70783 70793 + 70823 70841 70843 70849 70853 70867 70877 70879 70891 70901 + 70913 70919 70921 70937 70949 70951 70957 70969 70979 70981 + 70991 70997 70999 71011 71023 71039 71059 71069 71081 71089 + 71119 71129 71143 71147 71153 71161 71167 71171 71191 71209 + 71233 71237 71249 71257 71261 71263 71287 71293 71317 71327 + 71329 71333 71339 71341 71347 71353 71359 71363 71387 71389 + 71399 71411 71413 71419 71429 71437 71443 71453 71471 71473 + 71479 71483 71503 71527 71537 71549 71551 71563 71569 71593 + 71597 71633 71647 71663 71671 71693 71699 71707 71711 71713 + 71719 71741 71761 71777 71789 71807 71809 71821 71837 71843 + 71849 71861 71867 71879 71881 71887 71899 71909 71917 71933 + 71941 71947 71963 71971 71983 71987 71993 71999 72019 72031 + 72043 72047 72053 72073 72077 72089 72091 72101 72103 72109 + 72139 72161 72167 72169 72173 72211 72221 72223 72227 72229 + 72251 72253 72269 72271 72277 72287 72307 72313 72337 72341 + 72353 72367 72379 72383 72421 72431 72461 72467 72469 72481 + 72493 72497 72503 72533 72547 72551 72559 72577 72613 72617 + 72623 72643 72647 72649 72661 72671 72673 72679 72689 72701 + 72707 72719 72727 72733 72739 72763 72767 72797 72817 72823 + 72859 72869 72871 72883 72889 72893 72901 72907 72911 72923 + 72931 72937 72949 72953 72959 72973 72977 72997 73009 73013 + 73019 73037 73039 73043 73061 73063 73079 73091 73121 73127 + 73133 73141 73181 73189 73237 73243 73259 73277 73291 73303 + 73309 73327 73331 73351 73361 73363 73369 73379 73387 73417 + 73421 73433 73453 73459 73471 73477 73483 73517 73523 73529 + 73547 73553 73561 73571 73583 73589 73597 73607 73609 73613 + 73637 73643 73651 73673 73679 73681 73693 73699 73709 73721 + 73727 73751 73757 73771 73783 73819 73823 73847 73849 73859 + 73867 73877 73883 73897 73907 73939 73943 73951 73961 73973 + 73999 74017 74021 74027 74047 74051 74071 74077 74093 74099 + 74101 74131 74143 74149 74159 74161 74167 74177 74189 74197 + 74201 74203 74209 74219 74231 74257 74279 74287 74293 74297 + 74311 74317 74323 74353 74357 74363 74377 74381 74383 74411 + 74413 74419 74441 74449 74453 74471 74489 74507 74509 74521 + 74527 74531 74551 74561 74567 74573 74587 74597 74609 74611 + 74623 74653 74687 74699 74707 74713 74717 74719 74729 74731 + 74747 74759 74761 74771 74779 74797 74821 74827 74831 74843 + 74857 74861 74869 74873 74887 74891 74897 74903 74923 74929 + 74933 74941 74959 75011 75013 75017 75029 75037 75041 75079 + 75083 75109 75133 75149 75161 75167 75169 75181 75193 75209 + 75211 75217 75223 75227 75239 75253 75269 75277 75289 75307 + 75323 75329 75337 75347 75353 75367 75377 75389 75391 75401 + 75403 75407 75431 75437 75479 75503 75511 75521 75527 75533 + 75539 75541 75553 75557 75571 75577 75583 75611 75617 75619 + 75629 75641 75653 75659 75679 75683 75689 75703 75707 75709 + 75721 75731 75743 75767 75773 75781 75787 75793 75797 75821 + 75833 75853 75869 75883 75913 75931 75937 75941 75967 75979 + 75983 75989 75991 75997 76001 76003 76031 76039 76079 76081 + 76091 76099 76103 76123 76129 76147 76157 76159 76163 76207 + 76213 76231 76243 76249 76253 76259 76261 76283 76289 76303 + 76333 76343 76367 76369 76379 76387 76403 76421 76423 76441 + 76463 76471 76481 76487 76493 76507 76511 76519 76537 76541 + 76543 76561 76579 76597 76603 76607 76631 76649 76651 76667 + 76673 76679 76697 76717 76733 76753 76757 76771 76777 76781 + 76801 76819 76829 76831 76837 76847 76871 76873 76883 76907 + 76913 76919 76943 76949 76961 76963 76991 77003 77017 77023 + 77029 77041 77047 77069 77081 77093 77101 77137 77141 77153 + 77167 77171 77191 77201 77213 77237 77239 77243 77249 77261 + 77263 77267 77269 77279 77291 77317 77323 77339 77347 77351 + 77359 77369 77377 77383 77417 77419 77431 77447 77471 77477 + 77479 77489 77491 77509 77513 77521 77527 77543 77549 77551 + 77557 77563 77569 77573 77587 77591 77611 77617 77621 77641 + 77647 77659 77681 77687 77689 77699 77711 77713 77719 77723 + 77731 77743 77747 77761 77773 77783 77797 77801 77813 77839 + 77849 77863 77867 77893 77899 77929 77933 77951 77969 77977 + 77983 77999 78007 78017 78031 78041 78049 78059 78079 78101 + 78121 78137 78139 78157 78163 78167 78173 78179 78191 78193 + 78203 78229 78233 78241 78259 78277 78283 78301 78307 78311 + 78317 78341 78347 78367 78401 78427 78437 78439 78467 78479 + 78487 78497 78509 78511 78517 78539 78541 78553 78569 78571 + 78577 78583 78593 78607 78623 78643 78649 78653 78691 78697 + 78707 78713 78721 78737 78779 78781 78787 78791 78797 78803 + 78809 78823 78839 78853 78857 78877 78887 78889 78893 78901 + 78919 78929 78941 78977 78979 78989 79031 79039 79043 79063 + 79087 79103 79111 79133 79139 79147 79151 79153 79159 79181 + 79187 79193 79201 79229 79231 79241 79259 79273 79279 79283 + 79301 79309 79319 79333 79337 79349 79357 79367 79379 79393 + 79397 79399 79411 79423 79427 79433 79451 79481 79493 79531 + 79537 79549 79559 79561 79579 79589 79601 79609 79613 79621 + 79627 79631 79633 79657 79669 79687 79691 79693 79697 79699 + 79757 79769 79777 79801 79811 79813 79817 79823 79829 79841 + 79843 79847 79861 79867 79873 79889 79901 79903 79907 79939 + 79943 79967 79973 79979 79987 79997 79999 80021 80039 80051 + 80071 80077 80107 80111 80141 80147 80149 80153 80167 80173 + 80177 80191 80207 80209 80221 80231 80233 80239 80251 80263 + 80273 80279 80287 80309 80317 80329 80341 80347 80363 80369 + 80387 80407 80429 80447 80449 80471 80473 80489 80491 80513 + 80527 80537 80557 80567 80599 80603 80611 80621 80627 80629 + 80651 80657 80669 80671 80677 80681 80683 80687 80701 80713 + 80737 80747 80749 80761 80777 80779 80783 80789 80803 80809 + 80819 80831 80833 80849 80863 80897 80909 80911 80917 80923 + 80929 80933 80953 80963 80989 81001 81013 81017 81019 81023 + 81031 81041 81043 81047 81049 81071 81077 81083 81097 81101 + 81119 81131 81157 81163 81173 81181 81197 81199 81203 81223 + 81233 81239 81281 81283 81293 81299 81307 81331 81343 81349 + 81353 81359 81371 81373 81401 81409 81421 81439 81457 81463 + 81509 81517 81527 81533 81547 81551 81553 81559 81563 81569 + 81611 81619 81629 81637 81647 81649 81667 81671 81677 81689 + 81701 81703 81707 81727 81737 81749 81761 81769 81773 81799 + 81817 81839 81847 81853 81869 81883 81899 81901 81919 81929 + 81931 81937 81943 81953 81967 81971 81973 82003 82007 82009 + 82013 82021 82031 82037 82039 82051 82067 82073 82129 82139 + 82141 82153 82163 82171 82183 82189 82193 82207 82217 82219 + 82223 82231 82237 82241 82261 82267 82279 82301 82307 82339 + 82349 82351 82361 82373 82387 82393 82421 82457 82463 82469 + 82471 82483 82487 82493 82499 82507 82529 82531 82549 82559 + 82561 82567 82571 82591 82601 82609 82613 82619 82633 82651 + 82657 82699 82721 82723 82727 82729 82757 82759 82763 82781 + 82787 82793 82799 82811 82813 82837 82847 82883 82889 82891 + 82903 82913 82939 82963 82981 82997 83003 83009 83023 83047 + 83059 83063 83071 83077 83089 83093 83101 83117 83137 83177 + 83203 83207 83219 83221 83227 83231 83233 83243 83257 83267 + 83269 83273 83299 83311 83339 83341 83357 83383 83389 83399 + 83401 83407 83417 83423 83431 83437 83443 83449 83459 83471 + 83477 83497 83537 83557 83561 83563 83579 83591 83597 83609 + 83617 83621 83639 83641 83653 83663 83689 83701 83717 83719 + 83737 83761 83773 83777 83791 83813 83833 83843 83857 83869 + 83873 83891 83903 83911 83921 83933 83939 83969 83983 83987 + 84011 84017 84047 84053 84059 84061 84067 84089 84121 84127 + 84131 84137 84143 84163 84179 84181 84191 84199 84211 84221 + 84223 84229 84239 84247 84263 84299 84307 84313 84317 84319 + 84347 84349 84377 84389 84391 84401 84407 84421 84431 84437 + 84443 84449 84457 84463 84467 84481 84499 84503 84509 84521 + 84523 84533 84551 84559 84589 84629 84631 84649 84653 84659 + 84673 84691 84697 84701 84713 84719 84731 84737 84751 84761 + 84787 84793 84809 84811 84827 84857 84859 84869 84871 84913 + 84919 84947 84961 84967 84977 84979 84991 85009 85021 85027 + 85037 85049 85061 85081 85087 85091 85093 85103 85109 85121 + 85133 85147 85159 85193 85199 85201 85213 85223 85229 85237 + 85243 85247 85259 85297 85303 85313 85331 85333 85361 85363 + 85369 85381 85411 85427 85429 85439 85447 85451 85453 85469 + 85487 85513 85517 85523 85531 85549 85571 85577 85597 85601 + 85607 85619 85621 85627 85639 85643 85661 85667 85669 85691 + 85703 85711 85717 85733 85751 85781 85793 85817 85819 85829 + 85831 85837 85843 85847 85853 85889 85903 85909 85931 85933 + 85991 85999 86011 86017 86027 86029 86069 86077 86083 86111 + 86113 86117 86131 86137 86143 86161 86171 86179 86183 86197 + 86201 86209 86239 86243 86249 86257 86263 86269 86287 86291 + 86293 86297 86311 86323 86341 86351 86353 86357 86369 86371 + 86381 86389 86399 86413 86423 86441 86453 86461 86467 86477 + 86491 86501 86509 86531 86533 86539 86561 86573 86579 86587 + 86599 86627 86629 86677 86689 86693 86711 86719 86729 86743 + 86753 86767 86771 86783 86813 86837 86843 86851 86857 86861 + 86869 86923 86927 86929 86939 86951 86959 86969 86981 86993 + 87011 87013 87037 87041 87049 87071 87083 87103 87107 87119 + 87121 87133 87149 87151 87179 87181 87187 87211 87221 87223 + 87251 87253 87257 87277 87281 87293 87299 87313 87317 87323 + 87337 87359 87383 87403 87407 87421 87427 87433 87443 87473 + 87481 87491 87509 87511 87517 87523 87539 87541 87547 87553 + 87557 87559 87583 87587 87589 87613 87623 87629 87631 87641 + 87643 87649 87671 87679 87683 87691 87697 87701 87719 87721 + 87739 87743 87751 87767 87793 87797 87803 87811 87833 87853 + 87869 87877 87881 87887 87911 87917 87931 87943 87959 87961 + 87973 87977 87991 88001 88003 88007 88019 88037 88069 88079 + 88093 88117 88129 88169 88177 88211 88223 88237 88241 88259 + 88261 88289 88301 88321 88327 88337 88339 88379 88397 88411 + 88423 88427 88463 88469 88471 88493 88499 88513 88523 88547 + 88589 88591 88607 88609 88643 88651 88657 88661 88663 88667 + 88681 88721 88729 88741 88747 88771 88789 88793 88799 88801 + 88807 88811 88813 88817 88819 88843 88853 88861 88867 88873 + 88883 88897 88903 88919 88937 88951 88969 88993 88997 89003 + 89009 89017 89021 89041 89051 89057 89069 89071 89083 89087 + 89101 89107 89113 89119 89123 89137 89153 89189 89203 89209 + 89213 89227 89231 89237 89261 89269 89273 89293 89303 89317 + 89329 89363 89371 89381 89387 89393 89399 89413 89417 89431 + 89443 89449 89459 89477 89491 89501 89513 89519 89521 89527 + 89533 89561 89563 89567 89591 89597 89599 89603 89611 89627 + 89633 89653 89657 89659 89669 89671 89681 89689 89753 89759 + 89767 89779 89783 89797 89809 89819 89821 89833 89839 89849 + 89867 89891 89897 89899 89909 89917 89923 89939 89959 89963 + 89977 89983 89989 90001 90007 90011 90017 90019 90023 90031 + 90053 90059 90067 90071 90073 90089 90107 90121 90127 90149 + 90163 90173 90187 90191 90197 90199 90203 90217 90227 90239 + 90247 90263 90271 90281 90289 90313 90353 90359 90371 90373 + 90379 90397 90401 90403 90407 90437 90439 90469 90473 90481 + 90499 90511 90523 90527 90529 90533 90547 90583 90599 90617 + 90619 90631 90641 90647 90659 90677 90679 90697 90703 90709 + 90731 90749 90787 90793 90803 90821 90823 90833 90841 90847 + 90863 90887 90901 90907 90911 90917 90931 90947 90971 90977 + 90989 90997 91009 91019 91033 91079 91081 91097 91099 91121 + 91127 91129 91139 91141 91151 91153 91159 91163 91183 91193 + 91199 91229 91237 91243 91249 91253 91283 91291 91297 91303 + 91309 91331 91367 91369 91373 91381 91387 91393 91397 91411 + 91423 91433 91453 91457 91459 91463 91493 91499 91513 91529 + 91541 91571 91573 91577 91583 91591 91621 91631 91639 91673 + 91691 91703 91711 91733 91753 91757 91771 91781 91801 91807 + 91811 91813 91823 91837 91841 91867 91873 91909 91921 91939 + 91943 91951 91957 91961 91967 91969 91997 92003 92009 92033 + 92041 92051 92077 92083 92107 92111 92119 92143 92153 92173 + 92177 92179 92189 92203 92219 92221 92227 92233 92237 92243 + 92251 92269 92297 92311 92317 92333 92347 92353 92357 92363 + 92369 92377 92381 92383 92387 92399 92401 92413 92419 92431 + 92459 92461 92467 92479 92489 92503 92507 92551 92557 92567 + 92569 92581 92593 92623 92627 92639 92641 92647 92657 92669 + 92671 92681 92683 92693 92699 92707 92717 92723 92737 92753 + 92761 92767 92779 92789 92791 92801 92809 92821 92831 92849 + 92857 92861 92863 92867 92893 92899 92921 92927 92941 92951 + 92957 92959 92987 92993 93001 93047 93053 93059 93077 93083 + 93089 93097 93103 93113 93131 93133 93139 93151 93169 93179 + 93187 93199 93229 93239 93241 93251 93253 93257 93263 93281 + 93283 93287 93307 93319 93323 93329 93337 93371 93377 93383 + 93407 93419 93427 93463 93479 93481 93487 93491 93493 93497 + 93503 93523 93529 93553 93557 93559 93563 93581 93601 93607 + 93629 93637 93683 93701 93703 93719 93739 93761 93763 93787 + 93809 93811 93827 93851 93871 93887 93889 93893 93901 93911 + 93913 93923 93937 93941 93949 93967 93971 93979 93983 93997 + 94007 94009 94033 94049 94057 94063 94079 94099 94109 94111 + 94117 94121 94151 94153 94169 94201 94207 94219 94229 94253 + 94261 94273 94291 94307 94309 94321 94327 94331 94343 94349 + 94351 94379 94397 94399 94421 94427 94433 94439 94441 94447 + 94463 94477 94483 94513 94529 94531 94541 94543 94547 94559 + 94561 94573 94583 94597 94603 94613 94621 94649 94651 94687 + 94693 94709 94723 94727 94747 94771 94777 94781 94789 94793 + 94811 94819 94823 94837 94841 94847 94849 94873 94889 94903 + 94907 94933 94949 94951 94961 94993 94999 95003 95009 95021 + 95027 95063 95071 95083 95087 95089 95093 95101 95107 95111 + 95131 95143 95153 95177 95189 95191 95203 95213 95219 95231 + 95233 95239 95257 95261 95267 95273 95279 95287 95311 95317 + 95327 95339 95369 95383 95393 95401 95413 95419 95429 95441 + 95443 95461 95467 95471 95479 95483 95507 95527 95531 95539 + 95549 95561 95569 95581 95597 95603 95617 95621 95629 95633 + 95651 95701 95707 95713 95717 95723 95731 95737 95747 95773 + 95783 95789 95791 95801 95803 95813 95819 95857 95869 95873 + 95881 95891 95911 95917 95923 95929 95947 95957 95959 95971 + 95987 95989 96001 96013 96017 96043 96053 96059 96079 96097 + 96137 96149 96157 96167 96179 96181 96199 96211 96221 96223 + 96233 96259 96263 96269 96281 96289 96293 96323 96329 96331 + 96337 96353 96377 96401 96419 96431 96443 96451 96457 96461 + 96469 96479 96487 96493 96497 96517 96527 96553 96557 96581 + 96587 96589 96601 96643 96661 96667 96671 96697 96703 96731 + 96737 96739 96749 96757 96763 96769 96779 96787 96797 96799 + 96821 96823 96827 96847 96851 96857 96893 96907 96911 96931 + 96953 96959 96973 96979 96989 96997 97001 97003 97007 97021 + 97039 97073 97081 97103 97117 97127 97151 97157 97159 97169 + 97171 97177 97187 97213 97231 97241 97259 97283 97301 97303 + 97327 97367 97369 97373 97379 97381 97387 97397 97423 97429 + 97441 97453 97459 97463 97499 97501 97511 97523 97547 97549 + 97553 97561 97571 97577 97579 97583 97607 97609 97613 97649 + 97651 97673 97687 97711 97729 97771 97777 97787 97789 97813 + 97829 97841 97843 97847 97849 97859 97861 97871 97879 97883 + 97919 97927 97931 97943 97961 97967 97973 97987 98009 98011 + 98017 98041 98047 98057 98081 98101 98123 98129 98143 98179 + 98207 98213 98221 98227 98251 98257 98269 98297 98299 98317 + 98321 98323 98327 98347 98369 98377 98387 98389 98407 98411 + 98419 98429 98443 98453 98459 98467 98473 98479 98491 98507 + 98519 98533 98543 98561 98563 98573 98597 98621 98627 98639 + 98641 98663 98669 98689 98711 98713 98717 98729 98731 98737 + 98773 98779 98801 98807 98809 98837 98849 98867 98869 98873 + 98887 98893 98897 98899 98909 98911 98927 98929 98939 98947 + 98953 98963 98981 98993 98999 99013 99017 99023 99041 99053 + 99079 99083 99089 99103 99109 99119 99131 99133 99137 99139 + 99149 99173 99181 99191 99223 99233 99241 99251 99257 99259 + 99277 99289 99317 99347 99349 99367 99371 99377 99391 99397 + 99401 99409 99431 99439 99469 99487 99497 99523 99527 99529 + 99551 99559 99563 99571 99577 99581 99607 99611 99623 99643 + 99661 99667 99679 99689 99707 99709 99713 99719 99721 99733 + 99761 99767 99787 99793 99809 99817 99823 99829 99833 99839 + 99859 99871 99877 99881 99901 99907 99923 99929 99961 99971 + 99989 99991 100003 100019 100043 100049 100057 100069 100103 100109 + 100129 100151 100153 100169 100183 100189 100193 100207 100213 100237 + 100267 100271 100279 100291 100297 100313 100333 100343 100357 100361 + 100363 100379 100391 100393 100403 100411 100417 100447 100459 100469 + 100483 100493 100501 100511 100517 100519 100523 100537 100547 100549 + 100559 100591 100609 100613 100621 100649 100669 100673 100693 100699 + 100703 100733 100741 100747 100769 100787 100799 100801 100811 100823 + 100829 100847 100853 100907 100913 100927 100931 100937 100943 100957 + 100981 100987 100999 101009 101021 101027 101051 101063 101081 101089 + 101107 101111 101113 101117 101119 101141 101149 101159 101161 101173 + 101183 101197 101203 101207 101209 101221 101267 101273 101279 101281 + 101287 101293 101323 101333 101341 101347 101359 101363 101377 101383 + 101399 101411 101419 101429 101449 101467 101477 101483 101489 101501 + 101503 101513 101527 101531 101533 101537 101561 101573 101581 101599 + 101603 101611 101627 101641 101653 101663 101681 101693 101701 101719 + 101723 101737 101741 101747 101749 101771 101789 101797 101807 101833 + 101837 101839 101863 101869 101873 101879 101891 101917 101921 101929 + 101939 101957 101963 101977 101987 101999 102001 102013 102019 102023 + 102031 102043 102059 102061 102071 102077 102079 102101 102103 102107 + 102121 102139 102149 102161 102181 102191 102197 102199 102203 102217 + 102229 102233 102241 102251 102253 102259 102293 102299 102301 102317 + 102329 102337 102359 102367 102397 102407 102409 102433 102437 102451 + 102461 102481 102497 102499 102503 102523 102533 102539 102547 102551 + 102559 102563 102587 102593 102607 102611 102643 102647 102653 102667 + 102673 102677 102679 102701 102761 102763 102769 102793 102797 102811 + 102829 102841 102859 102871 102877 102881 102911 102913 102929 102931 + 102953 102967 102983 103001 103007 103043 103049 103067 103069 103079 + 103087 103091 103093 103099 103123 103141 103171 103177 103183 103217 + 103231 103237 103289 103291 103307 103319 103333 103349 103357 103387 + 103391 103393 103399 103409 103421 103423 103451 103457 103471 103483 + 103511 103529 103549 103553 103561 103567 103573 103577 103583 103591 + 103613 103619 103643 103651 103657 103669 103681 103687 103699 103703 + 103723 103769 103787 103801 103811 103813 103837 103841 103843 103867 + 103889 103903 103913 103919 103951 103963 103967 103969 103979 103981 + 103991 103993 103997 104003 104009 104021 104033 104047 104053 104059 + 104087 104089 104107 104113 104119 104123 104147 104149 104161 104173 + 104179 104183 104207 104231 104233 104239 104243 104281 104287 104297 + 104309 104311 104323 104327 104347 104369 104381 104383 104393 104399 + 104417 104459 104471 104473 104479 104491 104513 104527 104537 104543 + 104549 104551 104561 104579 104593 104597 104623 104639 104651 104659 + 104677 104681 104683 104693 104701 104707 104711 104717 104723 104729 diff --git a/src/utils/__tests__/memory/meminfo.ubuntu14.txt b/src/utils/__tests__/memory/meminfo.ubuntu14.txt new file mode 100644 index 00000000..775e8114 --- /dev/null +++ b/src/utils/__tests__/memory/meminfo.ubuntu14.txt @@ -0,0 +1,42 @@ +MemTotal: 7659508 kB +MemFree: 246684 kB +Buffers: 126580 kB +Cached: 3296948 kB +SwapCached: 0 kB +Active: 4916076 kB +Inactive: 1732880 kB +Active(anon): 3225504 kB +Inactive(anon): 20576 kB +Active(file): 1690572 kB +Inactive(file): 1712304 kB +Unevictable: 0 kB +Mlocked: 0 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 32 kB +Writeback: 0 kB +AnonPages: 3225428 kB +Mapped: 37500 kB +Shmem: 20652 kB +Slab: 633908 kB +SReclaimable: 467472 kB +SUnreclaim: 166436 kB +KernelStack: 2416 kB +PageTables: 64744 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 3829752 kB +Committed_AS: 4935116 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 17244 kB +VmallocChunk: 34359712740 kB +HardwareCorrupted: 0 kB +AnonHugePages: 954368 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 45056 kB +DirectMap2M: 7950336 kB diff --git a/src/utils/__tests__/memory/vmstat.yosemite.txt b/src/utils/__tests__/memory/vmstat.yosemite.txt new file mode 100644 index 00000000..b0a6f3f3 --- /dev/null +++ b/src/utils/__tests__/memory/vmstat.yosemite.txt @@ -0,0 +1,23 @@ +Mach Virtual Memory Statistics: (page size of 4096 bytes) +Pages free: 422941. +Pages active: 2348641. +Pages inactive: 830440. +Pages speculative: 110635. +Pages throttled: 0. +Pages wired down: 427172. +Pages purgeable: 33368. +"Translation faults": 931955891. +Pages copy-on-write: 59498342. +Pages zero filled: 411628732. +Pages reactivated: 175636. +Pages purged: 569552. +File-backed pages: 926777. +Anonymous pages: 2362939. +Pages stored in compressor: 125673. +Pages occupied by compressor: 51938. +Decompressions: 32945. +Compressions: 197789. +Pageins: 13750115. +Pageouts: 39562. +Swapins: 0. +Swapouts: 2290. diff --git a/src/utils/utf8.php b/src/utils/utf8.php new file mode 100644 index 00000000..6f8af083 --- /dev/null +++ b/src/utils/utf8.php @@ -0,0 +1,950 @@ += 0xD800 && $codepoint <= 0xDFFF) { + $result[] = str_repeat($replacement, strlen($match)); + $offset += strlen($matches[0]); + continue; + } + } + + $result[] = $match; + } else { + // Unicode replacement character, U+FFFD. + $result[] = $replacement; + } + + $offset += strlen($matches[0]); + } + + return implode('', $result); +} + + +/** + * Determine if a string is valid UTF-8, with only basic multilingual plane + * characters. This is particularly important because MySQL's `utf8` column + * types silently truncate strings which contain characters outside of this + * set. + * + * @param string String to test for being valid UTF-8 with only characters in + * the basic multilingual plane. + * @return bool True if the string is valid UTF-8 with only BMP characters. + */ +function phutil_is_utf8_with_only_bmp_characters($string) { + return phutil_is_utf8_slowly($string, $only_bmp = true); +} + + +/** + * Determine if a string is valid UTF-8. + * + * @param string Some string which may or may not be valid UTF-8. + * @return bool True if the string is valid UTF-8. + */ +function phutil_is_utf8($string) { + if (function_exists('mb_check_encoding')) { + // If mbstring is available, this is significantly faster than using PHP. + return mb_check_encoding($string, 'UTF-8'); + } + + return phutil_is_utf8_slowly($string); +} + + +/** + * Determine if a string is valid UTF-8, slowly. + * + * This works on any system, but has very poor performance. + * + * You should call @{function:phutil_is_utf8} instead of this function, as + * that function can use more performant mechanisms if they are available on + * the system. + * + * @param string Some string which may or may not be valid UTF-8. + * @param bool True to require all characters be part of the basic + * multilingual plane (no more than 3-bytes long). + * @return bool True if the string is valid UTF-8. + */ +function phutil_is_utf8_slowly($string, $only_bmp = false) { + // First, check the common case of normal ASCII strings. We're fine if + // the string contains no bytes larger than 127. + if (preg_match('/^[\x01-\x7F]+\z/', $string)) { + return true; + } + + // NOTE: In the past, we used a large regular expression in the form of + // '(x|y|z)+' to match UTF8 strings. However, PCRE can segfaults on patterns + // like this at relatively small input sizes, at least on some systems + // (observed on OSX and Windows). This is apparently because the internal + // implementation is recursive and it blows the stack. + + // See for some discussion. Since the + // input limit is extremely low (less than 50KB on my system), do this check + // very very slowly in PHP instead. See also T5316. + + $len = strlen($string); + for ($ii = 0; $ii < $len; $ii++) { + $chr = ord($string[$ii]); + if ($chr >= 0x01 && $chr <= 0x7F) { + continue; + } else if ($chr >= 0xC2 && $chr <= 0xDF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + return false; + } else if ($chr > 0xE0 && $chr <= 0xEF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + return false; + } else if ($chr == 0xE0) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + + // NOTE: This range starts at 0xA0, not 0x80. The values 0x80-0xA0 are + // "valid", but not minimal representations, and MySQL rejects them. We're + // special casing this part of the range. + + if ($chr >= 0xA0 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + return false; + } else if (!$only_bmp) { + if ($chr > 0xF0 && $chr <= 0xF4) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + } + } else if ($chr == 0xF0) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + + // NOTE: As above, this range starts at 0x90, not 0x80. The values + // 0x80-0x90 are not minimal representations. + + if ($chr >= 0x90 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + } + } + } + + return false; + } + + return true; +} + + +/** + * Find the character length of a UTF-8 string. + * + * @param string A valid utf-8 string. + * @return int The character length of the string. + */ +function phutil_utf8_strlen($string) { + if (function_exists('utf8_decode')) { + return strlen(utf8_decode($string)); + } + return count(phutil_utf8v($string)); +} + + +/** + * Find the console display length of a UTF-8 string. This may differ from the + * character length of the string if it contains double-width characters, like + * many Chinese characters. + * + * This method is based on a C implementation here, which is based on the IEEE + * standards. The source has more discussion and addresses more considerations + * than this implementation does. + * + * http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + * + * NOTE: We currently assume width 1 for East-Asian ambiguous characters. + * + * NOTE: This function is VERY slow. + * + * @param string A valid UTF-8 string. + * @return int The console display length of the string. + */ +function phutil_utf8_console_strlen($string) { + // Formatting and colors don't contribute any width in the console. + $string = preg_replace("/\x1B\[\d*m/", '', $string); + + // In the common case of an ASCII string, just return the string length. + if (preg_match('/^[\x01-\x7F]*\z/', $string)) { + return strlen($string); + } + + $len = 0; + + // NOTE: To deal with combining characters, we're splitting the string into + // glyphs first (characters with combiners) and then counting just the width + // of the first character in each glyph. + + $display_glyphs = phutil_utf8v_combined($string); + foreach ($display_glyphs as $display_glyph) { + $glyph_codepoints = phutil_utf8v_codepoints($display_glyph); + foreach ($glyph_codepoints as $c) { + if ($c == 0) { + break; + } + + $len += 1 + + ($c >= 0x1100 && + ($c <= 0x115F || /* Hangul Jamo init. consonants */ + $c == 0x2329 || $c == 0x232A || + ($c >= 0x2E80 && $c <= 0xA4CF && + $c != 0x303F) || /* CJK ... Yi */ + ($c >= 0xAC00 && $c <= 0xD7A3) || /* Hangul Syllables */ + ($c >= 0xF900 && $c <= 0xFAFF) || /* CJK Compatibility Ideographs */ + ($c >= 0xFE10 && $c <= 0xFE19) || /* Vertical forms */ + ($c >= 0xFE30 && $c <= 0xFE6F) || /* CJK Compatibility Forms */ + ($c >= 0xFF00 && $c <= 0xFF60) || /* Fullwidth Forms */ + ($c >= 0xFFE0 && $c <= 0xFFE6) || + ($c >= 0x20000 && $c <= 0x2FFFD) || + ($c >= 0x30000 && $c <= 0x3FFFD))); + + break; + } + } + + return $len; +} + + +/** + * Test if a string contains Chinese, Japanese, or Korean characters. + * + * Most languages use spaces to separate words, but these languages do not. + * + * @param string String to examine, in UTF8. + * @return bool True if the string contains Chinese, Japanese, or Korean + * characters. + */ +function phutil_utf8_is_cjk($string) { + $codepoints = phutil_utf8v_codepoints($string); + + foreach ($codepoints as $codepoint) { + // CJK Unified Ideographs + if ($codepoint >= 0x4E00 && $codepoint <= 0x9FFF) { + return true; + } + + // CJK Unified Ideographs Extension A + if ($codepoint >= 0x3400 && $codepoint <= 0x4DBF) { + return true; + } + + // CJK Unified Ideographs Extension B + if ($codepoint >= 0x20000 && $codepoint <= 0x2A6DF) { + return true; + } + + // CJK Unified Ideographs Extension C + if ($codepoint >= 0x2A700 && $codepoint <= 0x2B73F) { + return true; + } + + // CJK Unified Ideographs Extension D + if ($codepoint >= 0x2B740 && $codepoint <= 0x2B81F) { + return true; + } + + // CJK Unified Ideographs Extension E + if ($codepoint >= 0x2B820 && $codepoint <= 0x2CEAF) { + return true; + } + + // CJK Unified Ideographs Extension F + if ($codepoint >= 0x2CEB0 && $codepoint <= 0x2EBEF) { + return true; + } + + // CJK Compatibility Ideographs + if ($codepoint >= 0xF900 && $codepoint <= 0xFAFF) { + return true; + } + } + + return false; +} + + +/** + * Split a UTF-8 string into an array of characters. Combining characters are + * also split. + * + * @param string A valid utf-8 string. + * @param int|null Stop processing after examining this many bytes. + * @return list A list of characters in the string. + */ +function phutil_utf8v($string, $byte_limit = null) { + $res = array(); + $len = strlen($string); + + $ii = 0; + while ($ii < $len) { + $byte = $string[$ii]; + if ($byte <= "\x7F") { + $res[] = $byte; + $ii += 1; + + if ($byte_limit && ($ii >= $byte_limit)) { + break; + } + + continue; + } else if ($byte < "\xC0") { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } else if ($byte <= "\xDF") { + $seq_len = 2; + } else if ($byte <= "\xEF") { + $seq_len = 3; + } else if ($byte <= "\xF7") { + $seq_len = 4; + } else if ($byte <= "\xFB") { + $seq_len = 5; + } else if ($byte <= "\xFD") { + $seq_len = 6; + } else { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + + if ($ii + $seq_len > $len) { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + for ($jj = 1; $jj < $seq_len; ++$jj) { + if ($string[$ii + $jj] >= "\xC0") { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + } + $res[] = substr($string, $ii, $seq_len); + $ii += $seq_len; + + if ($byte_limit && ($ii >= $byte_limit)) { + break; + } + } + + return $res; +} + + +/** + * Split a UTF-8 string into an array of codepoints (as integers). + * + * @param string A valid UTF-8 string. + * @return list A list of codepoints, as integers. + */ +function phutil_utf8v_codepoints($string) { + $str_v = phutil_utf8v($string); + + foreach ($str_v as $key => $char) { + $c = ord($char[0]); + $v = 0; + + if (($c & 0x80) == 0) { + $v = $c; + } else if (($c & 0xE0) == 0xC0) { + $v = (($c & 0x1F) << 6) + + ((ord($char[1]) & 0x3F)); + } else if (($c & 0xF0) == 0xE0) { + $v = (($c & 0x0F) << 12) + + ((ord($char[1]) & 0x3F) << 6) + + ((ord($char[2]) & 0x3F)); + } else if (($c & 0xF8) == 0xF0) { + $v = (($c & 0x07) << 18) + + ((ord($char[1]) & 0x3F) << 12) + + ((ord($char[2]) & 0x3F) << 6) + + ((ord($char[3]) & 0x3F)); + } else if (($c & 0xFC) == 0xF8) { + $v = (($c & 0x03) << 24) + + ((ord($char[1]) & 0x3F) << 18) + + ((ord($char[2]) & 0x3F) << 12) + + ((ord($char[3]) & 0x3F) << 6) + + ((ord($char[4]) & 0x3F)); + } else if (($c & 0xFE) == 0xFC) { + $v = (($c & 0x01) << 30) + + ((ord($char[1]) & 0x3F) << 24) + + ((ord($char[2]) & 0x3F) << 18) + + ((ord($char[3]) & 0x3F) << 12) + + ((ord($char[4]) & 0x3F) << 6) + + ((ord($char[5]) & 0x3F)); + } + + $str_v[$key] = $v; + } + + return $str_v; +} + + +/** + * Convert a Unicode codepoint into a UTF8-encoded string. + * + * @param int Unicode codepoint. + * @return string UTF8 encoding. + */ +function phutil_utf8_encode_codepoint($codepoint) { + if ($codepoint < 0x80) { + $r = chr($codepoint); + } else if ($codepoint < 0x800) { + $r = chr(0xC0 | (($codepoint >> 6) & 0x1F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else if ($codepoint < 0x10000) { + $r = chr(0xE0 | (($codepoint >> 12) & 0x0F)). + chr(0x80 | (($codepoint >> 6) & 0x3F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else if ($codepoint < 0x110000) { + $r = chr(0xF0 | (($codepoint >> 18) & 0x07)). + chr(0x80 | (($codepoint >> 12) & 0x3F)). + chr(0x80 | (($codepoint >> 6) & 0x3F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else { + throw new Exception( + pht( + 'Encoding UTF8 codepoint "%s" is not supported.', + $codepoint)); + } + + return $r; +} + + +/** + * Hard-wrap a block of UTF-8 text with embedded HTML tags and entities. + * + * @param string An HTML string with tags and entities. + * @return list List of hard-wrapped lines. + */ +function phutil_utf8_hard_wrap_html($string, $width) { + $break_here = array(); + + // Convert the UTF-8 string into a list of UTF-8 characters. + $vector = phutil_utf8v($string); + $len = count($vector); + $char_pos = 0; + for ($ii = 0; $ii < $len; ++$ii) { + // An ampersand indicates an HTML entity; consume the whole thing (until + // ";") but treat it all as one character. + if ($vector[$ii] == '&') { + do { + ++$ii; + } while ($vector[$ii] != ';'); + ++$char_pos; + // An "<" indicates an HTML tag, consume the whole thing but don't treat + // it as a character. + } else if ($vector[$ii] == '<') { + do { + ++$ii; + } while ($vector[$ii] != '>'); + } else { + ++$char_pos; + } + + // Keep track of where we need to break the string later. + if ($char_pos == $width) { + $break_here[$ii] = true; + $char_pos = 0; + } + } + + $result = array(); + $string = ''; + foreach ($vector as $ii => $char) { + $string .= $char; + if (isset($break_here[$ii])) { + $result[] = $string; + $string = ''; + } + } + + if (strlen($string)) { + $result[] = $string; + } + + return $result; +} + +/** + * Hard-wrap a block of UTF-8 text with no embedded HTML tags and entities. + * + * @param string A non HTML string + * @param int Width of the hard-wrapped lines + * @return list List of hard-wrapped lines. + */ +function phutil_utf8_hard_wrap($string, $width) { + $result = array(); + + $lines = phutil_split_lines($string, $retain_endings = false); + foreach ($lines as $line) { + + // Convert the UTF-8 string into a list of UTF-8 characters. + $vector = phutil_utf8v($line); + + $len = count($vector); + $buffer = ''; + + for ($ii = 1; $ii <= $len; ++$ii) { + $buffer .= $vector[$ii - 1]; + if (($ii % $width) === 0) { + $result[] = $buffer; + $buffer = ''; + } + } + + if (strlen($buffer)) { + $result[] = $buffer; + } + } + + return $result; +} + +/** + * Convert a string from one encoding (like ISO-8859-1) to another encoding + * (like UTF-8). + * + * This is primarily a thin wrapper around `mb_convert_encoding()` which checks + * you have the extension installed, since we try to require the extension + * only if you actually need it (i.e., you want to work with encodings other + * than UTF-8). + * + * NOTE: This function assumes that the input is in the given source encoding. + * If it is not, it may not output in the specified target encoding. If you + * need to perform a hard conversion to UTF-8, use this function in conjunction + * with @{function:phutil_utf8ize}. We can detect failures caused by invalid + * encoding names, but `mb_convert_encoding()` fails silently if the + * encoding name identifies a real encoding but the string is not actually + * encoded with that encoding. + * + * @param string String to re-encode. + * @param string Target encoding name, like "UTF-8". + * @param string Source encoding name, like "ISO-8859-1". + * @return string Input string, with converted character encoding. + * + * @phutil-external-symbol function mb_convert_encoding + */ +function phutil_utf8_convert($string, $to_encoding, $from_encoding) { + if (!$from_encoding) { + throw new InvalidArgumentException( + pht( + 'Attempting to convert a string encoding, but no source encoding '. + 'was provided. Explicitly provide the source encoding.')); + } + if (!$to_encoding) { + throw new InvalidArgumentException( + pht( + 'Attempting to convert a string encoding, but no target encoding '. + 'was provided. Explicitly provide the target encoding.')); + } + + // Normalize encoding names so we can no-op the very common case of UTF8 + // to UTF8 (or any other conversion where both encodings are identical). + $to_upper = strtoupper(str_replace('-', '', $to_encoding)); + $from_upper = strtoupper(str_replace('-', '', $from_encoding)); + if ($from_upper == $to_upper) { + return $string; + } + + if (!function_exists('mb_convert_encoding')) { + throw new Exception( + pht( + "Attempting to convert a string encoding from '%s' to '%s', ". + "but the '%s' PHP extension is not available. Install %s to ". + "work with encodings other than UTF-8.", + $from_encoding, + $to_encoding, + 'mbstring', + 'mbstring')); + } + + $result = @mb_convert_encoding($string, $to_encoding, $from_encoding); + + if ($result === false) { + $message = error_get_last(); + if ($message) { + $message = idx($message, 'message', pht('Unknown error.')); + } + throw new Exception( + pht( + "String conversion from encoding '%s' to encoding '%s' failed: %s", + $from_encoding, + $to_encoding, + $message)); + } + + return $result; +} + + +/** + * Convert a string to title case in a UTF8-aware way. This function doesn't + * necessarily do a great job, but the builtin implementation of `ucwords()` can + * completely destroy inputs, so it just has to be better than that. Similar to + * @{function:ucwords}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of title case. + */ +function phutil_utf8_ucwords($str) { + // NOTE: mb_convert_case() discards uppercase letters in words when converting + // to title case. For example, it will convert "AAA" into "Aaa", which is + // undesirable. + + $v = phutil_utf8v($str); + $result = ''; + $last = null; + + $ord_a = ord('a'); + $ord_z = ord('z'); + foreach ($v as $c) { + $convert = false; + if ($last === null || $last === ' ') { + $o = ord($c[0]); + if ($o >= $ord_a && $o <= $ord_z) { + $convert = true; + } + } + + if ($convert) { + $result .= phutil_utf8_strtoupper($c); + } else { + $result .= $c; + } + + $last = $c; + } + + return $result; +} + + +/** + * Convert a string to lower case in a UTF8-aware way. Similar to + * @{function:strtolower}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of lower case. + * + * @phutil-external-symbol function mb_convert_case + */ +function phutil_utf8_strtolower($str) { + if (function_exists('mb_convert_case')) { + return mb_convert_case($str, MB_CASE_LOWER, 'UTF-8'); + } + + static $map; + if ($map === null) { + $map = array_combine( + range('A', 'Z'), + range('a', 'z')); + } + + return phutil_utf8_strtr($str, $map); +} + + +/** + * Convert a string to upper case in a UTF8-aware way. Similar to + * @{function:strtoupper}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of upper case. + * + * @phutil-external-symbol function mb_convert_case + */ +function phutil_utf8_strtoupper($str) { + if (function_exists('mb_convert_case')) { + return mb_convert_case($str, MB_CASE_UPPER, 'UTF-8'); + } + + static $map; + if ($map === null) { + $map = array_combine( + range('a', 'z'), + range('A', 'Z')); + } + + return phutil_utf8_strtr($str, $map); +} + + +/** + * Replace characters in a string in a UTF-aware way. Similar to + * @{function:strtr}. + * + * @param string UTF-8 input string. + * @param map Map of characters to replace. + * @return string Input with translated characters. + */ +function phutil_utf8_strtr($str, array $map) { + $v = phutil_utf8v($str); + $result = ''; + foreach ($v as $c) { + if (isset($map[$c])) { + $result .= $map[$c]; + } else { + $result .= $c; + } + } + + return $result; +} + +/** + * Determine if a given unicode character is a combining character or not. + * + * @param string A single unicode character. + * @return boolean True or false. + */ +function phutil_utf8_is_combining_character($character) { + $components = phutil_utf8v_codepoints($character); + + // Combining Diacritical Marks (0300 - 036F). + // Combining Diacritical Marks Supplement (1DC0 - 1DFF). + // Combining Diacritical Marks for Symbols (20D0 - 20FF). + // Combining Half Marks (FE20 - FE2F). + + foreach ($components as $codepoint) { + if ($codepoint >= 0x0300 && $codepoint <= 0x036F || + $codepoint >= 0x1DC0 && $codepoint <= 0x1DFF || + $codepoint >= 0x20D0 && $codepoint <= 0x20FF || + $codepoint >= 0xFE20 && $codepoint <= 0xFE2F) { + return true; + } + } + + return false; +} + + +/** + * Split a UTF-8 string into an array of characters. Combining characters + * are not split. + * + * @param string A valid utf-8 string. + * @return list A list of characters in the string. + */ +function phutil_utf8v_combined($string) { + $components = phutil_utf8v($string); + return phutil_utf8v_combine_characters($components); +} + + +/** + * Merge combining characters in a UTF-8 string. + * + * This is a low-level method which can allow other operations to do less work. + * If you have a string, call @{method:phutil_utf8v_combined} instead. + * + * @param list List of UTF-8 characters. + * @return list List of UTF-8 strings with combining characters merged. + */ +function phutil_utf8v_combine_characters(array $characters) { + if (!$characters) { + return array(); + } + + // If the first character in the string is a combining character, + // start with a space. + if (phutil_utf8_is_combining_character($characters[0])) { + $buf = ' '; + } else { + $buf = null; + } + + $parts = array(); + foreach ($characters as $character) { + if (!isset($character[1])) { + // This an optimization: there are no one-byte combining characters, + // so we can just pass these through unmodified. + $is_combining = false; + } else { + $is_combining = phutil_utf8_is_combining_character($character); + } + + if ($is_combining) { + $buf .= $character; + } else { + if ($buf !== null) { + $parts[] = $buf; + } + $buf = $character; + } + } + + $parts[] = $buf; + + return $parts; +} + + +/** + * Return the current system locale setting (LC_ALL). + * + * @return string Current system locale setting. + */ +function phutil_get_system_locale() { + $locale = setlocale(LC_ALL, 0); + + if ($locale === false) { + throw new Exception( + pht( + 'Unable to determine current system locale (call to '. + '"setlocale(LC_ALL, 0)" failed).')); + } + + return $locale; +} + + +/** + * Test if a system locale (LC_ALL) is available on the system. + * + * @param string Locale name like "en_US.UTF-8". + * @return bool True if the locale is available. + */ +function phutil_is_system_locale_available($locale) { + $old_locale = phutil_get_system_locale(); + $is_available = @setlocale(LC_ALL, $locale); + setlocale(LC_ALL, $old_locale); + + return ($is_available !== false); +} + + +/** + * Set the system locale (LC_ALL) to a particular value. + * + * @param string New locale setting. + * @return void + */ +function phutil_set_system_locale($locale) { + $ok = @setlocale(LC_ALL, $locale); + if (!$ok) { + throw new Exception( + pht( + 'Failed to set system locale (to "%s").', + $locale)); + } +} diff --git a/src/utils/utils.php b/src/utils/utils.php new file mode 100644 index 00000000..30a3afc8 --- /dev/null +++ b/src/utils/utils.php @@ -0,0 +1,1920 @@ +doStuff(); + * + * ...but this works fine: + * + * id(new Thing())->doStuff(); + * + * @param wild Anything. + * @return wild Unmodified argument. + */ +function id($x) { + return $x; +} + + +/** + * Access an array index, retrieving the value stored there if it exists or + * a default if it does not. This function allows you to concisely access an + * index which may or may not exist without raising a warning. + * + * @param array Array to access. + * @param scalar Index to access in the array. + * @param wild Default value to return if the key is not present in the + * array. + * @return wild If `$array[$key]` exists, that value is returned. If not, + * $default is returned without raising a warning. + */ +function idx(array $array, $key, $default = null) { + // isset() is a micro-optimization - it is fast but fails for null values. + if (isset($array[$key])) { + return $array[$key]; + } + + // Comparing $default is also a micro-optimization. + if ($default === null || array_key_exists($key, $array)) { + return null; + } + + return $default; +} + + +/** + * Access a sequence of array indexes, retrieving a deeply nested value if + * it exists or a default if it does not. + * + * For example, `idxv($dict, array('a', 'b', 'c'))` accesses the key at + * `$dict['a']['b']['c']`, if it exists. If it does not, or any intermediate + * value is not itself an array, it returns the defualt value. + * + * @param array Array to access. + * @param list List of keys to access, in sequence. + * @param wild Default value to return. + * @return wild Accessed value, or default if the value is not accessible. + */ +function idxv(array $map, array $path, $default = null) { + if (!$path) { + return $default; + } + + $last = last($path); + $path = array_slice($path, 0, -1); + + $cursor = $map; + foreach ($path as $key) { + $cursor = idx($cursor, $key); + if (!is_array($cursor)) { + return $default; + } + } + + return idx($cursor, $last, $default); +} + + +/** + * Call a method on a list of objects. Short for "method pull", this function + * works just like @{function:ipull}, except that it operates on a list of + * objects instead of a list of arrays. This function simplifies a common type + * of mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $key => $object) { + * $names[$key] = $object->getName(); + * } + * + * You can express this more concisely with mpull(): + * + * $names = mpull($objects, 'getName'); + * + * mpull() takes a third argument, which allows you to do the same but for + * the array's keys: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $object) { + * $names[$object->getID()] = $object->getName(); + * } + * + * This is the mpull version(): + * + * $names = mpull($objects, 'getName', 'getID'); + * + * If you pass ##null## as the second argument, the objects will be preserved: + * + * COUNTEREXAMPLE + * $id_map = array(); + * foreach ($objects as $object) { + * $id_map[$object->getID()] = $object; + * } + * + * With mpull(): + * + * $id_map = mpull($objects, null, 'getID'); + * + * See also @{function:ipull}, which works similarly but accesses array indexes + * instead of calling methods. + * + * @param list Some list of objects. + * @param string|null Determines which **values** will appear in the result + * array. Use a string like 'getName' to store the + * value of calling the named method in each value, or + * ##null## to preserve the original objects. + * @param string|null Determines how **keys** will be assigned in the result + * array. Use a string like 'getID' to use the result + * of calling the named method as each object's key, or + * `null` to preserve the original keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed as `$method` and `$key_method`. + */ +function mpull(array $list, $method, $key_method = null) { + $result = array(); + foreach ($list as $key => $object) { + if ($key_method !== null) { + $key = $object->$key_method(); + } + if ($method !== null) { + $value = $object->$method(); + } else { + $value = $object; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Access a property on a list of objects. Short for "property pull", this + * function works just like @{function:mpull}, except that it accesses object + * properties instead of methods. This function simplifies a common type of + * mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $key => $object) { + * $names[$key] = $object->name; + * } + * + * You can express this more concisely with ppull(): + * + * $names = ppull($objects, 'name'); + * + * ppull() takes a third argument, which allows you to do the same but for + * the array's keys: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $object) { + * $names[$object->id] = $object->name; + * } + * + * This is the ppull version(): + * + * $names = ppull($objects, 'name', 'id'); + * + * If you pass ##null## as the second argument, the objects will be preserved: + * + * COUNTEREXAMPLE + * $id_map = array(); + * foreach ($objects as $object) { + * $id_map[$object->id] = $object; + * } + * + * With ppull(): + * + * $id_map = ppull($objects, null, 'id'); + * + * See also @{function:mpull}, which works similarly but calls object methods + * instead of accessing object properties. + * + * @param list Some list of objects. + * @param string|null Determines which **values** will appear in the result + * array. Use a string like 'name' to store the value of + * accessing the named property in each value, or + * `null` to preserve the original objects. + * @param string|null Determines how **keys** will be assigned in the result + * array. Use a string like 'id' to use the result of + * accessing the named property as each object's key, or + * `null` to preserve the original keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed as `$property` and + * `$key_property`. + */ +function ppull(array $list, $property, $key_property = null) { + $result = array(); + foreach ($list as $key => $object) { + if ($key_property !== null) { + $key = $object->$key_property; + } + if ($property !== null) { + $value = $object->$property; + } else { + $value = $object; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Choose an index from a list of arrays. Short for "index pull", this function + * works just like @{function:mpull}, except that it operates on a list of + * arrays and selects an index from them instead of operating on a list of + * objects and calling a method on them. + * + * This function simplifies a common type of mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($list as $key => $dict) { + * $names[$key] = $dict['name']; + * } + * + * With ipull(): + * + * $names = ipull($list, 'name'); + * + * See @{function:mpull} for more usage examples. + * + * @param list Some list of arrays. + * @param scalar|null Determines which **values** will appear in the result + * array. Use a scalar to select that index from each + * array, or null to preserve the arrays unmodified as + * values. + * @param scalar|null Determines which **keys** will appear in the result + * array. Use a scalar to select that index from each + * array, or null to preserve the array keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed for `$index` and `$key_index`. + */ +function ipull(array $list, $index, $key_index = null) { + $result = array(); + foreach ($list as $key => $array) { + if ($key_index !== null) { + $key = $array[$key_index]; + } + if ($index !== null) { + $value = $array[$index]; + } else { + $value = $array; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Group a list of objects by the result of some method, similar to how + * GROUP BY works in an SQL query. This function simplifies grouping objects + * by some property: + * + * COUNTEREXAMPLE + * $animals_by_species = array(); + * foreach ($animals as $animal) { + * $animals_by_species[$animal->getSpecies()][] = $animal; + * } + * + * This can be expressed more tersely with mgroup(): + * + * $animals_by_species = mgroup($animals, 'getSpecies'); + * + * In either case, the result is a dictionary which maps species (e.g., like + * "dog") to lists of animals with that property, so all the dogs are grouped + * together and all the cats are grouped together, or whatever super + * businessesey thing is actually happening in your problem domain. + * + * See also @{function:igroup}, which works the same way but operates on + * array indexes. + * + * @param list List of objects to group by some property. + * @param string Name of a method, like 'getType', to call on each object + * in order to determine which group it should be placed into. + * @param ... Zero or more additional method names, to subgroup the + * groups. + * @return dict Dictionary mapping distinct method returns to lists of + * all objects which returned that value. + */ +function mgroup(array $list, $by /* , ... */) { + $map = mpull($list, $by); + + $groups = array(); + foreach ($map as $group) { + // Can't array_fill_keys() here because 'false' gets encoded wrong. + $groups[$group] = array(); + } + + foreach ($map as $key => $group) { + $groups[$group][$key] = $list[$key]; + } + + $args = func_get_args(); + $args = array_slice($args, 2); + if ($args) { + array_unshift($args, null); + foreach ($groups as $group_key => $grouped) { + $args[0] = $grouped; + $groups[$group_key] = call_user_func_array('mgroup', $args); + } + } + + return $groups; +} + + +/** + * Group a list of arrays by the value of some index. This function is the same + * as @{function:mgroup}, except it operates on the values of array indexes + * rather than the return values of method calls. + * + * @param list List of arrays to group by some index value. + * @param string Name of an index to select from each array in order to + * determine which group it should be placed into. + * @param ... Zero or more additional indexes names, to subgroup the + * groups. + * @return dict Dictionary mapping distinct index values to lists of + * all objects which had that value at the index. + */ +function igroup(array $list, $by /* , ... */) { + $map = ipull($list, $by); + + $groups = array(); + foreach ($map as $group) { + $groups[$group] = array(); + } + + foreach ($map as $key => $group) { + $groups[$group][$key] = $list[$key]; + } + + $args = func_get_args(); + $args = array_slice($args, 2); + if ($args) { + array_unshift($args, null); + foreach ($groups as $group_key => $grouped) { + $args[0] = $grouped; + $groups[$group_key] = call_user_func_array('igroup', $args); + } + } + + return $groups; +} + + +/** + * Sort a list of objects by the return value of some method. In PHP, this is + * often vastly more efficient than `usort()` and similar. + * + * // Sort a list of Duck objects by name. + * $sorted = msort($ducks, 'getName'); + * + * It is usually significantly more efficient to define an ordering method + * on objects and call `msort()` than to write a comparator. It is often more + * convenient, as well. + * + * NOTE: This method does not take the list by reference; it returns a new list. + * + * @param list List of objects to sort by some property. + * @param string Name of a method to call on each object; the return values + * will be used to sort the list. + * @return list Objects ordered by the return values of the method calls. + */ +function msort(array $list, $method) { + $surrogate = mpull($list, $method); + + // See T13303. A "PhutilSortVector" is technically a sortable object, so + // a method which returns a "PhutilSortVector" is suitable for use with + // "msort()". However, it's almost certain that the caller intended to use + // "msortv()", not "msort()", and forgot to add a "v". Treat this as an error. + + if ($surrogate) { + $item = head($surrogate); + if ($item instanceof PhutilSortVector) { + throw new Exception( + pht( + 'msort() was passed a method ("%s") which returns '. + '"PhutilSortVector" objects. Use "msortv()", not "msort()", to '. + 'sort a list which produces vectors.', + $method)); + } + } + + asort($surrogate); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Sort a list of objects by a sort vector. + * + * This sort is stable, well-behaved, and more efficient than `usort()`. + * + * @param list List of objects to sort. + * @param string Name of a method to call on each object. The method must + * return a @{class:PhutilSortVector}. + * @return list Objects ordered by the vectors. + */ +function msortv(array $list, $method) { + $surrogate = mpull($list, $method); + + $index = 0; + foreach ($surrogate as $key => $value) { + if (!($value instanceof PhutilSortVector)) { + throw new Exception( + pht( + 'Objects passed to "%s" must return sort vectors (objects of '. + 'class "%s") from the specified method ("%s"). One object (with '. + 'key "%s") did not.', + 'msortv()', + 'PhutilSortVector', + $method, + $key)); + } + + // Add the original index to keep the sort stable. + $value->addInt($index++); + + $surrogate[$key] = (string)$value; + } + + asort($surrogate, SORT_STRING); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Sort a list of arrays by the value of some index. This method is identical to + * @{function:msort}, but operates on a list of arrays instead of a list of + * objects. + * + * @param list List of arrays to sort by some index value. + * @param string Index to access on each object; the return values + * will be used to sort the list. + * @return list Arrays ordered by the index values. + */ +function isort(array $list, $index) { + $surrogate = ipull($list, $index); + + asort($surrogate); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Filter a list of objects by executing a method across all the objects and + * filter out the ones with empty() results. this function works just like + * @{function:ifilter}, except that it operates on a list of objects instead + * of a list of arrays. + * + * For example, to remove all objects with no children from a list, where + * 'hasChildren' is a method name, do this: + * + * mfilter($list, 'hasChildren'); + * + * The optional third parameter allows you to negate the operation and filter + * out nonempty objects. To remove all objects that DO have children, do this: + * + * mfilter($list, 'hasChildren', true); + * + * @param array List of objects to filter. + * @param string A method name. + * @param bool Optionally, pass true to drop objects which pass the + * filter instead of keeping them. + * @return array List of objects which pass the filter. + */ +function mfilter(array $list, $method, $negate = false) { + if (!is_string($method)) { + throw new InvalidArgumentException(pht('Argument method is not a string.')); + } + + $result = array(); + foreach ($list as $key => $object) { + $value = $object->$method(); + + if (!$negate) { + if (!empty($value)) { + $result[$key] = $object; + } + } else { + if (empty($value)) { + $result[$key] = $object; + } + } + } + + return $result; +} + + +/** + * Filter a list of arrays by removing the ones with an empty() value for some + * index. This function works just like @{function:mfilter}, except that it + * operates on a list of arrays instead of a list of objects. + * + * For example, to remove all arrays without value for key 'username', do this: + * + * ifilter($list, 'username'); + * + * The optional third parameter allows you to negate the operation and filter + * out nonempty arrays. To remove all arrays that DO have value for key + * 'username', do this: + * + * ifilter($list, 'username', true); + * + * @param array List of arrays to filter. + * @param scalar The index. + * @param bool Optionally, pass true to drop arrays which pass the + * filter instead of keeping them. + * @return array List of arrays which pass the filter. + */ +function ifilter(array $list, $index, $negate = false) { + if (!is_scalar($index)) { + throw new InvalidArgumentException(pht('Argument index is not a scalar.')); + } + + $result = array(); + if (!$negate) { + foreach ($list as $key => $array) { + if (!empty($array[$index])) { + $result[$key] = $array; + } + } + } else { + foreach ($list as $key => $array) { + if (empty($array[$index])) { + $result[$key] = $array; + } + } + } + + return $result; +} + + +/** + * Selects a list of keys from an array, returning a new array with only the + * key-value pairs identified by the selected keys, in the specified order. + * + * Note that since this function orders keys in the result according to the + * order they appear in the list of keys, there are effectively two common + * uses: either reducing a large dictionary to a smaller one, or changing the + * key order on an existing dictionary. + * + * @param dict Dictionary of key-value pairs to select from. + * @param list List of keys to select. + * @return dict Dictionary of only those key-value pairs where the key was + * present in the list of keys to select. Ordering is + * determined by the list order. + */ +function array_select_keys(array $dict, array $keys) { + $result = array(); + foreach ($keys as $key) { + if (array_key_exists($key, $dict)) { + $result[$key] = $dict[$key]; + } + } + return $result; +} + + +/** + * Checks if all values of array are instances of the passed class. Throws + * `InvalidArgumentException` if it isn't true for any value. + * + * @param array + * @param string Name of the class or 'array' to check arrays. + * @return array Returns passed array. + */ +function assert_instances_of(array $arr, $class) { + $is_array = !strcasecmp($class, 'array'); + + foreach ($arr as $key => $object) { + if ($is_array) { + if (!is_array($object)) { + $given = gettype($object); + throw new InvalidArgumentException( + pht( + "Array item with key '%s' must be of type array, %s given.", + $key, + $given)); + } + + } else if (!($object instanceof $class)) { + $given = gettype($object); + if (is_object($object)) { + $given = pht('instance of %s', get_class($object)); + } + throw new InvalidArgumentException( + pht( + "Array item with key '%s' must be an instance of %s, %s given.", + $key, + $class, + $given)); + } + } + + return $arr; +} + +/** + * Assert that two arrays have the exact same keys, in any order. + * + * @param map Array with expected keys. + * @param map Array with actual keys. + * @return void + */ +function assert_same_keys(array $expect, array $actual) { + foreach ($expect as $key => $value) { + if (isset($actual[$key]) || array_key_exists($key, $actual)) { + continue; + } + + throw new InvalidArgumentException( + pht( + 'Expected to find key "%s", but it is not present.', + $key)); + + } + + foreach ($actual as $key => $value) { + if (isset($expect[$key]) || array_key_exists($key, $expect)) { + continue; + } + + throw new InvalidArgumentException( + pht( + 'Found unexpected surplus key "%s" where no such key was expected.', + $key)); + } +} + +/** + * Assert that passed data can be converted to string. + * + * @param string Assert that this data is valid. + * @return void + * + * @task assert + */ +function assert_stringlike($parameter) { + switch (gettype($parameter)) { + case 'string': + case 'NULL': + case 'boolean': + case 'double': + case 'integer': + return; + case 'object': + if (method_exists($parameter, '__toString')) { + return; + } + break; + case 'array': + case 'resource': + case 'unknown type': + default: + break; + } + + throw new InvalidArgumentException( + pht( + 'Argument must be scalar or object which implements %s!', + '__toString()')); +} + +/** + * Returns the first argument which is not strictly null, or `null` if there + * are no such arguments. Identical to the MySQL function of the same name. + * + * @param ... Zero or more arguments of any type. + * @return mixed First non-`null` arg, or null if no such arg exists. + */ +function coalesce(/* ... */) { + $args = func_get_args(); + foreach ($args as $arg) { + if ($arg !== null) { + return $arg; + } + } + return null; +} + + +/** + * Similar to @{function:coalesce}, but less strict: returns the first + * non-`empty()` argument, instead of the first argument that is strictly + * non-`null`. If no argument is nonempty, it returns the last argument. This + * is useful idiomatically for setting defaults: + * + * $display_name = nonempty($user_name, $full_name, "Anonymous"); + * + * @param ... Zero or more arguments of any type. + * @return mixed First non-`empty()` arg, or last arg if no such arg + * exists, or null if you passed in zero args. + */ +function nonempty(/* ... */) { + $args = func_get_args(); + $result = null; + foreach ($args as $arg) { + $result = $arg; + if ($arg) { + break; + } + } + return $result; +} + + +/** + * Invokes the "new" operator with a vector of arguments. There is no way to + * `call_user_func_array()` on a class constructor, so you can instead use this + * function: + * + * $obj = newv($class_name, $argv); + * + * That is, these two statements are equivalent: + * + * $pancake = new Pancake('Blueberry', 'Maple Syrup', true); + * $pancake = newv('Pancake', array('Blueberry', 'Maple Syrup', true)); + * + * DO NOT solve this problem in other, more creative ways! Three popular + * alternatives are: + * + * - Build a fake serialized object and unserialize it. + * - Invoke the constructor twice. + * - just use `eval()` lol + * + * These are really bad solutions to the problem because they can have side + * effects (e.g., __wakeup()) and give you an object in an otherwise impossible + * state. Please endeavor to keep your objects in possible states. + * + * If you own the classes you're doing this for, you should consider whether + * or not restructuring your code (for instance, by creating static + * construction methods) might make it cleaner before using `newv()`. Static + * constructors can be invoked with `call_user_func_array()`, and may give your + * class a cleaner and more descriptive API. + * + * @param string The name of a class. + * @param list Array of arguments to pass to its constructor. + * @return obj A new object of the specified class, constructed by passing + * the argument vector to its constructor. + */ +function newv($class_name, array $argv) { + $reflector = new ReflectionClass($class_name); + if ($argv) { + return $reflector->newInstanceArgs($argv); + } else { + return $reflector->newInstance(); + } +} + + +/** + * Returns the first element of an array. Exactly like reset(), but doesn't + * choke if you pass it some non-referenceable value like the return value of + * a function. + * + * @param array Array to retrieve the first element from. + * @return wild The first value of the array. + */ +function head(array $arr) { + return reset($arr); +} + +/** + * Returns the last element of an array. This is exactly like `end()` except + * that it won't warn you if you pass some non-referencable array to + * it -- e.g., the result of some other array operation. + * + * @param array Array to retrieve the last element from. + * @return wild The last value of the array. + */ +function last(array $arr) { + return end($arr); +} + +/** + * Returns the first key of an array. + * + * @param array Array to retrieve the first key from. + * @return int|string The first key of the array. + */ +function head_key(array $arr) { + reset($arr); + return key($arr); +} + +/** + * Returns the last key of an array. + * + * @param array Array to retrieve the last key from. + * @return int|string The last key of the array. + */ +function last_key(array $arr) { + end($arr); + return key($arr); +} + +/** + * Merge a vector of arrays performantly. This has the same semantics as + * array_merge(), so these calls are equivalent: + * + * array_merge($a, $b, $c); + * array_mergev(array($a, $b, $c)); + * + * However, when you have a vector of arrays, it is vastly more performant to + * merge them with this function than by calling array_merge() in a loop, + * because using a loop generates an intermediary array on each iteration. + * + * @param list Vector of arrays to merge. + * @return list Arrays, merged with array_merge() semantics. + */ +function array_mergev(array $arrayv) { + if (!$arrayv) { + return array(); + } + + foreach ($arrayv as $key => $item) { + if (!is_array($item)) { + throw new InvalidArgumentException( + pht( + 'Expected all items passed to `%s` to be arrays, but '. + 'argument with key "%s" has type "%s".', + __FUNCTION__.'()', + $key, + gettype($item))); + } + } + + return call_user_func_array('array_merge', $arrayv); +} + + +/** + * Split a corpus of text into lines. This function splits on "\n", "\r\n", or + * a mixture of any of them. + * + * NOTE: This function does not treat "\r" on its own as a newline because none + * of SVN, Git or Mercurial do on any OS. + * + * @param string Block of text to be split into lines. + * @param bool If true, retain line endings in result strings. + * @return list List of lines. + * + * @phutil-external-symbol class PhutilSafeHTML + * @phutil-external-symbol function phutil_safe_html + */ +function phutil_split_lines($corpus, $retain_endings = true) { + if (!strlen($corpus)) { + return array(''); + } + + // Split on "\r\n" or "\n". + if ($retain_endings) { + $lines = preg_split('/(?<=\n)/', $corpus); + } else { + $lines = preg_split('/\r?\n/', $corpus); + } + + // If the text ends with "\n" or similar, we'll end up with an empty string + // at the end; discard it. + if (end($lines) == '') { + array_pop($lines); + } + + if ($corpus instanceof PhutilSafeHTML) { + foreach ($lines as $key => $line) { + $lines[$key] = phutil_safe_html($line); + } + return $lines; + } + + return $lines; +} + + +/** + * Simplifies a common use of `array_combine()`. Specifically, this: + * + * COUNTEREXAMPLE: + * if ($list) { + * $result = array_combine($list, $list); + * } else { + * // Prior to PHP 5.4, array_combine() failed if given empty arrays. + * $result = array(); + * } + * + * ...is equivalent to this: + * + * $result = array_fuse($list); + * + * @param list List of scalars. + * @return dict Dictionary with inputs mapped to themselves. + */ +function array_fuse(array $list) { + if ($list) { + return array_combine($list, $list); + } + return array(); +} + + +/** + * Add an element between every two elements of some array. That is, given a + * list `A, B, C, D`, and some element to interleave, `x`, this function returns + * `A, x, B, x, C, x, D`. This works like `implode()`, but does not concatenate + * the list into a string. In particular: + * + * implode('', array_interleave($x, $list)); + * + * ...is equivalent to: + * + * implode($x, $list); + * + * This function does not preserve keys. + * + * @param wild Element to interleave. + * @param list List of elements to be interleaved. + * @return list Original list with the new element interleaved. + */ +function array_interleave($interleave, array $array) { + $result = array(); + foreach ($array as $item) { + $result[] = $item; + $result[] = $interleave; + } + array_pop($result); + return $result; +} + +function phutil_is_windows() { + // We can also use PHP_OS, but that's kind of sketchy because it returns + // "WINNT" for Windows 7 and "Darwin" for Mac OS X. Practically, testing for + // DIRECTORY_SEPARATOR is more straightforward. + return (DIRECTORY_SEPARATOR != '/'); +} + +function phutil_is_hiphop_runtime() { + return (array_key_exists('HPHP', $_ENV) && $_ENV['HPHP'] === 1); +} + +/** + * Converts a string to a loggable one, with unprintables and newlines escaped. + * + * @param string Any string. + * @return string String with control and newline characters escaped, suitable + * for printing on a single log line. + */ +function phutil_loggable_string($string) { + if (preg_match('/^[\x20-\x7E]+$/', $string)) { + return $string; + } + + $result = ''; + + static $c_map = array( + '\\' => '\\\\', + "\n" => '\\n', + "\r" => '\\r', + "\t" => '\\t', + ); + + $len = strlen($string); + for ($ii = 0; $ii < $len; $ii++) { + $c = $string[$ii]; + if (isset($c_map[$c])) { + $result .= $c_map[$c]; + } else { + $o = ord($c); + if ($o < 0x20 || $o == 0x7F) { + $result .= '\\x'.sprintf('%02X', $o); + } else { + $result .= $c; + } + } + } + + return $result; +} + + +/** + * Perform an `fwrite()` which distinguishes between EAGAIN and EPIPE. + * + * PHP's `fwrite()` is broken, and never returns `false` for writes to broken + * nonblocking pipes: it always returns 0, and provides no straightforward + * mechanism for distinguishing between EAGAIN (buffer is full, can't write any + * more right now) and EPIPE or similar (no write will ever succeed). + * + * See: https://bugs.php.net/bug.php?id=39598 + * + * If you call this method instead of `fwrite()`, it will attempt to detect + * when a zero-length write is caused by EAGAIN and return `0` only if the + * write really should be retried. + * + * @param resource Socket or pipe stream. + * @param string Bytes to write. + * @return bool|int Number of bytes written, or `false` on any error (including + * errors which `fwrite()` can not detect, like a broken pipe). + */ +function phutil_fwrite_nonblocking_stream($stream, $bytes) { + if (!strlen($bytes)) { + return 0; + } + + $result = @fwrite($stream, $bytes); + if ($result !== 0) { + // In cases where some bytes are witten (`$result > 0`) or + // an error occurs (`$result === false`), the behavior of fwrite() is + // correct. We can return the value as-is. + return $result; + } + + // If we make it here, we performed a 0-length write. Try to distinguish + // between EAGAIN and EPIPE. To do this, we're going to `stream_select()` + // the stream, write to it again if PHP claims that it's writable, and + // consider the pipe broken if the write fails. + + // (Signals received signals during the "fwrite()" do not appear to affect + // anything, see D20083.) + + $read = array(); + $write = array($stream); + $except = array(); + + $result = @stream_select($read, $write, $except, 0); + if ($result === false) { + // See T13243. If the select is interrupted by a signal, it may return + // "false" indicating an underlying EINTR condition. In this case, the + // results (notably, "$write") are not usable because "stream_select()" + // didn't update them. + + // In this case, treat this stream as blocked and tell the caller to + // retry, since EINTR is the only condition we're currently aware of that + // can cause "fwrite()" to return "0" and "stream_select()" to return + // "false" on the same stream. + return 0; + } + + if (!$write) { + // The stream isn't writable, so we conclude that it probably really is + // blocked and the underlying error was EAGAIN. Return 0 to indicate that + // no data could be written yet. + return 0; + } + + // If we make it here, PHP **just** claimed that this stream is writable, so + // perform a write. If the write also fails, conclude that these failures are + // EPIPE or some other permanent failure. + $result = @fwrite($stream, $bytes); + if ($result !== 0) { + // The write worked or failed explicitly. This value is fine to return. + return $result; + } + + // We performed a 0-length write, were told that the stream was writable, and + // then immediately performed another 0-length write. Conclude that the pipe + // is broken and return `false`. + return false; +} + + +/** + * Convert a human-readable unit description into a numeric one. This function + * allows you to replace this: + * + * COUNTEREXAMPLE + * $ttl = (60 * 60 * 24 * 30); // 30 days + * + * ...with this: + * + * $ttl = phutil_units('30 days in seconds'); + * + * ...which is self-documenting and difficult to make a mistake with. + * + * @param string Human readable description of a unit quantity. + * @return int Quantity of specified unit. + */ +function phutil_units($description) { + $matches = null; + if (!preg_match('/^(\d+) (\w+) in (\w+)$/', $description, $matches)) { + throw new InvalidArgumentException( + pht( + 'Unable to parse unit specification (expected a specification in the '. + 'form "%s"): %s', + '5 days in seconds', + $description)); + } + + $quantity = (int)$matches[1]; + $src_unit = $matches[2]; + $dst_unit = $matches[3]; + + $is_divisor = false; + + switch ($dst_unit) { + case 'seconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1; + break; + case 'minute': + case 'minutes': + $factor = 60; + break; + case 'hour': + case 'hours': + $factor = 60 * 60; + break; + case 'day': + case 'days': + $factor = 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'bytes': + switch ($src_unit) { + case 'byte': + case 'bytes': + $factor = 1; + break; + case 'bit': + case 'bits': + $factor = 8; + $is_divisor = true; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'milliseconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1000; + break; + case 'minute': + case 'minutes': + $factor = 1000 * 60; + break; + case 'hour': + case 'hours': + $factor = 1000 * 60 * 60; + break; + case 'day': + case 'days': + $factor = 1000 * 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'microseconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1000000; + break; + case 'minute': + case 'minutes': + $factor = 1000000 * 60; + break; + case 'hour': + case 'hours': + $factor = 1000000 * 60 * 60; + break; + case 'day': + case 'days': + $factor = 1000000 * 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert into the unit "%s".', + $dst_unit)); + } + + if ($is_divisor) { + if ($quantity % $factor) { + throw new InvalidArgumentException( + pht( + '"%s" is not an exact quantity.', + $description)); + } + return (int)($quantity / $factor); + } else { + return $quantity * $factor; + } +} + + +/** + * Compute the number of microseconds that have elapsed since an earlier + * timestamp (from `microtime(true)`). + * + * @param double Microsecond-precision timestamp, from `microtime(true)`. + * @return int Elapsed microseconds. + */ +function phutil_microseconds_since($timestamp) { + if (!is_float($timestamp)) { + throw new Exception( + pht( + 'Argument to "phutil_microseconds_since(...)" should be a value '. + 'returned from "microtime(true)".')); + } + + $delta = (microtime(true) - $timestamp); + $delta = 1000000 * $delta; + $delta = (int)$delta; + + return $delta; +} + + +/** + * Decode a JSON dictionary. + * + * @param string A string which ostensibly contains a JSON-encoded list or + * dictionary. + * @return mixed Decoded list/dictionary. + */ +function phutil_json_decode($string) { + $result = @json_decode($string, true); + + if (!is_array($result)) { + // Failed to decode the JSON. Try to use @{class:PhutilJSONParser} instead. + // This will probably fail, but will throw a useful exception. + $parser = new PhutilJSONParser(); + $result = $parser->parse($string); + } + + return $result; +} + + +/** + * Encode a value in JSON, raising an exception if it can not be encoded. + * + * @param wild A value to encode. + * @return string JSON representation of the value. + */ +function phutil_json_encode($value) { + $result = @json_encode($value); + if ($result === false) { + $reason = phutil_validate_json($value); + if (function_exists('json_last_error')) { + $err = json_last_error(); + if (function_exists('json_last_error_msg')) { + $msg = json_last_error_msg(); + $extra = pht('#%d: %s', $err, $msg); + } else { + $extra = pht('#%d', $err); + } + } else { + $extra = null; + } + + if ($extra) { + $message = pht( + 'Failed to JSON encode value (%s): %s.', + $extra, + $reason); + } else { + $message = pht( + 'Failed to JSON encode value: %s.', + $reason); + } + + throw new Exception($message); + } + + return $result; +} + + +/** + * Produce a human-readable explanation why a value can not be JSON-encoded. + * + * @param wild Value to validate. + * @param string Path within the object to provide context. + * @return string|null Explanation of why it can't be encoded, or null. + */ +function phutil_validate_json($value, $path = '') { + if ($value === null) { + return; + } + + if ($value === true) { + return; + } + + if ($value === false) { + return; + } + + if (is_int($value)) { + return; + } + + if (is_float($value)) { + return; + } + + if (is_array($value)) { + foreach ($value as $key => $subvalue) { + if (strlen($path)) { + $full_key = $path.' > '; + } else { + $full_key = ''; + } + + if (!phutil_is_utf8($key)) { + $full_key = $full_key.phutil_utf8ize($key); + return pht( + 'Dictionary key "%s" is not valid UTF8, and cannot be JSON encoded.', + $full_key); + } + + $full_key .= $key; + $result = phutil_validate_json($subvalue, $full_key); + if ($result !== null) { + return $result; + } + } + } + + if (is_string($value)) { + if (!phutil_is_utf8($value)) { + $display = substr($value, 0, 256); + $display = phutil_utf8ize($display); + if (!strlen($path)) { + return pht( + 'String value is not valid UTF8, and can not be JSON encoded: %s', + $display); + } else { + return pht( + 'Dictionary value at key "%s" is not valid UTF8, and cannot be '. + 'JSON encoded: %s', + $path, + $display); + } + } + } + + return; +} + + +/** + * Decode an INI string. + * + * @param string + * @return mixed + */ +function phutil_ini_decode($string) { + $results = null; + $trap = new PhutilErrorTrap(); + + try { + $have_call = false; + if (function_exists('parse_ini_string')) { + if (defined('INI_SCANNER_RAW')) { + $results = @parse_ini_string($string, true, INI_SCANNER_RAW); + $have_call = true; + } + } + + if (!$have_call) { + throw new PhutilMethodNotImplementedException( + pht( + '%s is not compatible with your version of PHP (%s). This function '. + 'is only supported on PHP versions newer than 5.3.0.', + __FUNCTION__, + phpversion())); + } + + if ($results === false) { + throw new PhutilINIParserException(trim($trap->getErrorsAsString())); + } + + foreach ($results as $section => $result) { + if (!is_array($result)) { + // We JSON decode the value in ordering to perform the following + // conversions: + // + // - `'true'` => `true` + // - `'false'` => `false` + // - `'123'` => `123` + // - `'1.234'` => `1.234` + // + $result = json_decode($result, true); + + if ($result !== null && !is_array($result)) { + $results[$section] = $result; + } + + continue; + } + + foreach ($result as $key => $value) { + $value = json_decode($value, true); + + if ($value !== null && !is_array($value)) { + $results[$section][$key] = $value; + } + } + } + } catch (Exception $ex) { + $trap->destroy(); + throw $ex; + } + + $trap->destroy(); + return $results; +} + + +/** + * Attempt to censor any plaintext credentials from a string. + * + * The major use case here is to censor usernames and passwords from command + * output. For example, when `git fetch` fails, the output includes credentials + * for authenticated HTTP remotes. + * + * @param string Some block of text. + * @return string A similar block of text, but with credentials that could + * be identified censored. + */ +function phutil_censor_credentials($string) { + return preg_replace(',(?<=://)([^/@\s]+)(?=@|$),', '********', $string); +} + + +/** + * Returns a parsable string representation of a variable. + * + * This function is intended to behave similarly to PHP's `var_export` function, + * but the output is intended to follow our style conventions. + * + * @param wild The variable you want to export. + * @return string + */ +function phutil_var_export($var) { + // `var_export(null, true)` returns `"NULL"` (in uppercase). + if ($var === null) { + return 'null'; + } + + // PHP's `var_export` doesn't format arrays very nicely. In particular: + // + // - An empty array is split over two lines (`"array (\n)"`). + // - A space separates "array" and the first opening brace. + // - Non-associative arrays are returned as associative arrays with an + // integer key. + // + if (is_array($var)) { + if (count($var) === 0) { + return 'array()'; + } + + // Don't show keys for non-associative arrays. + $show_keys = !phutil_is_natural_list($var); + + $output = array(); + $output[] = 'array('; + + foreach ($var as $key => $value) { + // Adjust the indentation of the value. + $value = str_replace("\n", "\n ", phutil_var_export($value)); + $output[] = ' '. + ($show_keys ? var_export($key, true).' => ' : ''). + $value.','; + } + + $output[] = ')'; + return implode("\n", $output); + } + + // Let PHP handle everything else. + return var_export($var, true); +} + + +/** + * An improved version of `fnmatch`. + * + * @param string A glob pattern. + * @param string A path. + * @return bool + */ +function phutil_fnmatch($glob, $path) { + // Modify the glob to allow `**/` to match files in the root directory. + $glob = preg_replace('@(?:(? Dictionary of parameters. + * @return string HTTP query string. + */ +function phutil_build_http_querystring(array $parameters) { + $pairs = array(); + foreach ($parameters as $key => $value) { + $pairs[] = array($key, $value); + } + + return phutil_build_http_querystring_from_pairs($pairs); +} + +/** + * Build a query string from a list of parameter pairs. + * + * @param list> List of pairs. + * @return string HTTP query string. + */ +function phutil_build_http_querystring_from_pairs(array $pairs) { + // We want to encode in RFC3986 mode, but "http_build_query()" did not get + // a flag for that mode until PHP 5.4.0. This is equivalent to calling + // "http_build_query()" with the "PHP_QUERY_RFC3986" flag. + + $query = array(); + foreach ($pairs as $pair_key => $pair) { + if (!is_array($pair) || (count($pair) !== 2)) { + throw new Exception( + pht( + 'HTTP parameter pair (with key "%s") is not valid: each pair must '. + 'be an array with exactly two elements.', + $pair_key)); + } + + list($key, $value) = $pair; + list($key, $value) = phutil_http_parameter_pair($key, $value); + $query[] = rawurlencode($key).'='.rawurlencode($value); + } + $query = implode('&', $query); + + return $query; +} + +/** + * Typecheck and cast an HTTP key-value parameter pair. + * + * Scalar values are converted to strings. Nonscalar values raise exceptions. + * + * @param scalar HTTP parameter key. + * @param scalar HTTP parameter value. + * @return pair Key and value as strings. + */ +function phutil_http_parameter_pair($key, $value) { + try { + assert_stringlike($key); + } catch (InvalidArgumentException $ex) { + throw new PhutilProxyException( + pht('HTTP query parameter key must be a scalar.'), + $ex); + } + + $key = phutil_string_cast($key); + + try { + assert_stringlike($value); + } catch (InvalidArgumentException $ex) { + throw new PhutilProxyException( + pht( + 'HTTP query parameter value (for key "%s") must be a scalar.', + $key), + $ex); + } + + $value = phutil_string_cast($value); + + return array($key, $value); +} + +function phutil_decode_mime_header($header) { + if (function_exists('iconv_mime_decode')) { + return iconv_mime_decode($header, 0, 'UTF-8'); + } + + if (function_exists('mb_decode_mimeheader')) { + return mb_decode_mimeheader($header); + } + + throw new Exception( + pht( + 'Unable to decode MIME header: install "iconv" or "mbstring" '. + 'extension.')); +} + +/** + * Perform a "(string)" cast without disabling standard exception behavior. + * + * When PHP invokes "__toString()" automatically, it fatals if the method + * raises an exception. In older versions of PHP (until PHP 7.1), this fatal is + * fairly opaque and does not give you any information about the exception + * itself, although newer versions of PHP at least include the exception + * message. + * + * This is documented on the "__toString()" manual page: + * + * Warning + * You cannot throw an exception from within a __toString() method. Doing + * so will result in a fatal error. + * + * However, this only applies to implicit invocation by the language runtime. + * Application code can safely call `__toString()` directly without any effect + * on exception handling behavior. Very cool. + * + * We also reject arrays. PHP casts them to the string "Array". This behavior + * is, charitably, evil. + * + * @param wild Any value which aspires to be represented as a string. + * @return string String representation of the provided value. + */ +function phutil_string_cast($value) { + if (is_array($value)) { + throw new Exception( + pht( + 'Value passed to "phutil_string_cast()" is an array; arrays can '. + 'not be sensibly cast to strings.')); + } + + if (is_object($value)) { + $string = $value->__toString(); + + if (!is_string($string)) { + throw new Exception( + pht( + 'Object (of class "%s") did not return a string from "__toString()".', + get_class($value))); + } + + return $string; + } + + return (string)$value; +} + + +/** + * Return a short, human-readable description of an object's type. + * + * This is mostly useful for raising errors like "expected x() to return a Y, + * but it returned a Z". + * + * This is similar to "get_type()", but describes objects and arrays in more + * detail. + * + * @param wild Anything. + * @return string Human-readable description of the value's type. + */ +function phutil_describe_type($value) { + return PhutilTypeSpec::getTypeOf($value); +} + + +/** + * Test if a list has the natural numbers (1, 2, 3, and so on) as keys, in + * order. + * + * @return bool True if the list is a natural list. + */ +function phutil_is_natural_list(array $list) { + $expect = 0; + + foreach ($list as $key => $item) { + if ($key !== $expect) { + return false; + } + $expect++; + } + + return true; +} + + +/** + * Escape text for inclusion in a URI or a query parameter. Note that this + * method does NOT escape '/', because "%2F" is invalid in paths and Apache + * will automatically 404 the page if it's present. This will produce correct + * (the URIs will work) and desirable (the URIs will be readable) behavior in + * these cases: + * + * '/path/?param='.phutil_escape_uri($string); # OK: Query Parameter + * '/path/to/'.phutil_escape_uri($string); # OK: URI Suffix + * + * It will potentially produce the WRONG behavior in this special case: + * + * COUNTEREXAMPLE + * '/path/to/'.phutil_escape_uri($string).'/thing/'; # BAD: URI Infix + * + * In this case, any '/' characters in the string will not be escaped, so you + * will not be able to distinguish between the string and the suffix (unless + * you have more information, like you know the format of the suffix). For infix + * URI components, use @{function:phutil_escape_uri_path_component} instead. + * + * @param string Some string. + * @return string URI encoded string, except for '/'. + */ +function phutil_escape_uri($string) { + return str_replace('%2F', '/', rawurlencode($string)); +} + + +/** + * Escape text for inclusion as an infix URI substring. See discussion at + * @{function:phutil_escape_uri}. This function covers an unusual special case; + * @{function:phutil_escape_uri} is usually the correct function to use. + * + * This function will escape a string into a format which is safe to put into + * a URI path and which does not contain '/' so it can be correctly parsed when + * embedded as a URI infix component. + * + * However, you MUST decode the string with + * @{function:phutil_unescape_uri_path_component} before it can be used in the + * application. + * + * @param string Some string. + * @return string URI encoded string that is safe for infix composition. + */ +function phutil_escape_uri_path_component($string) { + return rawurlencode(rawurlencode($string)); +} + + +/** + * Unescape text that was escaped by + * @{function:phutil_escape_uri_path_component}. See + * @{function:phutil_escape_uri} for discussion. + * + * Note that this function is NOT the inverse of + * @{function:phutil_escape_uri_path_component}! It undoes additional escaping + * which is added to survive the implied unescaping performed by the webserver + * when interpreting the request. + * + * @param string Some string emitted + * from @{function:phutil_escape_uri_path_component} and + * then accessed via a web server. + * @return string Original string. + */ +function phutil_unescape_uri_path_component($string) { + return rawurldecode($string); +} diff --git a/src/utils/viewutils.php b/src/utils/viewutils.php new file mode 100644 index 00000000..ea7f74ed --- /dev/null +++ b/src/utils/viewutils.php @@ -0,0 +1,170 @@ + $now - $shift) { + $format = pht('D, M j'); + } else { + $format = pht('M j Y'); + } + return $format; +} + +function phutil_format_relative_time($duration) { + return phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0); +} + +/** + * Format a relative time (duration) into weeks, days, hours, minutes, + * seconds, but unlike phabricator_format_relative_time, does so for more than + * just the largest unit. + * + * @param int Duration in seconds. + * @param int Levels to render - will render the three highest levels, ie: + * 5 h, 37 m, 1 s + * @return string Human-readable description. + */ +function phutil_format_relative_time_detailed($duration, $levels = 2) { + if ($duration == 0) { + return 'now'; + } + $levels = max(1, min($levels, 5)); + $remainder = 0; + + $is_negative = false; + if ($duration < 0) { + $is_negative = true; + $duration = abs($duration); + } + + $this_level = 1; + $detailed_relative_time = phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0, + $remainder); + $duration = $remainder; + + while ($remainder > 0 && $this_level < $levels) { + $detailed_relative_time .= ', '.phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0, + $remainder); + $duration = $remainder; + $this_level++; + } + + if ($is_negative) { + $detailed_relative_time .= ' ago'; + } + + return $detailed_relative_time; +} + +/** + * Format a byte count for human consumption, e.g. "10MB" instead of + * "10485760". + * + * @param int Number of bytes. + * @return string Human-readable description. + */ +function phutil_format_bytes($bytes) { + return phutil_format_units_generic( + $bytes, + array(1024, 1024, 1024, 1024, 1024), + array('B', 'KB', 'MB', 'GB', 'TB', 'PB'), + $precision = 0); +} + + +/** + * Parse a human-readable byte description (like "6MB") into an integer. + * + * @param string Human-readable description. + * @return int Number of represented bytes. + */ +function phutil_parse_bytes($input) { + $bytes = trim($input); + if (!strlen($bytes)) { + return null; + } + + // NOTE: Assumes US-centric numeral notation. + $bytes = preg_replace('/[ ,]/', '', $bytes); + + $matches = null; + if (!preg_match('/^(?:\d+(?:[.]\d+)?)([kmgtp]?)b?$/i', $bytes, $matches)) { + throw new Exception(pht("Unable to parse byte size '%s'!", $input)); + } + + $scale = array( + 'k' => 1024, + 'm' => 1024 * 1024, + 'g' => 1024 * 1024 * 1024, + 't' => 1024 * 1024 * 1024 * 1024, + 'p' => 1024 * 1024 * 1024 * 1024 * 1024, + ); + + $bytes = (float)$bytes; + if ($matches[1]) { + $bytes *= $scale[strtolower($matches[1])]; + } + + return (int)$bytes; +} + + +function phutil_format_units_generic( + $n, + array $scales, + array $labels, + $precision = 0, + &$remainder = null) { + + $is_negative = false; + if ($n < 0) { + $is_negative = true; + $n = abs($n); + } + + $remainder = 0; + $accum = 1; + + $scale = array_shift($scales); + $label = array_shift($labels); + while ($n >= $scale && count($labels)) { + $remainder += ($n % $scale) * $accum; + $n /= $scale; + $accum *= $scale; + $label = array_shift($labels); + if (!count($scales)) { + break; + } + $scale = array_shift($scales); + } + + if ($is_negative) { + $n = -$n; + $remainder = -$remainder; + } + + if ($precision) { + $num_string = number_format($n, $precision); + } else { + $num_string = (int)floor($n); + } + + if ($label) { + $num_string .= ' '.$label; + } + + return $num_string; +} diff --git a/src/workflow/ArcanistLiberateWorkflow.php b/src/workflow/ArcanistLiberateWorkflow.php index efca1bf5..4c3b6097 100644 --- a/src/workflow/ArcanistLiberateWorkflow.php +++ b/src/workflow/ArcanistLiberateWorkflow.php @@ -161,12 +161,17 @@ EOTEXT } private function liberateVersion2($path) { - $bin = $this->getScriptPath('scripts/phutil_rebuild_map.php'); + $bin = $this->getScriptPath('support/lib/rebuild-map.php'); + + $argv = array(); + if ($this->getArgument('all')) { + $argv[] = '--drop-cache'; + } return phutil_passthru( - 'php %s %C %s', + 'php -f %s -- %Ls %s', $bin, - $this->getArgument('all') ? '--drop-cache' : '', + $argv, $path); } @@ -244,7 +249,7 @@ EOTEXT private function getScriptPath($script) { - $root = dirname(phutil_get_library_root('phutil')); + $root = dirname(phutil_get_library_root('arcanist')); return $root.'/'.$script; } diff --git a/src/workflow/ArcanistUpgradeWorkflow.php b/src/workflow/ArcanistUpgradeWorkflow.php index 50449ef7..5b7019d1 100644 --- a/src/workflow/ArcanistUpgradeWorkflow.php +++ b/src/workflow/ArcanistUpgradeWorkflow.php @@ -26,7 +26,6 @@ EOTEXT public function run() { $roots = array( - 'libphutil' => dirname(phutil_get_library_root('phutil')), 'arcanist' => dirname(phutil_get_library_root('arcanist')), ); diff --git a/src/workflow/ArcanistVersionWorkflow.php b/src/workflow/ArcanistVersionWorkflow.php index 9c470fc6..e0a338af 100644 --- a/src/workflow/ArcanistVersionWorkflow.php +++ b/src/workflow/ArcanistVersionWorkflow.php @@ -36,7 +36,6 @@ EOTEXT $roots = array( 'arcanist' => dirname(phutil_get_library_root('arcanist')), - 'libphutil' => dirname(phutil_get_library_root('phutil')), ); foreach ($roots as $lib => $root) { diff --git a/src/xsprintf/PhutilCommandString.php b/src/xsprintf/PhutilCommandString.php new file mode 100644 index 00000000..85eb673a --- /dev/null +++ b/src/xsprintf/PhutilCommandString.php @@ -0,0 +1,85 @@ +argv = $argv; + + $this->escapingMode = self::MODE_DEFAULT; + + // This makes sure we throw immediately if there are errors in the + // parameters. + $this->getMaskedString(); + } + + public function __toString() { + return $this->getMaskedString(); + } + + public function getUnmaskedString() { + return $this->renderString(true); + } + + public function getMaskedString() { + return $this->renderString(false); + } + + public function setEscapingMode($escaping_mode) { + $this->escapingMode = $escaping_mode; + return $this; + } + + private function renderString($unmasked) { + return xsprintf( + 'xsprintf_command', + array( + 'unmasked' => $unmasked, + 'mode' => $this->escapingMode, + ), + $this->argv); + } + + public static function escapeArgument($value, $mode) { + switch ($mode) { + case self::MODE_DEFAULT: + return escapeshellarg($value); + case self::MODE_POWERSHELL: + return self::escapePowershell($value); + default: + throw new Exception(pht('Unknown escaping mode!')); + } + } + + private static function escapePowershell($value) { + // These escape sequences are from http://ss64.com/ps/syntax-esc.html + + // Replace backticks first. + $value = str_replace('`', '``', $value); + + // Now replace other required notations. + $value = str_replace("\0", '`0', $value); + $value = str_replace(chr(7), '`a', $value); + $value = str_replace(chr(8), '`b', $value); + $value = str_replace("\f", '`f', $value); + $value = str_replace("\n", '`n', $value); + $value = str_replace("\r", '`r', $value); + $value = str_replace("\t", '`t', $value); + $value = str_replace("\v", '`v', $value); + $value = str_replace('#', '`#', $value); + $value = str_replace("'", '`\'', $value); + $value = str_replace('"', '`"', $value); + + // The rule on dollar signs is mentioned further down the page, and + // they only need to be escaped when using double quotes (which we are). + $value = str_replace('$', '`$', $value); + + return '"'.$value.'"'; + } + +} diff --git a/src/xsprintf/PhutilTerminalString.php b/src/xsprintf/PhutilTerminalString.php new file mode 100644 index 00000000..8d99b093 --- /dev/null +++ b/src/xsprintf/PhutilTerminalString.php @@ -0,0 +1,75 @@ +string = $string; + } + + public function __toString() { + return $this->string; + } + + public function applyWrap() { + $string = (string)$this; + $string = phutil_console_wrap($string); + return new self($string); + } + + public function applyIndent($depth, $with_prefix = true) { + $string = (string)$this; + $string = phutil_console_wrap($string, $depth, $with_prefix); + return new self($string); + } + + public static function escapeStringValue($value, $allow_whitespace) { + if ($value instanceof PhutilTerminalString) { + return (string)$value; + } + + $value = (string)$value; + + static $escape_map; + if ($escape_map === null) { + $escape_map = array( + chr(0x00) => '', + chr(0x07) => '', + chr(0x08) => '', + chr(0x09) => '', + chr(0x0A) => '', + chr(0x0D) => '', + chr(0x1B) => '', + chr(0x7F) => '', + ); + + for ($ii = 0; $ii < 32; $ii++) { + $c = chr($ii); + if (empty($escape_map[$c])) { + $escape_map[$c] = sprintf('<0x%02X>', $ii); + } + } + } + + $map = $escape_map; + if ($allow_whitespace) { + unset($map["\r"]); + unset($map["\n"]); + unset($map["\t"]); + } + + $value = str_replace(array_keys($map), array_values($map), $value); + + // In this mode, we additionally escape any which is not immediately + // followed by . + if ($allow_whitespace) { + $value = preg_replace('/\r(?!\n)/', '', $value); + } + + return $value; + } +} diff --git a/src/xsprintf/__tests__/PhutilCsprintfTestCase.php b/src/xsprintf/__tests__/PhutilCsprintfTestCase.php new file mode 100644 index 00000000..05a26c72 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilCsprintfTestCase.php @@ -0,0 +1,96 @@ + true, + + // For arguments which have any characters which are not safe in some + // context, %R should apply standard escaping. + 'a b' => false, + + + 'http://domain.com/path/' => true, + 'svn+ssh://domain.com/path/' => true, + '`rm -rf`' => false, + '$VALUE' => false, + ); + + foreach ($inputs as $input => $expect_same) { + $actual = (string)csprintf('%R', $input); + if ($expect_same) { + $this->assertEqual($input, $actual); + } else { + $this->assertFalse($input === $actual); + } + } + } + + public function testPowershell() { + $cmd = csprintf('%s', "\n"); + $cmd->setEscapingMode(PhutilCommandString::MODE_POWERSHELL); + + $this->assertEqual( + '"`n"', + (string)$cmd); + } + + public function testNoPowershell() { + if (!phutil_is_windows()) { + $cmd = csprintf('%s', '#'); + $cmd->setEscapingMode(PhutilCommandString::MODE_DEFAULT); + + $this->assertEqual( + '\'#\'', + (string)$cmd); + } + } + + public function testPasswords() { + // Normal "%s" doesn't do anything special. + $command = csprintf('echo %s', 'hunter2trustno1'); + $this->assertTrue(strpos($command, 'hunter2trustno1') !== false); + + // "%P" takes a PhutilOpaqueEnvelope. + $caught = null; + try { + csprintf('echo %P', 'hunter2trustno1'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof InvalidArgumentException); + + + // "%P" masks the provided value. + $command = csprintf('echo %P', new PhutilOpaqueEnvelope('hunter2trustno1')); + $this->assertFalse(strpos($command, 'hunter2trustno1')); + + + // Executing the command works as expected. + list($out) = execx('%C', $command); + $this->assertTrue(strpos($out, 'hunter2trustno1') !== false); + } + + public function testEscapingIsRobust() { + if (phutil_is_windows()) { + $this->assertSkipped(pht("This test doesn't work on Windows.")); + } + + // Escaping should be robust even when used to escape commands which take + // other commands. + list($out) = execx( + 'sh -c %s', + csprintf( + 'sh -c %s', + csprintf( + 'sh -c %s', + csprintf( + 'echo %P', + new PhutilOpaqueEnvelope('!@#$%^&*()'))))); + $this->assertTrue(strpos($out, '!@#$%^&*()') !== false); + } + +} diff --git a/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php b/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php new file mode 100644 index 00000000..7babefba --- /dev/null +++ b/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + "'version-1'", + hgsprintf('%s', 'version-1')); + + $this->assertEqual( + "'single\\'quote'", + hgsprintf('%s', "single'quote")); + + $this->assertEqual( + "'back\\\\slash'", + hgsprintf('%s', 'back\\slash')); + + $this->assertEqual( + "'33%'", + hgsprintf('%R', hgsprintf('%s', '33%'))); + } + +} diff --git a/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php b/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php new file mode 100644 index 00000000..34535d19 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + chr(7).'foobar'.chr(7), + pregsprintf('%s', '', 'foobar')); + + $this->assertEqual( + chr(7).'\.\*\[a\-z\]'.chr(7), + pregsprintf('%s', '', '.*[a-z]')); + + $this->assertEqual( + chr(7).'.*[a-z]'.chr(7), + pregsprintf('%R', '', '.*[a-z]')); + + $this->assertEqual( + chr(7).'^abc\.\*xyz.*$'.chr(7).'siU', + pregsprintf('^abc%sxyz%R$', 'siU', '.*', '.*')); + } + +} diff --git a/src/xsprintf/__tests__/PhutilTsprintfTestCase.php b/src/xsprintf/__tests__/PhutilTsprintfTestCase.php new file mode 100644 index 00000000..96d6a772 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilTsprintfTestCase.php @@ -0,0 +1,24 @@ +assertEqual( + '', + (string)tsprintf('%s', "\0")); + + $this->assertEqual( + '[31mred[39m', + (string)tsprintf('%s', "\x1B[31mred\x1B[39m")); + + $block = "1\r\n2\r3\n4"; + + $this->assertEqual( + '1234', + (string)tsprintf('%s', $block)); + $this->assertEqual( + "1\r\n23\n4", + (string)tsprintf('%B', $block)); + } + +} diff --git a/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php b/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php new file mode 100644 index 00000000..c12c51db --- /dev/null +++ b/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php @@ -0,0 +1,19 @@ +assertEqual( + 'x.com?a=huh%3F', + urisprintf('x.com?a=%s', 'huh?')); + + $this->assertEqual( + '/a/origin%252Fmaster/z/', + urisprintf('/a/%p/z/', 'origin/master')); + + $this->assertEqual( + 'y.com?%21&%23', + vurisprintf('y.com?%s&%s', array('!', '#'))); + } + +} diff --git a/src/xsprintf/csprintf.php b/src/xsprintf/csprintf.php new file mode 100644 index 00000000..ead744a8 --- /dev/null +++ b/src/xsprintf/csprintf.php @@ -0,0 +1,140 @@ + $pos + 1) ? $pattern[$pos + 1] : null; + + $is_unmasked = !empty($userdata['unmasked']); + + if (empty($userdata['mode'])) { + $mode = PhutilCommandString::MODE_DEFAULT; + } else { + $mode = $userdata['mode']; + } + + if ($value instanceof PhutilCommandString) { + if ($is_unmasked) { + $value = $value->getUnmaskedString(); + } else { + $value = $value->getMaskedString(); + } + } + + switch ($type) { + case 'L': + // Remove the L. + $pattern = substr_replace($pattern, '', $pos, 1); + $length = strlen($pattern); + $type = 's'; + + // Check that the value is a non-empty array. + if (!is_array($value)) { + throw new InvalidArgumentException( + pht('Expected an array for %%L%s conversion.', $next)); + } + + switch ($next) { + case 's': + $values = array(); + foreach ($value as $val) { + $values[] = csprintf('%s', $val); + } + $value = implode(' ', $values); + break; + + case 'R': + $values = array(); + foreach ($value as $val) { + $values[] = csprintf('%R', $val); + } + $value = implode(' ', $values); + break; + + default: + throw new XsprintfUnknownConversionException("%L{$next}"); + } + break; + + case 'R': + if (!preg_match('(^[a-zA-Z0-9:/@._+-]+$)', $value)) { + $value = PhutilCommandString::escapeArgument($value, $mode); + } + $type = 's'; + break; + case 's': + $value = PhutilCommandString::escapeArgument($value, $mode); + $type = 's'; + break; + case 'P': + if (!($value instanceof PhutilOpaqueEnvelope)) { + throw new InvalidArgumentException( + pht('Expected %s for %%P conversion.', 'PhutilOpaqueEnvelope')); + } + if ($is_unmasked) { + $value = $value->openEnvelope(); + } else { + $value = '********'; + } + $value = PhutilCommandString::escapeArgument($value, $mode); + $type = 's'; + break; + case 'C': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/exception/XsprintfUnknownConversionException.php b/src/xsprintf/exception/XsprintfUnknownConversionException.php new file mode 100644 index 00000000..c4c401d9 --- /dev/null +++ b/src/xsprintf/exception/XsprintfUnknownConversionException.php @@ -0,0 +1,10 @@ + 0x1FFFFFFFFFFFFF) { + throw new RangeException( + pht( + "You are passing an integer to %s which is so large it can ". + "not be represented without loss of precision by Javascript's ". + "native %s class. Use %%# instead.", + 'jsprintf()', + 'Number')); + } + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/ldapsprintf.php b/src/xsprintf/ldapsprintf.php new file mode 100644 index 00000000..58eb6c87 --- /dev/null +++ b/src/xsprintf/ldapsprintf.php @@ -0,0 +1,48 @@ +;"= '); + $type = 's'; + break; + + case 'Q': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/pregsprintf.php b/src/xsprintf/pregsprintf.php new file mode 100644 index 00000000..05ac86f4 --- /dev/null +++ b/src/xsprintf/pregsprintf.php @@ -0,0 +1,45 @@ + $delim); + + $pattern = xsprintf('xsprintf_regex', $userdata, $args); + return $delim.$pattern.$delim.$flags; +} + +/** + * @{function:xsprintf} callback for regular expressions. + */ +function xsprintf_regex($userdata, &$pattern, &$pos, &$value, &$length) { + $delim = idx($userdata, 'delimiter'); + $type = $pattern[$pos]; + + switch ($type) { + case 's': + $value = preg_quote($value, $delim); + break; + case 'R': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/tsprintf.php b/src/xsprintf/tsprintf.php new file mode 100644 index 00000000..0da8bb3f --- /dev/null +++ b/src/xsprintf/tsprintf.php @@ -0,0 +1,44 @@ += $argc) { + throw new BadFunctionCallException( + pht( + 'Too few arguments to %s.', + 'xsprintf()')); + } + + if ($callback !== null) { + $callback($userdata, $pattern, $pos, $argv[$arg], $len); + } + } + } + + if ($c === '%') { + // If we have "%%", this encodes a literal percentage symbol, so we are + // no longer inside a conversion. + $conv = !$conv; + } + } + + if ($arg !== ($argc - 1)) { + throw new BadFunctionCallException( + pht( + 'Too many arguments to %s.', + 'xsprintf()')); + } + + $argv[0] = $pattern; + return call_user_func_array('sprintf', $argv); +} + +/** + * Example @{function:xsprintf} callback. When you call `xsprintf`, you must + * pass a callback like this one. `xsprintf` will invoke the callback when it + * encounters a conversion (like "%Z") in the pattern string. + * + * Generally, this callback should examine `$pattern[$pos]` (which will contain + * the conversion character, like 'Z'), escape `$value` appropriately, and then + * replace `$pattern[$pos]` with an 's' so `sprintf` prints the escaped value + * as a string. However, more sophisticated behaviors are possible -- + * particularly, consuming multiple characters to allow for conversions like + * "%Ld". In this case, the callback needs to `substr_replace` the entire + * conversion with 's' and then update `$length`. + * + * For example implementations, see @{function:xsprintf_command}, + * @{function:xsprintf_javascript} and @{function:xsprintf_query}. + * + * @param wild Arbitrary, optional userdata. This is whatever userdata + * was passed to @{function:xsprintf}. + * @param string The pattern string being parsed. + * @param int The current character position in the string. + * @param wild The value to convert. + * @param int The string length. + */ +function xsprintf_callback_example( + $userdata, + &$pattern, + &$pos, + &$value, + &$length) { + throw new RuntimeException( + pht( + 'This function exists only to document the call signature '. + 'for %s callbacks.', + 'xsprintf()')); +} diff --git a/support/lib/extract-symbols.php b/support/lib/extract-symbols.php new file mode 100755 index 00000000..370d5ba8 --- /dev/null +++ b/support/lib/extract-symbols.php @@ -0,0 +1,587 @@ +#!/usr/bin/env php +setTagline(pht('identify symbols in a PHP source file')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'all', + 'help' => pht( + 'Report all symbols, including built-ins and declared externals.'), + ), + array( + 'name' => 'ugly', + 'help' => pht('Do not prettify JSON output.'), + ), + array( + 'name' => 'path', + 'wildcard' => true, + 'help' => pht('PHP Source file to analyze.'), + ), + )); + +$paths = $args->getArg('path'); +if (count($paths) !== 1) { + throw new Exception(pht('Specify exactly one path!')); +} +$path = Filesystem::resolvePath(head($paths)); + +$show_all = $args->getArg('all'); + +$source_code = Filesystem::readFile($path); + +try { + $tree = XHPASTTree::newFromData($source_code); +} catch (XHPASTSyntaxErrorException $ex) { + $result = array( + 'error' => $ex->getMessage(), + 'line' => $ex->getErrorLine(), + 'file' => $path, + ); + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); + exit(0); +} + +$root = $tree->getRootNode(); +$root->buildSelectCache(); + +// -( Unsupported Constructs )------------------------------------------------ + +$namespaces = $root->selectDescendantsOfType('n_NAMESPACE'); +foreach ($namespaces as $namespace) { + phutil_fail_on_unsupported_feature($namespace, $path, pht('namespaces')); +} + +$uses = $root->selectDescendantsOfType('n_USE'); +foreach ($namespaces as $namespace) { + phutil_fail_on_unsupported_feature( + $namespace, $path, pht('namespace `%s` statements', 'use')); +} + +$possible_traits = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($possible_traits as $possible_trait) { + $attributes = $possible_trait->getChildByIndex(0); + // Can't use getChildByIndex here because not all classes have attributes + foreach ($attributes->getChildren() as $attribute) { + if (strtolower($attribute->getConcreteString()) === 'trait') { + phutil_fail_on_unsupported_feature($possible_trait, $path, pht('traits')); + } + } +} + + +// -( Marked Externals )------------------------------------------------------ + + +// Identify symbols marked with "@phutil-external-symbol", so we exclude them +// from the dependency list. + +$externals = array(); +$doc_parser = new PhutilDocblockParser(); +foreach ($root->getTokens() as $token) { + if ($token->getTypeName() === 'T_DOC_COMMENT') { + list($block, $special) = $doc_parser->parse($token->getValue()); + + $ext_list = idx($special, 'phutil-external-symbol'); + $ext_list = (array)$ext_list; + $ext_list = array_filter($ext_list); + + foreach ($ext_list as $ext_ref) { + $matches = null; + if (preg_match('/^\s*(\S+)\s+(\S+)/', $ext_ref, $matches)) { + $externals[$matches[1]][$matches[2]] = true; + } + } + } +} + + +// -( Declarations and Dependencies )----------------------------------------- + + +// The first stage of analysis is to find all the symbols we declare in the +// file (like functions and classes) and all the symbols we use in the file +// (like calling functions and invoking classes). Later, we filter this list +// to exclude builtins. + + +$have = array(); // For symbols we declare. +$need = array(); // For symbols we use. +$xmap = array(); // For extended classes and implemented interfaces. + + +// -( Functions )------------------------------------------------------------- + + +// Find functions declared in this file. + +// This is "function f() { ... }". +$functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); +foreach ($functions as $function) { + $name = $function->getChildByIndex(2); + if ($name->getTypeName() === 'n_EMPTY') { + // This is an anonymous function; don't record it into the symbol + // index. + continue; + } + $have[] = array( + 'type' => 'function', + 'symbol' => $name, + ); +} + + +// Find functions used by this file. Uses: +// +// - Explicit Call +// - String literal passed to call_user_func() or call_user_func_array() +// - String literal in array literal in call_user_func()/call_user_func_array() +// +// TODO: Possibly support these: +// +// - String literal in ReflectionFunction(). + +// This is "f();". +$calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); +foreach ($calls as $call) { + $name = $call->getChildByIndex(0); + if ($name->getTypeName() === 'n_VARIABLE' || + $name->getTypeName() === 'n_VARIABLE_VARIABLE') { + // Ignore these, we can't analyze them. + continue; + } + if ($name->getTypeName() === 'n_CLASS_STATIC_ACCESS') { + // These are "C::f()", we'll pick this up later on. + continue; + } + $call_name = $name->getConcreteString(); + if ($call_name === 'call_user_func' || + $call_name === 'call_user_func_array') { + $params = $call->getChildByIndex(1)->getChildren(); + if (!count($params)) { + // This is a bare call_user_func() with no arguments; just ignore it. + continue; + } + $symbol = array_shift($params); + $type = 'function'; + $symbol_value = $symbol->getStringLiteralValue(); + $pos = strpos($symbol_value, '::'); + if ($pos) { + $type = 'class'; + $symbol_value = substr($symbol_value, 0, $pos); + } else if ($symbol->getTypeName() === 'n_ARRAY_LITERAL') { + try { + $type = 'class'; + $symbol_value = idx($symbol->evalStatic(), 0); + } catch (Exception $ex) {} + } + if ($symbol_value && strpos($symbol_value, '$') === false) { + $need[] = array( + 'type' => $type, + 'name' => $symbol_value, + 'symbol' => $symbol, + ); + } + } else { + $need[] = array( + 'type' => 'function', + 'symbol' => $name, + ); + } +} + + +// -( Classes )--------------------------------------------------------------- + + +// Find classes declared by this file. + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1); + $have[] = array( + 'type' => 'class', + 'symbol' => $class_name, + ); +} + + +// Find classes used by this file. We identify these: +// +// - class ... extends X +// - new X +// - Static method call +// - Static property access +// - Use of class constant +// - typehints +// - catch +// - instanceof +// - newv() +// +// TODO: Possibly support these: +// +// - String literal in ReflectionClass(). + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1)->getConcreteString(); + $extends = $class->getChildByIndex(2); + foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { + $need[] = array( + 'type' => 'class', + 'symbol' => $parent, + ); + + // Track all 'extends' in the extension map. + $xmap[$class_name][] = $parent->getConcreteString(); + } +} + +// This is "new X()". +$uses_of_new = $root->selectDescendantsOfType('n_NEW'); +foreach ($uses_of_new as $new_operator) { + $name = $new_operator->getChildByIndex(0); + if ($name->getTypeName() === 'n_VARIABLE' || + $name->getTypeName() === 'n_VARIABLE_VARIABLE') { + continue; + } + $need[] = array( + 'type' => 'class', + 'symbol' => $name, + ); +} + +// This covers all of "X::$y", "X::y()" and "X::CONST". +$static_uses = $root->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); +foreach ($static_uses as $static_use) { + $name = $static_use->getChildByIndex(0); + if ($name->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class', + 'symbol' => $name, + ); +} + +// This is "function (X $x)". +$parameters = $root->selectDescendantsOfType('n_DECLARATION_PARAMETER'); +foreach ($parameters as $parameter) { + $hint = $parameter->getChildByIndex(0); + if ($hint->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $hint, + ); +} + +$returns = $root->selectDescendantsOfType('n_DECLARATION_RETURN'); +foreach ($returns as $return) { + $hint = $return->getChildByIndex(0); + if ($hint->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $hint, + ); +} + +// This is "catch (Exception $ex)". +$catches = $root->selectDescendantsOfType('n_CATCH'); +foreach ($catches as $catch) { + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $catch->getChildOfType(0, 'n_CLASS_NAME'), + ); +} + +// This is "$x instanceof X". +$instanceofs = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); +foreach ($instanceofs as $instanceof) { + $operator = $instanceof->getChildOfType(1, 'n_OPERATOR'); + if ($operator->getConcreteString() !== 'instanceof') { + continue; + } + $class = $instanceof->getChildByIndex(2); + if ($class->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $class, + ); +} + +// This is "newv('X')". +$calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); +foreach ($calls as $call) { + $call_name = $call->getChildByIndex(0)->getConcreteString(); + if ($call_name !== 'newv') { + continue; + } + $params = $call->getChildByIndex(1)->getChildren(); + if (!count($params)) { + continue; + } + $symbol = reset($params); + $symbol_value = $symbol->getStringLiteralValue(); + if ($symbol_value && strpos($symbol_value, '$') === false) { + $need[] = array( + 'type' => 'class', + 'name' => $symbol_value, + 'symbol' => $symbol, + ); + } +} + + +// -( Interfaces )------------------------------------------------------------ + + +// Find interfaces declared in this file. + + +// This is "interface X .. { ... }". +$interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); +foreach ($interfaces as $interface) { + $interface_name = $interface->getChildByIndex(1); + $have[] = array( + 'type' => 'interface', + 'symbol' => $interface_name, + ); +} + + +// Find interfaces used by this file. We identify these: +// +// - class ... implements X +// - interface ... extends X + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1)->getConcreteString(); + $implements = $class->getChildByIndex(3); + $interfaces = $implements->selectDescendantsOfType('n_CLASS_NAME'); + foreach ($interfaces as $interface) { + $need[] = array( + 'type' => 'interface', + 'symbol' => $interface, + ); + + // Track 'class ... implements' in the extension map. + $xmap[$class_name][] = $interface->getConcreteString(); + } +} + + +// This is "interface X ... { ... }". +$interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); +foreach ($interfaces as $interface) { + $interface_name = $interface->getChildByIndex(1)->getConcreteString(); + + $extends = $interface->getChildByIndex(2); + foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { + $need[] = array( + 'type' => 'interface', + 'symbol' => $parent, + ); + + // Track 'interface ... extends' in the extension map. + $xmap[$interface_name][] = $parent->getConcreteString(); + } +} + + +// -( Analysis )-------------------------------------------------------------- + + +$declared_symbols = array(); +foreach ($have as $key => $spec) { + $name = $spec['symbol']->getConcreteString(); + $declared_symbols[$spec['type']][$name] = $spec['symbol']->getOffset(); +} + +$required_symbols = array(); +foreach ($need as $key => $spec) { + $name = idx($spec, 'name'); + if (!$name) { + $name = $spec['symbol']->getConcreteString(); + } + + $type = $spec['type']; + foreach (explode('/', $type) as $libtype) { + if (!$show_all) { + if (!empty($externals[$libtype][$name])) { + // Ignore symbols declared as externals. + continue 2; + } + if (!empty($builtins[$libtype][$name])) { + // Ignore symbols declared as builtins. + continue 2; + } + } + if (!empty($declared_symbols[$libtype][$name])) { + // We declare this symbol, so don't treat it as a requirement. + continue 2; + } + } + if (!empty($required_symbols[$type][$name])) { + // Report only the first use of a symbol, since reporting all of them + // isn't terribly informative. + continue; + } + $required_symbols[$type][$name] = $spec['symbol']->getOffset(); +} + +$result = array( + 'have' => $declared_symbols, + 'need' => $required_symbols, + 'xmap' => $xmap, +); + + +// -( Output )---------------------------------------------------------------- + + +if ($args->getArg('ugly')) { + echo json_encode($result); +} else { + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); +} + + +// -( Library )--------------------------------------------------------------- + +function phutil_fail_on_unsupported_feature(XHPASTNode $node, $file, $what) { + $line = $node->getLineNumber(); + $message = phutil_console_wrap( + pht( + '`%s` has limited support for features introduced after PHP 5.2.3. '. + 'This library uses an unsupported feature (%s) on line %d of %s.', + 'arc liberate', + $what, + $line, + Filesystem::readablePath($file))); + + $result = array( + 'error' => $message, + 'line' => $line, + 'file' => $file, + ); + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); + exit(0); +} + +function phutil_symbols_get_builtins() { + $builtin = array(); + $builtin['classes'] = get_declared_classes(); + $builtin['interfaces'] = get_declared_interfaces(); + + $funcs = get_defined_functions(); + $builtin['functions'] = $funcs['internal']; + + $compat = json_decode( + file_get_contents( + dirname(__FILE__).'/../../resources/php/symbol-information.json'), + true); + + foreach (array('functions', 'classes', 'interfaces') as $type) { + // Developers may not have every extension that a library potentially uses + // installed. We supplement the list of declared functions and classes with + // a list of known extension functions to avoid raising false positives just + // because you don't have pcntl, etc. + $extensions = array_keys($compat[$type]); + $builtin[$type] = array_merge($builtin[$type], $extensions); + } + + return array( + 'class' => array_fill_keys($builtin['classes'], true) + array( + 'static' => true, + 'parent' => true, + 'self' => true, + + 'PhutilBootloader' => true, + + // PHP7 defines these new parent classes of "Exception", but they do not + // exist prior to PHP7. It's possible to use them safely in PHP5, in + // some cases, to write code which is compatible with either PHP5 or + // PHP7, but it's hard for us tell if a particular use is safe or not. + // For now, assume users know what they're doing and that uses are safe. + // For discussion, see T12855. + 'Throwable' => true, + 'Error' => true, + 'ParseError' => true, + + // PHP7 types. + 'bool' => true, + 'float' => true, + 'int' => true, + 'string' => true, + 'iterable' => true, + 'object' => true, + 'void' => true, + ), + 'function' => array_filter( + array( + 'empty' => true, + 'isset' => true, + 'die' => true, + + // These are provided by libphutil but not visible in the map. + + 'phutil_is_windows' => true, + 'phutil_load_library' => true, + 'phutil_is_hiphop_runtime' => true, + + // HPHP/i defines these functions as 'internal', but they are NOT + // builtins and do not exist in vanilla PHP. Make sure we don't mark + // them as builtin since we need to add dependencies for them. + 'idx' => false, + 'id' => false, + ) + array_fill_keys($builtin['functions'], true)), + 'interface' => array_fill_keys($builtin['interfaces'], true), + ); +} diff --git a/support/lib/rebuild-map.php b/support/lib/rebuild-map.php new file mode 100755 index 00000000..533f7806 --- /dev/null +++ b/support/lib/rebuild-map.php @@ -0,0 +1,78 @@ +#!/usr/bin/env php +setTagline(pht('rebuild the library map file')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'quiet', + 'help' => pht('Do not write status messages to stderr.'), + ), + array( + 'name' => 'drop-cache', + 'help' => pht( + 'Drop the symbol cache and rebuild the entire map from scratch.'), + ), + array( + 'name' => 'limit', + 'param' => 'N', + 'default' => 8, + 'help' => pht( + 'Controls the number of symbol mapper subprocesses run at once. '. + 'Defaults to 8.'), + ), + array( + 'name' => 'show', + 'help' => pht( + 'Print symbol map to stdout instead of writing it to the map file.'), + ), + array( + 'name' => 'ugly', + 'help' => pht( + 'Use faster but less readable serialization for "--show".'), + ), + array( + 'name' => 'root', + 'wildcard' => true, + ), + )); + +$root = $args->getArg('root'); +if (count($root) !== 1) { + throw new Exception(pht('Provide exactly one library root!')); +} +$root = Filesystem::resolvePath(head($root)); + +$builder = new PhutilLibraryMapBuilder($root); +$builder->setQuiet($args->getArg('quiet')); +$builder->setSubprocessLimit($args->getArg('limit')); + +if ($args->getArg('drop-cache')) { + $builder->dropSymbolCache(); +} + +if ($args->getArg('show')) { + $library_map = $builder->buildMap(); + + if ($args->getArg('ugly')) { + echo json_encode($library_map); + } else { + echo id(new PhutilJSON())->encodeFormatted($library_map); + } +} else { + $builder->buildAndWriteMap(); +} + +exit(0); diff --git a/support/xhpast/Makefile b/support/xhpast/Makefile new file mode 100644 index 00000000..11114d8e --- /dev/null +++ b/support/xhpast/Makefile @@ -0,0 +1,77 @@ +BISONFLAGS = --verbose -Wall +CPPFLAGS = -fPIC -Wall +FLEXFLAGS = -CFr + +ifdef DEBUG + BISONFLAGS += --debug + CPPFLAGS += -ggdb -DDEBUG + FLEXFLAGS += --debug +else + CPPFLAGS += -O3 -minline-all-stringops +endif + +ifdef PROFILE + CPPFLAGS += -pg +endif + +ifdef STATIC + CPPFLAGS += -static +endif + +ifdef MSYSTEM + CPPFLAGS += -static-libgcc -static-libstdc++ +endif + +ROOT = ../../src/parser/xhpast + +.PHONY: all +all: xhpast + +clean: + rm -f xhpast parser.yacc.output libxhpast.a *.o + +cleanall: clean + rm -f scanner.lex.hpp scanner.lex.cpp parser.yacc.hpp parser.yacc.cpp + rm -f node_names.hpp parser_nodes.php + +.PHONY: install +install: xhpast + cp xhpast $(ROOT)/bin/xhpast + +.PHONY: parser scanner + +parser: parser.yacc.hpp parser.yacc.cpp +scanner: scanner.lex.hpp scanner.lex.cpp + +%.lex.hpp %.lex.cpp: %.l +ifndef SKIP_SCANNER + flex $(FLEXFLAGS) --header-file=$*.lex.hpp --outfile=$*.lex.cpp $< + @echo '/* @gen''er''ated */' >> $*.lex.hpp + @echo '/* @gen''er''ated */' >> $*.lex.cpp +else + touch $*.lex.hpp $*.lex.cpp +endif + +%.yacc.hpp %.yacc.cpp: %.y +ifndef SKIP_PARSER + bison $(BISONFLAGS) --defines=$*.yacc.hpp --output=$*.yacc.cpp $< + @echo '/* @gen''er''ated */' >> $*.yacc.hpp + @echo '/* @gen''er''ated */' >> $*.yacc.cpp +else + touch $*.yacc.hpp $*.yacc.cpp +endif + +%.o: %.cpp + $(CXX) -c $(CPPFLAGS) -o $@ $< + +node_names.hpp parser_nodes.php: generate_nodes.php + php -f $< + +parser.yacc.o: scanner.lex.hpp +scanner.lex.o: parser.yacc.hpp node_names.hpp scanner.lex.hpp + +libxhpast.a: scanner.lex.o parser.yacc.o + $(AR) -crs $@ $^ + +xhpast: xhpast.cpp libxhpast.a + $(CXX) $(CPPFLAGS) -o $@ $^ diff --git a/support/xhpast/README b/support/xhpast/README new file mode 100644 index 00000000..b2ec57e2 --- /dev/null +++ b/support/xhpast/README @@ -0,0 +1,18 @@ += Building = + +Normally, you can build `xhpast` by running `make`, which will create a binary +in this directory: + + xhpast/ $ make + +You can run `make install` to copy that binary to the right place in libphutil +so that libphutil, Phabricator, Diviner, etc., can use xhpast. + +If you are developing `xhpast`, you need to `make parser scanner xhpast` +instead to regenerate the parser and scanner: + + xhpast/ $ make parser scanner xhpast + +We ship the generated parser and scanner and do not rebuild them by default to +prevent users from needing to install flex and bison and fiddle around with +flex versions. diff --git a/support/xhpast/ast.hpp b/support/xhpast/ast.hpp new file mode 100644 index 00000000..f6920052 --- /dev/null +++ b/support/xhpast/ast.hpp @@ -0,0 +1,53 @@ +#pragma once + +#include +#include + +#include "astnode.hpp" + +class yy_extra_type { + public: + yy_extra_type() { + first_lineno = 0; + lineno = 1; + terminated = false; + last_token = -1; + insert_token = -1; + heredoc_yyleng = -1; + list_size = 0; + pushStack(); + } + + size_t first_lineno; // line number before scanning the current token + size_t lineno; // current line number being scanned. + std::string error; // description of error (if terminated true) + bool terminated; // becomes true when the parser terminates with an error + int last_token; // the last token to be returned by the scanner + int insert_token; // insert this token without reading from buffer + size_t heredoc_yyleng; // last length of yytext while scanning + std::string heredoc_label; // heredoc sentinel label + unsigned int list_size; + + xhpast::token_list_t token_list; + + void pushStack() { + tag_stack.push_front(std::deque()); + } + + protected: + std::deque > tag_stack; +}; + +#define YYSTYPE xhpast::Node * +#define YY_HEADER_EXPORT_START_CONDITIONS +#define YY_EXTRA_TYPE yy_extra_type* + +#include "parser.yacc.hpp" +#ifndef FLEX_SCANNER + #include "scanner.lex.hpp" +#endif + +int xhpparse(void*, YYSTYPE *); +void xhp_new_push_state(int s, struct yyguts_t* yyg); +void xhp_new_pop_state(struct yyguts_t* yyg); +void xhp_set_state(int s, struct yyguts_t* yyg); diff --git a/support/xhpast/astnode.hpp b/support/xhpast/astnode.hpp new file mode 100644 index 00000000..e44a23ea --- /dev/null +++ b/support/xhpast/astnode.hpp @@ -0,0 +1,106 @@ +#pragma once +#include +#include +#include +#include + +namespace xhpast { + + class Token; + typedef std::list token_list_t; + + class Token { + + public: + unsigned int type; + std::string value; + unsigned int lineno; + unsigned int n; + + Token(unsigned int type, char *value, unsigned int n) : + type(type), + value(value), + lineno(0), + n(n) { + } + }; + + class Node; + typedef std::list node_list_t; + + class Node { + public: + unsigned int type; + + int l_tok; + int r_tok; + + node_list_t children; + + + Node() : type(0), l_tok(-1), r_tok(-1) {}; + + Node(unsigned int type) : type(type), l_tok(-1), r_tok(-1) {}; + + Node(unsigned int type, int end_tok) : + type(type) { + this->l_tok = end_tok; + this->r_tok = end_tok; + } + + Node(unsigned int type, int l_tok, int r_tok) : + type(type), + l_tok(l_tok), + r_tok(r_tok) { + + } + + Node *appendChild(Node *node) { + this->children.push_back(node); + return this->expandRange(node); + } + + Node *appendChildren(Node *node) { + for (node_list_t::iterator ii = node->children.begin(); + ii != node->children.end(); + ++ii) { + + this->appendChild(*ii); + } + return this; + } + + Node *firstChild() { + if (this->children.empty()) { + return NULL; + } + return *(this->children.begin()); + } + + Node *setType(unsigned int t) { + this->type = t; + return this; + } + + Node *expandRange(Node *n) { + if (!n) { + fprintf( + stderr, + "Trying to expandRange() a null node to one of type %d\n", + this->type); + exit(1); + }; + + if (n->l_tok != -1 && (n->l_tok < this->l_tok || (this->l_tok == -1))) { + this->l_tok = n->l_tok; + } + + if (n->r_tok != -1 && (n->r_tok > this->r_tok || (this->r_tok == -1))) { + this->r_tok = n->r_tok; + } + + return this; + } + + }; +} diff --git a/support/xhpast/build-xhpast.php b/support/xhpast/build-xhpast.php new file mode 100755 index 00000000..4f13142a --- /dev/null +++ b/support/xhpast/build-xhpast.php @@ -0,0 +1,9 @@ +#!/usr/bin/env php + $value) { + $hpp .= "#define {$node} {$value}\n"; +} +Filesystem::writeFile( + Filesystem::resolvePath('node_names.hpp', dirname(__FILE__)), + $hpp); +echo pht('Wrote C++ definition.')."\n"; + +$at = '@'; +$php = << $value) { + $php .= " {$value} => '{$node}',\n"; +} +$php .= <<(xhpastget_extra(yyscanner)) +#undef yylineno +#define yylineno yyextra->first_lineno +#define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) +#define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) +#define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) + +#define NNEW(t) \ + (new xhpast::Node(t)) + +#define NTYPE(n, type) \ + ((n)->setType(type)) + +#define NMORE(n, end) \ + ((n)->expandRange(end)) + +#define NSPAN(n, type, end) \ + (NMORE(NTYPE((n), type), end)) + +#define NEXPAND(l, n, r) \ + ((n)->expandRange(l)->expandRange(r)) + +using namespace std; + +static void yyerror(void* yyscanner, void* _, const char* error) { + if (yyextra->terminated) { + return; + } + yyextra->terminated = true; + yyextra->error = error; +} + +%} + +%expect 5 +// 2: PHP's if/else grammar +// 7: expr '[' dim_offset ']' -- shift will default to first grammar +%name-prefix "xhpast" +%pure-parser +%parse-param { void* yyscanner } +%parse-param { xhpast::Node** root } +%lex-param { void* yyscanner } +%error-verbose + +%precedence T_INCLUDE T_INCLUDE_ONCE +%token T_EVAL +%precedence T_REQUIRE T_REQUIRE_ONCE +%token ',' +%left T_LOGICAL_OR +%left T_LOGICAL_XOR +%left T_LOGICAL_AND +%precedence T_PRINT +%precedence '=' T_PLUS_EQUAL + T_MINUS_EQUAL + T_MUL_EQUAL + T_DIV_EQUAL + T_CONCAT_EQUAL + T_MOD_EQUAL + T_AND_EQUAL + T_OR_EQUAL + T_XOR_EQUAL + T_SL_EQUAL + T_SR_EQUAL +%left '?' ':' +%right T_COALESCE +%left T_BOOLEAN_OR +%left T_BOOLEAN_AND +%left '|' +%left '^' +%left '&' +%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL + T_SPACESHIP +%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL +%left T_SL T_SR +%left '+' '-' '.' +%left '*' '/' '%' +%precedence '!' +%precedence T_INSTANCEOF +%precedence '~' T_INC +%token T_DEC +%precedence T_INT_CAST T_DOUBLE_CAST T_STRING_CAST +%token T_UNICODE_CAST +%token T_BINARY_CAST +%precedence T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' +%token '[' +%token T_NEW +%precedence T_CLONE +%token T_EXIT +%token T_IF +%token T_ELSEIF +%token T_ELSE +%token T_ENDIF + +%token T_LNUMBER +%token T_DNUMBER +%token T_STRING +%token T_STRING_VARNAME /* unused in XHP: `foo` in `"$foo"` */ +%token T_VARIABLE +%token T_NUM_STRING /* unused in XHP: `0` in `"$foo[0]"` */ +%token T_INLINE_HTML +%token T_CHARACTER /* unused in vanilla PHP */ +%token T_BAD_CHARACTER /* unused in vanilla PHP */ +%token T_ENCAPSED_AND_WHITESPACE /* unused in XHP: ` ` in `" "` */ +%token T_CONSTANT_ENCAPSED_STRING /* overloaded in XHP; + replaces '"' encaps_list '"' */ +%token T_BACKTICKS_EXPR /* new in XHP; replaces '`' backticks_expr '`' */ +%token T_ECHO +%token T_DO +%token T_WHILE +%token T_ENDWHILE +%token T_FOR +%token T_ENDFOR +%token T_FOREACH +%token T_ENDFOREACH +%token T_DECLARE +%token T_ENDDECLARE +%token T_AS +%token T_SWITCH +%token T_ENDSWITCH +%token T_CASE +%token T_DEFAULT +%token T_BREAK +%token T_CONTINUE +%token T_GOTO +%token T_FUNCTION +%token T_CONST +%token T_RETURN +%token T_TRY +%token T_CATCH +%token T_THROW +%token T_USE +%token T_GLOBAL +%token T_STATIC +%token T_ABSTRACT +%token T_FINAL +%token T_PRIVATE +%token T_PROTECTED +%token T_PUBLIC +%token T_VAR +%token T_UNSET +%token T_ISSET +%token T_EMPTY +%token T_HALT_COMPILER +%token T_CLASS +%token T_INTERFACE +%token T_EXTENDS +%token T_IMPLEMENTS +%token T_OBJECT_OPERATOR +%token T_DOUBLE_ARROW +%token T_LIST +%token T_ARRAY +%token T_CLASS_C +%token T_METHOD_C +%token T_FUNC_C +%token T_LINE +%token T_FILE +%token T_COMMENT +%token T_DOC_COMMENT +%token T_OPEN_TAG +%token T_OPEN_TAG_WITH_ECHO +%token T_OPEN_TAG_FAKE +%token T_CLOSE_TAG +%token T_WHITESPACE +%token T_START_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ +%token T_END_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ +%token T_HEREDOC /* new in XHP; + replaces start_heredoc encaps_list T_END_HEREDOC */ +%token T_DOLLAR_OPEN_CURLY_BRACES /* unused in XHP: `${` in `"${foo}"` */ +%token T_CURLY_OPEN /* unused in XHP: `{$` in `"{$foo}"` */ +%token T_PAAMAYIM_NEKUDOTAYIM +%token T_BINARY_DOUBLE /* unsused in XHP: `b"` in `b"foo"` */ +%token T_BINARY_HEREDOC /* unsused in XHP: `b<<<` in `b<<appendChild($1); + } +; + +top_statement_list: + top_statement_list top_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +namespace_name: + T_STRING { + $$ = NTYPE($1, n_SYMBOL_NAME); + } +| namespace_name T_NS_SEPARATOR T_STRING { + $$ = NMORE($1, $3); + } +; + +top_statement: + statement +| function_declaration_statement +| class_declaration_statement +| T_HALT_COMPILER '(' ')' ';' { + $1 = NSPAN($1, n_HALT_COMPILER, $3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $4); + } +| T_NAMESPACE namespace_name ';' { + NSPAN($1, n_NAMESPACE, $2); + $1->appendChild($2); + $1->appendChild(NNEW(n_EMPTY)); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_NAMESPACE namespace_name '{' top_statement_list '}' { + NSPAN($1, n_NAMESPACE, $5); + $1->appendChild($2); + $1->appendChild(NEXPAND($3, $4, $5)); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_NAMESPACE '{' top_statement_list '}' { + NSPAN($1, n_NAMESPACE, $4); + $1->appendChild(NNEW(n_EMPTY)); + NMORE($3, $4); + NMORE($3, $2); + $1->appendChild($3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_USE use_declarations ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| constant_declaration ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +; + +use_declarations: + use_declarations ',' use_declaration { + $$ = $1->appendChild($3); + } +| use_declaration { + $$ = NNEW(n_USE_LIST); + $$->appendChild($1); + } +; + +use_declaration: + namespace_name { + $$ = NNEW(n_USE); + $$->appendChild($1); + $$->appendChild(NNEW(n_EMPTY)); + } +| namespace_name T_AS T_STRING { + $$ = NNEW(n_USE); + $$->appendChild($1); + NTYPE($3, n_STRING); + $$->appendChild($3); + } +| T_NS_SEPARATOR namespace_name { + $$ = NNEW(n_USE); + NMORE($2, $1); + $$->appendChild($2); + $$->appendChild(NNEW(n_EMPTY)); + } +| T_NS_SEPARATOR namespace_name T_AS T_STRING { + $$ = NNEW(n_USE); + NMORE($2, $1); + $$->appendChild($2); + NTYPE($4, n_STRING); + $$->appendChild($4); + } +; + +constant_declaration: + constant_declaration ',' T_STRING '=' static_scalar { + NMORE($$, $5); + $$->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE($3, n_STRING)) + ->appendChild($5)); + } +| T_CONST T_STRING '=' static_scalar { + NSPAN($$, n_CONSTANT_DECLARATION_LIST, $4); + $$->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE($2, n_STRING)) + ->appendChild($4)); + } +; + +inner_statement_list: + inner_statement_list inner_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +inner_statement: + statement +| function_declaration_statement +| class_declaration_statement +| T_HALT_COMPILER '(' ')' ';' { + $1 = NSPAN($1, n_HALT_COMPILER, $3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $4); + } +; + +statement: + unticked_statement +| T_STRING ':' { + NTYPE($1, n_STRING); + $$ = NNEW(n_LABEL); + $$->appendChild($1); + NMORE($$, $2); + } +| T_OPEN_TAG { + $$ = NTYPE($1, n_OPEN_TAG); + } +| T_OPEN_TAG_WITH_ECHO { + $$ = NTYPE($1, n_OPEN_TAG); + } +| T_CLOSE_TAG { + $$ = NTYPE($1, n_CLOSE_TAG); + } +; + +unticked_statement: + '{' inner_statement_list '}' { + $$ = NEXPAND($1, $2, $3); + } +| T_IF '(' expr ')' statement elseif_list else_single { + $$ = NNEW(n_CONDITION_LIST); + + $1 = NTYPE($1, n_IF); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$->appendChild($1); + $$->appendChildren($6); + + // Hacks: merge a list of if (x) { } else if (y) { } into a single condition + // list instead of a condition tree. + + if ($7->type == n_EMPTY) { + // Ignore. + } else if ($7->type == n_ELSE) { + xhpast::Node *stype = $7->firstChild()->firstChild(); + if (stype && stype->type == n_CONDITION_LIST) { + NTYPE(stype->firstChild(), n_ELSEIF); + stype->firstChild()->l_tok = $7->l_tok; + $$->appendChildren(stype); + } else { + $$->appendChild($7); + } + } else { + $$->appendChild($7); + } + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +| T_IF '(' expr ')' ':' + inner_statement_list + new_elseif_list + new_else_single + T_ENDIF ';' { + + $$ = NNEW(n_CONDITION_LIST); + NTYPE($1, n_IF); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($6); + + $$->appendChild($1); + $$->appendChildren($7); + $$->appendChild($8); + NMORE($$, $9); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + NMORE($$, $10); + } +| T_WHILE '(' expr ')' while_statement { + NTYPE($1, n_WHILE); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_DO statement T_WHILE '(' expr ')' ';' { + NTYPE($1, n_DO_WHILE); + $1->appendChild($2); + $1->appendChild(NSPAN($4, n_CONTROL_CONDITION, $6)->appendChild($5)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $7); + } +| T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { + NTYPE($1, n_FOR); + + NSPAN($2, n_FOR_EXPRESSION, $8) + ->appendChild($3) + ->appendChild($5) + ->appendChild($7); + + $1->appendChild($2); + $1->appendChild($9); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_SWITCH '(' expr ')' switch_case_list { + NTYPE($1, n_SWITCH); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_BREAK ';' { + NTYPE($1, n_BREAK); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_BREAK expr ';' { + NTYPE($1, n_BREAK); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_CONTINUE ';' { + NTYPE($1, n_CONTINUE); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_CONTINUE expr ';' { + NTYPE($1, n_CONTINUE); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_RETURN ';' { + NTYPE($1, n_RETURN); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_RETURN expr_without_variable ';' { + NTYPE($1, n_RETURN); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_RETURN variable ';' { + NTYPE($1, n_RETURN); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_GLOBAL global_var_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_STATIC static_var_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_ECHO echo_expr_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_INLINE_HTML { + NTYPE($1, n_INLINE_HTML); + $$ = $1; + } +| expr ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| yield_expr ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_UNSET '(' unset_variables ')' ';' { + NMORE($3, $4); + NMORE($3, $1); + $$ = NNEW(n_STATEMENT)->appendChild($3); + NMORE($$, $5); + } +| T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' + foreach_statement { + NTYPE($1, n_FOREACH); + NSPAN($2, n_FOREACH_EXPRESSION, $7); + $2->appendChild($3); + if ($6->type == n_EMPTY) { + $2->appendChild($6); + $2->appendChild($5); + } else { + $2->appendChild($5); + $2->appendChild($6); + } + $1->appendChild($2); + + $1->appendChild($8); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_FOREACH '(' expr_without_variable T_AS variable foreach_optional_arg ')' + foreach_statement { + NTYPE($1, n_FOREACH); + NSPAN($2, n_FOREACH_EXPRESSION, $7); + $2->appendChild($3); + if ($6->type == n_EMPTY) { + $2->appendChild($6); + $2->appendChild($5); + } else { + $2->appendChild($5); + $2->appendChild($6); + } + $1->appendChild($2); + $1->appendChild($8); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_DECLARE '(' declare_list ')' declare_statement { + NTYPE($1, n_DECLARE); + $1->appendChild($3); + $1->appendChild($5); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| ';' /* empty statement */ { + $$ = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); + NMORE($$, $1); + } +| T_TRY '{' inner_statement_list '}' catch_list finally_statement { + NTYPE($1, n_TRY); + $1->appendChild(NEXPAND($2, $3, $4)); + + $1->appendChild($5); + $1->appendChild($6); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_TRY '{' inner_statement_list '}' non_empty_finally_statement { + NTYPE($1, n_TRY); + $1->appendChild(NEXPAND($2, $3, $4)); + + $1->appendChild(NNEW(n_CATCH_LIST)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_THROW expr ';' { + NTYPE($1, n_THROW); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + + } +| T_GOTO T_STRING ';' { + NTYPE($1, n_GOTO); + NTYPE($2, n_STRING); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +; + +catch_list: + catch_list catch { + $1->appendChild($2); + $$ = $1; + } +| catch { + $$ = NNEW(n_CATCH_LIST); + $$->appendChild($1); +} + +catch: + T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' + '{' inner_statement_list '}' { + NTYPE($1, n_CATCH); + $1->appendChild($3); + $1->appendChild(NTYPE($4, n_VARIABLE)); + $1->appendChild(NEXPAND($6, $7, $8)); + NMORE($1, $8); + $$ = $1; + } +; + +finally_statement: + %empty { + $$ = NNEW(n_EMPTY); + } +| non_empty_finally_statement +; + +non_empty_finally_statement: + T_FINALLY '{' inner_statement_list '}' { + NTYPE($1, n_FINALLY); + $1->appendChild($3); + NMORE($1, $4); + $$ = $1; + } +; + +unset_variables: + unset_variable { + $$ = NNEW(n_UNSET_LIST); + $$->appendChild($1); + } +| unset_variables ',' unset_variable { + $1->appendChild($3); + $$ = $1; + } +; + +unset_variable: + variable +; + +function_declaration_statement: + unticked_function_declaration_statement +; + +class_declaration_statement: + unticked_class_declaration_statement +; + +is_reference: + %empty { + $$ = NNEW(n_EMPTY); + } +| '&' { + $$ = NTYPE($1, n_REFERENCE); + } +; + +unticked_function_declaration_statement: + function is_reference T_STRING + '(' parameter_list ')' return_type '{' inner_statement_list '}' { + NSPAN($1, n_FUNCTION_DECLARATION, $9); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $1->appendChild(NTYPE($3, n_STRING)); + $1->appendChild(NEXPAND($4, $5, $6)); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($7); + $1->appendChild(NEXPAND($8, $9, $10)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +; + +unticked_class_declaration_statement: + class_entry_type T_STRING extends_from implements_list + '{' class_statement_list '}' { + $$ = NNEW(n_CLASS_DECLARATION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_CLASS_NAME)); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild(NEXPAND($5, $6, $7)); + NMORE($$, $7); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +| interface_entry T_STRING interface_extends_list '{' class_statement_list '}' { + $$ = NNEW(n_INTERFACE_DECLARATION); + $$->appendChild(NNEW(n_CLASS_ATTRIBUTES)); + NMORE($$, $1); + $$->appendChild(NTYPE($2, n_CLASS_NAME)); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NEXPAND($4, $5, $6)); + NMORE($$, $6); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +; + +class_entry_type: + T_CLASS { + NTYPE($1, n_CLASS_ATTRIBUTES); + $$ = $1; + } +| T_ABSTRACT T_CLASS { + NTYPE($2, n_CLASS_ATTRIBUTES); + NMORE($2, $1); + $2->appendChild(NTYPE($1, n_STRING)); + + $$ = $2; + } +| T_FINAL T_CLASS { + NTYPE($2, n_CLASS_ATTRIBUTES); + NMORE($2, $1); + $2->appendChild(NTYPE($1, n_STRING)); + + $$ = $2; + } +| T_TRAIT { + $$ = NNEW(n_CLASS_ATTRIBUTES); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + +extends_from: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_EXTENDS fully_qualified_class_name { + $$ = NTYPE($1, n_EXTENDS_LIST)->appendChild($2); + } +; + +interface_entry: + T_INTERFACE +; + +interface_extends_list: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_EXTENDS interface_list { + NTYPE($1, n_EXTENDS_LIST); + $1->appendChildren($2); + $$ = $1; + } +; + +implements_list: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_IMPLEMENTS interface_list { + NTYPE($1, n_IMPLEMENTS_LIST); + $1->appendChildren($2); + $$ = $1; + } +; + +interface_list: + fully_qualified_class_name { + $$ = NNEW(n_IMPLEMENTS_LIST)->appendChild($1); + } +| interface_list ',' fully_qualified_class_name { + $$ = $1->appendChild($3); + } +; + +foreach_optional_arg: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_DOUBLE_ARROW foreach_variable { + $$ = $2; + } +; + +foreach_variable: + variable +| '&' variable { + NTYPE($1, n_VARIABLE_REFERENCE); + $1->appendChild($2); + $$ = $1; + } +; + +for_statement: + statement +| ':' inner_statement_list T_ENDFOR ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +foreach_statement: + statement +| ':' inner_statement_list T_ENDFOREACH ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +declare_statement: + statement +| ':' inner_statement_list T_ENDDECLARE ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +declare_list: + T_STRING '=' static_scalar { + $$ = NNEW(n_DECLARE_DECLARATION); + $$->appendChild(NTYPE($1, n_STRING)); + $$->appendChild($3); + $$ = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild($$); + } +| declare_list ',' T_STRING '=' static_scalar { + $$ = NNEW(n_DECLARE_DECLARATION); + $$->appendChild(NTYPE($3, n_STRING)); + $$->appendChild($5); + + $1->appendChild($$); + $$ = $1; + } +; + +switch_case_list: + '{' case_list '}' { + $$ = NEXPAND($1, $2, $3); + } +| '{' ';' case_list '}' { + // ...why does this rule exist? + + NTYPE($2, n_STATEMENT); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); + $$->appendChildren($3); + NEXPAND($1, $$, $4); + } +| ':' case_list T_ENDSWITCH ';' { + NMORE($2, $4); + NMORE($2, $1); + $$ = $2; + } +| ':' ';' case_list T_ENDSWITCH ';' { + NTYPE($2, n_STATEMENT); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); + $$->appendChildren($3); + NMORE($$, $5); + NMORE($$, $1); + } +; + +case_list: + %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +| case_list T_CASE expr case_separator inner_statement_list { + NTYPE($2, n_CASE); + $2->appendChild($3); + $2->appendChild($5); + + $1->appendChild($2); + $$ = $1; + } +| case_list T_DEFAULT case_separator inner_statement_list { + NTYPE($2, n_DEFAULT); + $2->appendChild($4); + + $1->appendChild($2); + $$ = $1; + } +; + +case_separator: + ':' +| ';' +; + +while_statement: + statement +| ':' inner_statement_list T_ENDWHILE ';' { + NMORE($2, $4); + NMORE($2, $1); + $$ = $2; + } +; + +elseif_list: + %empty { + $$ = NNEW(n_CONDITION_LIST); + } +| elseif_list T_ELSEIF '(' expr ')' statement { + NTYPE($2, n_ELSEIF); + $2->appendChild(NSPAN($3, n_CONTROL_CONDITION, $5)->appendChild($4)); + $2->appendChild($6); + + $$ = $1->appendChild($2); + } +; + +new_elseif_list: + %empty { + $$ = NNEW(n_CONDITION_LIST); + } +| new_elseif_list T_ELSEIF '(' expr ')' ':' inner_statement_list { + NTYPE($2, n_ELSEIF); + $2->appendChild($4); + $2->appendChild($7); + + $$ = $1->appendChild($2); + } +; + +else_single: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_ELSE statement { + NTYPE($1, n_ELSE); + $1->appendChild($2); + $$ = $1; + } +; + +new_else_single: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_ELSE ':' inner_statement_list { + NTYPE($1, n_ELSE); + $1->appendChild($3); + $$ = $1; + } +; + +parameter_list: + non_empty_parameter_list +| %empty { + $$ = NNEW(n_DECLARATION_PARAMETER_LIST); + } +; + +non_empty_parameter_list: + optional_type parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild($2); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type '&' parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); + $2->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type '&' parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); + $2->appendChild($3); + $$->appendChild($5); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild($2); + $$->appendChild($4); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| non_empty_parameter_list ',' optional_type parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type '&' parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); + $4->appendChild($5); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type '&' + parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); + $4->appendChild($5); + $$->appendChild($7); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type + parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild($6); + + $$ = $1->appendChild($$); + } +; + +parameter: + T_ELLIPSIS T_VARIABLE { + $$ = NTYPE($1, n_UNPACK); + $$->appendChild(NTYPE($2, n_VARIABLE)); + } +| T_VARIABLE { + $$ = NTYPE($1, n_VARIABLE); + } +; + +optional_type: + %empty { + $$ = NNEW(n_EMPTY); + } +| type +| '?' type { + $$ = NNEW(n_NULLABLE_TYPE); + $$->appendChild($2); + } +; + +type: + fully_qualified_class_name { + $$ = $1; + } +| T_ARRAY { + $$ = NTYPE($1, n_TYPE_NAME); + } +| T_CALLABLE { + $$ = NTYPE($1, n_TYPE_NAME); + } +; + +return_type: + %empty { + $$ = NNEW(n_EMPTY); + } +| ':' optional_type { + $$ = NNEW(n_DECLARATION_RETURN); + $$->appendChild($2); + } +; + +function_call_parameter_list: + non_empty_function_call_parameter_list +| %empty { + $$ = NNEW(n_CALL_PARAMETER_LIST); + } +; + +non_empty_function_call_parameter_list: + argument { + $$ = NNEW(n_CALL_PARAMETER_LIST)->appendChild($1); + } +| non_empty_function_call_parameter_list ',' argument { + $$ = $1->appendChild($3); + } +; + +argument: + expr +| T_ELLIPSIS expr { + $$ = NNEW(n_UNPACK)->appendChild($1); + } +| '&' w_variable { + NTYPE($1, n_VARIABLE_REFERENCE); + $$ = $1->appendChild($2); + } +; + +global_var_list: + global_var_list ',' global_var { + $1->appendChild($3); + $$ = $1; + } +| global_var { + $$ = NNEW(n_GLOBAL_DECLARATION_LIST); + $$->appendChild($1); + } +; + +global_var: + T_VARIABLE { + $$ = NTYPE($1, n_VARIABLE); + } +| '$' r_variable { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + $$->appendChild($2); + } +| '$' '{' expr '}' { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + $$->appendChild($3); + } +; + +static_var_list: + static_var_list ',' T_VARIABLE { + NTYPE($3, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| static_var_list ',' T_VARIABLE '=' static_scalar { + NTYPE($3, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| T_VARIABLE { + NTYPE($1, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($1); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); + } +| T_VARIABLE '=' static_scalar { + NTYPE($1, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); + } +; + +class_statement_list: + class_statement_list class_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +class_statement: + variable_modifiers class_variable_declaration ';' { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); + $$->appendChild($1); + $$->appendChildren($2); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + NMORE($$, $3); + } +| class_constant_declaration ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| trait_use_statement { + $$ = $1; + } +| method_modifiers function { + /* empty */ + } is_reference T_STRING '(' parameter_list ')' return_type method_body { + $$ = NNEW(n_METHOD_DECLARATION); + NMORE($$, $2); + $$->appendChild($1); + $$->appendChild($4); + $$->appendChild(NTYPE($5, n_STRING)); + $$->appendChild(NEXPAND($6, $7, $8)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($9); + $$->appendChild($10); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +; + +trait_use_statement: + T_USE trait_list trait_adaptations { + $$ = NTYPE($1, n_TRAIT_USE); + $$->appendChildren($2); + $$->appendChild($3); + } +; + +trait_list: + fully_qualified_class_name { + $$ = NNEW(n_TRAIT_USE_LIST)->appendChild($1); + } +| trait_list ',' fully_qualified_class_name { + $$ = $1->appendChild($3); + } +; + +trait_adaptations: + ';' { + $$ = NNEW(n_EMPTY); + } +| '{' trait_adaptation_list '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +trait_adaptation_list: + %empty { + $$ = NNEW(n_TRAIT_ADAPTATION_LIST); + } +| non_empty_trait_adaptation_list { + $$ = $1; + } +; + +non_empty_trait_adaptation_list: + trait_adaptation_statement { + $$ = NNEW(n_TRAIT_ADAPTATION_LIST); + $$->appendChild($1); + } +| non_empty_trait_adaptation_list trait_adaptation_statement { + $1->appendChild($2); + $$ = $1; + } +; + +trait_adaptation_statement: + trait_precedence ';' { + $$ = NMORE($1, $2); + } +| trait_alias ';' { + $$ = NMORE($1, $2); + } +; + +trait_precedence: + trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list { + $$ = NNEW(n_TRAIT_INSTEADOF); + $$->appendChild($1); + $$->appendChild($3); + } +; + +trait_reference_list: + fully_qualified_class_name { + $$ = NNEW(n_TRAIT_REFERENCE_LIST); + $$->appendChild($1); + } +| trait_reference_list ',' fully_qualified_class_name { + $1->appendChild($3); + $$ = $1; + } +; + +trait_method_reference: + T_STRING { + $$ = NNEW(n_TRAIT_METHOD_REFERENCE); + $$->appendChild(NTYPE($1, n_STRING)); + } +| trait_method_reference_fully_qualified { + $$ = $1; + } +; + +trait_method_reference_fully_qualified: + fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + NTYPE($2, n_TRAIT_METHOD_REFERENCE); + NEXPAND($1, $2, NTYPE($3, n_STRING)); + $$ = $2; + } +; + +trait_alias: + trait_method_reference T_AS trait_modifiers T_STRING { + $$ = NNEW(n_TRAIT_AS); + $$->appendChild($1); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_STRING)); + } +| trait_method_reference T_AS member_modifier { + $$ = NNEW(n_TRAIT_AS); + $$->appendChild($1); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + } +; + +trait_modifiers: + %empty { + $$ = NNEW(n_EMPTY); + } +| member_modifier { + $$ = NNEW(n_METHOD_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + + +method_body: + ';' /* abstract method */ { + $$ = NNEW(n_EMPTY); + } +| '{' inner_statement_list '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +variable_modifiers: + non_empty_member_modifiers +| T_VAR { + $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + +method_modifiers: + %empty { + $$ = NNEW(n_METHOD_MODIFIER_LIST); + } +| non_empty_member_modifiers { + NTYPE($1, n_METHOD_MODIFIER_LIST); + $$ = $1; + } +; + +non_empty_member_modifiers: + member_modifier { + $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +| non_empty_member_modifiers member_modifier { + $$ = $1->appendChild(NTYPE($2, n_STRING)); + } +; + +member_modifier: + T_PUBLIC +| T_PROTECTED +| T_PRIVATE +| T_STATIC +| T_ABSTRACT +| T_FINAL +; + +class_variable_declaration: + class_variable_declaration ',' T_VARIABLE { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($3, n_VARIABLE)); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| class_variable_declaration ',' T_VARIABLE '=' static_scalar { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($3, n_VARIABLE)); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| T_VARIABLE { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($1, n_VARIABLE)); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); + } +| T_VARIABLE '=' static_scalar { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($1, n_VARIABLE)); + $$->appendChild($3); + + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); + } +; + +class_constant_declaration: + class_constant_declaration ',' T_STRING '=' static_scalar { + $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); + $$->appendChild(NTYPE($3, n_STRING)); + $$->appendChild($5); + + $1->appendChild($$); + + $$ = $1; + } +| T_CONST T_STRING '=' static_scalar { + NTYPE($1, n_CLASS_CONSTANT_DECLARATION_LIST); + $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); + $$->appendChild(NTYPE($2, n_STRING)); + $$->appendChild($4); + $1->appendChild($$); + + $$ = $1; + } +; + +echo_expr_list: + echo_expr_list ',' expr { + $1->appendChild($3); + } +| expr { + $$ = NNEW(n_ECHO_LIST); + $$->appendChild($1); + } +; + +for_expr: + %empty { + $$ = NNEW(n_EMPTY); + } +| non_empty_for_expr +; + + +non_empty_for_expr: + non_empty_for_expr ',' expr { + $1->appendChild($3); + } +| expr { + $$ = NNEW(n_EXPRESSION_LIST); + $$->appendChild($1); + } +; + +expr_without_variable: + T_LIST '(' assignment_list ')' '=' expr { + NTYPE($1, n_LIST); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($5, n_OPERATOR)); + $$->appendChild($6); + } +| variable '=' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable '=' '&' variable { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild($4); + + $$->appendChild($3); + } +| variable '=' '&' T_NEW class_name_reference ctor_arguments { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + + NTYPE($4, n_NEW); + $4->appendChild($5); + $4->appendChild($6); + + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild($4); + + $$->appendChild($3); + } +| T_CLONE expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| variable T_PLUS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MINUS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MUL_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_DIV_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_CONCAT_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MOD_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_AND_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_XOR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_SL_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_SR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| rw_variable T_INC { + $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + } +| T_INC rw_variable { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| rw_variable T_DEC { + $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + } +| T_DEC rw_variable { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| expr T_BOOLEAN_OR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_BOOLEAN_AND expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_OR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_AND expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_XOR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '|' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '&' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '^' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '.' expr { + + /* The concatenation operator generates n_CONCATENATION_LIST instead of + n_BINARY_EXPRESSION because we tend to run into stack depth issues in a + lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ + + if ($1->type == n_CONCATENATION_LIST && $3->type == n_CONCATENATION_LIST) { + $1->appendChild(NTYPE($2, n_OPERATOR)); + $1->appendChildren($3); + $$ = $1; + } else if ($1->type == n_CONCATENATION_LIST) { + $1->appendChild(NTYPE($2, n_OPERATOR)); + $1->appendChild($3); + $$ = $1; + } else if ($3->type == n_CONCATENATION_LIST) { + $$ = NNEW(n_CONCATENATION_LIST); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChildren($3); + } else { + $$ = NNEW(n_CONCATENATION_LIST); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } + } +| expr '+' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '-' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '*' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '/' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '%' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| '+' expr %prec T_INC { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '-' expr %prec T_INC { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '!' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '~' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| expr T_IS_IDENTICAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_NOT_IDENTICAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_NOT_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '<' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_SMALLER_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '>' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_GREATER_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SPACESHIP expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_INSTANCEOF class_name_reference { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| parenthesis_expr +| new_expr +| expr '?' expr ':' expr { + $$ = NNEW(n_TERNARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_OPERATOR)); + $$->appendChild($5); + } +| expr '?' ':' expr { + $$ = NNEW(n_TERNARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($3, n_OPERATOR)); + $$->appendChild($4); + } +| expr T_COALESCE expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| internal_functions_in_yacc +| T_INT_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_DOUBLE_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_STRING_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_ARRAY_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_OBJECT_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_BOOL_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_UNSET_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_EXIT exit_expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '@' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_BACKTICKS_EXPR { + NTYPE($1, n_BACKTICKS_EXPRESSION); + $$ = $1; + } +| scalar +| combined_scalar_offset +| combined_scalar +| T_PRINT expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_YIELD { + NTYPE($1, n_YIELD); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild(NNEW(n_EMPTY)); + $$ = $1; + } +| function is_reference + '(' parameter_list ')' + lexical_vars return_type + '{' inner_statement_list '}' { + NSPAN($1, n_FUNCTION_DECLARATION, $9); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild(NEXPAND($3, $4, $5)); + $1->appendChild($6); + $1->appendChild($7); + $1->appendChild(NEXPAND($8, $9, $10)); + + $$ = $1; + } +| T_STATIC function is_reference + '(' parameter_list ')' + lexical_vars return_type + '{' inner_statement_list '}' { + NSPAN($2, n_FUNCTION_DECLARATION, $10); + NMORE($2, $1); + + $$ = NNEW(n_FUNCTION_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + $2->appendChild($1); + + $2->appendChild(NNEW(n_EMPTY)); + $2->appendChild($3); + $2->appendChild(NNEW(n_EMPTY)); + $2->appendChild(NEXPAND($4, $5, $6)); + $2->appendChild($7); + $2->appendChild($8); + $2->appendChild(NEXPAND($9, $10, $11)); + + $$ = $2; + } +; + +yield_expr: + T_YIELD expr_without_variable { + NTYPE($1, n_YIELD); + $2->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $$ = $1; + } +| T_YIELD variable { + NTYPE($1, n_YIELD); + $2->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $$ = $1; + } +| T_YIELD expr T_DOUBLE_ARROW expr_without_variable { + NTYPE($1, n_YIELD); + $1->appendChild($2); + $1->appendChild($4); + $$ = $1; + } +| T_YIELD expr T_DOUBLE_ARROW variable { + NTYPE($1, n_YIELD); + $1->appendChild($2); + $1->appendChild($4); + $$ = $1; + } +; + +function: + T_FUNCTION +; + +lexical_vars: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_USE '(' lexical_var_list ')' { + NTYPE($1, n_LEXICAL_VARIABLE_LIST); + $1->appendChildren($3); + $$ = $1; + } +; + +lexical_var_list: + lexical_var_list ',' T_VARIABLE { + $$ = $1->appendChild(NTYPE($3, n_VARIABLE)); + } +| lexical_var_list ',' '&' T_VARIABLE { + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild(NTYPE($4, n_VARIABLE)); + $$ = $1->appendChild($3); + } +| T_VARIABLE { + $$ = NNEW(n_LEXICAL_VARIABLE_LIST); + $$->appendChild(NTYPE($1, n_VARIABLE)); + } +| '&' T_VARIABLE { + NTYPE($1, n_VARIABLE_REFERENCE); + $1->appendChild(NTYPE($2, n_VARIABLE)); + $$ = NNEW(n_LEXICAL_VARIABLE_LIST); + $$->appendChild($1); + } +; + +function_call: + namespace_name '(' function_call_parameter_list ')' { + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild(NEXPAND($2, $3, $4)); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name + '(' function_call_parameter_list ')' { + NMORE($3, $1); + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($3); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| T_NS_SEPARATOR namespace_name '(' function_call_parameter_list ')' { + NMORE($2, $1); + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($2); + $$->appendChild(NEXPAND($3, $4, $5)); + } +| class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_without_objects '(' function_call_parameter_list ')' { + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild(NEXPAND($2, $3, $4)); + } +; + +class_name: + T_STATIC { + $$ = NTYPE($1, n_CLASS_NAME); + } +| namespace_name { + $$ = NTYPE($1, n_CLASS_NAME); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = NTYPE($3, n_CLASS_NAME); + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = NTYPE($2, n_CLASS_NAME); + } +; + +fully_qualified_class_name: + namespace_name { + $$ = NTYPE($1, n_CLASS_NAME); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = NTYPE($3, n_CLASS_NAME); + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = NTYPE($2, n_CLASS_NAME); + } +; + +class_name_reference: + class_name +| dynamic_class_name_reference +; + +dynamic_class_name_reference: + base_variable + T_OBJECT_OPERATOR + object_property + dynamic_class_name_variable_properties { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + for (xhpast::node_list_t::iterator ii = $4->children.begin(); + ii != $4->children.end(); + ++ii) { + + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); + $$->appendChild(*ii); + } + } +| base_variable +; + +dynamic_class_name_variable_properties: + dynamic_class_name_variable_properties dynamic_class_name_variable_property { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +dynamic_class_name_variable_property: + T_OBJECT_OPERATOR object_property { + $$ = $2; + } +; + +exit_expr: + %empty { + $$ = NNEW(n_EMPTY); + } +| '(' ')' { + NSPAN($1, n_EMPTY, $2); + $$ = $1; + } +| '(' expr ')' { + NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); + $1->appendChild($2); + $$ = $1; + } +; + +ctor_arguments: + %empty { + $$ = NNEW(n_EMPTY); + } +| '(' function_call_parameter_list ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +common_scalar: + T_LNUMBER { + $$ = NTYPE($1, n_NUMERIC_SCALAR); + } +| T_DNUMBER { + $$ = NTYPE($1, n_NUMERIC_SCALAR); + } +| T_CONSTANT_ENCAPSED_STRING { + $$ = NTYPE($1, n_STRING_SCALAR); + } +| T_LINE { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_FILE { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_DIR { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_CLASS_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_METHOD_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_TRAIT_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_FUNC_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_NS_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_HEREDOC { + $$ = NTYPE($1, n_HEREDOC); + } +; + +static_scalar: /* compile-time evaluated scalars */ + common_scalar +| namespace_name +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = $3; + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = $2; + } +| '+' static_scalar { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '-' static_scalar { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_ARRAY '(' static_array_pair_list ')' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = $1; + } +| '[' static_array_pair_list ']' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($1, $2, $3)); + $$ = $1; + } +| static_class_constant +; + +static_class_constant: + class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +; + +scalar: + T_STRING_VARNAME +| class_constant +| namespace_name +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + $$ = NMORE($3, $1); + } +| T_NS_SEPARATOR namespace_name { + $$ = NMORE($2, $1); + } +| common_scalar +; + +static_array_pair_list: + %empty { + $$ = NNEW(n_ARRAY_VALUE_LIST); + } +| non_empty_static_array_pair_list possible_comma { + $$ = NMORE($1, $2); + } +; + +possible_comma: + %empty { + $$ = NNEW(n_EMPTY); + } +| ',' +; + +non_empty_static_array_pair_list: + non_empty_static_array_pair_list + ',' + static_scalar + T_DOUBLE_ARROW + static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| non_empty_static_array_pair_list ',' static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($3); + + $$ = $1->appendChild($$); + } +| static_scalar T_DOUBLE_ARROW static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($1); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +; + +expr: + r_variable +| expr_without_variable +; + +r_variable: + variable +; + +w_variable: + variable +; + +rw_variable: + variable +; + +variable: + base_variable_with_function_calls + T_OBJECT_OPERATOR + object_property method_or_not + variable_properties { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + + if ($4->type != n_EMPTY) { + $$ = NNEW(n_METHOD_CALL)->appendChild($$); + $$->appendChild($4); + } + + for (xhpast::node_list_t::iterator ii = $5->children.begin(); + ii != $5->children.end(); + ++ii) { + + if ((*ii)->type == n_CALL_PARAMETER_LIST) { + $$ = NNEW(n_METHOD_CALL)->appendChild($$); + $$->appendChild((*ii)); + } else { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); + $$->appendChild((*ii)); + } + } + } +| base_variable_with_function_calls +; + +variable_properties: + variable_properties variable_property { + $$ = $1->appendChildren($2); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +variable_property: + T_OBJECT_OPERATOR object_property method_or_not { + $$ = NNEW(n_EMPTY); + $$->appendChild($2); + if ($3->type != n_EMPTY) { + $$->appendChild($3); + } + } +; + +array_method_dereference: + array_method_dereference '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| method '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +; + +method: + '(' function_call_parameter_list ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +method_or_not: + method +| array_method_dereference +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +variable_without_objects: + reference_variable +| simple_indirect_reference reference_variable { + xhpast::Node *last = $1; + NMORE($1, $2); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, $2); + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +; + +static_member: + class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + } +; + +variable_class_name: + reference_variable +; + +array_function_dereference: + array_function_dereference '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| function_call '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +; + +base_variable_with_function_calls: + base_variable +| array_function_dereference +| function_call +; + +base_variable: + reference_variable +| '(' new_expr ')' { + $$ = NEXPAND($1, $2, $3); + } +| simple_indirect_reference reference_variable { + xhpast::Node *last = $1; + NMORE($1, $2); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, $2); + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +| static_member +; + +reference_variable: + reference_variable '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| reference_variable '{' expr '}' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| compound_variable +; + +compound_variable: + T_VARIABLE { + NTYPE($1, n_VARIABLE); + } +| '$' '{' expr '}' { + NSPAN($1, n_VARIABLE_EXPRESSION, $4); + $1->appendChild($3); + $$ = $1; + } +; + +dim_offset: + %empty { + $$ = NNEW(n_EMPTY); + } +| expr { + $$ = $1; + } +; + +object_property: + object_dim_list +| variable_without_objects +; + +object_dim_list: + object_dim_list '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| object_dim_list '{' expr '}' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| variable_name +; + +variable_name: + T_STRING { + NTYPE($1, n_STRING); + $$ = $1; + } +| '{' expr '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +simple_indirect_reference: + '$' { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + } +| simple_indirect_reference '$' { + $2 = NTYPE($2, n_VARIABLE_VARIABLE); + + xhpast::Node *last = $1; + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +; + +assignment_list: + assignment_list ',' assignment_list_element { + $$ = $1->appendChild($3); + } +| assignment_list_element { + $$ = NNEW(n_ASSIGNMENT_LIST); + $$->appendChild($1); + } +; + +assignment_list_element: + variable +| T_LIST '(' assignment_list ')' { + $$ = NNEW(n_LIST); + $$->appendChild(NEXPAND($2, $3, $4)); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +array_pair_list: + %empty { + $$ = NNEW(n_ARRAY_VALUE_LIST); + } +| non_empty_array_pair_list possible_comma { + $$ = NMORE($1, $2); + } +; + +non_empty_array_pair_list: + non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| non_empty_array_pair_list ',' expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($3); + + $$ = $1->appendChild($$); + } +| expr T_DOUBLE_ARROW expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($1); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild(NTYPE($5, n_VARIABLE_REFERENCE)->appendChild($6)); + + $$ = $1->appendChild($$); + } +| non_empty_array_pair_list ',' '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); + + $$ = $1->appendChild($$); + } +| expr T_DOUBLE_ARROW '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($1, n_VARIABLE_REFERENCE)->appendChild($2)); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +; + +internal_functions_in_yacc: + T_ISSET '(' isset_variables ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChildren($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_EMPTY '(' variable ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChild($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_INCLUDE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_INCLUDE_ONCE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_EVAL '(' expr ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChild($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_REQUIRE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_REQUIRE_ONCE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +; + +isset_variables: + variable { + $$ = NNEW(n_EMPTY); + $$->appendChild($1); + } +| isset_variables ',' variable { + $$ = $1->appendChild($3); + } +; + +parenthesis_expr: + '(' expr ')' { + NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); + $1->appendChild($2); + $$ = $1; + } +| '(' yield_expr ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +combined_scalar_offset: + combined_scalar '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| combined_scalar_offset '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild(NTYPE($1, n_STRING_SCALAR)); + $$->appendChild($3); + NMORE($$, $4); + } +| class_constant '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| T_STRING '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild(NTYPE($1, n_STRING)); + $$->appendChild($3); + NMORE($$, $4); + } +; + +combined_scalar: + T_ARRAY '(' array_pair_list ')' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = $1; + } +| '[' array_pair_list ']' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($1, $2, $3)); + $$ = $1; + } +; + +new_expr: + T_NEW class_name_reference ctor_arguments { + NTYPE($1, n_NEW); + $1->appendChild($2); + $1->appendChild($3); + $$ = $1; + } +| T_NEW T_CLASS ctor_arguments extends_from implements_list + '{' class_statement_list '}' { + $$ = NNEW(n_CLASS_DECLARATION); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($4); + $$->appendChild($5); + $$->appendChild(NEXPAND($6, $7, $8)); + NMORE($$, $8); + + NTYPE($1, n_NEW); + $1->appendChild($$); + $1->appendChild($3); + $$ = $1; + } +; + +class_constant: + class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +; + +%% + +const char* yytokname(int tok) { + if (tok < 255) { + return NULL; + } + return yytname[YYTRANSLATE(tok)]; +} diff --git a/support/xhpast/parser.yacc.cpp b/support/xhpast/parser.yacc.cpp new file mode 100644 index 00000000..8a51fedf --- /dev/null +++ b/support/xhpast/parser.yacc.cpp @@ -0,0 +1,7622 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.0.4" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse xhpastparse +#define yylex xhpastlex +#define yyerror xhpasterror +#define yydebug xhpastdebug +#define yynerrs xhpastnerrs + + +/* Copy the first part of user declarations. */ +#line 1 "parser.y" /* yacc.c:339 */ + +/* + * If you modify this grammar, please update the version number in + * ./xhpast.cpp and libphutil/src/parser/xhpast/bin/xhpast_parse.php + */ + +#include "ast.hpp" +#include "node_names.hpp" +// PHP's if/else rules use right reduction rather than left reduction which +// means while parsing nested if/else's the stack grows until it the last +// statement is read. This is annoying, particularly because of a quirk in +// bison. +// http://www.gnu.org/software/bison/manual/html_node/Memory-Management.html +// Apparently if you compile a bison parser with g++ it can no longer grow +// the stack. The work around is to just make your initial stack ridiculously +// large. Unfortunately that increases memory usage while parsing which is +// dumb. Anyway, putting a TODO here to fix PHP's if/else grammar. +#define YYINITDEPTH 500 +#line 21 "parser.y" /* yacc.c:339 */ + +#undef yyextra +#define yyextra static_cast(xhpastget_extra(yyscanner)) +#undef yylineno +#define yylineno yyextra->first_lineno +#define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) +#define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) +#define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) + +#define NNEW(t) \ + (new xhpast::Node(t)) + +#define NTYPE(n, type) \ + ((n)->setType(type)) + +#define NMORE(n, end) \ + ((n)->expandRange(end)) + +#define NSPAN(n, type, end) \ + (NMORE(NTYPE((n), type), end)) + +#define NEXPAND(l, n, r) \ + ((n)->expandRange(l)->expandRange(r)) + +using namespace std; + +static void yyerror(void* yyscanner, void* _, const char* error) { + if (yyextra->terminated) { + return; + } + yyextra->terminated = true; + yyextra->error = error; +} + + +#line 127 "parser.yacc.cpp" /* yacc.c:339 */ + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +/* In a future release of Bison, this section will be replaced + by #include "parser.yacc.hpp". */ +#ifndef YY_XHPAST_PARSER_YACC_HPP_INCLUDED +# define YY_XHPAST_PARSER_YACC_HPP_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int xhpastdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + T_INCLUDE = 258, + T_INCLUDE_ONCE = 259, + T_EVAL = 260, + T_REQUIRE = 261, + T_REQUIRE_ONCE = 262, + T_LOGICAL_OR = 263, + T_LOGICAL_XOR = 264, + T_LOGICAL_AND = 265, + T_PRINT = 266, + T_PLUS_EQUAL = 267, + T_MINUS_EQUAL = 268, + T_MUL_EQUAL = 269, + T_DIV_EQUAL = 270, + T_CONCAT_EQUAL = 271, + T_MOD_EQUAL = 272, + T_AND_EQUAL = 273, + T_OR_EQUAL = 274, + T_XOR_EQUAL = 275, + T_SL_EQUAL = 276, + T_SR_EQUAL = 277, + T_COALESCE = 278, + T_BOOLEAN_OR = 279, + T_BOOLEAN_AND = 280, + T_IS_EQUAL = 281, + T_IS_NOT_EQUAL = 282, + T_IS_IDENTICAL = 283, + T_IS_NOT_IDENTICAL = 284, + T_SPACESHIP = 285, + T_IS_SMALLER_OR_EQUAL = 286, + T_IS_GREATER_OR_EQUAL = 287, + T_SL = 288, + T_SR = 289, + T_INSTANCEOF = 290, + T_INC = 291, + T_DEC = 292, + T_INT_CAST = 293, + T_DOUBLE_CAST = 294, + T_STRING_CAST = 295, + T_UNICODE_CAST = 296, + T_BINARY_CAST = 297, + T_ARRAY_CAST = 298, + T_OBJECT_CAST = 299, + T_BOOL_CAST = 300, + T_UNSET_CAST = 301, + T_NEW = 302, + T_CLONE = 303, + T_EXIT = 304, + T_IF = 305, + T_ELSEIF = 306, + T_ELSE = 307, + T_ENDIF = 308, + T_LNUMBER = 309, + T_DNUMBER = 310, + T_STRING = 311, + T_STRING_VARNAME = 312, + T_VARIABLE = 313, + T_NUM_STRING = 314, + T_INLINE_HTML = 315, + T_CHARACTER = 316, + T_BAD_CHARACTER = 317, + T_ENCAPSED_AND_WHITESPACE = 318, + T_CONSTANT_ENCAPSED_STRING = 319, + T_BACKTICKS_EXPR = 320, + T_ECHO = 321, + T_DO = 322, + T_WHILE = 323, + T_ENDWHILE = 324, + T_FOR = 325, + T_ENDFOR = 326, + T_FOREACH = 327, + T_ENDFOREACH = 328, + T_DECLARE = 329, + T_ENDDECLARE = 330, + T_AS = 331, + T_SWITCH = 332, + T_ENDSWITCH = 333, + T_CASE = 334, + T_DEFAULT = 335, + T_BREAK = 336, + T_CONTINUE = 337, + T_GOTO = 338, + T_FUNCTION = 339, + T_CONST = 340, + T_RETURN = 341, + T_TRY = 342, + T_CATCH = 343, + T_THROW = 344, + T_USE = 345, + T_GLOBAL = 346, + T_STATIC = 347, + T_ABSTRACT = 348, + T_FINAL = 349, + T_PRIVATE = 350, + T_PROTECTED = 351, + T_PUBLIC = 352, + T_VAR = 353, + T_UNSET = 354, + T_ISSET = 355, + T_EMPTY = 356, + T_HALT_COMPILER = 357, + T_CLASS = 358, + T_INTERFACE = 359, + T_EXTENDS = 360, + T_IMPLEMENTS = 361, + T_OBJECT_OPERATOR = 362, + T_DOUBLE_ARROW = 363, + T_LIST = 364, + T_ARRAY = 365, + T_CLASS_C = 366, + T_METHOD_C = 367, + T_FUNC_C = 368, + T_LINE = 369, + T_FILE = 370, + T_COMMENT = 371, + T_DOC_COMMENT = 372, + T_OPEN_TAG = 373, + T_OPEN_TAG_WITH_ECHO = 374, + T_OPEN_TAG_FAKE = 375, + T_CLOSE_TAG = 376, + T_WHITESPACE = 377, + T_START_HEREDOC = 378, + T_END_HEREDOC = 379, + T_HEREDOC = 380, + T_DOLLAR_OPEN_CURLY_BRACES = 381, + T_CURLY_OPEN = 382, + T_PAAMAYIM_NEKUDOTAYIM = 383, + T_BINARY_DOUBLE = 384, + T_BINARY_HEREDOC = 385, + T_NAMESPACE = 386, + T_NS_C = 387, + T_DIR = 388, + T_NS_SEPARATOR = 389, + T_INSTEADOF = 390, + T_CALLABLE = 391, + T_TRAIT = 392, + T_TRAIT_C = 393, + T_YIELD = 394, + T_FINALLY = 395, + T_ELLIPSIS = 396 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int xhpastparse (void* yyscanner, xhpast::Node** root); + +#endif /* !YY_XHPAST_PARSER_YACC_HPP_INCLUDED */ + +/* Copy the second part of user declarations. */ + +#line 319 "parser.yacc.cpp" /* yacc.c:358 */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 7627 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 168 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 135 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 443 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 915 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 396 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 50, 2, 2, 166, 49, 32, 2, + 161, 162, 47, 44, 8, 45, 46, 48, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 26, 163, + 38, 13, 40, 25, 64, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 65, 2, 167, 31, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 164, 30, 165, 52, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 27, 28, + 29, 33, 34, 35, 36, 37, 39, 41, 42, 43, + 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 210, 210, 216, 219, 225, 228, 234, 235, 236, + 237, 242, 249, 255, 263, 268, 275, 278, 285, 290, + 296, 302, 312, 319, 329, 332, 338, 339, 340, 341, + 349, 350, 356, 359, 362, 368, 371, 401, 420, 427, + 435, 448, 455, 462, 469, 476, 483, 490, 497, 504, + 509, 514, 519, 523, 527, 531, 537, 555, 572, 578, + 582, 591, 600, 608, 619, 623, 629, 641, 644, 648, + 657, 661, 668, 672, 676, 680, 683, 689, 705, 717, + 732, 736, 743, 750, 757, 760, 766, 770, 773, 781, + 784, 792, 795, 801, 804, 810, 811, 819, 820, 828, + 829, 837, 838, 846, 852, 863, 866, 876, 881, 893, + 896, 904, 914, 915, 919, 920, 928, 931, 941, 944, + 954, 957, 965, 968, 976, 977, 983, 991, 1000, 1009, + 1017, 1025, 1034, 1044, 1056, 1060, 1066, 1069, 1070, 1077, + 1080, 1083, 1089, 1092, 1099, 1100, 1106, 1109, 1115, 1116, + 1119, 1126, 1130, 1137, 1140, 1144, 1151, 1159, 1167, 1175, + 1186, 1189, 1195, 1203, 1207, 1210, 1210, 1228, 1236, 1239, + 1245, 1248, 1254, 1257, 1263, 1267, 1274, 1277, 1283, 1291, + 1295, 1302, 1306, 1312, 1320, 1326, 1335, 1338, 1346, 1349, + 1355, 1356, 1363, 1366, 1373, 1377, 1383, 1384, 1385, 1386, + 1387, 1388, 1392, 1399, 1406, 1413, 1423, 1432, 1444, 1447, + 1454, 1457, 1462, 1465, 1472, 1480, 1486, 1496, 1510, 1515, + 1521, 1527, 1533, 1539, 1545, 1551, 1557, 1563, 1569, 1575, + 1581, 1586, 1591, 1596, 1601, 1607, 1613, 1619, 1625, 1631, + 1637, 1643, 1649, 1675, 1681, 1687, 1693, 1699, 1705, 1711, + 1717, 1722, 1727, 1732, 1737, 1743, 1749, 1755, 1761, 1767, + 1773, 1779, 1785, 1791, 1797, 1798, 1799, 1807, 1815, 1821, + 1822, 1827, 1832, 1837, 1842, 1847, 1852, 1857, 1862, 1867, + 1871, 1872, 1873, 1874, 1879, 1885, 1900, 1924, 1930, 1936, + 1942, 1951, 1955, 1958, 1966, 1969, 1974, 1978, 1987, 1992, + 1999, 2005, 2014, 2023, 2032, 2041, 2049, 2052, 2055, 2059, + 2066, 2069, 2073, 2080, 2081, 2085, 2100, 2104, 2107, 2113, + 2119, 2122, 2126, 2134, 2137, 2143, 2146, 2149, 2152, 2155, + 2158, 2161, 2164, 2167, 2170, 2173, 2176, 2182, 2183, 2184, + 2188, 2192, 2197, 2202, 2207, 2212, 2216, 2224, 2225, 2226, + 2227, 2230, 2233, 2237, 2240, 2246, 2249, 2253, 2264, 2271, + 2278, 2288, 2289, 2293, 2297, 2301, 2305, 2331, 2335, 2338, + 2344, 2354, 2360, 2369, 2375, 2376, 2377, 2383, 2384, 2399, + 2404, 2412, 2416, 2422, 2431, 2432, 2433, 2437, 2438, 2441, + 2453, 2457, 2463, 2469, 2473, 2476, 2484, 2487, 2493, 2494, + 2498, 2504, 2510, 2514, 2518, 2524, 2527, 2542, 2545, 2552, + 2553, 2557, 2563, 2566, 2572, 2579, 2586, 2593, 2600, 2607, + 2614, 2621, 2631, 2641, 2651, 2654, 2657, 2667, 2670, 2676, + 2680, 2686, 2691, 2697, 2703, 2709, 2715, 2721, 2730, 2735, + 2743, 2749, 2767, 2772 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 1 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", + "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", + "T_LOGICAL_AND", "T_PRINT", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", + "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", + "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", + "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", + "'^'", "'&'", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", + "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", + "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", + "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", + "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_UNICODE_CAST", + "T_BINARY_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", + "T_UNSET_CAST", "'@'", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", + "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", + "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", + "T_CHARACTER", "T_BAD_CHARACTER", "T_ENCAPSED_AND_WHITESPACE", + "T_CONSTANT_ENCAPSED_STRING", "T_BACKTICKS_EXPR", "T_ECHO", "T_DO", + "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", + "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", + "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", + "T_FUNCTION", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_THROW", + "T_USE", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", + "T_PROTECTED", "T_PUBLIC", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", + "T_HALT_COMPILER", "T_CLASS", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", + "T_OBJECT_OPERATOR", "T_DOUBLE_ARROW", "T_LIST", "T_ARRAY", "T_CLASS_C", + "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_COMMENT", + "T_DOC_COMMENT", "T_OPEN_TAG", "T_OPEN_TAG_WITH_ECHO", "T_OPEN_TAG_FAKE", + "T_CLOSE_TAG", "T_WHITESPACE", "T_START_HEREDOC", "T_END_HEREDOC", + "T_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", + "T_PAAMAYIM_NEKUDOTAYIM", "T_BINARY_DOUBLE", "T_BINARY_HEREDOC", + "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_INSTEADOF", + "T_CALLABLE", "T_TRAIT", "T_TRAIT_C", "T_YIELD", "T_FINALLY", + "T_ELLIPSIS", "'('", "')'", "';'", "'{'", "'}'", "'$'", "']'", "$accept", + "start", "top_statement_list", "namespace_name", "top_statement", + "use_declarations", "use_declaration", "constant_declaration", + "inner_statement_list", "inner_statement", "statement", + "unticked_statement", "catch_list", "catch", "finally_statement", + "non_empty_finally_statement", "unset_variables", "unset_variable", + "function_declaration_statement", "class_declaration_statement", + "is_reference", "unticked_function_declaration_statement", + "unticked_class_declaration_statement", "class_entry_type", + "extends_from", "interface_entry", "interface_extends_list", + "implements_list", "interface_list", "foreach_optional_arg", + "foreach_variable", "for_statement", "foreach_statement", + "declare_statement", "declare_list", "switch_case_list", "case_list", + "case_separator", "while_statement", "elseif_list", "new_elseif_list", + "else_single", "new_else_single", "parameter_list", + "non_empty_parameter_list", "parameter", "optional_type", "type", + "return_type", "function_call_parameter_list", + "non_empty_function_call_parameter_list", "argument", "global_var_list", + "global_var", "static_var_list", "class_statement_list", + "class_statement", "$@1", "trait_use_statement", "trait_list", + "trait_adaptations", "trait_adaptation_list", + "non_empty_trait_adaptation_list", "trait_adaptation_statement", + "trait_precedence", "trait_reference_list", "trait_method_reference", + "trait_method_reference_fully_qualified", "trait_alias", + "trait_modifiers", "method_body", "variable_modifiers", + "method_modifiers", "non_empty_member_modifiers", "member_modifier", + "class_variable_declaration", "class_constant_declaration", + "echo_expr_list", "for_expr", "non_empty_for_expr", + "expr_without_variable", "yield_expr", "function", "lexical_vars", + "lexical_var_list", "function_call", "class_name", + "fully_qualified_class_name", "class_name_reference", + "dynamic_class_name_reference", "dynamic_class_name_variable_properties", + "dynamic_class_name_variable_property", "exit_expr", "ctor_arguments", + "common_scalar", "static_scalar", "static_class_constant", "scalar", + "static_array_pair_list", "possible_comma", + "non_empty_static_array_pair_list", "expr", "r_variable", "w_variable", + "rw_variable", "variable", "variable_properties", "variable_property", + "array_method_dereference", "method", "method_or_not", + "variable_without_objects", "static_member", "variable_class_name", + "array_function_dereference", "base_variable_with_function_calls", + "base_variable", "reference_variable", "compound_variable", "dim_offset", + "object_property", "object_dim_list", "variable_name", + "simple_indirect_reference", "assignment_list", + "assignment_list_element", "array_pair_list", + "non_empty_array_pair_list", "internal_functions_in_yacc", + "isset_variables", "parenthesis_expr", "combined_scalar_offset", + "combined_scalar", "new_expr", "class_constant", YY_NULLPTR +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 44, 263, + 264, 265, 266, 61, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 63, 58, 278, 279, 280, + 124, 94, 38, 281, 282, 283, 284, 285, 60, 286, + 62, 287, 288, 289, 43, 45, 46, 42, 47, 37, + 33, 290, 126, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 64, 91, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 40, 41, 59, 123, 125, 36, 93 +}; +# endif + +#define YYPACT_NINF -706 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-706))) + +#define YYTABLE_NINF -382 + +#define yytable_value_is_error(Yytable_value) \ + (!!((Yytable_value) == (-382))) + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + -706, 63, 1871, -706, 6174, 6174, -80, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 215, 215, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 4844, 274, 6174, -62, -57, -706, + -706, 44, -706, -706, -706, 53, -706, 6174, 4569, -47, + -16, -13, 58, 67, 4977, 5110, 92, -706, 125, 5243, + 76, 6174, 13, -4, 128, 126, 130, 99, 102, 112, + 117, -706, -706, 122, 132, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -9, -706, -706, 211, -706, -706, + 6174, 6307, -706, -706, 136, -71, -706, 16, -706, -706, + -706, -706, -706, -706, 214, 235, -706, 149, 286, 262, + 189, -706, -706, 6679, -706, 294, 1229, 170, -706, 194, + 279, 227, -706, 0, -706, 36, -706, -706, 299, 304, + -706, 309, 319, 284, 224, -706, 286, 7427, 7427, 6174, + 7427, 7427, 1579, -706, -706, 339, -706, -706, -706, 244, + 211, 333, -78, 261, -706, -706, 263, -706, -706, -706, + -706, -706, -706, -706, -706, -706, 215, 7225, 245, 403, + 252, 265, 211, 266, 270, 252, -706, 273, 295, 9, + 36, -706, 5376, -706, 6174, -706, 6174, 6174, 19, 7427, + 336, 6174, 6174, 6174, 350, 6174, -706, 6730, -706, 6773, + 271, 415, -706, 276, 7427, 957, -706, 6816, 211, -38, + 20, -706, -706, 283, 22, -706, 416, 23, 286, -706, + -706, 215, 215, 215, 275, 303, 4844, 211, -706, -67, + 123, -68, 7275, 540, 280, 991, 281, 2013, 6174, 366, + 4711, 371, -706, 324, 326, -706, -706, -8, 6174, -17, + 6174, 6174, 6174, 5509, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 6174, 6174, 6174, 422, -706, -706, + -706, 5642, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 4711, 35, 6174, 49, 6174, 6174, 136, + 65, 6174, 6174, 6174, 290, 6867, 211, -55, 281, 54, + 158, -706, -706, 5775, -706, 5908, -706, 4711, 324, 211, + 266, 51, -706, 51, 49, -14, -706, 6910, 6953, 7427, + 285, 287, 6174, -706, 296, 7003, 292, 453, 7427, 368, + 1033, 452, 28, 7046, -706, -706, -706, 1196, -706, -706, + 2155, -706, 85, 391, 13, -706, 6174, -706, -706, -4, + -706, 1196, 405, -706, 307, 30, -706, -706, -706, 33, + 318, 323, 330, -706, 34, -706, 325, 124, 1587, -706, + -706, 4711, 6174, -706, -706, -706, 332, -706, -706, -706, + -706, -706, 1341, -706, 215, 6174, 343, 487, -706, 7427, + 494, 101, 384, 101, 348, 354, 10, 349, 356, 357, + -14, 36, 7469, 7508, 1579, 6174, 7378, 7533, 1479, 7555, + 7576, 4764, 1721, 1863, 1863, 1863, 1863, 1863, 1070, 1070, + 1070, 1070, 763, 763, 353, 353, 353, 339, 339, 339, + -706, 164, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, + 1579, 1579, 1579, 1579, 360, 364, 369, 362, -706, 6174, + -706, 374, -10, -706, 365, 6452, 376, 378, 381, -706, + 71, 356, 364, 215, 7427, 215, 7326, 379, 384, 266, + -706, -706, -706, -706, 3859, -706, -706, 7427, 6174, 4001, + 6174, 6174, 215, 184, 1196, 446, 4143, 6, 1196, 1196, + 1196, -706, 377, 396, 211, -28, 418, -706, -706, -706, + -39, 475, -706, -706, 6495, -706, -706, 539, 10, 215, + 404, 215, -706, -706, -706, 303, 303, 553, -706, 4711, + -706, 1729, 406, 193, 714, 408, -706, -706, 7427, -706, + 4711, 1196, 433, 211, 266, -706, 101, 423, 581, -706, + -706, 10, 204, -706, -706, 437, 587, 24, -706, -706, + -706, 4711, 4711, -14, 7533, 6174, 422, -706, -706, 4711, + 4711, -706, 6538, 4711, 537, 538, -706, 6174, 6174, -706, + -706, -706, -706, -706, -706, -706, 6041, -706, 440, 480, + -706, -706, 7089, -706, -706, -706, 444, 7427, 481, 215, + 481, -706, -706, 596, -706, -706, -706, 447, 449, -706, + -706, -706, 486, 451, 606, 1196, 211, -15, 541, 460, + 458, -39, -706, -706, -706, -706, 1196, 464, -706, -706, + -706, 41, -706, 6174, 466, -706, -706, 468, -706, -706, + 211, 266, 581, -706, 101, 465, 471, -706, 518, 68, + -33, -706, 558, 624, 476, 478, 7533, 252, 479, 482, + -706, 484, 6174, 6174, 517, 488, 6591, 215, 7427, -706, + 49, -706, 3717, 302, 490, 2297, 6174, 184, 485, -706, + 489, 1196, 2439, -706, 183, -706, 138, 1196, -706, 1196, + -706, 495, 100, -706, 101, -706, -706, -706, -706, -706, + 518, -706, 1579, -706, -706, 266, 729, -706, 574, 101, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + 579, 284, 639, -706, 25, 632, 498, 632, 39, 648, + -706, 1196, -706, -706, -706, -706, -706, -706, 500, 501, + 49, -706, -706, -706, -706, 878, -706, 312, 504, 4569, + -706, -706, 506, 509, -706, 4285, 4285, -706, 510, 264, + 512, 6174, 11, 151, -706, -706, 549, -706, 600, 2581, + 632, -706, 665, 14, -706, 667, 26, -706, -706, 607, + -706, 68, 519, 75, 521, -33, 668, 1196, -706, -706, + -706, 374, -706, 525, 661, 619, 6174, -706, -706, 4427, + -706, -706, -706, -706, -706, 529, -706, 6636, -706, -706, + -706, -706, 1196, 531, -706, 532, 1196, 101, -706, 116, + -706, 1196, 622, -706, 286, 682, -706, -706, 623, -706, + 42, -706, 688, 1196, -706, -706, 6174, -706, 542, 7139, + -706, -706, -706, 2723, -706, -706, 3717, -706, 543, -706, + -706, -706, 609, 545, 116, -706, 548, 611, 554, 551, + 565, -706, 704, 644, 1196, 2865, -706, 190, -706, 3007, + 1196, -706, 7182, 3717, -706, 4569, 3149, 557, 3717, -706, + 3291, -706, -706, -706, 359, 101, -706, 646, 1196, 561, + -706, -706, 662, -706, -706, -706, 697, -706, 562, -706, + 3433, -706, 669, 670, 732, -706, -706, -706, 10, -706, + -706, -706, -706, -706, 101, 584, 3717, -706, 632, 229, + -706, -706, -706, 3575, -706 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 4, 0, 2, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 412, 0, 0, 320, 0, 325, + 326, 5, 347, 394, 52, 327, 279, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, + 0, 80, 86, 0, 0, 331, 332, 334, 328, 329, + 32, 33, 34, 336, 0, 335, 330, 0, 83, 333, + 284, 0, 59, 25, 405, 349, 3, 0, 7, 30, + 8, 9, 73, 74, 0, 0, 362, 0, 75, 386, + 0, 352, 280, 0, 361, 0, 363, 0, 390, 0, + 385, 367, 384, 387, 393, 0, 269, 264, 281, 282, + 265, 348, 5, 306, 0, 284, 75, 424, 425, 0, + 427, 428, 283, 250, 251, 252, 253, 5, 306, 0, + 0, 0, 307, 0, 231, 365, 0, 233, 270, 271, + 272, 273, 274, 275, 276, 278, 0, 417, 0, 355, + 323, 0, 0, 307, 313, 323, 314, 0, 316, 387, + 0, 218, 0, 277, 0, 31, 396, 396, 0, 209, + 0, 0, 210, 0, 0, 0, 42, 0, 44, 0, + 0, 0, 46, 362, 0, 363, 25, 0, 0, 18, + 0, 17, 153, 0, 0, 152, 158, 0, 75, 81, + 82, 0, 0, 0, 0, 411, 412, 0, 4, 0, + 351, 362, 0, 363, 0, 0, 265, 0, 0, 0, + 145, 0, 15, 84, 87, 54, 76, 0, 396, 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, 53, 230, + 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 145, 0, 396, 0, 396, 0, 406, + 389, 396, 396, 396, 0, 0, 0, 309, 0, 0, + 0, 421, 364, 0, 439, 356, 413, 145, 84, 0, + 309, 0, 440, 0, 0, 389, 321, 0, 0, 397, + 0, 0, 0, 51, 0, 0, 0, 211, 213, 362, + 363, 0, 0, 0, 43, 45, 63, 0, 47, 48, + 0, 62, 20, 0, 0, 14, 0, 154, 363, 0, + 49, 0, 0, 50, 0, 0, 70, 72, 429, 0, + 0, 0, 0, 409, 0, 408, 0, 350, 0, 11, + 4, 145, 0, 432, 431, 388, 0, 35, 24, 26, + 27, 28, 0, 6, 0, 0, 0, 144, 146, 148, + 0, 0, 89, 0, 0, 0, 136, 0, 442, 379, + 377, 0, 236, 238, 237, 0, 0, 268, 234, 235, + 239, 241, 240, 256, 257, 254, 255, 262, 258, 259, + 260, 261, 248, 249, 243, 244, 242, 245, 246, 247, + 263, 0, 215, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 0, 443, 380, 0, 403, 0, + 399, 376, 398, 402, 0, 0, 0, 0, 0, 426, + 308, 0, 0, 0, 416, 0, 415, 0, 89, 308, + 379, 380, 318, 322, 0, 437, 435, 208, 0, 0, + 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 353, 327, 0, 0, 0, 338, 0, 337, 23, 345, + 0, 0, 19, 16, 0, 151, 159, 156, 136, 0, + 0, 0, 422, 423, 10, 411, 411, 0, 438, 145, + 13, 0, 0, 362, 363, 0, 395, 150, 149, 298, + 0, 0, 0, 0, 310, 85, 0, 0, 88, 91, + 161, 136, 0, 140, 141, 0, 124, 0, 137, 139, + 383, 145, 145, 378, 267, 0, 0, 216, 305, 145, + 145, 382, 0, 145, 375, 374, 369, 396, 0, 391, + 392, 434, 433, 436, 420, 419, 0, 324, 0, 315, + 25, 116, 0, 25, 114, 38, 0, 212, 93, 0, + 93, 95, 103, 0, 25, 101, 58, 109, 109, 41, + 341, 342, 360, 0, 355, 353, 0, 340, 0, 0, + 0, 67, 65, 61, 21, 155, 0, 0, 71, 55, + 430, 0, 407, 0, 0, 12, 300, 0, 147, 22, + 0, 312, 90, 161, 0, 192, 0, 138, 292, 136, + 0, 135, 0, 126, 0, 0, 266, 323, 0, 0, + 404, 0, 396, 396, 366, 0, 0, 0, 414, 161, + 0, 317, 118, 120, 0, 0, 210, 0, 0, 96, + 0, 0, 0, 109, 0, 109, 0, 0, 344, 356, + 354, 0, 339, 346, 0, 25, 64, 60, 68, 157, + 292, 410, 214, 299, 29, 311, 192, 92, 0, 0, + 199, 200, 201, 198, 197, 196, 191, 79, 160, 164, + 0, 0, 190, 194, 0, 142, 0, 142, 0, 127, + 134, 0, 301, 304, 217, 302, 303, 373, 0, 0, + 0, 368, 400, 401, 418, 192, 319, 122, 0, 0, + 36, 39, 0, 0, 94, 0, 0, 104, 0, 0, + 0, 0, 0, 0, 105, 359, 358, 343, 0, 0, + 142, 78, 0, 0, 168, 204, 0, 165, 195, 0, + 163, 136, 0, 0, 0, 0, 130, 0, 129, 371, + 372, 376, 441, 0, 0, 0, 0, 121, 115, 0, + 25, 99, 57, 56, 102, 0, 107, 0, 112, 113, + 25, 106, 0, 0, 69, 0, 0, 0, 170, 172, + 167, 0, 0, 162, 75, 0, 143, 25, 0, 296, + 0, 25, 131, 0, 128, 370, 0, 25, 0, 0, + 25, 97, 40, 0, 108, 25, 111, 357, 0, 25, + 207, 169, 5, 0, 173, 174, 0, 0, 182, 0, + 0, 205, 202, 0, 0, 0, 297, 0, 293, 0, + 0, 133, 0, 123, 37, 0, 0, 0, 110, 25, + 0, 171, 175, 176, 186, 0, 177, 0, 0, 0, + 206, 77, 0, 294, 285, 132, 0, 117, 0, 100, + 0, 286, 0, 185, 178, 179, 183, 203, 136, 295, + 25, 98, 66, 184, 0, 0, 119, 180, 142, 0, + 188, 25, 166, 0, 189 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -706, -706, -195, -5, -706, -706, 399, -706, -185, -706, + 2, -706, -706, 145, -706, 147, -706, 240, -1, 3, + -124, -706, -706, -706, 454, -706, -706, 293, 228, 173, + 93, -706, 32, -706, -706, -706, -417, -27, -706, -706, + -706, -706, -706, -493, -706, -581, -600, 231, -699, -254, + -706, 239, -706, 425, -706, -554, -706, -706, -706, -706, + -706, -706, -706, -73, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -705, -706, -706, -706, -455, -706, + -37, 695, -2, 87, -706, -706, 108, -377, -248, -706, + -706, -706, -706, -157, 727, 618, -706, -706, 175, 177, + -706, 916, 580, -363, 392, 31, -706, -706, -706, -706, + 1, -222, -706, 802, -706, -706, -22, -12, -706, -151, + -308, -706, -706, 29, 269, 272, 570, -706, -706, -706, + -706, -706, -706, 27, -706 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 2, 85, 86, 200, 201, 87, 227, 378, + 379, 89, 611, 612, 687, 613, 355, 356, 380, 381, + 237, 92, 93, 94, 392, 95, 394, 537, 538, 668, + 590, 832, 792, 596, 332, 599, 674, 800, 585, 663, + 737, 740, 785, 545, 546, 643, 547, 548, 772, 386, + 387, 388, 204, 205, 207, 635, 708, 814, 709, 763, + 810, 843, 844, 845, 846, 894, 847, 848, 849, 892, + 912, 710, 711, 712, 713, 766, 714, 178, 326, 327, + 96, 97, 126, 717, 820, 99, 100, 549, 165, 166, + 579, 661, 173, 308, 101, 602, 499, 102, 603, 306, + 604, 103, 104, 301, 105, 106, 654, 731, 564, 565, + 566, 107, 108, 109, 110, 111, 112, 113, 114, 320, + 451, 452, 453, 115, 364, 365, 158, 159, 116, 359, + 117, 118, 119, 120, 121 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 98, 90, 294, 168, 88, 91, 472, 768, 312, 142, + 142, 340, 193, 169, 535, 617, 539, 399, 774, 430, + 163, 527, 807, 368, 231, 586, 321, 322, 344, 444, + 349, 352, 597, 769, 812, 542, 485, 798, 509, 718, + 180, 511, 516, 221, 641, 145, 145, 199, 636, 516, + 857, 287, 208, 467, 170, 567, 640, 343, 398, 719, + 33, 805, 446, 3, 450, 287, 137, 395, 609, 219, + 175, 775, 220, 202, 287, 229, -307, 399, 446, 696, + 195, 129, 229, 230, 354, 137, 229, 397, 137, 470, + 230, 471, 450, 542, -287, -287, 369, 370, 229, 172, + 574, 641, 575, 290, 174, 735, 371, 818, 226, 176, + 445, 223, 33, 33, 181, 229, 641, 522, 177, -307, + 610, 208, 143, 143, 448, 229, 33, 642, 33, 461, + 287, 33, -309, 164, 447, 297, 454, 776, 229, 543, + 456, 457, 458, 137, 217, 182, 329, -381, 183, 84, + 288, 142, 819, 396, 568, 218, -381, 310, 315, 539, + 532, -377, 203, 533, 288, 544, 198, 190, 298, 893, + 598, 816, -125, 288, 799, 521, 137, 808, 809, 232, + 501, 676, 323, 345, 642, 350, 353, 302, 770, 813, + 486, 842, 510, 342, 822, 512, 517, 543, 142, 642, + 191, 84, 289, 691, 858, 206, 142, 142, 142, 909, + 142, 743, 367, 449, 330, 84, 589, 84, 532, 184, + 84, 533, 882, 544, 229, 98, -378, 400, 185, 288, + 556, 47, 519, 462, 348, 33, 751, 752, 229, 137, + 196, 33, 357, 358, 360, 168, 363, -308, 209, 751, + 752, 532, 210, 229, 533, 169, 749, 697, 753, 137, + 211, 33, 163, 212, 143, 624, 532, 883, 401, 533, + -309, -308, 400, 213, 400, 138, 229, 229, 214, 137, + 750, 751, 752, 215, 371, 519, 137, 400, 400, 233, + 137, 460, 33, 216, 734, 138, 170, 644, 645, 400, + 228, 400, 400, 754, 469, 648, 649, 758, 647, 651, + 234, 143, 235, 401, 139, 401, 801, 140, 236, 143, + 143, 143, 764, 143, 84, 141, 138, 238, 401, 401, + 84, 283, 495, 543, 139, 523, 239, 140, 98, 199, + 401, 284, 401, 401, 285, 141, 495, 269, 270, 137, + 84, 33, 736, 286, 532, -289, -289, 533, 137, 544, + 33, 795, 751, 752, 291, 139, 98, 90, 140, 292, + 88, 91, 738, 739, 293, 164, 141, 217, 137, 142, + 33, 84, 783, 784, 176, 138, 534, 47, 534, 553, + 267, 534, 910, 911, 138, 662, 160, 296, 665, 25, + 264, 265, 266, 524, 267, 905, 144, 147, 299, 672, + 300, 305, 304, 307, 138, 302, 655, 311, 309, 229, + 313, 314, 781, 324, 161, 331, 142, 162, 337, 351, + 841, 362, 850, 139, 336, 141, 140, 361, 450, 338, + 84, 383, 373, 375, 141, 496, 390, 346, 391, 84, + 393, 396, 475, 139, 476, 480, 140, 478, 142, 496, + 142, 481, 557, 482, 141, 484, 502, 850, 508, 84, + 700, 701, 702, 703, 704, 705, 581, 142, 142, 495, + 513, 584, 507, 495, 495, 495, 514, 518, 595, 607, + 724, 515, 143, 525, 302, 530, 302, 137, 895, 33, + 759, 728, 729, 534, 142, 529, 142, 531, 450, 536, + 142, 142, 540, 588, 591, 541, 550, 551, 552, 98, + 90, 593, 558, 88, 91, 559, 495, 907, 631, 561, + 560, 534, 569, 138, 168, 563, 534, 534, 605, 143, + 357, 577, 620, 571, 169, 572, 363, 363, 573, 606, + 614, 163, 616, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 608, 623, 619, 626, 698, + 627, 143, 161, 143, 699, 162, 700, 701, 702, 703, + 704, 705, 706, 141, 142, 170, 630, 633, 84, 634, + 143, 143, 496, -365, -365, 639, 496, 496, 496, 638, + 495, 682, 652, 653, 659, 833, 660, 666, 667, 671, + 673, 495, 675, 677, 679, 836, 683, 143, 678, 143, + 669, 684, 685, 143, 143, 695, 690, 716, 693, 534, + 707, 694, 855, 715, 534, 720, 859, 721, 722, 496, + 723, 725, 863, 730, 726, 866, 727, 745, 400, 762, + 868, 746, 142, 741, 870, 732, 765, 757, 771, 773, + 98, 777, 142, 98, 164, 786, 495, 779, 780, 788, + 98, 789, 495, 794, 495, 796, 802, 803, 806, 534, + 811, 823, 815, 817, 890, 821, 826, 827, 302, 401, + 853, 828, 834, 838, 534, 854, 839, 143, 591, 852, + 856, 860, -288, -288, -181, 864, 874, 869, 875, 767, + 871, 873, 877, 496, 876, 906, 495, 878, 400, 879, + 889, 896, 898, 900, 496, 901, 913, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 899, + 904, 787, -193, 503, 903, -187, 908, 791, 791, 618, + 700, 701, 702, 703, 704, 705, 686, 98, 688, 401, + 744, 578, 468, 670, 632, 143, 534, -365, -365, 628, + 835, 872, 495, 637, 505, 143, 224, 760, 793, 496, + 681, 680, 825, 347, 621, 496, 366, 496, 622, 0, + 0, 831, 0, 0, 0, 0, 0, 495, 0, 0, + 0, 495, 534, 0, 534, 0, 495, 261, 262, 263, + 264, 265, 266, 0, 267, 0, 146, 146, 495, 0, + 0, 0, 0, 0, 0, 0, 0, 167, 0, 496, + 0, 98, 0, 698, 98, 0, 0, 0, 699, 534, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 495, + 0, 0, 0, 98, 0, 495, 0, 98, 0, 0, + 0, 98, 0, 0, 98, 0, 98, 887, 98, 0, + 534, 0, 0, 495, 0, 0, -290, -290, 0, 0, + 0, 0, 0, 0, 0, 496, 0, 0, 98, 0, + 0, 0, 0, 534, 761, 0, 0, 0, 0, 534, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 496, 98, 0, 0, 496, 0, 0, 0, 0, 496, + 127, 128, 0, 130, 131, 132, 133, 134, 135, 136, + 0, 496, 148, 149, 150, 151, 152, 153, 154, 155, + 157, 0, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 0, 498, 0, 0, 146, 0, + 187, 189, 496, 0, 0, 194, 0, 197, 496, 506, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 698, 0, 0, 0, 496, 699, 0, 700, + 701, 702, 703, 704, 705, 706, 222, 225, 0, 0, + 240, 241, 242, 0, 0, 146, 0, 0, 0, 0, + -365, -365, 0, 146, 146, 146, 243, 146, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 782, 0, 295, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 0, 0, + 0, 0, 0, 0, 497, 0, 0, 0, 0, 167, + 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, + 0, 0, 0, 0, 0, 0, -365, -365, 317, 0, + 318, 0, 319, 319, 0, 0, 0, 325, 328, 194, + 0, 333, 592, 0, 0, 0, 600, 601, -382, -382, + -382, -382, 259, 260, 261, 262, 263, 264, 265, 266, + 339, 267, 0, 0, 0, 0, 0, 0, 483, 0, + 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 0, 389, 0, 0, 629, + 0, 0, 0, 374, 319, 0, 402, 403, 404, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 0, 0, 0, 146, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 389, + 0, 319, 0, 319, 455, 0, 0, 319, 319, 319, + 0, 497, 0, 0, 0, 497, 497, 497, 0, 464, + 0, 466, 0, 389, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 146, 689, 0, 0, 0, 477, 0, + 488, 489, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 0, 0, 0, 0, 497, 0, + 0, 490, 504, 0, 0, 146, 0, 146, 0, 29, + 30, 137, 0, 0, 0, 0, 0, 0, 0, 491, + 0, 0, -365, -365, 146, 146, 0, 389, 194, 747, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 0, + 0, 528, 0, 0, 0, 0, 0, 138, 0, 0, + 0, 146, 0, 146, 0, 0, 0, 146, 146, 0, + 0, 554, 0, 0, 0, 492, 65, 66, 67, 68, + 69, 0, 497, 0, 0, 0, 0, 0, 0, 778, + 73, 0, 0, 497, 0, 0, 493, 75, 76, 494, + 240, 241, 242, 79, 0, 0, 0, 0, 167, 0, + 0, 0, 0, 0, 0, 562, 243, 0, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 146, 267, 0, 582, 824, 328, 587, 497, 0, + 0, 0, 0, 0, 497, 0, 497, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 837, 0, 0, 0, 840, 0, 0, 0, 0, 851, + 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, + 0, 861, 0, 0, 0, 0, 389, 0, 497, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, + 0, 0, 0, 0, 0, 0, 0, 389, 389, 146, + 0, 646, 880, 0, 0, 389, 389, 0, 885, 389, + 0, 0, 0, 319, 656, 0, 0, 0, 0, 0, + 0, 0, 658, 0, 0, 0, 897, 0, 0, 0, + 0, 0, 0, 0, 497, 0, 526, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 497, + 267, 0, 0, 497, 0, 0, 0, 0, 497, 692, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 319, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 497, 328, 0, 0, 0, 0, 497, 0, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 243, 497, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 797, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 48, 49, 50, 0, 51, 52, 53, 54, 55, + 56, 0, 829, 0, 0, 57, 58, 59, 60, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 74, 75, 76, + 77, 9, 862, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 520, 84, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 48, 49, 50, 0, 51, 52, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 60, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 74, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 625, 84, -382, -382, -382, -382, + -382, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 48, 49, 50, 0, 51, + 52, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 60, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 74, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 377, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 500, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 742, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 748, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 376, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 376, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 804, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 867, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 881, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 884, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 888, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 376, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 376, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 891, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 902, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 914, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 580, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 0, 0, 0, 0, 0, 0, 57, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 0, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 583, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 0, 0, 0, 0, 0, 0, 57, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 0, 79, 80, + 0, 0, 81, 0, 82, 83, 0, 84, 0, 594, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 0, 0, 0, 0, 0, + 0, 57, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 0, + 79, 80, 0, 0, 81, 0, 82, 83, 0, 84, + 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 0, 0, 0, + 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 0, 79, 80, 0, 0, 81, 0, 82, 83, + 0, 84, 0, 830, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 0, + 0, 0, 0, 0, 0, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 0, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 0, 0, 0, 0, 0, 0, 57, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 0, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 0, 0, 0, 0, 29, 30, 122, 32, 33, 0, + 0, 0, 0, 0, 35, 36, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 47, 267, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 4, 5, 6, + 7, 8, 0, 0, 0, 73, 9, 0, 0, 0, + 0, 124, 75, 76, 77, 0, 0, 0, 79, 125, + 0, 385, 81, 0, 0, 0, 156, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, + 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, + 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 0, 0, 0, 0, 29, 30, 122, + 32, 33, 0, 0, 0, 0, 0, 35, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, + 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 73, 9, + 0, 0, 0, 0, 124, 75, 76, 77, 0, 0, + 0, 79, 125, 0, 0, 81, 0, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 29, 30, 122, 32, 33, 0, 0, 0, 0, 0, + 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 123, 0, + 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 4, 5, 6, 7, 8, 0, 0, + 0, 73, 9, 0, 0, 0, 0, 124, 75, 76, + 77, 0, 0, 0, 79, 125, 0, 0, 81, 0, + 186, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, + 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, + 0, 0, 0, 29, 30, 122, 32, 33, 0, 0, + 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 58, + 59, 0, 0, 0, 0, 0, 0, 0, 63, 64, + 65, 66, 67, 68, 69, 0, 4, 5, 6, 7, + 8, 0, 0, 0, 73, 9, 0, 0, 0, 0, + 124, 75, 76, 77, 0, 0, 0, 79, 125, 0, + 0, 81, 0, 188, 0, 0, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 0, 0, 0, 0, 29, 30, 122, 32, + 33, 0, 0, 0, 0, 0, 35, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, + 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, + 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 4, + 5, 6, 7, 8, 0, 0, 0, 73, 9, 0, + 0, 0, 0, 124, 75, 76, 77, 0, 0, 0, + 79, 125, 0, 0, 81, 0, 192, 0, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, + 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 0, 0, 0, 0, 29, + 30, 122, 32, 33, 0, 0, 0, 0, 0, 35, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, + 0, 0, 0, 0, 0, 58, 59, 0, 0, 0, + 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, + 69, 0, 4, 5, 6, 7, 8, 0, 0, 0, + 73, 9, 0, 0, 0, 0, 124, 75, 76, 77, + 0, 0, 0, 79, 125, 405, 0, 81, 316, 0, + 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, + 0, 0, 29, 30, 122, 32, 33, 0, 0, 0, + 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 0, 0, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 4, 5, 6, 7, 8, + 0, 0, 0, 73, 9, 0, 0, 0, 0, 124, + 75, 76, 77, 0, 0, 0, 79, 125, 0, 0, + 81, 0, 0, 0, 431, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, + 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, + 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 0, 0, 0, 0, 29, 30, 122, 32, 33, + 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, + 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, + 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, + 63, 64, 65, 66, 67, 68, 69, 0, 4, 5, + 6, 7, 8, 0, 0, 0, 73, 9, 0, 0, + 0, 0, 124, 75, 76, 77, 0, 0, 0, 79, + 125, 0, 0, 81, 0, 0, 0, 463, 84, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 0, 0, 0, 0, 29, 30, + 122, 32, 33, 0, 0, 0, 0, 0, 35, 36, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, + 0, 0, 0, 0, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 4, 5, 6, 7, 8, 0, 0, 0, 73, + 9, 0, 0, 0, 0, 124, 75, 76, 77, 0, + 0, 0, 79, 125, 0, 0, 81, 0, 0, 0, + 465, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, + 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, + 0, 29, 30, 122, 32, 33, 0, 0, 0, 0, + 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 0, 0, 0, 0, 0, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, + 67, 68, 69, 0, 4, 5, 6, 7, 8, 0, + 0, 0, 73, 9, 0, 0, 0, 0, 124, 75, + 76, 77, 0, 0, 0, 79, 125, 0, 0, 81, + 0, 0, 0, 657, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 0, 0, 0, 0, 29, 30, 122, 32, 33, 0, + 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 4, 5, 6, + 7, 8, 0, 0, 0, 73, 9, 0, 0, 0, + 0, 124, 75, 76, 77, 0, 0, 0, 79, 125, + 0, 0, 81, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, + 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, + 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 0, 0, 0, 0, 29, 30, 122, + 32, 33, 0, 0, 0, 0, 0, 35, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, + 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 73, 9, + 0, 0, 0, 0, 124, 75, 76, 77, 0, 0, + 0, 79, 125, 0, 0, 81, 0, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 29, 30, 122, 32, 33, 0, 0, 0, 0, 0, + 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 123, 0, + 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 0, 0, 124, 75, 76, + 77, 240, 241, 242, 79, 80, 0, 0, 81, 0, + 0, 0, 0, 84, 0, 0, 0, 243, 0, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 0, 267, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 0, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 240, 241, 242, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 243, 0, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 243, 570, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 0, 0, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 615, 243, 798, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 650, 243, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 733, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 0, 267, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 799, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 243, 268, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 243, 334, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 0, 267, 240, + 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 335, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 0, 267, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 341, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 0, 0, 0, 0, 0, + 0, 0, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 459, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 243, 473, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 474, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 0, 0, 0, 0, 0, 0, 0, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 479, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 240, 241, 242, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 243, 487, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 0, 267, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 664, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 0, 0, 0, + 0, 0, 0, 0, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 865, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, + 0, 243, 303, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 241, 242, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 372, 243, 555, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 0, 0, 0, 0, 0, 0, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 243, 576, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 0, 267, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 242, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 243, 0, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267 +}; + +static const yytype_int16 yycheck[] = +{ + 2, 2, 126, 25, 2, 2, 314, 712, 165, 14, + 15, 196, 49, 25, 391, 508, 393, 239, 717, 267, + 25, 384, 8, 218, 8, 480, 177, 8, 8, 283, + 8, 8, 26, 8, 8, 25, 8, 26, 8, 639, + 38, 8, 8, 80, 77, 14, 15, 52, 541, 8, + 8, 65, 54, 307, 25, 65, 32, 95, 75, 640, + 77, 760, 284, 0, 286, 65, 75, 75, 107, 74, + 26, 32, 77, 77, 65, 153, 147, 299, 300, 633, + 49, 161, 153, 161, 208, 75, 153, 238, 75, 311, + 161, 313, 314, 25, 162, 163, 163, 164, 153, 161, + 463, 77, 465, 115, 161, 659, 161, 32, 81, 65, + 75, 80, 77, 77, 161, 153, 77, 371, 65, 147, + 159, 123, 14, 15, 75, 153, 77, 160, 77, 75, + 65, 77, 147, 25, 285, 140, 287, 718, 153, 129, + 291, 292, 293, 75, 153, 161, 183, 147, 161, 166, + 164, 156, 77, 161, 164, 164, 147, 162, 170, 536, + 150, 161, 166, 153, 164, 155, 153, 75, 141, 874, + 164, 771, 162, 164, 163, 370, 75, 163, 164, 163, + 95, 598, 163, 163, 160, 163, 163, 156, 163, 163, + 162, 75, 162, 198, 775, 162, 162, 129, 203, 160, + 75, 166, 166, 162, 162, 77, 211, 212, 213, 908, + 215, 666, 217, 164, 183, 166, 32, 166, 150, 161, + 166, 153, 32, 155, 153, 227, 161, 239, 161, 164, + 66, 103, 161, 75, 203, 77, 98, 99, 153, 75, + 164, 77, 211, 212, 213, 267, 215, 147, 122, 98, + 99, 150, 122, 153, 153, 267, 673, 634, 675, 75, + 161, 77, 267, 161, 156, 519, 150, 77, 239, 153, + 147, 147, 284, 161, 286, 111, 153, 153, 161, 75, + 97, 98, 99, 161, 161, 161, 75, 299, 300, 75, + 75, 296, 77, 161, 657, 111, 267, 551, 552, 311, + 164, 313, 314, 165, 309, 559, 560, 684, 556, 563, + 75, 203, 163, 284, 150, 286, 165, 153, 32, 211, + 212, 213, 699, 215, 166, 161, 111, 65, 299, 300, + 166, 161, 337, 129, 150, 372, 147, 153, 340, 344, + 311, 147, 313, 314, 65, 161, 351, 53, 54, 75, + 166, 77, 660, 126, 150, 162, 163, 153, 75, 155, + 77, 97, 98, 99, 65, 150, 368, 368, 153, 65, + 368, 368, 70, 71, 65, 267, 161, 153, 75, 384, + 77, 166, 70, 71, 65, 111, 391, 103, 393, 401, + 51, 396, 163, 164, 111, 580, 122, 153, 583, 66, + 47, 48, 49, 372, 51, 898, 14, 15, 147, 594, + 147, 8, 167, 161, 111, 384, 567, 147, 153, 153, + 147, 126, 730, 87, 150, 75, 431, 153, 13, 13, + 807, 128, 809, 150, 163, 161, 153, 162, 660, 163, + 166, 75, 162, 162, 161, 337, 75, 164, 124, 166, + 124, 161, 167, 150, 167, 163, 153, 161, 463, 351, + 465, 8, 431, 95, 161, 13, 75, 844, 161, 166, + 111, 112, 113, 114, 115, 116, 474, 482, 483, 484, + 162, 479, 77, 488, 489, 490, 163, 162, 486, 494, + 647, 161, 384, 161, 463, 8, 465, 75, 875, 77, + 685, 652, 653, 508, 509, 162, 511, 13, 730, 125, + 515, 516, 164, 482, 483, 161, 167, 161, 161, 521, + 521, 75, 162, 521, 521, 161, 531, 904, 533, 167, + 161, 536, 167, 111, 556, 161, 541, 542, 161, 431, + 509, 162, 511, 167, 556, 167, 515, 516, 167, 153, + 75, 556, 13, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 147, 13, 163, 162, 104, + 162, 463, 150, 465, 109, 153, 111, 112, 113, 114, + 115, 116, 117, 161, 589, 556, 153, 164, 166, 8, + 482, 483, 484, 53, 54, 8, 488, 489, 490, 162, + 605, 606, 65, 65, 164, 790, 126, 163, 127, 13, + 163, 616, 163, 127, 8, 800, 75, 509, 167, 511, + 589, 161, 164, 515, 516, 630, 162, 109, 162, 634, + 165, 163, 817, 162, 639, 77, 821, 13, 162, 531, + 162, 162, 827, 126, 162, 830, 162, 162, 660, 75, + 835, 162, 657, 163, 839, 167, 77, 162, 26, 161, + 662, 13, 667, 665, 556, 161, 671, 167, 167, 163, + 672, 162, 677, 163, 679, 163, 127, 77, 13, 684, + 13, 13, 75, 164, 869, 164, 161, 26, 657, 660, + 814, 72, 163, 162, 699, 13, 164, 589, 667, 77, + 77, 13, 162, 163, 95, 163, 95, 164, 154, 711, + 165, 163, 147, 605, 163, 900, 721, 13, 730, 75, + 163, 75, 161, 26, 616, 163, 911, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 77, + 8, 739, 103, 344, 75, 75, 162, 745, 746, 509, + 111, 112, 113, 114, 115, 116, 611, 759, 611, 730, + 667, 468, 308, 590, 536, 657, 771, 53, 54, 530, + 797, 844, 777, 542, 349, 667, 81, 690, 746, 671, + 605, 604, 781, 203, 515, 677, 216, 679, 516, -1, + -1, 789, -1, -1, -1, -1, -1, 802, -1, -1, + -1, 806, 807, -1, 809, -1, 811, 44, 45, 46, + 47, 48, 49, -1, 51, -1, 14, 15, 823, -1, + -1, -1, -1, -1, -1, -1, -1, 25, -1, 721, + -1, 833, -1, 104, 836, -1, -1, -1, 109, 844, + 111, 112, 113, 114, 115, 116, 117, -1, -1, 854, + -1, -1, -1, 855, -1, 860, -1, 859, -1, -1, + -1, 863, -1, -1, 866, -1, 868, 865, 870, -1, + 875, -1, -1, 878, -1, -1, 162, 163, -1, -1, + -1, -1, -1, -1, -1, 777, -1, -1, 890, -1, + -1, -1, -1, 898, 165, -1, -1, -1, -1, 904, + -1, -1, -1, -1, 906, -1, -1, -1, -1, -1, + 802, 913, -1, -1, 806, -1, -1, -1, -1, 811, + 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, + -1, 823, 16, 17, 18, 19, 20, 21, 22, 23, + 24, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37, -1, 337, -1, -1, 156, -1, + 44, 45, 854, -1, -1, 49, -1, 51, 860, 351, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 104, -1, -1, -1, 878, 109, -1, 111, + 112, 113, 114, 115, 116, 117, 80, 81, -1, -1, + 9, 10, 11, -1, -1, 203, -1, -1, -1, -1, + 53, 54, -1, 211, 212, 213, 25, 215, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, 165, -1, 129, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, + -1, -1, -1, -1, 337, -1, -1, -1, -1, 267, + -1, -1, -1, -1, -1, -1, -1, -1, 351, -1, + -1, -1, -1, -1, -1, -1, 53, 54, 172, -1, + 174, -1, 176, 177, -1, -1, -1, 181, 182, 183, + -1, 185, 484, -1, -1, -1, 488, 489, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 163, 51, -1, -1, -1, -1, -1, -1, 95, -1, + -1, -1, 216, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 228, -1, 230, -1, -1, 531, + -1, -1, -1, 162, 238, -1, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, -1, -1, -1, 384, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, 484, -1, -1, -1, 488, 489, 490, -1, 303, + -1, 305, -1, 307, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 431, 616, -1, -1, -1, 322, -1, + 44, 45, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, -1, -1, -1, -1, 531, -1, + -1, 65, 346, -1, -1, 463, -1, 465, -1, 73, + 74, 75, -1, -1, -1, -1, -1, -1, -1, 83, + -1, -1, 53, 54, 482, 483, -1, 371, 372, 671, + -1, -1, -1, -1, -1, 677, -1, 679, -1, -1, + -1, 385, -1, -1, -1, -1, -1, 111, -1, -1, + -1, 509, -1, 511, -1, -1, -1, 515, 516, -1, + -1, 405, -1, -1, -1, 129, 130, 131, 132, 133, + 134, -1, 605, -1, -1, -1, -1, -1, -1, 721, + 144, -1, -1, 616, -1, -1, 150, 151, 152, 153, + 9, 10, 11, 157, -1, -1, -1, -1, 556, -1, + -1, -1, -1, -1, -1, 449, 25, -1, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 589, 51, -1, 478, 777, 480, 481, 671, -1, + -1, -1, -1, -1, 677, -1, 679, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 802, -1, -1, -1, 806, -1, -1, -1, -1, 811, + -1, -1, -1, -1, -1, 519, -1, -1, -1, -1, + -1, 823, -1, -1, -1, -1, 530, -1, 721, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 657, + -1, -1, -1, -1, -1, -1, -1, 551, 552, 667, + -1, 555, 854, -1, -1, 559, 560, -1, 860, 563, + -1, -1, -1, 567, 568, -1, -1, -1, -1, -1, + -1, -1, 576, -1, -1, -1, 878, -1, -1, -1, + -1, -1, -1, -1, 777, -1, 165, -1, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 802, + 51, -1, -1, 806, -1, -1, -1, -1, 811, 623, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 823, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 652, 653, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 854, 666, -1, -1, -1, -1, 860, -1, -1, + 3, 4, 5, 6, 7, -1, -1, -1, -1, 12, + -1, -1, -1, -1, 25, 878, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, 751, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, 104, 105, 106, -1, 108, 109, 110, 111, 112, + 113, -1, 786, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, 826, 156, 157, 158, -1, -1, 161, -1, + 163, 164, 165, 166, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, 104, 105, 106, -1, 108, 109, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, 165, 166, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, 104, 105, 106, -1, 108, + 109, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, -1, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, 165, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, 88, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, 94, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, 165, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, 92, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, -1, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, 165, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, 90, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, 165, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, 165, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, 26, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, -1, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, 26, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, -1, -1, -1, -1, -1, -1, 118, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, -1, 157, 158, + -1, -1, 161, -1, 163, 164, -1, 166, -1, 26, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, -1, -1, -1, -1, -1, + -1, 118, 119, 120, -1, -1, -1, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, -1, + 157, 158, -1, -1, 161, -1, 163, 164, -1, 166, + -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, -1, -1, -1, + -1, -1, -1, 118, 119, 120, -1, -1, -1, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, -1, 157, 158, -1, -1, 161, -1, 163, 164, + -1, 166, -1, 26, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, -1, + -1, -1, -1, -1, -1, 118, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, -1, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, -1, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, 32, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + -1, -1, -1, -1, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 103, 51, -1, -1, -1, -1, + -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, 3, 4, 5, + 6, 7, -1, -1, -1, 144, 12, -1, -1, -1, + -1, 150, 151, 152, 153, -1, -1, -1, 157, 158, + -1, 160, 161, -1, -1, -1, 32, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, + -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, + -1, -1, -1, 119, 120, -1, -1, -1, -1, -1, + -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, + 3, 4, 5, 6, 7, -1, -1, -1, 144, 12, + -1, -1, -1, -1, 150, 151, 152, 153, -1, -1, + -1, 157, 158, -1, -1, 161, -1, -1, -1, -1, + 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, -1, -1, -1, -1, -1, -1, -1, 111, -1, + -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, 3, 4, 5, 6, 7, -1, -1, + -1, 144, 12, -1, -1, -1, -1, 150, 151, 152, + 153, -1, -1, -1, 157, 158, -1, -1, 161, -1, + 163, -1, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, + 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, + -1, -1, -1, 73, 74, 75, 76, 77, -1, -1, + -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, + -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, + 120, -1, -1, -1, -1, -1, -1, -1, 128, 129, + 130, 131, 132, 133, 134, -1, 3, 4, 5, 6, + 7, -1, -1, -1, 144, 12, -1, -1, -1, -1, + 150, 151, 152, 153, -1, -1, -1, 157, 158, -1, + -1, 161, -1, 163, -1, -1, 166, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, 73, 74, 75, 76, + 77, -1, -1, -1, -1, -1, 83, 84, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 103, -1, -1, -1, + -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, + -1, -1, 119, 120, -1, -1, -1, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, 3, + 4, 5, 6, 7, -1, -1, -1, 144, 12, -1, + -1, -1, -1, 150, 151, 152, 153, -1, -1, -1, + 157, 158, -1, -1, 161, -1, 163, -1, -1, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, + 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, + 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, + 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, + 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 103, + -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, + -1, -1, -1, -1, -1, 119, 120, -1, -1, -1, + -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, + 134, -1, 3, 4, 5, 6, 7, -1, -1, -1, + 144, 12, -1, -1, -1, -1, 150, 151, 152, 153, + -1, -1, -1, 157, 158, 26, -1, 161, 162, -1, + -1, -1, 166, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, + -1, -1, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, + 111, -1, -1, -1, -1, -1, -1, -1, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, 3, 4, 5, 6, 7, + -1, -1, -1, 144, 12, -1, -1, -1, -1, 150, + 151, 152, 153, -1, -1, -1, 157, 158, -1, -1, + 161, -1, -1, -1, 32, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, + -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, + -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, -1, -1, -1, -1, 73, 74, 75, 76, 77, + -1, -1, -1, -1, -1, 83, 84, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 103, -1, -1, -1, -1, + -1, -1, -1, 111, -1, -1, -1, -1, -1, -1, + -1, 119, 120, -1, -1, -1, -1, -1, -1, -1, + 128, 129, 130, 131, 132, 133, 134, -1, 3, 4, + 5, 6, 7, -1, -1, -1, 144, 12, -1, -1, + -1, -1, 150, 151, 152, 153, -1, -1, -1, 157, + 158, -1, -1, 161, -1, -1, -1, 32, 166, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, -1, -1, -1, -1, 73, 74, + 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 103, -1, + -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, + -1, -1, -1, -1, 119, 120, -1, -1, -1, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, 3, 4, 5, 6, 7, -1, -1, -1, 144, + 12, -1, -1, -1, -1, 150, 151, 152, 153, -1, + -1, -1, 157, 158, -1, -1, 161, -1, -1, -1, + 32, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, + -1, 73, 74, 75, 76, 77, -1, -1, -1, -1, + -1, 83, 84, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 103, -1, -1, -1, -1, -1, -1, -1, 111, + -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, + -1, -1, -1, -1, -1, -1, 128, 129, 130, 131, + 132, 133, 134, -1, 3, 4, 5, 6, 7, -1, + -1, -1, 144, 12, -1, -1, -1, -1, 150, 151, + 152, 153, -1, -1, -1, 157, 158, -1, -1, 161, + -1, -1, -1, 32, 166, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + -1, -1, -1, -1, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, + -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, 3, 4, 5, + 6, 7, -1, -1, -1, 144, 12, -1, -1, -1, + -1, 150, 151, 152, 153, -1, -1, -1, 157, 158, + -1, -1, 161, -1, -1, -1, -1, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, + -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, + -1, -1, -1, 119, 120, -1, -1, -1, -1, -1, + -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, + 3, 4, 5, 6, 7, -1, -1, -1, 144, 12, + -1, -1, -1, -1, 150, 151, 152, 153, -1, -1, + -1, 157, 158, -1, -1, 161, -1, -1, -1, -1, + 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, -1, -1, -1, -1, -1, -1, -1, 111, -1, + -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 144, -1, -1, -1, -1, -1, 150, 151, 152, + 153, 9, 10, 11, 157, 158, -1, -1, 161, -1, + -1, -1, -1, 166, -1, -1, -1, 25, -1, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 25, 165, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, -1, -1, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 165, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 165, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, -1, -1, -1, -1, -1, -1, -1, -1, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 25, 165, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + -1, 51, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 163, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 25, 163, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, -1, -1, + -1, -1, -1, -1, -1, -1, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 25, 163, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, -1, 51, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 25, 163, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + -1, 51, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 163, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, -1, -1, -1, -1, -1, + -1, -1, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 162, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 25, 162, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, 162, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, -1, -1, -1, -1, -1, -1, -1, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, 162, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 25, 162, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, 162, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, -1, -1, -1, + -1, -1, -1, -1, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, 162, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, -1, -1, -1, + -1, -1, -1, -1, -1, 9, 10, 11, -1, -1, + -1, -1, -1, -1, 162, -1, -1, -1, -1, -1, + -1, 25, 127, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 127, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + -1, -1, -1, -1, -1, -1, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 25, 127, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, -1, 51, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 11, + 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 169, 170, 0, 3, 4, 5, 6, 7, 12, + 44, 45, 50, 52, 53, 54, 55, 56, 57, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 73, + 74, 75, 76, 77, 79, 83, 84, 85, 86, 87, + 89, 91, 93, 96, 100, 101, 102, 103, 104, 105, + 106, 108, 109, 110, 111, 112, 113, 118, 119, 120, + 121, 122, 123, 128, 129, 130, 131, 132, 133, 134, + 137, 138, 140, 144, 150, 151, 152, 153, 156, 157, + 158, 161, 163, 164, 166, 171, 172, 175, 178, 179, + 186, 187, 189, 190, 191, 193, 248, 249, 250, 253, + 254, 262, 265, 269, 270, 272, 273, 279, 280, 281, + 282, 283, 284, 285, 286, 291, 296, 298, 299, 300, + 301, 302, 75, 111, 150, 158, 250, 269, 269, 161, + 269, 269, 269, 269, 269, 269, 269, 75, 111, 150, + 153, 161, 171, 254, 272, 273, 281, 272, 269, 269, + 269, 269, 269, 269, 269, 269, 32, 269, 294, 295, + 122, 150, 153, 171, 254, 256, 257, 281, 284, 285, + 291, 269, 161, 260, 161, 26, 65, 65, 245, 269, + 178, 161, 161, 161, 161, 161, 163, 269, 163, 269, + 75, 75, 163, 248, 269, 273, 164, 269, 153, 171, + 173, 174, 77, 166, 220, 221, 77, 222, 250, 122, + 122, 161, 161, 161, 161, 161, 161, 153, 164, 171, + 171, 248, 269, 273, 249, 269, 301, 176, 164, 153, + 161, 8, 163, 75, 75, 163, 32, 188, 65, 147, + 9, 10, 11, 25, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 51, 163, 53, + 54, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 161, 147, 65, 126, 65, 164, 166, + 285, 65, 65, 65, 188, 269, 153, 171, 301, 147, + 147, 271, 273, 127, 167, 8, 267, 161, 261, 153, + 171, 147, 261, 147, 126, 285, 162, 269, 269, 269, + 287, 287, 8, 163, 87, 269, 246, 247, 269, 248, + 273, 75, 202, 269, 163, 163, 163, 13, 163, 163, + 176, 163, 171, 95, 8, 163, 164, 270, 273, 8, + 163, 13, 8, 163, 188, 184, 185, 273, 273, 297, + 273, 162, 128, 273, 292, 293, 294, 171, 170, 163, + 164, 161, 127, 162, 162, 162, 121, 165, 177, 178, + 186, 187, 269, 75, 32, 160, 217, 218, 219, 269, + 75, 124, 192, 124, 194, 75, 161, 287, 75, 279, + 285, 291, 269, 269, 269, 26, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 256, 32, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 217, 75, 279, 287, 75, 164, + 279, 288, 289, 290, 287, 269, 287, 287, 287, 162, + 171, 75, 75, 32, 269, 32, 269, 217, 192, 171, + 279, 279, 288, 162, 162, 167, 167, 269, 161, 162, + 163, 8, 95, 95, 13, 8, 162, 162, 44, 45, + 65, 83, 129, 150, 153, 171, 254, 262, 263, 264, + 165, 95, 75, 174, 269, 221, 263, 77, 161, 8, + 162, 8, 162, 162, 163, 161, 8, 162, 162, 161, + 165, 170, 217, 248, 273, 161, 165, 271, 269, 162, + 8, 13, 150, 153, 171, 255, 125, 195, 196, 255, + 164, 161, 25, 129, 155, 211, 212, 214, 215, 255, + 167, 161, 161, 285, 269, 26, 66, 273, 162, 161, + 161, 167, 269, 161, 276, 277, 278, 65, 164, 167, + 165, 167, 167, 167, 271, 271, 127, 162, 195, 258, + 26, 178, 269, 26, 178, 206, 246, 269, 273, 32, + 198, 273, 263, 75, 26, 178, 201, 26, 164, 203, + 263, 263, 263, 266, 268, 161, 153, 171, 147, 107, + 159, 180, 181, 183, 75, 165, 13, 211, 185, 163, + 273, 292, 293, 13, 217, 165, 162, 162, 219, 263, + 153, 171, 196, 164, 8, 223, 211, 215, 162, 8, + 32, 77, 160, 213, 217, 217, 269, 256, 217, 217, + 165, 217, 65, 65, 274, 287, 269, 32, 269, 164, + 126, 259, 176, 207, 162, 176, 163, 127, 197, 273, + 197, 13, 176, 163, 204, 163, 204, 127, 167, 8, + 267, 266, 171, 75, 161, 164, 181, 182, 183, 263, + 162, 162, 269, 162, 163, 171, 223, 255, 104, 109, + 111, 112, 113, 114, 115, 116, 117, 165, 224, 226, + 239, 240, 241, 242, 244, 162, 109, 251, 214, 213, + 77, 13, 162, 162, 261, 162, 162, 162, 287, 287, + 126, 275, 167, 165, 271, 223, 288, 208, 70, 71, + 209, 163, 88, 246, 198, 162, 162, 263, 94, 204, + 97, 98, 99, 204, 165, 263, 263, 162, 255, 176, + 251, 165, 75, 227, 255, 77, 243, 250, 242, 8, + 163, 26, 216, 161, 216, 32, 213, 13, 263, 167, + 167, 288, 165, 70, 71, 210, 161, 178, 163, 162, + 26, 178, 200, 200, 163, 97, 163, 269, 26, 163, + 205, 165, 127, 77, 165, 216, 13, 8, 163, 164, + 228, 13, 8, 163, 225, 75, 214, 164, 32, 77, + 252, 164, 213, 13, 263, 278, 161, 26, 72, 269, + 26, 178, 199, 176, 163, 205, 176, 263, 162, 164, + 263, 255, 75, 229, 230, 231, 232, 234, 235, 236, + 255, 263, 77, 188, 13, 176, 77, 8, 162, 176, + 13, 263, 269, 176, 163, 162, 176, 92, 176, 164, + 176, 165, 231, 163, 95, 154, 163, 147, 13, 75, + 263, 165, 32, 77, 165, 263, 162, 178, 90, 163, + 176, 165, 237, 242, 233, 255, 75, 263, 161, 77, + 26, 163, 165, 75, 8, 211, 176, 255, 162, 216, + 163, 164, 238, 176, 165 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 168, 169, 170, 170, 171, 171, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 173, 173, 174, 174, + 174, 174, 175, 175, 176, 176, 177, 177, 177, 177, + 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 180, 180, 181, 182, 182, 183, + 184, 184, 185, 186, 187, 188, 188, 189, 190, 190, + 191, 191, 191, 191, 192, 192, 193, 194, 194, 195, + 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, + 200, 201, 201, 202, 202, 203, 203, 203, 203, 204, + 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 212, 212, 212, 212, + 212, 212, 212, 212, 213, 213, 214, 214, 214, 215, + 215, 215, 216, 216, 217, 217, 218, 218, 219, 219, + 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, + 223, 223, 224, 224, 224, 225, 224, 226, 227, 227, + 228, 228, 229, 229, 230, 230, 231, 231, 232, 233, + 233, 234, 234, 235, 236, 236, 237, 237, 238, 238, + 239, 239, 240, 240, 241, 241, 242, 242, 242, 242, + 242, 242, 243, 243, 243, 243, 244, 244, 245, 245, + 246, 246, 247, 247, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, + 249, 250, 251, 251, 252, 252, 252, 252, 253, 253, + 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, + 255, 255, 255, 256, 256, 257, 257, 258, 258, 259, + 260, 260, 260, 261, 261, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 264, 265, 265, 265, + 265, 265, 265, 266, 266, 267, 267, 268, 268, 268, + 268, 269, 269, 270, 271, 272, 273, 273, 274, 274, + 275, 276, 276, 277, 278, 278, 278, 279, 279, 280, + 280, 281, 282, 282, 283, 283, 283, 284, 284, 284, + 284, 285, 285, 285, 286, 286, 287, 287, 288, 288, + 289, 289, 289, 290, 290, 291, 291, 292, 292, 293, + 293, 293, 294, 294, 295, 295, 295, 295, 295, 295, + 295, 295, 296, 296, 296, 296, 296, 296, 296, 297, + 297, 298, 298, 299, 299, 299, 299, 299, 300, 300, + 301, 301, 302, 302 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 2, 0, 1, 3, 1, 1, 1, + 4, 3, 5, 4, 3, 2, 3, 1, 1, 3, + 2, 4, 5, 4, 2, 0, 1, 1, 1, 4, + 1, 2, 1, 1, 1, 3, 7, 10, 5, 7, + 9, 5, 2, 3, 2, 3, 2, 3, 3, 3, + 3, 3, 1, 2, 2, 5, 8, 8, 5, 1, + 6, 5, 3, 3, 2, 1, 8, 0, 1, 4, + 1, 3, 1, 1, 1, 0, 1, 10, 7, 6, + 1, 2, 2, 1, 0, 2, 1, 0, 2, 0, + 2, 1, 3, 0, 2, 1, 2, 1, 4, 1, + 4, 1, 4, 3, 5, 3, 4, 4, 5, 0, + 5, 4, 1, 1, 1, 4, 0, 6, 0, 7, + 0, 2, 0, 3, 1, 0, 2, 3, 5, 4, + 4, 5, 7, 6, 2, 1, 0, 1, 2, 1, + 1, 1, 0, 2, 1, 0, 1, 3, 1, 2, + 2, 3, 1, 1, 2, 4, 3, 5, 1, 3, + 2, 0, 3, 2, 1, 0, 10, 3, 1, 3, + 1, 3, 0, 1, 1, 2, 2, 2, 3, 1, + 3, 1, 1, 3, 4, 3, 0, 1, 1, 3, + 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 3, 5, 1, 3, 5, 4, 3, 1, + 0, 1, 3, 1, 6, 3, 4, 6, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 1, 1, 5, 4, 3, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 2, 1, 10, 11, 2, 2, 4, + 4, 1, 0, 4, 3, 4, 1, 2, 4, 6, + 5, 6, 6, 6, 6, 4, 1, 1, 3, 2, + 1, 3, 2, 1, 1, 4, 1, 2, 0, 2, + 0, 2, 3, 0, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 2, 2, 2, 4, 3, 1, 3, 1, 1, 1, + 3, 2, 1, 0, 2, 0, 1, 5, 3, 3, + 1, 1, 1, 1, 1, 1, 5, 1, 2, 0, + 3, 4, 4, 3, 1, 1, 0, 1, 2, 3, + 3, 1, 4, 4, 1, 1, 1, 1, 3, 2, + 1, 4, 4, 1, 1, 4, 0, 1, 1, 1, + 4, 4, 1, 1, 3, 1, 2, 3, 1, 1, + 4, 0, 0, 2, 5, 3, 3, 1, 6, 4, + 4, 2, 4, 4, 2, 2, 4, 2, 2, 1, + 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, + 3, 8, 3, 3 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (yyscanner, root, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 + + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, yyscanner, root); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) +{ + FILE *yyo = yyoutput; + YYUSE (yyo); + YYUSE (yyscanner); + YYUSE (root); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) +{ + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, yyscanner, root); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, void* yyscanner, xhpast::Node** root) +{ + unsigned long int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , yyscanner, root); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, yyscanner, root); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +yystrlen (const char *yystr) +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void* yyscanner, xhpast::Node** root) +{ + YYUSE (yyvaluep); + YYUSE (yyscanner); + YYUSE (root); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (void* yyscanner, xhpast::Node** root) +{ +/* The lookahead symbol. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = yylex (&yylval, yyscanner); + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 210 "parser.y" /* yacc.c:1646 */ + { + *root = NNEW(n_PROGRAM)->appendChild((yyvsp[0])); + } +#line 3456 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 3: +#line 216 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 3464 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 4: +#line 219 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 3472 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 5: +#line 225 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_SYMBOL_NAME); + } +#line 3480 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 6: +#line 228 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-2]), (yyvsp[0])); + } +#line 3488 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 10: +#line 237 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + NMORE((yyval), (yyvsp[0])); + } +#line 3498 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 11: +#line 242 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_NAMESPACE, (yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild(NNEW(n_EMPTY)); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3510 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 12: +#line 249 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-4]), n_NAMESPACE, (yyvsp[0])); + (yyvsp[-4])->appendChild((yyvsp[-3])); + (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3521 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 13: +#line 255 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-3]), n_NAMESPACE, (yyvsp[0])); + (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); + NMORE((yyvsp[-1]), (yyvsp[0])); + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + } +#line 3534 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 14: +#line 263 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3544 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 15: +#line 268 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3553 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 16: +#line 275 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 3561 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 17: +#line 278 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 3570 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 18: +#line 285 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 3580 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 19: +#line 290 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + (yyval)->appendChild((yyvsp[-2])); + NTYPE((yyvsp[0]), n_STRING); + (yyval)->appendChild((yyvsp[0])); + } +#line 3591 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 20: +#line 296 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 3602 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 21: +#line 302 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + NTYPE((yyvsp[0]), n_STRING); + (yyval)->appendChild((yyvsp[0])); + } +#line 3614 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 22: +#line 312 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyval), (yyvsp[0])); + (yyval)->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) + ->appendChild((yyvsp[0]))); + } +#line 3626 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 23: +#line 319 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyval), n_CONSTANT_DECLARATION_LIST, (yyvsp[0])); + (yyval)->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) + ->appendChild((yyvsp[0]))); + } +#line 3638 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 24: +#line 329 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 3646 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 25: +#line 332 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 3654 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 29: +#line 341 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + NMORE((yyval), (yyvsp[0])); + } +#line 3664 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 31: +#line 350 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_STRING); + (yyval) = NNEW(n_LABEL); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3675 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 32: +#line 356 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); + } +#line 3683 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 33: +#line 359 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); + } +#line 3691 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 34: +#line 362 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLOSE_TAG); + } +#line 3699 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 35: +#line 368 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 3707 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 36: +#line 371 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + + (yyvsp[-6]) = NTYPE((yyvsp[-6]), n_IF); + (yyvsp[-6])->appendChild(NSPAN((yyvsp[-5]), n_CONTROL_CONDITION, (yyvsp[-3]))->appendChild((yyvsp[-4]))); + (yyvsp[-6])->appendChild((yyvsp[-2])); + + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChildren((yyvsp[-1])); + + // Hacks: merge a list of if (x) { } else if (y) { } into a single condition + // list instead of a condition tree. + + if ((yyvsp[0])->type == n_EMPTY) { + // Ignore. + } else if ((yyvsp[0])->type == n_ELSE) { + xhpast::Node *stype = (yyvsp[0])->firstChild()->firstChild(); + if (stype && stype->type == n_CONDITION_LIST) { + NTYPE(stype->firstChild(), n_ELSEIF); + stype->firstChild()->l_tok = (yyvsp[0])->l_tok; + (yyval)->appendChildren(stype); + } else { + (yyval)->appendChild((yyvsp[0])); + } + } else { + (yyval)->appendChild((yyvsp[0])); + } + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 3742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 37: +#line 405 "parser.y" /* yacc.c:1646 */ + { + + (yyval) = NNEW(n_CONDITION_LIST); + NTYPE((yyvsp[-9]), n_IF); + (yyvsp[-9])->appendChild(NSPAN((yyvsp[-8]), n_CONTROL_CONDITION, (yyvsp[-6]))->appendChild((yyvsp[-7]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + + (yyval)->appendChild((yyvsp[-9])); + (yyval)->appendChildren((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + NMORE((yyval), (yyvsp[0])); + } +#line 3762 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 38: +#line 420 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_WHILE); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3774 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 39: +#line 427 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-6]), n_DO_WHILE); + (yyvsp[-6])->appendChild((yyvsp[-5])); + (yyvsp[-6])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-6])); + NMORE((yyval), (yyvsp[0])); + } +#line 3787 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 40: +#line 435 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-8]), n_FOR); + + NSPAN((yyvsp[-7]), n_FOR_EXPRESSION, (yyvsp[-1])) + ->appendChild((yyvsp[-6])) + ->appendChild((yyvsp[-4])) + ->appendChild((yyvsp[-2])); + + (yyvsp[-8])->appendChild((yyvsp[-7])); + (yyvsp[-8])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-8])); + } +#line 3805 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 41: +#line 448 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_SWITCH); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3817 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 42: +#line 455 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_BREAK); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3829 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 43: +#line 462 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_BREAK); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3841 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 44: +#line 469 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_CONTINUE); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3853 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 45: +#line 476 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_CONTINUE); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3865 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 46: +#line 483 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_RETURN); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3877 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 47: +#line 490 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_RETURN); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3889 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 48: +#line 497 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_RETURN); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3901 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 49: +#line 504 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3911 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 50: +#line 509 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3921 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 51: +#line 514 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3931 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 52: +#line 519 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_INLINE_HTML); + (yyval) = (yyvsp[0]); + } +#line 3940 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 53: +#line 523 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3949 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 54: +#line 527 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3958 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 55: +#line 531 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-1])); + NMORE((yyvsp[-2]), (yyvsp[-4])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3969 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 56: +#line 538 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_FOREACH); + NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); + (yyvsp[-6])->appendChild((yyvsp[-5])); + if ((yyvsp[-2])->type == n_EMPTY) { + (yyvsp[-6])->appendChild((yyvsp[-2])); + (yyvsp[-6])->appendChild((yyvsp[-3])); + } else { + (yyvsp[-6])->appendChild((yyvsp[-3])); + (yyvsp[-6])->appendChild((yyvsp[-2])); + } + (yyvsp[-7])->appendChild((yyvsp[-6])); + + (yyvsp[-7])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); + } +#line 3991 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 57: +#line 556 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_FOREACH); + NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); + (yyvsp[-6])->appendChild((yyvsp[-5])); + if ((yyvsp[-2])->type == n_EMPTY) { + (yyvsp[-6])->appendChild((yyvsp[-2])); + (yyvsp[-6])->appendChild((yyvsp[-3])); + } else { + (yyvsp[-6])->appendChild((yyvsp[-3])); + (yyvsp[-6])->appendChild((yyvsp[-2])); + } + (yyvsp[-7])->appendChild((yyvsp[-6])); + (yyvsp[-7])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); + } +#line 4012 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 58: +#line 572 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_DECLARE); + (yyvsp[-4])->appendChild((yyvsp[-2])); + (yyvsp[-4])->appendChild((yyvsp[0])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 4023 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 59: +#line 578 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); + NMORE((yyval), (yyvsp[0])); + } +#line 4032 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 60: +#line 582 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_TRY); + (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + + (yyvsp[-5])->appendChild((yyvsp[-1])); + (yyvsp[-5])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-5])); + } +#line 4046 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 61: +#line 591 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_TRY); + (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]))); + + (yyvsp[-4])->appendChild(NNEW(n_CATCH_LIST)); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 4060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 62: +#line 600 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_THROW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + + } +#line 4073 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 63: +#line 608 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_GOTO); + NTYPE((yyvsp[-1]), n_STRING); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 4086 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 64: +#line 619 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4095 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 65: +#line 623 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CATCH_LIST); + (yyval)->appendChild((yyvsp[0])); +} +#line 4104 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 66: +#line 630 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_CATCH); + (yyvsp[-7])->appendChild((yyvsp[-5])); + (yyvsp[-7])->appendChild(NTYPE((yyvsp[-4]), n_VARIABLE)); + (yyvsp[-7])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyvsp[-7]), (yyvsp[0])); + (yyval) = (yyvsp[-7]); + } +#line 4117 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 67: +#line 641 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4125 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 69: +#line 648 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_FINALLY); + (yyvsp[-3])->appendChild((yyvsp[-1])); + NMORE((yyvsp[-3]), (yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 4136 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 70: +#line 657 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNSET_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 4145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 71: +#line 661 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4154 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 75: +#line 680 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4162 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 76: +#line 683 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_REFERENCE); + } +#line 4170 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 77: +#line 690 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NTYPE((yyvsp[-7]), n_STRING)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-6]), (yyvsp[-5]), (yyvsp[-4]))); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-9])); + } +#line 4187 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 78: +#line 706 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_DECLARATION); + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChild(NTYPE((yyvsp[-5]), n_CLASS_NAME)); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4203 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 79: +#line 717 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INTERFACE_DECLARATION); + (yyval)->appendChild(NNEW(n_CLASS_ATTRIBUTES)); + NMORE((yyval), (yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-4]), n_CLASS_NAME)); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4220 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 80: +#line 732 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + (yyval) = (yyvsp[0]); + } +#line 4229 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 81: +#line 736 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); + + (yyval) = (yyvsp[0]); + } +#line 4241 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 82: +#line 743 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); + + (yyval) = (yyvsp[0]); + } +#line 4253 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 83: +#line 750 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_ATTRIBUTES); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 4262 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 84: +#line 757 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4270 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 85: +#line 760 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_EXTENDS_LIST)->appendChild((yyvsp[0])); + } +#line 4278 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 87: +#line 770 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4286 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 88: +#line 773 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_EXTENDS_LIST); + (yyvsp[-1])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4296 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 89: +#line 781 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4304 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 90: +#line 784 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_IMPLEMENTS_LIST); + (yyvsp[-1])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4314 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 91: +#line 792 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_IMPLEMENTS_LIST)->appendChild((yyvsp[0])); + } +#line 4322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 92: +#line 795 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 4330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 93: +#line 801 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4338 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 94: +#line 804 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4346 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 96: +#line 811 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4356 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 98: +#line 820 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4366 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 100: +#line 829 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4376 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 102: +#line 838 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4386 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 103: +#line 846 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARE_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + (yyval) = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4397 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 104: +#line 852 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARE_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyval)); + (yyval) = (yyvsp[-4]); + } +#line 4410 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 105: +#line 863 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 4418 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 106: +#line 866 "parser.y" /* yacc.c:1646 */ + { + // ...why does this rule exist? + + NTYPE((yyvsp[-2]), n_STATEMENT); + (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-2])); + (yyval)->appendChildren((yyvsp[-1])); + NEXPAND((yyvsp[-3]), (yyval), (yyvsp[0])); + } +#line 4433 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 107: +#line 876 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[0])); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval) = (yyvsp[-2]); + } +#line 4443 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 108: +#line 881 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_STATEMENT); + (yyvsp[-4])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-3])); + (yyval)->appendChildren((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + NMORE((yyval), (yyvsp[-4])); + } +#line 4457 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 109: +#line 893 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 4465 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 110: +#line 896 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_CASE); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyvsp[-3])); + (yyval) = (yyvsp[-4]); + } +#line 4478 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 111: +#line 904 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_DEFAULT); + (yyvsp[-2])->appendChild((yyvsp[0])); + + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval) = (yyvsp[-3]); + } +#line 4490 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 115: +#line 920 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[0])); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval) = (yyvsp[-2]); + } +#line 4500 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 116: +#line 928 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + } +#line 4508 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 117: +#line 931 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_ELSEIF); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-5])->appendChild((yyvsp[-4])); + } +#line 4520 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 118: +#line 941 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + } +#line 4528 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 119: +#line 944 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_ELSEIF); + (yyvsp[-5])->appendChild((yyvsp[-3])); + (yyvsp[-5])->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-6])->appendChild((yyvsp[-5])); + } +#line 4540 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 120: +#line 954 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4548 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 121: +#line 957 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_ELSE); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4558 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 122: +#line 965 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4566 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 123: +#line 968 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ELSE); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4576 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 125: +#line 977 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST); + } +#line 4584 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 126: +#line 983 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4597 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 127: +#line 991 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4611 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 128: +#line 1000 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4625 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 129: +#line 1009 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4638 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 130: +#line 1017 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-3])->appendChild((yyval)); + } +#line 4651 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 131: +#line 1025 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 4665 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 132: +#line 1035 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-6])->appendChild((yyval)); + } +#line 4679 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 133: +#line 1045 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-5])->appendChild((yyval)); + } +#line 4692 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 134: +#line 1056 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_UNPACK); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 4701 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 135: +#line 1060 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 4709 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 136: +#line 1066 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4717 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 138: +#line 1070 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_NULLABLE_TYPE); + (yyval)->appendChild((yyvsp[0])); + } +#line 4726 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 139: +#line 1077 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4734 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 140: +#line 1080 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); + } +#line 4742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 141: +#line 1083 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); + } +#line 4750 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 142: +#line 1089 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4758 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 143: +#line 1092 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_RETURN); + (yyval)->appendChild((yyvsp[0])); + } +#line 4767 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 145: +#line 1100 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CALL_PARAMETER_LIST); + } +#line 4775 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 146: +#line 1106 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CALL_PARAMETER_LIST)->appendChild((yyvsp[0])); + } +#line 4783 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 147: +#line 1109 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 4791 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 149: +#line 1116 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNPACK)->appendChild((yyvsp[-1])); + } +#line 4799 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 150: +#line 1119 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 4808 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 151: +#line 1126 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4817 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 152: +#line 1130 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_GLOBAL_DECLARATION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 4826 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 153: +#line 1137 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 4834 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 154: +#line 1140 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_VARIABLE_VARIABLE); + (yyval)->appendChild((yyvsp[0])); + } +#line 4843 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 155: +#line 1144 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-3]), n_VARIABLE_VARIABLE); + (yyval)->appendChild((yyvsp[-1])); + } +#line 4852 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 156: +#line 1151 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 4865 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 157: +#line 1159 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 4878 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 158: +#line 1167 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4891 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 159: +#line 1175 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4904 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 160: +#line 1186 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 4912 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 161: +#line 1189 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 4920 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 162: +#line 1195 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChildren((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + NMORE((yyval), (yyvsp[0])); + } +#line 4933 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 163: +#line 1203 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 4942 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 164: +#line 1207 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4950 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 165: +#line 1210 "parser.y" /* yacc.c:1646 */ + { + /* empty */ + } +#line 4958 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 166: +#line 1212 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_DECLARATION); + NMORE((yyval), (yyvsp[-8])); + (yyval)->appendChild((yyvsp[-9])); + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChild(NTYPE((yyvsp[-5]), n_STRING)); + (yyval)->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4976 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 167: +#line 1228 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-2]), n_TRAIT_USE); + (yyval)->appendChildren((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + } +#line 4986 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 168: +#line 1236 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_USE_LIST)->appendChild((yyvsp[0])); + } +#line 4994 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 169: +#line 1239 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5002 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 170: +#line 1245 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5010 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 171: +#line 1248 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 5018 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 172: +#line 1254 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); + } +#line 5026 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 173: +#line 1257 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 5034 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 174: +#line 1263 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5043 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 175: +#line 1267 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 5052 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 176: +#line 1274 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 5060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 177: +#line 1277 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 5068 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 178: +#line 1283 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_INSTEADOF); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 5078 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 179: +#line 1291 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_REFERENCE_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5087 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 180: +#line 1295 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 5096 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 181: +#line 1302 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_METHOD_REFERENCE); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5105 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 182: +#line 1306 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 5113 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 183: +#line 1312 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_TRAIT_METHOD_REFERENCE); + NEXPAND((yyvsp[-2]), (yyvsp[-1]), NTYPE((yyvsp[0]), n_STRING)); + (yyval) = (yyvsp[-1]); + } +#line 5123 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 184: +#line 1320 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_AS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5134 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 185: +#line 1326 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_AS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 5145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 186: +#line 1335 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5153 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 187: +#line 1338 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5162 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 188: +#line 1346 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5170 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 189: +#line 1349 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 5178 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 191: +#line 1356 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5187 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 192: +#line 1363 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_MODIFIER_LIST); + } +#line 5195 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 193: +#line 1366 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_METHOD_MODIFIER_LIST); + (yyval) = (yyvsp[0]); + } +#line 5204 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 194: +#line 1373 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5213 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 195: +#line 1377 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5221 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 202: +#line 1392 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 5233 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 203: +#line 1399 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 5245 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 204: +#line 1406 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); + } +#line 5257 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 205: +#line 1413 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); + } +#line 5269 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 206: +#line 1423 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyval)); + + (yyval) = (yyvsp[-4]); + } +#line 5283 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 207: +#line 1432 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_CLASS_CONSTANT_DECLARATION_LIST); + (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + (yyvsp[-3])->appendChild((yyval)); + + (yyval) = (yyvsp[-3]); + } +#line 5297 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 208: +#line 1444 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5305 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 209: +#line 1447 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ECHO_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5314 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 210: +#line 1454 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 212: +#line 1462 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 213: +#line 1465 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EXPRESSION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5339 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 214: +#line 1472 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_LIST); + (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5352 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 215: +#line 1480 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5363 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 216: +#line 1486 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); + + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild((yyvsp[0])); + + (yyval)->appendChild((yyvsp[-1])); + } +#line 5378 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 217: +#line 1496 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-4]), n_OPERATOR)); + + NTYPE((yyvsp[-2]), n_NEW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[0])); + + NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE); + (yyvsp[-3])->appendChild((yyvsp[-2])); + + (yyval)->appendChild((yyvsp[-3])); + } +#line 5397 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 218: +#line 1510 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5407 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 219: +#line 1515 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5418 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 220: +#line 1521 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5429 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 221: +#line 1527 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5440 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 222: +#line 1533 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5451 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 223: +#line 1539 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5462 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 224: +#line 1545 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5473 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 225: +#line 1551 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5484 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 226: +#line 1557 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5495 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 227: +#line 1563 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5506 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 228: +#line 1569 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5517 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 229: +#line 1575 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5528 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 230: +#line 1581 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); + } +#line 5538 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 231: +#line 1586 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5548 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 232: +#line 1591 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); + } +#line 5558 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 233: +#line 1596 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5568 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 234: +#line 1601 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5579 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 235: +#line 1607 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5590 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 236: +#line 1613 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5601 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 237: +#line 1619 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5612 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 238: +#line 1625 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5623 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 239: +#line 1631 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5634 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 240: +#line 1637 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5645 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 241: +#line 1643 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5656 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 242: +#line 1649 "parser.y" /* yacc.c:1646 */ + { + + /* The concatenation operator generates n_CONCATENATION_LIST instead of + n_BINARY_EXPRESSION because we tend to run into stack depth issues in a + lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ + + if ((yyvsp[-2])->type == n_CONCATENATION_LIST && (yyvsp[0])->type == n_CONCATENATION_LIST) { + (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyvsp[-2])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } else if ((yyvsp[-2])->type == n_CONCATENATION_LIST) { + (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } else if ((yyvsp[0])->type == n_CONCATENATION_LIST) { + (yyval) = NNEW(n_CONCATENATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChildren((yyvsp[0])); + } else { + (yyval) = NNEW(n_CONCATENATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } + } +#line 5687 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 243: +#line 1675 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5698 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 244: +#line 1681 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5709 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 245: +#line 1687 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5720 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 246: +#line 1693 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5731 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 247: +#line 1699 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 248: +#line 1705 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5753 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 249: +#line 1711 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5764 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 250: +#line 1717 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5774 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 251: +#line 1722 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5784 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 252: +#line 1727 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5794 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 253: +#line 1732 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5804 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 254: +#line 1737 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5815 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 255: +#line 1743 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5826 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 256: +#line 1749 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5837 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 257: +#line 1755 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5848 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 258: +#line 1761 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5859 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 259: +#line 1767 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5870 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 260: +#line 1773 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5881 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 261: +#line 1779 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5892 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 262: +#line 1785 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5903 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 263: +#line 1791 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5914 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 266: +#line 1799 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TERNARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5927 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 267: +#line 1807 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TERNARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5940 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 268: +#line 1815 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5951 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 270: +#line 1822 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5961 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 271: +#line 1827 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5971 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 272: +#line 1832 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5981 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 273: +#line 1837 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5991 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 274: +#line 1842 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6001 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 275: +#line 1847 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6011 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 276: +#line 1852 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6021 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 277: +#line 1857 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6031 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 278: +#line 1862 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6041 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 279: +#line 1867 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_BACKTICKS_EXPRESSION); + (yyval) = (yyvsp[0]); + } +#line 6050 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 283: +#line 1874 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 284: +#line 1879 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyval) = (yyvsp[0]); + } +#line 6071 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 285: +#line 1888 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = (yyvsp[-9]); + } +#line 6088 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 286: +#line 1903 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + NMORE((yyvsp[-9]), (yyvsp[-10])); + + (yyval) = NNEW(n_FUNCTION_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[-10]), n_STRING)); + (yyvsp[-9])->appendChild((yyvsp[-10])); + + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = (yyvsp[-9]); + } +#line 6111 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 287: +#line 1924 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6122 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 288: +#line 1930 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6133 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 289: +#line 1936 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_YIELD); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 6144 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 290: +#line 1942 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_YIELD); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 6155 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 292: +#line 1955 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6163 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 293: +#line 1958 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_LEXICAL_VARIABLE_LIST); + (yyvsp[-3])->appendChildren((yyvsp[-1])); + (yyval) = (yyvsp[-3]); + } +#line 6173 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 294: +#line 1966 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 6181 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 295: +#line 1969 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval) = (yyvsp[-3])->appendChild((yyvsp[-1])); + } +#line 6191 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 296: +#line 1974 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 6200 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 297: +#line 1978 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); + (yyval)->appendChild((yyvsp[-1])); + } +#line 6211 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 298: +#line 1987 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6221 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 299: +#line 1993 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-3]), (yyvsp[-5])); + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6232 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 300: +#line 1999 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-3]), (yyvsp[-4])); + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6243 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 301: +#line 2006 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6256 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 302: +#line 2015 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6269 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 303: +#line 2024 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6282 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 304: +#line 2033 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6295 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 305: +#line 2041 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6305 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 306: +#line 2049 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6313 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 307: +#line 2052 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6321 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 308: +#line 2055 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 309: +#line 2059 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6339 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 310: +#line 2066 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6347 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 311: +#line 2069 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6356 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 312: +#line 2073 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6365 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 315: +#line 2088 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); + ii != (yyvsp[0])->children.end(); + ++ii) { + + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); + (yyval)->appendChild(*ii); + } + } +#line 6382 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 317: +#line 2104 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 6390 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 318: +#line 2107 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6398 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 319: +#line 2113 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 6406 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 320: +#line 2119 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6414 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 321: +#line 2122 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-1]), n_EMPTY, (yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6423 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 322: +#line 2126 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-2]); + } +#line 6433 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 323: +#line 2134 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6441 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 324: +#line 2137 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6449 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 325: +#line 2143 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); + } +#line 6457 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 326: +#line 2146 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); + } +#line 6465 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 327: +#line 2149 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_STRING_SCALAR); + } +#line 6473 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 328: +#line 2152 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6481 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 329: +#line 2155 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6489 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 330: +#line 2158 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6497 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 331: +#line 2161 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6505 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 332: +#line 2164 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6513 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 333: +#line 2167 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6521 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 334: +#line 2170 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6529 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 335: +#line 2173 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6537 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 336: +#line 2176 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_HEREDOC); + } +#line 6545 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 339: +#line 2184 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = (yyvsp[0]); + } +#line 6554 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 340: +#line 2188 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = (yyvsp[0]); + } +#line 6563 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 341: +#line 2192 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6573 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 342: +#line 2197 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6583 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 343: +#line 2202 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); + (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-3]); + } +#line 6593 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 344: +#line 2207 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); + (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-2]); + } +#line 6603 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 346: +#line 2216 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 6613 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 350: +#line 2227 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[0]), (yyvsp[-2])); + } +#line 6621 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 351: +#line 2230 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[0]), (yyvsp[-1])); + } +#line 6629 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 353: +#line 2237 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE_LIST); + } +#line 6637 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 354: +#line 2240 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 6645 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 355: +#line 2246 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6653 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 357: +#line 2257 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 6665 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 358: +#line 2264 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 6677 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 359: +#line 2271 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 6689 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 360: +#line 2278 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 6701 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 366: +#line 2308 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-2])); + + if ((yyvsp[-1])->type != n_EMPTY) { + (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); + (yyval)->appendChild((yyvsp[-1])); + } + + for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); + ii != (yyvsp[0])->children.end(); + ++ii) { + + if ((*ii)->type == n_CALL_PARAMETER_LIST) { + (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); + (yyval)->appendChild((*ii)); + } else { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); + (yyval)->appendChild((*ii)); + } + } + } +#line 6729 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 368: +#line 2335 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChildren((yyvsp[0])); + } +#line 6737 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 369: +#line 2338 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6745 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 370: +#line 2344 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + (yyval)->appendChild((yyvsp[-1])); + if ((yyvsp[0])->type != n_EMPTY) { + (yyval)->appendChild((yyvsp[0])); + } + } +#line 6757 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 371: +#line 2354 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6768 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 372: +#line 2360 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6779 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 373: +#line 2369 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6787 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 376: +#line 2377 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6795 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 378: +#line 2384 "parser.y" /* yacc.c:1646 */ + { + xhpast::Node *last = (yyvsp[-1]); + NMORE((yyvsp[-1]), (yyvsp[0])); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, (yyvsp[0])); + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6812 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 379: +#line 2399 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 6822 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 380: +#line 2404 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 6832 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 382: +#line 2416 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6843 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 383: +#line 2422 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6854 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 388: +#line 2438 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6862 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 389: +#line 2441 "parser.y" /* yacc.c:1646 */ + { + xhpast::Node *last = (yyvsp[-1]); + NMORE((yyvsp[-1]), (yyvsp[0])); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, (yyvsp[0])); + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6879 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 391: +#line 2457 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6890 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 392: +#line 2463 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6901 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 394: +#line 2473 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 6909 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 395: +#line 2476 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-3]), n_VARIABLE_EXPRESSION, (yyvsp[0])); + (yyvsp[-3])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-3]); + } +#line 6919 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 396: +#line 2484 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6927 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 397: +#line 2487 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 6935 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 400: +#line 2498 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6946 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 401: +#line 2504 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6957 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 403: +#line 2514 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_STRING); + (yyval) = (yyvsp[0]); + } +#line 6966 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 404: +#line 2518 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6974 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 405: +#line 2524 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); + } +#line 6982 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 406: +#line 2527 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[0]) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); + + xhpast::Node *last = (yyvsp[-1]); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6999 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 407: +#line 2542 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 7007 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 408: +#line 2545 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ASSIGNMENT_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 7016 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 410: +#line 2553 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_LIST); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 7025 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 411: +#line 2557 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 7033 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 412: +#line 2563 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE_LIST); + } +#line 7041 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 413: +#line 2566 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 7049 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 414: +#line 2572 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 7061 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 415: +#line 2579 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 7073 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 416: +#line 2586 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7085 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 417: +#line 2593 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7097 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 418: +#line 2600 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = (yyvsp[-5])->appendChild((yyval)); + } +#line 7109 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 419: +#line 2607 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = (yyvsp[-3])->appendChild((yyval)); + } +#line 7121 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 420: +#line 2614 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7133 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 421: +#line 2621 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 422: +#line 2631 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChildren((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7160 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 423: +#line 2641 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7175 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 424: +#line 2651 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7183 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 425: +#line 2654 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7191 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 426: +#line 2657 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7206 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 427: +#line 2667 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7214 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 428: +#line 2670 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7222 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 429: +#line 2676 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + (yyval)->appendChild((yyvsp[0])); + } +#line 7231 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 430: +#line 2680 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 7239 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 431: +#line 2686 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-2]); + } +#line 7249 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 432: +#line 2691 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 7257 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 433: +#line 2697 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7268 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 434: +#line 2703 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7279 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 435: +#line 2709 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING_SCALAR)); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7290 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 436: +#line 2715 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7301 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 437: +#line 2721 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7312 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 438: +#line 2730 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); + (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-3]); + } +#line 7322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 439: +#line 2735 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); + (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-2]); + } +#line 7332 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 440: +#line 2743 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_NEW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 7343 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 441: +#line 2750 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_DECLARATION); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + NTYPE((yyvsp[-7]), n_NEW); + (yyvsp[-7])->appendChild((yyval)); + (yyvsp[-7])->appendChild((yyvsp[-5])); + (yyval) = (yyvsp[-7]); + } +#line 7362 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 442: +#line 2767 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 7372 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 443: +#line 2772 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 7382 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + +#line 7386 "parser.yacc.cpp" /* yacc.c:1646 */ + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (yyscanner, root, YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (yyscanner, root, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, yyscanner, root); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, yyscanner, root); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (yyscanner, root, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, yyscanner, root); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, yyscanner, root); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + return yyresult; +} +#line 2779 "parser.y" /* yacc.c:1906 */ + + +const char* yytokname(int tok) { + if (tok < 255) { + return NULL; + } + return yytname[YYTRANSLATE(tok)]; +} +/* @generated */ diff --git a/support/xhpast/parser.yacc.hpp b/support/xhpast/parser.yacc.hpp new file mode 100644 index 00000000..f5b947f3 --- /dev/null +++ b/support/xhpast/parser.yacc.hpp @@ -0,0 +1,202 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef YY_XHPAST_PARSER_YACC_HPP_INCLUDED +# define YY_XHPAST_PARSER_YACC_HPP_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int xhpastdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + T_INCLUDE = 258, + T_INCLUDE_ONCE = 259, + T_EVAL = 260, + T_REQUIRE = 261, + T_REQUIRE_ONCE = 262, + T_LOGICAL_OR = 263, + T_LOGICAL_XOR = 264, + T_LOGICAL_AND = 265, + T_PRINT = 266, + T_PLUS_EQUAL = 267, + T_MINUS_EQUAL = 268, + T_MUL_EQUAL = 269, + T_DIV_EQUAL = 270, + T_CONCAT_EQUAL = 271, + T_MOD_EQUAL = 272, + T_AND_EQUAL = 273, + T_OR_EQUAL = 274, + T_XOR_EQUAL = 275, + T_SL_EQUAL = 276, + T_SR_EQUAL = 277, + T_COALESCE = 278, + T_BOOLEAN_OR = 279, + T_BOOLEAN_AND = 280, + T_IS_EQUAL = 281, + T_IS_NOT_EQUAL = 282, + T_IS_IDENTICAL = 283, + T_IS_NOT_IDENTICAL = 284, + T_SPACESHIP = 285, + T_IS_SMALLER_OR_EQUAL = 286, + T_IS_GREATER_OR_EQUAL = 287, + T_SL = 288, + T_SR = 289, + T_INSTANCEOF = 290, + T_INC = 291, + T_DEC = 292, + T_INT_CAST = 293, + T_DOUBLE_CAST = 294, + T_STRING_CAST = 295, + T_UNICODE_CAST = 296, + T_BINARY_CAST = 297, + T_ARRAY_CAST = 298, + T_OBJECT_CAST = 299, + T_BOOL_CAST = 300, + T_UNSET_CAST = 301, + T_NEW = 302, + T_CLONE = 303, + T_EXIT = 304, + T_IF = 305, + T_ELSEIF = 306, + T_ELSE = 307, + T_ENDIF = 308, + T_LNUMBER = 309, + T_DNUMBER = 310, + T_STRING = 311, + T_STRING_VARNAME = 312, + T_VARIABLE = 313, + T_NUM_STRING = 314, + T_INLINE_HTML = 315, + T_CHARACTER = 316, + T_BAD_CHARACTER = 317, + T_ENCAPSED_AND_WHITESPACE = 318, + T_CONSTANT_ENCAPSED_STRING = 319, + T_BACKTICKS_EXPR = 320, + T_ECHO = 321, + T_DO = 322, + T_WHILE = 323, + T_ENDWHILE = 324, + T_FOR = 325, + T_ENDFOR = 326, + T_FOREACH = 327, + T_ENDFOREACH = 328, + T_DECLARE = 329, + T_ENDDECLARE = 330, + T_AS = 331, + T_SWITCH = 332, + T_ENDSWITCH = 333, + T_CASE = 334, + T_DEFAULT = 335, + T_BREAK = 336, + T_CONTINUE = 337, + T_GOTO = 338, + T_FUNCTION = 339, + T_CONST = 340, + T_RETURN = 341, + T_TRY = 342, + T_CATCH = 343, + T_THROW = 344, + T_USE = 345, + T_GLOBAL = 346, + T_STATIC = 347, + T_ABSTRACT = 348, + T_FINAL = 349, + T_PRIVATE = 350, + T_PROTECTED = 351, + T_PUBLIC = 352, + T_VAR = 353, + T_UNSET = 354, + T_ISSET = 355, + T_EMPTY = 356, + T_HALT_COMPILER = 357, + T_CLASS = 358, + T_INTERFACE = 359, + T_EXTENDS = 360, + T_IMPLEMENTS = 361, + T_OBJECT_OPERATOR = 362, + T_DOUBLE_ARROW = 363, + T_LIST = 364, + T_ARRAY = 365, + T_CLASS_C = 366, + T_METHOD_C = 367, + T_FUNC_C = 368, + T_LINE = 369, + T_FILE = 370, + T_COMMENT = 371, + T_DOC_COMMENT = 372, + T_OPEN_TAG = 373, + T_OPEN_TAG_WITH_ECHO = 374, + T_OPEN_TAG_FAKE = 375, + T_CLOSE_TAG = 376, + T_WHITESPACE = 377, + T_START_HEREDOC = 378, + T_END_HEREDOC = 379, + T_HEREDOC = 380, + T_DOLLAR_OPEN_CURLY_BRACES = 381, + T_CURLY_OPEN = 382, + T_PAAMAYIM_NEKUDOTAYIM = 383, + T_BINARY_DOUBLE = 384, + T_BINARY_HEREDOC = 385, + T_NAMESPACE = 386, + T_NS_C = 387, + T_DIR = 388, + T_NS_SEPARATOR = 389, + T_INSTEADOF = 390, + T_CALLABLE = 391, + T_TRAIT = 392, + T_TRAIT_C = 393, + T_YIELD = 394, + T_FINALLY = 395, + T_ELLIPSIS = 396 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int xhpastparse (void* yyscanner, xhpast::Node** root); + +#endif /* !YY_XHPAST_PARSER_YACC_HPP_INCLUDED */ +/* @generated */ diff --git a/support/xhpast/parser_nodes.php b/support/xhpast/parser_nodes.php new file mode 100644 index 00000000..b2b1b834 --- /dev/null +++ b/support/xhpast/parser_nodes.php @@ -0,0 +1,127 @@ + 'n_PROGRAM', + 9001 => 'n_SYMBOL_NAME', + 9002 => 'n_HALT_COMPILER', + 9003 => 'n_NAMESPACE', + 9004 => 'n_STATEMENT', + 9005 => 'n_EMPTY', + 9006 => 'n_STATEMENT_LIST', + 9007 => 'n_OPEN_TAG', + 9008 => 'n_CLOSE_TAG', + 9009 => 'n_USE_LIST', + 9010 => 'n_USE', + 9011 => 'n_CONSTANT_DECLARATION_LIST', + 9012 => 'n_CONSTANT_DECLARATION', + 9013 => 'n_STRING', + 9014 => 'n_LABEL', + 9015 => 'n_CONDITION_LIST', + 9016 => 'n_CONTROL_CONDITION', + 9017 => 'n_IF', + 9018 => 'n_ELSEIF', + 9019 => 'n_ELSE', + 9020 => 'n_WHILE', + 9021 => 'n_DO_WHILE', + 9022 => 'n_FOR', + 9023 => 'n_FOR_EXPRESSION', + 9024 => 'n_SWITCH', + 9025 => 'n_BREAK', + 9026 => 'n_CONTINUE', + 9027 => 'n_RETURN', + 9028 => 'n_GLOBAL_DECLARATION_LIST', + 9029 => 'n_GLOBAL_DECLARATION', + 9030 => 'n_STATIC_DECLARATION_LIST', + 9031 => 'n_STATIC_DECLARATION', + 9032 => 'n_ECHO_LIST', + 9033 => 'n_ECHO', + 9034 => 'n_INLINE_HTML', + 9035 => 'n_UNSET_LIST', + 9036 => 'n_UNSET', + 9037 => 'n_FOREACH', + 9038 => 'n_FOREACH_EXPRESSION', + 9039 => 'n_THROW', + 9040 => 'n_GOTO', + 9041 => 'n_TRY', + 9042 => 'n_CATCH_LIST', + 9043 => 'n_CATCH', + 9044 => 'n_DECLARE', + 9045 => 'n_DECLARE_DECLARATION_LIST', + 9046 => 'n_DECLARE_DECLARATION', + 9047 => 'n_VARIABLE', + 9048 => 'n_REFERENCE', + 9049 => 'n_VARIABLE_REFERENCE', + 9050 => 'n_FUNCTION_DECLARATION', + 9051 => 'n_CLASS_DECLARATION', + 9052 => 'n_CLASS_ATTRIBUTES', + 9053 => 'n_EXTENDS', + 9054 => 'n_EXTENDS_LIST', + 9055 => 'n_IMPLEMENTS_LIST', + 9056 => 'n_INTERFACE_DECLARATION', + 9057 => 'n_CASE', + 9058 => 'n_DEFAULT', + 9059 => 'n_DECLARATION_PARAMETER_LIST', + 9060 => 'n_DECLARATION_PARAMETER', + 9061 => 'n_TYPE_NAME', + 9062 => 'n_VARIABLE_VARIABLE', + 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', + 9064 => 'n_CLASS_MEMBER_DECLARATION', + 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', + 9066 => 'n_CLASS_CONSTANT_DECLARATION', + 9067 => 'n_METHOD_DECLARATION', + 9068 => 'n_METHOD_MODIFIER_LIST', + 9069 => 'n_FUNCTION_MODIFIER_LIST', + 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', + 9071 => 'n_EXPRESSION_LIST', + 9072 => 'n_LIST', + 9073 => 'n_ASSIGNMENT', + 9074 => 'n_NEW', + 9075 => 'n_UNARY_PREFIX_EXPRESSION', + 9076 => 'n_UNARY_POSTFIX_EXPRESSION', + 9077 => 'n_BINARY_EXPRESSION', + 9078 => 'n_TERNARY_EXPRESSION', + 9079 => 'n_CAST_EXPRESSION', + 9080 => 'n_CAST', + 9081 => 'n_OPERATOR', + 9082 => 'n_ARRAY_LITERAL', + 9083 => 'n_EXIT_EXPRESSION', + 9084 => 'n_BACKTICKS_EXPRESSION', + 9085 => 'n_LEXICAL_VARIABLE_LIST', + 9086 => 'n_NUMERIC_SCALAR', + 9087 => 'n_STRING_SCALAR', + 9088 => 'n_MAGIC_SCALAR', + 9089 => 'n_CLASS_STATIC_ACCESS', + 9090 => 'n_CLASS_NAME', + 9091 => 'n_MAGIC_CLASS_KEYWORD', + 9092 => 'n_OBJECT_PROPERTY_ACCESS', + 9093 => 'n_ARRAY_VALUE_LIST', + 9094 => 'n_ARRAY_VALUE', + 9095 => 'n_CALL_PARAMETER_LIST', + 9096 => 'n_VARIABLE_EXPRESSION', + 9097 => 'n_INCLUDE_FILE', + 9098 => 'n_HEREDOC', + 9099 => 'n_FUNCTION_CALL', + 9100 => 'n_INDEX_ACCESS', + 9101 => 'n_ASSIGNMENT_LIST', + 9102 => 'n_METHOD_CALL', + 9103 => 'n_CONCATENATION_LIST', + 9104 => 'n_PARENTHETICAL_EXPRESSION', + 9105 => 'n_TRAIT_USE', + 9106 => 'n_TRAIT_USE_LIST', + 9107 => 'n_TRAIT_ADAPTATION_LIST', + 9108 => 'n_TRAIT_INSTEADOF', + 9109 => 'n_TRAIT_REFERENCE_LIST', + 9110 => 'n_TRAIT_METHOD_REFERENCE', + 9111 => 'n_TRAIT_AS', + 9112 => 'n_YIELD', + 9113 => 'n_FINALLY', + 9114 => 'n_UNPACK', + 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', + ); +} diff --git a/support/xhpast/scanner.l b/support/xhpast/scanner.l new file mode 100644 index 00000000..1da3a7af --- /dev/null +++ b/support/xhpast/scanner.l @@ -0,0 +1,488 @@ +%{ +#include "ast.hpp" +#define push_state(s) xhp_new_push_state(s, yyg) +#define pop_state() xhp_new_pop_state(yyg) +#define set_state(s) xhp_set_state(s, yyg) + +#define pttok(t, txt) \ + yyextra->token_list.push_back( \ + new xhpast::Token(t, txt, yyextra->list_size++)); \ + *yylval = new xhpast::Node(0, yyextra->list_size - 1); +#define ptok(t) \ + pttok(t, yytext); +#define tok(t) \ + ptok(t); \ + return yy_token(t, yyg) +#define YY_USER_INIT \ + if (yyextra->insert_token) { \ + yyg->yy_init = 0; \ + int ft = yyextra->insert_token; \ + yyextra->insert_token = 0; \ + return yy_token(ft, yyg); \ + } + +using namespace std; + +const char* yytokname(int tok); +static int yy_token(int tok, struct yyguts_t* yyg); +static void yy_scan_newlines(const char* text, struct yyguts_t* yyg); + +%} + +%option prefix="xhpast" +%option reentrant + /* PHP allows IF or if */ +%option case-insensitive +%option noyywrap nodefault +%option stack +%option bison-bridge +%option 8bit + + /* The different lexing states. Note that the transitions are done either + * in the lex actions, or in a generic manner in yy_token(). */ +%s PHP +%s PHP_COMMENT +%s PHP_EOL_COMMENT +%s PHP_DOC_COMMENT +%s PHP_HEREDOC_START +%s PHP_HEREDOC_NSTART +%s PHP_HEREDOC_NEWLINE +%s PHP_NO_RESERVED_WORDS +%s PHP_NO_RESERVED_WORDS_PERSIST +%s PHP_ + +LNUM [0-9]+ +DNUM ([0-9]*"."[0-9]+)|([0-9]+"."[0-9]*) +EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM}) +HNUM "0x"[0-9a-fA-F]+ +BNUM "0b"[01]+ + +LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* +BYTE (.|\n) + +WHITESPACE [ \n\r\t]+ +TABS_AND_SPACES [ \t]* +NEWLINE ("\r\n"|"\n"|"\r") + +%% + + /* Open / close PHP + inline HTML */ +{ + "{ + ("?>"|""){NEWLINE}? { + yy_scan_newlines(yytext + 2, yyg); + tok(T_CLOSE_TAG); + } +} + + /* Comments and whitespace */ +{ + "#"|"//" { + push_state(PHP_EOL_COMMENT); + yymore(); + } + "/**"{WHITESPACE} { + yy_scan_newlines(yytext + 3, yyg); + push_state(PHP_DOC_COMMENT); + yymore(); + } + "/*" { + push_state(PHP_COMMENT); + yymore(); + } + {WHITESPACE}+ { + yy_scan_newlines(yytext, yyg); + ptok(T_WHITESPACE); + } +} +<> { + ptok(T_COMMENT); + pop_state(); +} +{ + {NEWLINE} { + ++yyextra->lineno; + ptok(T_COMMENT); + pop_state(); + } + [^\r\n?]+ yymore(); + "?>" { + yyless(yyleng - 2); + ptok(T_COMMENT); + pop_state(); + } + . yymore(); +} +{ + {NEWLINE} { + ++yyextra->lineno; + yymore(); + } + [^*\r\n]+|"*" yymore(); +} +"*/" { + ptok(T_DOC_COMMENT); + pop_state(); +} +<> { + ptok(T_DOC_COMMENT); + pop_state(); +} +"*/" { + ptok(T_COMMENT); + pop_state(); +} +<> { + ptok(T_COMMENT); + pop_state(); +} + + /* Reserved words */ +{ + include tok(T_INCLUDE); + include_once tok(T_INCLUDE_ONCE); + eval tok(T_EVAL); + require tok(T_REQUIRE); + require_once tok(T_REQUIRE_ONCE); + or tok(T_LOGICAL_OR); + xor tok(T_LOGICAL_XOR); + and tok(T_LOGICAL_AND); + print tok(T_PRINT); + instanceof tok(T_INSTANCEOF); + new tok(T_NEW); + clone tok(T_CLONE); + exit tok(T_EXIT); + if tok(T_IF); + elseif tok(T_ELSEIF); + else tok(T_ELSE); + endif tok(T_ENDIF); + echo tok(T_ECHO); + do tok(T_DO); + while tok(T_WHILE); + endwhile tok(T_ENDWHILE); + for tok(T_FOR); + endfor tok(T_ENDFOR); + foreach tok(T_FOREACH); + endforeach tok(T_ENDFOREACH); + declare tok(T_DECLARE); + enddeclare tok(T_ENDDECLARE); + as tok(T_AS); + switch tok(T_SWITCH); + endswitch tok(T_ENDSWITCH); + case tok(T_CASE); + default tok(T_DEFAULT); + break tok(T_BREAK); + continue tok(T_CONTINUE); + goto tok(T_GOTO); + function tok(T_FUNCTION); + const tok(T_CONST); + return tok(T_RETURN); + try tok(T_TRY); + catch tok(T_CATCH); + throw tok(T_THROW); + use tok(T_USE); + global tok(T_GLOBAL); + static tok(T_STATIC); + abstract tok(T_ABSTRACT); + final tok(T_FINAL); + private tok(T_PRIVATE); + protected tok(T_PROTECTED); + public tok(T_PUBLIC); + var tok(T_VAR); + unset tok(T_UNSET); + isset tok(T_ISSET); + empty tok(T_EMPTY); + __halt_compiler tok(T_HALT_COMPILER); + class tok(T_CLASS); + interface tok(T_INTERFACE); + extends tok(T_EXTENDS); + implements tok(T_IMPLEMENTS); + list tok(T_LIST); + array tok(T_ARRAY); + __class__ tok(T_CLASS_C); + __method__ tok(T_METHOD_C); + __function__ tok(T_FUNC_C); + __line__ tok(T_LINE); + __file__ tok(T_FILE); + namespace tok(T_NAMESPACE); + __namespace__ tok(T_NS_C); + __dir__ tok(T_DIR); + insteadof tok(T_INSTEADOF); + callable tok(T_CALLABLE); + trait tok(T_TRAIT); + __trait__ tok(T_TRAIT_C); + yield tok(T_YIELD); + finally tok(T_FINALLY); +} + + /* Operators */ +{ + "+=" tok(T_PLUS_EQUAL); + "-=" tok(T_MINUS_EQUAL); + "*=" tok(T_MUL_EQUAL); + "/=" tok(T_DIV_EQUAL); + ".=" tok(T_CONCAT_EQUAL); + "%=" tok(T_MOD_EQUAL); + "&=" tok(T_AND_EQUAL); + "|=" tok(T_OR_EQUAL); + "^=" tok(T_XOR_EQUAL); + "<<=" tok(T_SL_EQUAL); + ">>=" tok(T_SR_EQUAL); + "||" tok(T_BOOLEAN_OR); + "&&" tok(T_BOOLEAN_AND); + "==" tok(T_IS_EQUAL); + "!="|"<>" tok(T_IS_NOT_EQUAL); + "===" tok(T_IS_IDENTICAL); + "!==" tok(T_IS_NOT_IDENTICAL); + "<=" tok(T_IS_SMALLER_OR_EQUAL); + ">=" tok(T_IS_GREATER_OR_EQUAL); + "<<" tok(T_SL); + ">>" tok(T_SR); + "++" tok(T_INC); + "--" tok(T_DEC); + "->" tok(T_OBJECT_OPERATOR); + "=>" tok(T_DOUBLE_ARROW); + "::" tok(T_PAAMAYIM_NEKUDOTAYIM); + "\\" tok(T_NS_SEPARATOR); + "..." tok(T_ELLIPSIS); + "??" tok(T_COALESCE); + "<=>" tok(T_SPACESHIP); +} + + /* Casts */ +{ + "("{TABS_AND_SPACES}(int|integer){TABS_AND_SPACES}")" tok(T_INT_CAST); + "("{TABS_AND_SPACES}(real|double|float){TABS_AND_SPACES}")" tok(T_DOUBLE_CAST); + "("{TABS_AND_SPACES}(string|binary){TABS_AND_SPACES}")" tok(T_STRING_CAST); + "("{TABS_AND_SPACES}array{TABS_AND_SPACES}")" tok(T_ARRAY_CAST); + "("{TABS_AND_SPACES}object{TABS_AND_SPACES}")" tok(T_OBJECT_CAST); + "("{TABS_AND_SPACES}(bool|boolean){TABS_AND_SPACES}")" tok(T_BOOL_CAST); + "("{TABS_AND_SPACES}unset{TABS_AND_SPACES}")" tok(T_UNSET_CAST); +} + + /* Scalars (parsing these doesn't really matter since we just pass them + through literally) */ +{ + {LNUM}|{HNUM}|{BNUM} tok(T_LNUMBER); + {DNUM}|{EXPONENT_DNUM} tok(T_DNUMBER); + {LABEL} tok(T_STRING); + "$"{LABEL} tok(T_VARIABLE); + b?'(\\.|\\\n|[^\\']+)*'|b?\"(\\.|\\\n|[^\\\"]+)*\" { + yy_scan_newlines(yytext, yyg); + tok(T_CONSTANT_ENCAPSED_STRING); + } + `[^`]*` { + yy_scan_newlines(yytext, yyg); + tok(T_BACKTICKS_EXPR); + } +} + + /* (HERE|NOW)DOC's */ +b?"<<<"{TABS_AND_SPACES} { + push_state(PHP_HEREDOC_START); + yyextra->heredoc_yyleng = yyleng; + yymore(); +} +{ + "'"{LABEL}"'"|\"{LABEL}\" { + // Create a new string for the heredoc label. Since we're using yymore above + // yytext will actually start at the "<<<" and not the label. Use of + // heredoc_yyleng jumps past that. Then we add 1 to get past the " or '. The + // match is similar to calculate length. + yyextra->heredoc_label = string( + yytext + yyextra->heredoc_yyleng + 1, + yyleng - yyextra->heredoc_yyleng - 2); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + {LABEL} { + yyextra->heredoc_label = string(yytext + yyextra->heredoc_yyleng); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } +} +{NEWLINE} { + yyextra->heredoc_yyleng = yyleng; + set_state(PHP_HEREDOC_NEWLINE); + yymore(); +} +{ + {LABEL};?{NEWLINE} { + if (strncmp( + yyextra->heredoc_label.c_str(), + yytext + yyextra->heredoc_yyleng, yyextra->heredoc_label.size()) == 0) { + + switch (yytext[yyextra->heredoc_yyleng + yyextra->heredoc_label.size()]) { + case ';': case '\n': case '\r': + yyless( + yyleng - ( + yyleng - + yyextra->heredoc_yyleng - + yyextra->heredoc_label.size())); + pop_state(); + tok(T_HEREDOC); + } + } + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + [^\r\n]+ { + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + {NEWLINE} { + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } +} + + /* Other */ +<*>{BYTE} { + tok(yytext[0]); + // fix unused function warnings + yy_top_state(NULL); + yyunput(0, 0, NULL); +} + +%% + +#ifdef DEBUG +static const char* yy_state_name(int state) { + switch (state) { + case INITIAL: + return "INITIAL"; + case PHP: + return "PHP"; + case PHP_COMMENT: + return "PHP_COMMENT"; + case PHP_EOL_COMMENT: + return "PHP_EOL_COMMENT"; + case PHP_DOC_COMMENT: + return "PHP_DOC_COMMENT"; + case PHP_HEREDOC_START: + return "PHP_HEREDOC_START"; + case PHP_HEREDOC_NSTART: + return "PHP_HEREDOC_NSTART"; + case PHP_HEREDOC_NEWLINE: + return "PHP_HEREDOC_NEWLINE"; + case PHP_NO_RESERVED_WORDS: + return "PHP_NO_RESERVED_WORDS"; + case PHP_NO_RESERVED_WORDS_PERSIST: + return "PHP_NO_RESERVED_WORDS_PERSIST"; + default: + return "???"; + } +} + +static void yy_log_token(int tok) { + const char* tokname = yytokname(tok); + if (tokname) { + fprintf(stderr, "--> %s\n", tokname); + } else { + fprintf(stderr, "--> '%c'\n", tok); + } +} +#endif + +static int yy_token(int tok, yyguts_t* yyg) { + if (YY_START == PHP_NO_RESERVED_WORDS) { + pop_state(); + } + + switch (tok) { + case T_OPEN_TAG: + case T_OPEN_TAG_WITH_ECHO: + case T_OPEN_TAG_FAKE: + push_state(PHP); + break; + + case T_CLOSE_TAG: + pop_state(); + // We need to return a ';', not a T_CLOSE_TAG, because a construct like + // "" is valid and there are about a billion parser rules + // which terminate with ';' so making a new rule like + // "semicolon_or_close_tag" would be hard. The token in yylval has the + // correct type and value, we just don't generate a node. + return ';'; + + // In PHP it's ok to use keywords such as 'if' as field names + // or function names. + case T_OBJECT_OPERATOR: + case T_FUNCTION: + push_state(PHP_NO_RESERVED_WORDS); + break; + + case T_PAAMAYIM_NEKUDOTAYIM: + push_state(PHP_NO_RESERVED_WORDS); + break; + } +#ifdef DEBUG + yy_log_token(tok); +#endif + return yyextra->last_token = tok; +} + +static inline void yy_scan_newlines(const char* text, struct yyguts_t* yyg) { + for (; *text; ++text) { + if (*text == '\r') { + if (text[1] == '\n') { + ++text; + } + ++yyextra->lineno; + } else if (*text == '\n') { + ++yyextra->lineno; + } + } +} + +void xhp_new_push_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf( + stderr, + "--> PUSH(%s -> %s)\n", + yy_state_name(YY_START), + yy_state_name(s)); +#endif + yy_push_state(s, yyg); +} + +void xhp_new_pop_state(struct yyguts_t* yyg) { +#ifdef DEBUG + int s = YY_START; +#endif + yy_pop_state(yyg); +#ifdef DEBUG + fprintf( + stderr, + "--> POP(%s -> %s)\n", + yy_state_name(s), + yy_state_name(YY_START)); +#endif +} + +void xhp_set_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf(stderr, "--> SET(%s)\n", yy_state_name(s)); +#endif + BEGIN(s); +} diff --git a/support/xhpast/scanner.lex.cpp b/support/xhpast/scanner.lex.cpp new file mode 100644 index 00000000..644ff1eb --- /dev/null +++ b/support/xhpast/scanner.lex.cpp @@ -0,0 +1,27213 @@ +#line 2 "scanner.lex.cpp" + +#line 4 "scanner.lex.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define xhpast_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer xhpast_create_buffer +#endif + +#ifdef yy_delete_buffer +#define xhpast_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer xhpast_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define xhpast_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer xhpast_scan_buffer +#endif + +#ifdef yy_scan_string +#define xhpast_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string xhpast_scan_string +#endif + +#ifdef yy_scan_bytes +#define xhpast_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes xhpast_scan_bytes +#endif + +#ifdef yy_init_buffer +#define xhpast_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer xhpast_init_buffer +#endif + +#ifdef yy_flush_buffer +#define xhpast_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer xhpast_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define xhpast_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state xhpast_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define xhpast_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer xhpast_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define xhpastpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state xhpastpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define xhpastpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state xhpastpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define xhpastensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack xhpastensure_buffer_stack +#endif + +#ifdef yylex +#define xhpastlex_ALREADY_DEFINED +#else +#define yylex xhpastlex +#endif + +#ifdef yyrestart +#define xhpastrestart_ALREADY_DEFINED +#else +#define yyrestart xhpastrestart +#endif + +#ifdef yylex_init +#define xhpastlex_init_ALREADY_DEFINED +#else +#define yylex_init xhpastlex_init +#endif + +#ifdef yylex_init_extra +#define xhpastlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra xhpastlex_init_extra +#endif + +#ifdef yylex_destroy +#define xhpastlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy xhpastlex_destroy +#endif + +#ifdef yyget_debug +#define xhpastget_debug_ALREADY_DEFINED +#else +#define yyget_debug xhpastget_debug +#endif + +#ifdef yyset_debug +#define xhpastset_debug_ALREADY_DEFINED +#else +#define yyset_debug xhpastset_debug +#endif + +#ifdef yyget_extra +#define xhpastget_extra_ALREADY_DEFINED +#else +#define yyget_extra xhpastget_extra +#endif + +#ifdef yyset_extra +#define xhpastset_extra_ALREADY_DEFINED +#else +#define yyset_extra xhpastset_extra +#endif + +#ifdef yyget_in +#define xhpastget_in_ALREADY_DEFINED +#else +#define yyget_in xhpastget_in +#endif + +#ifdef yyset_in +#define xhpastset_in_ALREADY_DEFINED +#else +#define yyset_in xhpastset_in +#endif + +#ifdef yyget_out +#define xhpastget_out_ALREADY_DEFINED +#else +#define yyget_out xhpastget_out +#endif + +#ifdef yyset_out +#define xhpastset_out_ALREADY_DEFINED +#else +#define yyset_out xhpastset_out +#endif + +#ifdef yyget_leng +#define xhpastget_leng_ALREADY_DEFINED +#else +#define yyget_leng xhpastget_leng +#endif + +#ifdef yyget_text +#define xhpastget_text_ALREADY_DEFINED +#else +#define yyget_text xhpastget_text +#endif + +#ifdef yyget_lineno +#define xhpastget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno xhpastget_lineno +#endif + +#ifdef yyset_lineno +#define xhpastset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno xhpastset_lineno +#endif + +#ifdef yyget_column +#define xhpastget_column_ALREADY_DEFINED +#else +#define yyget_column xhpastget_column +#endif + +#ifdef yyset_column +#define xhpastset_column_ALREADY_DEFINED +#else +#define yyset_column xhpastset_column +#endif + +#ifdef yywrap +#define xhpastwrap_ALREADY_DEFINED +#else +#define yywrap xhpastwrap +#endif + +#ifdef yyget_lval +#define xhpastget_lval_ALREADY_DEFINED +#else +#define yyget_lval xhpastget_lval +#endif + +#ifdef yyset_lval +#define xhpastset_lval_ALREADY_DEFINED +#else +#define yyset_lval xhpastset_lval +#endif + +#ifdef yyalloc +#define xhpastalloc_ALREADY_DEFINED +#else +#define yyalloc xhpastalloc +#endif + +#ifdef yyrealloc +#define xhpastrealloc_ALREADY_DEFINED +#else +#define yyrealloc xhpastrealloc +#endif + +#ifdef yyfree +#define xhpastfree_ALREADY_DEFINED +#else +#define yyfree xhpastfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define xhpastwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef const struct yy_trans_info *yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyg->yytext_ptr -= yyg->yy_more_len; \ + yyleng = (int) (yy_cp - yyg->yytext_ptr); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 143 +#define YY_END_OF_BUFFER 144 +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const struct yy_trans_info yy_transition[109294] = + { + { 0, 0 }, { 0,109038 }, { 0, 4 }, { 0,109036 }, { 1,5676 }, + { 2,5676 }, { 3,5676 }, { 4,5676 }, { 5,5676 }, { 6,5676 }, + { 7,5676 }, { 8,5676 }, { 9,5676 }, { 10,5676 }, { 11,5676 }, + { 12,5676 }, { 13,5676 }, { 14,5676 }, { 15,5676 }, { 16,5676 }, + { 17,5676 }, { 18,5676 }, { 19,5676 }, { 20,5676 }, { 21,5676 }, + { 22,5676 }, { 23,5676 }, { 24,5676 }, { 25,5676 }, { 26,5676 }, + { 27,5676 }, { 28,5676 }, { 29,5676 }, { 30,5676 }, { 31,5676 }, + { 32,5676 }, { 33,5676 }, { 34,5676 }, { 35,5676 }, { 36,5676 }, + { 37,5676 }, { 38,5676 }, { 39,5676 }, { 40,5676 }, { 41,5676 }, + { 42,5676 }, { 43,5676 }, { 44,5676 }, { 45,5676 }, { 46,5676 }, + + { 47,5676 }, { 48,5676 }, { 49,5676 }, { 50,5676 }, { 51,5676 }, + { 52,5676 }, { 53,5676 }, { 54,5676 }, { 55,5676 }, { 56,5676 }, + { 57,5676 }, { 58,5676 }, { 59,5676 }, { 60,5934 }, { 61,5676 }, + { 62,5676 }, { 63,5676 }, { 64,5676 }, { 65,5676 }, { 66,5676 }, + { 67,5676 }, { 68,5676 }, { 69,5676 }, { 70,5676 }, { 71,5676 }, + { 72,5676 }, { 73,5676 }, { 74,5676 }, { 75,5676 }, { 76,5676 }, + { 77,5676 }, { 78,5676 }, { 79,5676 }, { 80,5676 }, { 81,5676 }, + { 82,5676 }, { 83,5676 }, { 84,5676 }, { 85,5676 }, { 86,5676 }, + { 87,5676 }, { 88,5676 }, { 89,5676 }, { 90,5676 }, { 91,5676 }, + { 92,5676 }, { 93,5676 }, { 94,5676 }, { 95,5676 }, { 96,5676 }, + + { 97,5676 }, { 98,5676 }, { 99,5676 }, { 100,5676 }, { 101,5676 }, + { 102,5676 }, { 103,5676 }, { 104,5676 }, { 105,5676 }, { 106,5676 }, + { 107,5676 }, { 108,5676 }, { 109,5676 }, { 110,5676 }, { 111,5676 }, + { 112,5676 }, { 113,5676 }, { 114,5676 }, { 115,5676 }, { 116,5676 }, + { 117,5676 }, { 118,5676 }, { 119,5676 }, { 120,5676 }, { 121,5676 }, + { 122,5676 }, { 123,5676 }, { 124,5676 }, { 125,5676 }, { 126,5676 }, + { 127,5676 }, { 128,5676 }, { 129,5676 }, { 130,5676 }, { 131,5676 }, + { 132,5676 }, { 133,5676 }, { 134,5676 }, { 135,5676 }, { 136,5676 }, + { 137,5676 }, { 138,5676 }, { 139,5676 }, { 140,5676 }, { 141,5676 }, + { 142,5676 }, { 143,5676 }, { 144,5676 }, { 145,5676 }, { 146,5676 }, + + { 147,5676 }, { 148,5676 }, { 149,5676 }, { 150,5676 }, { 151,5676 }, + { 152,5676 }, { 153,5676 }, { 154,5676 }, { 155,5676 }, { 156,5676 }, + { 157,5676 }, { 158,5676 }, { 159,5676 }, { 160,5676 }, { 161,5676 }, + { 162,5676 }, { 163,5676 }, { 164,5676 }, { 165,5676 }, { 166,5676 }, + { 167,5676 }, { 168,5676 }, { 169,5676 }, { 170,5676 }, { 171,5676 }, + { 172,5676 }, { 173,5676 }, { 174,5676 }, { 175,5676 }, { 176,5676 }, + { 177,5676 }, { 178,5676 }, { 179,5676 }, { 180,5676 }, { 181,5676 }, + { 182,5676 }, { 183,5676 }, { 184,5676 }, { 185,5676 }, { 186,5676 }, + { 187,5676 }, { 188,5676 }, { 189,5676 }, { 190,5676 }, { 191,5676 }, + { 192,5676 }, { 193,5676 }, { 194,5676 }, { 195,5676 }, { 196,5676 }, + + { 197,5676 }, { 198,5676 }, { 199,5676 }, { 200,5676 }, { 201,5676 }, + { 202,5676 }, { 203,5676 }, { 204,5676 }, { 205,5676 }, { 206,5676 }, + { 207,5676 }, { 208,5676 }, { 209,5676 }, { 210,5676 }, { 211,5676 }, + { 212,5676 }, { 213,5676 }, { 214,5676 }, { 215,5676 }, { 216,5676 }, + { 217,5676 }, { 218,5676 }, { 219,5676 }, { 220,5676 }, { 221,5676 }, + { 222,5676 }, { 223,5676 }, { 224,5676 }, { 225,5676 }, { 226,5676 }, + { 227,5676 }, { 228,5676 }, { 229,5676 }, { 230,5676 }, { 231,5676 }, + { 232,5676 }, { 233,5676 }, { 234,5676 }, { 235,5676 }, { 236,5676 }, + { 237,5676 }, { 238,5676 }, { 239,5676 }, { 240,5676 }, { 241,5676 }, + { 242,5676 }, { 243,5676 }, { 244,5676 }, { 245,5676 }, { 246,5676 }, + + { 247,5676 }, { 248,5676 }, { 249,5676 }, { 250,5676 }, { 251,5676 }, + { 252,5676 }, { 253,5676 }, { 254,5676 }, { 255,5676 }, { 256,5676 }, + { 0, 4 }, { 0,108778 }, { 1,5418 }, { 2,5418 }, { 3,5418 }, + { 4,5418 }, { 5,5418 }, { 6,5418 }, { 7,5418 }, { 8,5418 }, + { 9,5418 }, { 10,5418 }, { 11,5418 }, { 12,5418 }, { 13,5418 }, + { 14,5418 }, { 15,5418 }, { 16,5418 }, { 17,5418 }, { 18,5418 }, + { 19,5418 }, { 20,5418 }, { 21,5418 }, { 22,5418 }, { 23,5418 }, + { 24,5418 }, { 25,5418 }, { 26,5418 }, { 27,5418 }, { 28,5418 }, + { 29,5418 }, { 30,5418 }, { 31,5418 }, { 32,5418 }, { 33,5418 }, + { 34,5418 }, { 35,5418 }, { 36,5418 }, { 37,5418 }, { 38,5418 }, + + { 39,5418 }, { 40,5418 }, { 41,5418 }, { 42,5418 }, { 43,5418 }, + { 44,5418 }, { 45,5418 }, { 46,5418 }, { 47,5418 }, { 48,5418 }, + { 49,5418 }, { 50,5418 }, { 51,5418 }, { 52,5418 }, { 53,5418 }, + { 54,5418 }, { 55,5418 }, { 56,5418 }, { 57,5418 }, { 58,5418 }, + { 59,5418 }, { 60,5676 }, { 61,5418 }, { 62,5418 }, { 63,5418 }, + { 64,5418 }, { 65,5418 }, { 66,5418 }, { 67,5418 }, { 68,5418 }, + { 69,5418 }, { 70,5418 }, { 71,5418 }, { 72,5418 }, { 73,5418 }, + { 74,5418 }, { 75,5418 }, { 76,5418 }, { 77,5418 }, { 78,5418 }, + { 79,5418 }, { 80,5418 }, { 81,5418 }, { 82,5418 }, { 83,5418 }, + { 84,5418 }, { 85,5418 }, { 86,5418 }, { 87,5418 }, { 88,5418 }, + + { 89,5418 }, { 90,5418 }, { 91,5418 }, { 92,5418 }, { 93,5418 }, + { 94,5418 }, { 95,5418 }, { 96,5418 }, { 97,5418 }, { 98,5418 }, + { 99,5418 }, { 100,5418 }, { 101,5418 }, { 102,5418 }, { 103,5418 }, + { 104,5418 }, { 105,5418 }, { 106,5418 }, { 107,5418 }, { 108,5418 }, + { 109,5418 }, { 110,5418 }, { 111,5418 }, { 112,5418 }, { 113,5418 }, + { 114,5418 }, { 115,5418 }, { 116,5418 }, { 117,5418 }, { 118,5418 }, + { 119,5418 }, { 120,5418 }, { 121,5418 }, { 122,5418 }, { 123,5418 }, + { 124,5418 }, { 125,5418 }, { 126,5418 }, { 127,5418 }, { 128,5418 }, + { 129,5418 }, { 130,5418 }, { 131,5418 }, { 132,5418 }, { 133,5418 }, + { 134,5418 }, { 135,5418 }, { 136,5418 }, { 137,5418 }, { 138,5418 }, + + { 139,5418 }, { 140,5418 }, { 141,5418 }, { 142,5418 }, { 143,5418 }, + { 144,5418 }, { 145,5418 }, { 146,5418 }, { 147,5418 }, { 148,5418 }, + { 149,5418 }, { 150,5418 }, { 151,5418 }, { 152,5418 }, { 153,5418 }, + { 154,5418 }, { 155,5418 }, { 156,5418 }, { 157,5418 }, { 158,5418 }, + { 159,5418 }, { 160,5418 }, { 161,5418 }, { 162,5418 }, { 163,5418 }, + { 164,5418 }, { 165,5418 }, { 166,5418 }, { 167,5418 }, { 168,5418 }, + { 169,5418 }, { 170,5418 }, { 171,5418 }, { 172,5418 }, { 173,5418 }, + { 174,5418 }, { 175,5418 }, { 176,5418 }, { 177,5418 }, { 178,5418 }, + { 179,5418 }, { 180,5418 }, { 181,5418 }, { 182,5418 }, { 183,5418 }, + { 184,5418 }, { 185,5418 }, { 186,5418 }, { 187,5418 }, { 188,5418 }, + + { 189,5418 }, { 190,5418 }, { 191,5418 }, { 192,5418 }, { 193,5418 }, + { 194,5418 }, { 195,5418 }, { 196,5418 }, { 197,5418 }, { 198,5418 }, + { 199,5418 }, { 200,5418 }, { 201,5418 }, { 202,5418 }, { 203,5418 }, + { 204,5418 }, { 205,5418 }, { 206,5418 }, { 207,5418 }, { 208,5418 }, + { 209,5418 }, { 210,5418 }, { 211,5418 }, { 212,5418 }, { 213,5418 }, + { 214,5418 }, { 215,5418 }, { 216,5418 }, { 217,5418 }, { 218,5418 }, + { 219,5418 }, { 220,5418 }, { 221,5418 }, { 222,5418 }, { 223,5418 }, + { 224,5418 }, { 225,5418 }, { 226,5418 }, { 227,5418 }, { 228,5418 }, + { 229,5418 }, { 230,5418 }, { 231,5418 }, { 232,5418 }, { 233,5418 }, + { 234,5418 }, { 235,5418 }, { 236,5418 }, { 237,5418 }, { 238,5418 }, + + { 239,5418 }, { 240,5418 }, { 241,5418 }, { 242,5418 }, { 243,5418 }, + { 244,5418 }, { 245,5418 }, { 246,5418 }, { 247,5418 }, { 248,5418 }, + { 249,5418 }, { 250,5418 }, { 251,5418 }, { 252,5418 }, { 253,5418 }, + { 254,5418 }, { 255,5418 }, { 256,5418 }, { 0, 0 }, { 0,108520 }, + { 1,5420 }, { 2,5420 }, { 3,5420 }, { 4,5420 }, { 5,5420 }, + { 6,5420 }, { 7,5420 }, { 8,5420 }, { 9,5422 }, { 10,5422 }, + { 11,5420 }, { 12,5420 }, { 13,5422 }, { 14,5420 }, { 15,5420 }, + { 16,5420 }, { 17,5420 }, { 18,5420 }, { 19,5420 }, { 20,5420 }, + { 21,5420 }, { 22,5420 }, { 23,5420 }, { 24,5420 }, { 25,5420 }, + { 26,5420 }, { 27,5420 }, { 28,5420 }, { 29,5420 }, { 30,5420 }, + + { 31,5420 }, { 32,5422 }, { 33,5424 }, { 34,5487 }, { 35,5426 }, + { 36,5745 }, { 37,5747 }, { 38,6002 }, { 39,6065 }, { 40,6323 }, + { 41,5420 }, { 42,6325 }, { 43,6329 }, { 44,5420 }, { 45,6336 }, + { 46,6361 }, { 47,6338 }, { 48,6395 }, { 49,6454 }, { 50,6454 }, + { 51,6454 }, { 52,6454 }, { 53,6454 }, { 54,6454 }, { 55,6454 }, + { 56,6454 }, { 57,6454 }, { 58,6342 }, { 59,5420 }, { 60,6427 }, + { 61,6430 }, { 62,6433 }, { 63,6436 }, { 64,5420 }, { 65,6513 }, + { 66,6770 }, { 67,7027 }, { 68,7284 }, { 69,7541 }, { 70,7798 }, + { 71,8055 }, { 72,8312 }, { 73,8569 }, { 74,8312 }, { 75,8312 }, + { 76,8826 }, { 77,8312 }, { 78,9083 }, { 79,9340 }, { 80,9597 }, + + { 81,8312 }, { 82,9854 }, { 83,10111 }, { 84,10368 }, { 85,10625 }, + { 86,10882 }, { 87,11139 }, { 88,11396 }, { 89,11653 }, { 90,8312 }, + { 91,5420 }, { 92,6456 }, { 93,5420 }, { 94,6458 }, { 95,11910 }, + { 96,12167 }, { 97,6513 }, { 98,6770 }, { 99,7027 }, { 100,7284 }, + { 101,7541 }, { 102,7798 }, { 103,8055 }, { 104,8312 }, { 105,8569 }, + { 106,8312 }, { 107,8312 }, { 108,8826 }, { 109,8312 }, { 110,9083 }, + { 111,9340 }, { 112,9597 }, { 113,8312 }, { 114,9854 }, { 115,10111 }, + { 116,10368 }, { 117,10625 }, { 118,10882 }, { 119,11139 }, { 120,11396 }, + { 121,11653 }, { 122,8312 }, { 123,5420 }, { 124,6480 }, { 125,5420 }, + { 126,5420 }, { 127,8312 }, { 128,8312 }, { 129,8312 }, { 130,8312 }, + + { 131,8312 }, { 132,8312 }, { 133,8312 }, { 134,8312 }, { 135,8312 }, + { 136,8312 }, { 137,8312 }, { 138,8312 }, { 139,8312 }, { 140,8312 }, + { 141,8312 }, { 142,8312 }, { 143,8312 }, { 144,8312 }, { 145,8312 }, + { 146,8312 }, { 147,8312 }, { 148,8312 }, { 149,8312 }, { 150,8312 }, + { 151,8312 }, { 152,8312 }, { 153,8312 }, { 154,8312 }, { 155,8312 }, + { 156,8312 }, { 157,8312 }, { 158,8312 }, { 159,8312 }, { 160,8312 }, + { 161,8312 }, { 162,8312 }, { 163,8312 }, { 164,8312 }, { 165,8312 }, + { 166,8312 }, { 167,8312 }, { 168,8312 }, { 169,8312 }, { 170,8312 }, + { 171,8312 }, { 172,8312 }, { 173,8312 }, { 174,8312 }, { 175,8312 }, + { 176,8312 }, { 177,8312 }, { 178,8312 }, { 179,8312 }, { 180,8312 }, + + { 181,8312 }, { 182,8312 }, { 183,8312 }, { 184,8312 }, { 185,8312 }, + { 186,8312 }, { 187,8312 }, { 188,8312 }, { 189,8312 }, { 190,8312 }, + { 191,8312 }, { 192,8312 }, { 193,8312 }, { 194,8312 }, { 195,8312 }, + { 196,8312 }, { 197,8312 }, { 198,8312 }, { 199,8312 }, { 200,8312 }, + { 201,8312 }, { 202,8312 }, { 203,8312 }, { 204,8312 }, { 205,8312 }, + { 206,8312 }, { 207,8312 }, { 208,8312 }, { 209,8312 }, { 210,8312 }, + { 211,8312 }, { 212,8312 }, { 213,8312 }, { 214,8312 }, { 215,8312 }, + { 216,8312 }, { 217,8312 }, { 218,8312 }, { 219,8312 }, { 220,8312 }, + { 221,8312 }, { 222,8312 }, { 223,8312 }, { 224,8312 }, { 225,8312 }, + { 226,8312 }, { 227,8312 }, { 228,8312 }, { 229,8312 }, { 230,8312 }, + + { 231,8312 }, { 232,8312 }, { 233,8312 }, { 234,8312 }, { 235,8312 }, + { 236,8312 }, { 237,8312 }, { 238,8312 }, { 239,8312 }, { 240,8312 }, + { 241,8312 }, { 242,8312 }, { 243,8312 }, { 244,8312 }, { 245,8312 }, + { 246,8312 }, { 247,8312 }, { 248,8312 }, { 249,8312 }, { 250,8312 }, + { 251,8312 }, { 252,8312 }, { 253,8312 }, { 254,8312 }, { 255,8312 }, + { 256,5420 }, { 0, 0 }, { 0,108262 }, { 1,5162 }, { 2,5162 }, + { 3,5162 }, { 4,5162 }, { 5,5162 }, { 6,5162 }, { 7,5162 }, + { 8,5162 }, { 9,5164 }, { 10,5164 }, { 11,5162 }, { 12,5162 }, + { 13,5164 }, { 14,5162 }, { 15,5162 }, { 16,5162 }, { 17,5162 }, + { 18,5162 }, { 19,5162 }, { 20,5162 }, { 21,5162 }, { 22,5162 }, + + { 23,5162 }, { 24,5162 }, { 25,5162 }, { 26,5162 }, { 27,5162 }, + { 28,5162 }, { 29,5162 }, { 30,5162 }, { 31,5162 }, { 32,5164 }, + { 33,5166 }, { 34,5229 }, { 35,5168 }, { 36,5487 }, { 37,5489 }, + { 38,5744 }, { 39,5807 }, { 40,6065 }, { 41,5162 }, { 42,6067 }, + { 43,6071 }, { 44,5162 }, { 45,6078 }, { 46,6103 }, { 47,6080 }, + { 48,6137 }, { 49,6196 }, { 50,6196 }, { 51,6196 }, { 52,6196 }, + { 53,6196 }, { 54,6196 }, { 55,6196 }, { 56,6196 }, { 57,6196 }, + { 58,6084 }, { 59,5162 }, { 60,6169 }, { 61,6172 }, { 62,6175 }, + { 63,6178 }, { 64,5162 }, { 65,6255 }, { 66,6512 }, { 67,6769 }, + { 68,7026 }, { 69,7283 }, { 70,7540 }, { 71,7797 }, { 72,8054 }, + + { 73,8311 }, { 74,8054 }, { 75,8054 }, { 76,8568 }, { 77,8054 }, + { 78,8825 }, { 79,9082 }, { 80,9339 }, { 81,8054 }, { 82,9596 }, + { 83,9853 }, { 84,10110 }, { 85,10367 }, { 86,10624 }, { 87,10881 }, + { 88,11138 }, { 89,11395 }, { 90,8054 }, { 91,5162 }, { 92,6198 }, + { 93,5162 }, { 94,6200 }, { 95,11652 }, { 96,11909 }, { 97,6255 }, + { 98,6512 }, { 99,6769 }, { 100,7026 }, { 101,7283 }, { 102,7540 }, + { 103,7797 }, { 104,8054 }, { 105,8311 }, { 106,8054 }, { 107,8054 }, + { 108,8568 }, { 109,8054 }, { 110,8825 }, { 111,9082 }, { 112,9339 }, + { 113,8054 }, { 114,9596 }, { 115,9853 }, { 116,10110 }, { 117,10367 }, + { 118,10624 }, { 119,10881 }, { 120,11138 }, { 121,11395 }, { 122,8054 }, + + { 123,5162 }, { 124,6222 }, { 125,5162 }, { 126,5162 }, { 127,8054 }, + { 128,8054 }, { 129,8054 }, { 130,8054 }, { 131,8054 }, { 132,8054 }, + { 133,8054 }, { 134,8054 }, { 135,8054 }, { 136,8054 }, { 137,8054 }, + { 138,8054 }, { 139,8054 }, { 140,8054 }, { 141,8054 }, { 142,8054 }, + { 143,8054 }, { 144,8054 }, { 145,8054 }, { 146,8054 }, { 147,8054 }, + { 148,8054 }, { 149,8054 }, { 150,8054 }, { 151,8054 }, { 152,8054 }, + { 153,8054 }, { 154,8054 }, { 155,8054 }, { 156,8054 }, { 157,8054 }, + { 158,8054 }, { 159,8054 }, { 160,8054 }, { 161,8054 }, { 162,8054 }, + { 163,8054 }, { 164,8054 }, { 165,8054 }, { 166,8054 }, { 167,8054 }, + { 168,8054 }, { 169,8054 }, { 170,8054 }, { 171,8054 }, { 172,8054 }, + + { 173,8054 }, { 174,8054 }, { 175,8054 }, { 176,8054 }, { 177,8054 }, + { 178,8054 }, { 179,8054 }, { 180,8054 }, { 181,8054 }, { 182,8054 }, + { 183,8054 }, { 184,8054 }, { 185,8054 }, { 186,8054 }, { 187,8054 }, + { 188,8054 }, { 189,8054 }, { 190,8054 }, { 191,8054 }, { 192,8054 }, + { 193,8054 }, { 194,8054 }, { 195,8054 }, { 196,8054 }, { 197,8054 }, + { 198,8054 }, { 199,8054 }, { 200,8054 }, { 201,8054 }, { 202,8054 }, + { 203,8054 }, { 204,8054 }, { 205,8054 }, { 206,8054 }, { 207,8054 }, + { 208,8054 }, { 209,8054 }, { 210,8054 }, { 211,8054 }, { 212,8054 }, + { 213,8054 }, { 214,8054 }, { 215,8054 }, { 216,8054 }, { 217,8054 }, + { 218,8054 }, { 219,8054 }, { 220,8054 }, { 221,8054 }, { 222,8054 }, + + { 223,8054 }, { 224,8054 }, { 225,8054 }, { 226,8054 }, { 227,8054 }, + { 228,8054 }, { 229,8054 }, { 230,8054 }, { 231,8054 }, { 232,8054 }, + { 233,8054 }, { 234,8054 }, { 235,8054 }, { 236,8054 }, { 237,8054 }, + { 238,8054 }, { 239,8054 }, { 240,8054 }, { 241,8054 }, { 242,8054 }, + { 243,8054 }, { 244,8054 }, { 245,8054 }, { 246,8054 }, { 247,8054 }, + { 248,8054 }, { 249,8054 }, { 250,8054 }, { 251,8054 }, { 252,8054 }, + { 253,8054 }, { 254,8054 }, { 255,8054 }, { 256,5162 }, { 0, 0 }, + { 0,108004 }, { 1,11909 }, { 2,11909 }, { 3,11909 }, { 4,11909 }, + { 5,11909 }, { 6,11909 }, { 7,11909 }, { 8,11909 }, { 9,11909 }, + { 10,5966 }, { 11,11909 }, { 12,11909 }, { 13,6001 }, { 14,11909 }, + + { 15,11909 }, { 16,11909 }, { 17,11909 }, { 18,11909 }, { 19,11909 }, + { 20,11909 }, { 21,11909 }, { 22,11909 }, { 23,11909 }, { 24,11909 }, + { 25,11909 }, { 26,11909 }, { 27,11909 }, { 28,11909 }, { 29,11909 }, + { 30,11909 }, { 31,11909 }, { 32,11909 }, { 33,11909 }, { 34,11909 }, + { 35,11909 }, { 36,11909 }, { 37,11909 }, { 38,11909 }, { 39,11909 }, + { 40,11909 }, { 41,11909 }, { 42,6009 }, { 43,11909 }, { 44,11909 }, + { 45,11909 }, { 46,11909 }, { 47,11909 }, { 48,11909 }, { 49,11909 }, + { 50,11909 }, { 51,11909 }, { 52,11909 }, { 53,11909 }, { 54,11909 }, + { 55,11909 }, { 56,11909 }, { 57,11909 }, { 58,11909 }, { 59,11909 }, + { 60,11909 }, { 61,11909 }, { 62,11909 }, { 63,11909 }, { 64,11909 }, + + { 65,11909 }, { 66,11909 }, { 67,11909 }, { 68,11909 }, { 69,11909 }, + { 70,11909 }, { 71,11909 }, { 72,11909 }, { 73,11909 }, { 74,11909 }, + { 75,11909 }, { 76,11909 }, { 77,11909 }, { 78,11909 }, { 79,11909 }, + { 80,11909 }, { 81,11909 }, { 82,11909 }, { 83,11909 }, { 84,11909 }, + { 85,11909 }, { 86,11909 }, { 87,11909 }, { 88,11909 }, { 89,11909 }, + { 90,11909 }, { 91,11909 }, { 92,11909 }, { 93,11909 }, { 94,11909 }, + { 95,11909 }, { 96,11909 }, { 97,11909 }, { 98,11909 }, { 99,11909 }, + { 100,11909 }, { 101,11909 }, { 102,11909 }, { 103,11909 }, { 104,11909 }, + { 105,11909 }, { 106,11909 }, { 107,11909 }, { 108,11909 }, { 109,11909 }, + { 110,11909 }, { 111,11909 }, { 112,11909 }, { 113,11909 }, { 114,11909 }, + + { 115,11909 }, { 116,11909 }, { 117,11909 }, { 118,11909 }, { 119,11909 }, + { 120,11909 }, { 121,11909 }, { 122,11909 }, { 123,11909 }, { 124,11909 }, + { 125,11909 }, { 126,11909 }, { 127,11909 }, { 128,11909 }, { 129,11909 }, + { 130,11909 }, { 131,11909 }, { 132,11909 }, { 133,11909 }, { 134,11909 }, + { 135,11909 }, { 136,11909 }, { 137,11909 }, { 138,11909 }, { 139,11909 }, + { 140,11909 }, { 141,11909 }, { 142,11909 }, { 143,11909 }, { 144,11909 }, + { 145,11909 }, { 146,11909 }, { 147,11909 }, { 148,11909 }, { 149,11909 }, + { 150,11909 }, { 151,11909 }, { 152,11909 }, { 153,11909 }, { 154,11909 }, + { 155,11909 }, { 156,11909 }, { 157,11909 }, { 158,11909 }, { 159,11909 }, + { 160,11909 }, { 161,11909 }, { 162,11909 }, { 163,11909 }, { 164,11909 }, + + { 165,11909 }, { 166,11909 }, { 167,11909 }, { 168,11909 }, { 169,11909 }, + { 170,11909 }, { 171,11909 }, { 172,11909 }, { 173,11909 }, { 174,11909 }, + { 175,11909 }, { 176,11909 }, { 177,11909 }, { 178,11909 }, { 179,11909 }, + { 180,11909 }, { 181,11909 }, { 182,11909 }, { 183,11909 }, { 184,11909 }, + { 185,11909 }, { 186,11909 }, { 187,11909 }, { 188,11909 }, { 189,11909 }, + { 190,11909 }, { 191,11909 }, { 192,11909 }, { 193,11909 }, { 194,11909 }, + { 195,11909 }, { 196,11909 }, { 197,11909 }, { 198,11909 }, { 199,11909 }, + { 200,11909 }, { 201,11909 }, { 202,11909 }, { 203,11909 }, { 204,11909 }, + { 205,11909 }, { 206,11909 }, { 207,11909 }, { 208,11909 }, { 209,11909 }, + { 210,11909 }, { 211,11909 }, { 212,11909 }, { 213,11909 }, { 214,11909 }, + + { 215,11909 }, { 216,11909 }, { 217,11909 }, { 218,11909 }, { 219,11909 }, + { 220,11909 }, { 221,11909 }, { 222,11909 }, { 223,11909 }, { 224,11909 }, + { 225,11909 }, { 226,11909 }, { 227,11909 }, { 228,11909 }, { 229,11909 }, + { 230,11909 }, { 231,11909 }, { 232,11909 }, { 233,11909 }, { 234,11909 }, + { 235,11909 }, { 236,11909 }, { 237,11909 }, { 238,11909 }, { 239,11909 }, + { 240,11909 }, { 241,11909 }, { 242,11909 }, { 243,11909 }, { 244,11909 }, + { 245,11909 }, { 246,11909 }, { 247,11909 }, { 248,11909 }, { 249,11909 }, + { 250,11909 }, { 251,11909 }, { 252,11909 }, { 253,11909 }, { 254,11909 }, + { 255,11909 }, { 256,11909 }, { 0, 0 }, { 0,107746 }, { 1,11651 }, + { 2,11651 }, { 3,11651 }, { 4,11651 }, { 5,11651 }, { 6,11651 }, + + { 7,11651 }, { 8,11651 }, { 9,11651 }, { 10,5708 }, { 11,11651 }, + { 12,11651 }, { 13,5743 }, { 14,11651 }, { 15,11651 }, { 16,11651 }, + { 17,11651 }, { 18,11651 }, { 19,11651 }, { 20,11651 }, { 21,11651 }, + { 22,11651 }, { 23,11651 }, { 24,11651 }, { 25,11651 }, { 26,11651 }, + { 27,11651 }, { 28,11651 }, { 29,11651 }, { 30,11651 }, { 31,11651 }, + { 32,11651 }, { 33,11651 }, { 34,11651 }, { 35,11651 }, { 36,11651 }, + { 37,11651 }, { 38,11651 }, { 39,11651 }, { 40,11651 }, { 41,11651 }, + { 42,5751 }, { 43,11651 }, { 44,11651 }, { 45,11651 }, { 46,11651 }, + { 47,11651 }, { 48,11651 }, { 49,11651 }, { 50,11651 }, { 51,11651 }, + { 52,11651 }, { 53,11651 }, { 54,11651 }, { 55,11651 }, { 56,11651 }, + + { 57,11651 }, { 58,11651 }, { 59,11651 }, { 60,11651 }, { 61,11651 }, + { 62,11651 }, { 63,11651 }, { 64,11651 }, { 65,11651 }, { 66,11651 }, + { 67,11651 }, { 68,11651 }, { 69,11651 }, { 70,11651 }, { 71,11651 }, + { 72,11651 }, { 73,11651 }, { 74,11651 }, { 75,11651 }, { 76,11651 }, + { 77,11651 }, { 78,11651 }, { 79,11651 }, { 80,11651 }, { 81,11651 }, + { 82,11651 }, { 83,11651 }, { 84,11651 }, { 85,11651 }, { 86,11651 }, + { 87,11651 }, { 88,11651 }, { 89,11651 }, { 90,11651 }, { 91,11651 }, + { 92,11651 }, { 93,11651 }, { 94,11651 }, { 95,11651 }, { 96,11651 }, + { 97,11651 }, { 98,11651 }, { 99,11651 }, { 100,11651 }, { 101,11651 }, + { 102,11651 }, { 103,11651 }, { 104,11651 }, { 105,11651 }, { 106,11651 }, + + { 107,11651 }, { 108,11651 }, { 109,11651 }, { 110,11651 }, { 111,11651 }, + { 112,11651 }, { 113,11651 }, { 114,11651 }, { 115,11651 }, { 116,11651 }, + { 117,11651 }, { 118,11651 }, { 119,11651 }, { 120,11651 }, { 121,11651 }, + { 122,11651 }, { 123,11651 }, { 124,11651 }, { 125,11651 }, { 126,11651 }, + { 127,11651 }, { 128,11651 }, { 129,11651 }, { 130,11651 }, { 131,11651 }, + { 132,11651 }, { 133,11651 }, { 134,11651 }, { 135,11651 }, { 136,11651 }, + { 137,11651 }, { 138,11651 }, { 139,11651 }, { 140,11651 }, { 141,11651 }, + { 142,11651 }, { 143,11651 }, { 144,11651 }, { 145,11651 }, { 146,11651 }, + { 147,11651 }, { 148,11651 }, { 149,11651 }, { 150,11651 }, { 151,11651 }, + { 152,11651 }, { 153,11651 }, { 154,11651 }, { 155,11651 }, { 156,11651 }, + + { 157,11651 }, { 158,11651 }, { 159,11651 }, { 160,11651 }, { 161,11651 }, + { 162,11651 }, { 163,11651 }, { 164,11651 }, { 165,11651 }, { 166,11651 }, + { 167,11651 }, { 168,11651 }, { 169,11651 }, { 170,11651 }, { 171,11651 }, + { 172,11651 }, { 173,11651 }, { 174,11651 }, { 175,11651 }, { 176,11651 }, + { 177,11651 }, { 178,11651 }, { 179,11651 }, { 180,11651 }, { 181,11651 }, + { 182,11651 }, { 183,11651 }, { 184,11651 }, { 185,11651 }, { 186,11651 }, + { 187,11651 }, { 188,11651 }, { 189,11651 }, { 190,11651 }, { 191,11651 }, + { 192,11651 }, { 193,11651 }, { 194,11651 }, { 195,11651 }, { 196,11651 }, + { 197,11651 }, { 198,11651 }, { 199,11651 }, { 200,11651 }, { 201,11651 }, + { 202,11651 }, { 203,11651 }, { 204,11651 }, { 205,11651 }, { 206,11651 }, + + { 207,11651 }, { 208,11651 }, { 209,11651 }, { 210,11651 }, { 211,11651 }, + { 212,11651 }, { 213,11651 }, { 214,11651 }, { 215,11651 }, { 216,11651 }, + { 217,11651 }, { 218,11651 }, { 219,11651 }, { 220,11651 }, { 221,11651 }, + { 222,11651 }, { 223,11651 }, { 224,11651 }, { 225,11651 }, { 226,11651 }, + { 227,11651 }, { 228,11651 }, { 229,11651 }, { 230,11651 }, { 231,11651 }, + { 232,11651 }, { 233,11651 }, { 234,11651 }, { 235,11651 }, { 236,11651 }, + { 237,11651 }, { 238,11651 }, { 239,11651 }, { 240,11651 }, { 241,11651 }, + { 242,11651 }, { 243,11651 }, { 244,11651 }, { 245,11651 }, { 246,11651 }, + { 247,11651 }, { 248,11651 }, { 249,11651 }, { 250,11651 }, { 251,11651 }, + { 252,11651 }, { 253,11651 }, { 254,11651 }, { 255,11651 }, { 256,11651 }, + + { 0, 0 }, { 0,107488 }, { 1,11651 }, { 2,11651 }, { 3,11651 }, + { 4,11651 }, { 5,11651 }, { 6,11651 }, { 7,11651 }, { 8,11651 }, + { 9,11651 }, { 10,5497 }, { 11,11651 }, { 12,11651 }, { 13,5500 }, + { 14,11651 }, { 15,11651 }, { 16,11651 }, { 17,11651 }, { 18,11651 }, + { 19,11651 }, { 20,11651 }, { 21,11651 }, { 22,11651 }, { 23,11651 }, + { 24,11651 }, { 25,11651 }, { 26,11651 }, { 27,11651 }, { 28,11651 }, + { 29,11651 }, { 30,11651 }, { 31,11651 }, { 32,11651 }, { 33,11651 }, + { 34,11651 }, { 35,11651 }, { 36,11651 }, { 37,11651 }, { 38,11651 }, + { 39,11651 }, { 40,11651 }, { 41,11651 }, { 42,11651 }, { 43,11651 }, + { 44,11651 }, { 45,11651 }, { 46,11651 }, { 47,11651 }, { 48,11651 }, + + { 49,11651 }, { 50,11651 }, { 51,11651 }, { 52,11651 }, { 53,11651 }, + { 54,11651 }, { 55,11651 }, { 56,11651 }, { 57,11651 }, { 58,11651 }, + { 59,11651 }, { 60,11651 }, { 61,11651 }, { 62,11651 }, { 63,5512 }, + { 64,11651 }, { 65,11651 }, { 66,11651 }, { 67,11651 }, { 68,11651 }, + { 69,11651 }, { 70,11651 }, { 71,11651 }, { 72,11651 }, { 73,11651 }, + { 74,11651 }, { 75,11651 }, { 76,11651 }, { 77,11651 }, { 78,11651 }, + { 79,11651 }, { 80,11651 }, { 81,11651 }, { 82,11651 }, { 83,11651 }, + { 84,11651 }, { 85,11651 }, { 86,11651 }, { 87,11651 }, { 88,11651 }, + { 89,11651 }, { 90,11651 }, { 91,11651 }, { 92,11651 }, { 93,11651 }, + { 94,11651 }, { 95,11651 }, { 96,11651 }, { 97,11651 }, { 98,11651 }, + + { 99,11651 }, { 100,11651 }, { 101,11651 }, { 102,11651 }, { 103,11651 }, + { 104,11651 }, { 105,11651 }, { 106,11651 }, { 107,11651 }, { 108,11651 }, + { 109,11651 }, { 110,11651 }, { 111,11651 }, { 112,11651 }, { 113,11651 }, + { 114,11651 }, { 115,11651 }, { 116,11651 }, { 117,11651 }, { 118,11651 }, + { 119,11651 }, { 120,11651 }, { 121,11651 }, { 122,11651 }, { 123,11651 }, + { 124,11651 }, { 125,11651 }, { 126,11651 }, { 127,11651 }, { 128,11651 }, + { 129,11651 }, { 130,11651 }, { 131,11651 }, { 132,11651 }, { 133,11651 }, + { 134,11651 }, { 135,11651 }, { 136,11651 }, { 137,11651 }, { 138,11651 }, + { 139,11651 }, { 140,11651 }, { 141,11651 }, { 142,11651 }, { 143,11651 }, + { 144,11651 }, { 145,11651 }, { 146,11651 }, { 147,11651 }, { 148,11651 }, + + { 149,11651 }, { 150,11651 }, { 151,11651 }, { 152,11651 }, { 153,11651 }, + { 154,11651 }, { 155,11651 }, { 156,11651 }, { 157,11651 }, { 158,11651 }, + { 159,11651 }, { 160,11651 }, { 161,11651 }, { 162,11651 }, { 163,11651 }, + { 164,11651 }, { 165,11651 }, { 166,11651 }, { 167,11651 }, { 168,11651 }, + { 169,11651 }, { 170,11651 }, { 171,11651 }, { 172,11651 }, { 173,11651 }, + { 174,11651 }, { 175,11651 }, { 176,11651 }, { 177,11651 }, { 178,11651 }, + { 179,11651 }, { 180,11651 }, { 181,11651 }, { 182,11651 }, { 183,11651 }, + { 184,11651 }, { 185,11651 }, { 186,11651 }, { 187,11651 }, { 188,11651 }, + { 189,11651 }, { 190,11651 }, { 191,11651 }, { 192,11651 }, { 193,11651 }, + { 194,11651 }, { 195,11651 }, { 196,11651 }, { 197,11651 }, { 198,11651 }, + + { 199,11651 }, { 200,11651 }, { 201,11651 }, { 202,11651 }, { 203,11651 }, + { 204,11651 }, { 205,11651 }, { 206,11651 }, { 207,11651 }, { 208,11651 }, + { 209,11651 }, { 210,11651 }, { 211,11651 }, { 212,11651 }, { 213,11651 }, + { 214,11651 }, { 215,11651 }, { 216,11651 }, { 217,11651 }, { 218,11651 }, + { 219,11651 }, { 220,11651 }, { 221,11651 }, { 222,11651 }, { 223,11651 }, + { 224,11651 }, { 225,11651 }, { 226,11651 }, { 227,11651 }, { 228,11651 }, + { 229,11651 }, { 230,11651 }, { 231,11651 }, { 232,11651 }, { 233,11651 }, + { 234,11651 }, { 235,11651 }, { 236,11651 }, { 237,11651 }, { 238,11651 }, + { 239,11651 }, { 240,11651 }, { 241,11651 }, { 242,11651 }, { 243,11651 }, + { 244,11651 }, { 245,11651 }, { 246,11651 }, { 247,11651 }, { 248,11651 }, + + { 249,11651 }, { 250,11651 }, { 251,11651 }, { 252,11651 }, { 253,11651 }, + { 254,11651 }, { 255,11651 }, { 256,11651 }, { 0, 0 }, { 0,107230 }, + { 1,11393 }, { 2,11393 }, { 3,11393 }, { 4,11393 }, { 5,11393 }, + { 6,11393 }, { 7,11393 }, { 8,11393 }, { 9,11393 }, { 10,5239 }, + { 11,11393 }, { 12,11393 }, { 13,5242 }, { 14,11393 }, { 15,11393 }, + { 16,11393 }, { 17,11393 }, { 18,11393 }, { 19,11393 }, { 20,11393 }, + { 21,11393 }, { 22,11393 }, { 23,11393 }, { 24,11393 }, { 25,11393 }, + { 26,11393 }, { 27,11393 }, { 28,11393 }, { 29,11393 }, { 30,11393 }, + { 31,11393 }, { 32,11393 }, { 33,11393 }, { 34,11393 }, { 35,11393 }, + { 36,11393 }, { 37,11393 }, { 38,11393 }, { 39,11393 }, { 40,11393 }, + + { 41,11393 }, { 42,11393 }, { 43,11393 }, { 44,11393 }, { 45,11393 }, + { 46,11393 }, { 47,11393 }, { 48,11393 }, { 49,11393 }, { 50,11393 }, + { 51,11393 }, { 52,11393 }, { 53,11393 }, { 54,11393 }, { 55,11393 }, + { 56,11393 }, { 57,11393 }, { 58,11393 }, { 59,11393 }, { 60,11393 }, + { 61,11393 }, { 62,11393 }, { 63,5254 }, { 64,11393 }, { 65,11393 }, + { 66,11393 }, { 67,11393 }, { 68,11393 }, { 69,11393 }, { 70,11393 }, + { 71,11393 }, { 72,11393 }, { 73,11393 }, { 74,11393 }, { 75,11393 }, + { 76,11393 }, { 77,11393 }, { 78,11393 }, { 79,11393 }, { 80,11393 }, + { 81,11393 }, { 82,11393 }, { 83,11393 }, { 84,11393 }, { 85,11393 }, + { 86,11393 }, { 87,11393 }, { 88,11393 }, { 89,11393 }, { 90,11393 }, + + { 91,11393 }, { 92,11393 }, { 93,11393 }, { 94,11393 }, { 95,11393 }, + { 96,11393 }, { 97,11393 }, { 98,11393 }, { 99,11393 }, { 100,11393 }, + { 101,11393 }, { 102,11393 }, { 103,11393 }, { 104,11393 }, { 105,11393 }, + { 106,11393 }, { 107,11393 }, { 108,11393 }, { 109,11393 }, { 110,11393 }, + { 111,11393 }, { 112,11393 }, { 113,11393 }, { 114,11393 }, { 115,11393 }, + { 116,11393 }, { 117,11393 }, { 118,11393 }, { 119,11393 }, { 120,11393 }, + { 121,11393 }, { 122,11393 }, { 123,11393 }, { 124,11393 }, { 125,11393 }, + { 126,11393 }, { 127,11393 }, { 128,11393 }, { 129,11393 }, { 130,11393 }, + { 131,11393 }, { 132,11393 }, { 133,11393 }, { 134,11393 }, { 135,11393 }, + { 136,11393 }, { 137,11393 }, { 138,11393 }, { 139,11393 }, { 140,11393 }, + + { 141,11393 }, { 142,11393 }, { 143,11393 }, { 144,11393 }, { 145,11393 }, + { 146,11393 }, { 147,11393 }, { 148,11393 }, { 149,11393 }, { 150,11393 }, + { 151,11393 }, { 152,11393 }, { 153,11393 }, { 154,11393 }, { 155,11393 }, + { 156,11393 }, { 157,11393 }, { 158,11393 }, { 159,11393 }, { 160,11393 }, + { 161,11393 }, { 162,11393 }, { 163,11393 }, { 164,11393 }, { 165,11393 }, + { 166,11393 }, { 167,11393 }, { 168,11393 }, { 169,11393 }, { 170,11393 }, + { 171,11393 }, { 172,11393 }, { 173,11393 }, { 174,11393 }, { 175,11393 }, + { 176,11393 }, { 177,11393 }, { 178,11393 }, { 179,11393 }, { 180,11393 }, + { 181,11393 }, { 182,11393 }, { 183,11393 }, { 184,11393 }, { 185,11393 }, + { 186,11393 }, { 187,11393 }, { 188,11393 }, { 189,11393 }, { 190,11393 }, + + { 191,11393 }, { 192,11393 }, { 193,11393 }, { 194,11393 }, { 195,11393 }, + { 196,11393 }, { 197,11393 }, { 198,11393 }, { 199,11393 }, { 200,11393 }, + { 201,11393 }, { 202,11393 }, { 203,11393 }, { 204,11393 }, { 205,11393 }, + { 206,11393 }, { 207,11393 }, { 208,11393 }, { 209,11393 }, { 210,11393 }, + { 211,11393 }, { 212,11393 }, { 213,11393 }, { 214,11393 }, { 215,11393 }, + { 216,11393 }, { 217,11393 }, { 218,11393 }, { 219,11393 }, { 220,11393 }, + { 221,11393 }, { 222,11393 }, { 223,11393 }, { 224,11393 }, { 225,11393 }, + { 226,11393 }, { 227,11393 }, { 228,11393 }, { 229,11393 }, { 230,11393 }, + { 231,11393 }, { 232,11393 }, { 233,11393 }, { 234,11393 }, { 235,11393 }, + { 236,11393 }, { 237,11393 }, { 238,11393 }, { 239,11393 }, { 240,11393 }, + + { 241,11393 }, { 242,11393 }, { 243,11393 }, { 244,11393 }, { 245,11393 }, + { 246,11393 }, { 247,11393 }, { 248,11393 }, { 249,11393 }, { 250,11393 }, + { 251,11393 }, { 252,11393 }, { 253,11393 }, { 254,11393 }, { 255,11393 }, + { 256,11393 }, { 0, 0 }, { 0,106972 }, { 1,10877 }, { 2,10877 }, + { 3,10877 }, { 4,10877 }, { 5,10877 }, { 6,10877 }, { 7,10877 }, + { 8,10877 }, { 9,10877 }, { 10,4934 }, { 11,10877 }, { 12,10877 }, + { 13,4969 }, { 14,10877 }, { 15,10877 }, { 16,10877 }, { 17,10877 }, + { 18,10877 }, { 19,10877 }, { 20,10877 }, { 21,10877 }, { 22,10877 }, + { 23,10877 }, { 24,10877 }, { 25,10877 }, { 26,10877 }, { 27,10877 }, + { 28,10877 }, { 29,10877 }, { 30,10877 }, { 31,10877 }, { 32,10877 }, + + { 33,10877 }, { 34,10877 }, { 35,10877 }, { 36,10877 }, { 37,10877 }, + { 38,10877 }, { 39,10877 }, { 40,10877 }, { 41,10877 }, { 42,5010 }, + { 43,10877 }, { 44,10877 }, { 45,10877 }, { 46,10877 }, { 47,10877 }, + { 48,10877 }, { 49,10877 }, { 50,10877 }, { 51,10877 }, { 52,10877 }, + { 53,10877 }, { 54,10877 }, { 55,10877 }, { 56,10877 }, { 57,10877 }, + { 58,10877 }, { 59,10877 }, { 60,10877 }, { 61,10877 }, { 62,10877 }, + { 63,10877 }, { 64,10877 }, { 65,10877 }, { 66,10877 }, { 67,10877 }, + { 68,10877 }, { 69,10877 }, { 70,10877 }, { 71,10877 }, { 72,10877 }, + { 73,10877 }, { 74,10877 }, { 75,10877 }, { 76,10877 }, { 77,10877 }, + { 78,10877 }, { 79,10877 }, { 80,10877 }, { 81,10877 }, { 82,10877 }, + + { 83,10877 }, { 84,10877 }, { 85,10877 }, { 86,10877 }, { 87,10877 }, + { 88,10877 }, { 89,10877 }, { 90,10877 }, { 91,10877 }, { 92,10877 }, + { 93,10877 }, { 94,10877 }, { 95,10877 }, { 96,10877 }, { 97,10877 }, + { 98,10877 }, { 99,10877 }, { 100,10877 }, { 101,10877 }, { 102,10877 }, + { 103,10877 }, { 104,10877 }, { 105,10877 }, { 106,10877 }, { 107,10877 }, + { 108,10877 }, { 109,10877 }, { 110,10877 }, { 111,10877 }, { 112,10877 }, + { 113,10877 }, { 114,10877 }, { 115,10877 }, { 116,10877 }, { 117,10877 }, + { 118,10877 }, { 119,10877 }, { 120,10877 }, { 121,10877 }, { 122,10877 }, + { 123,10877 }, { 124,10877 }, { 125,10877 }, { 126,10877 }, { 127,10877 }, + { 128,10877 }, { 129,10877 }, { 130,10877 }, { 131,10877 }, { 132,10877 }, + + { 133,10877 }, { 134,10877 }, { 135,10877 }, { 136,10877 }, { 137,10877 }, + { 138,10877 }, { 139,10877 }, { 140,10877 }, { 141,10877 }, { 142,10877 }, + { 143,10877 }, { 144,10877 }, { 145,10877 }, { 146,10877 }, { 147,10877 }, + { 148,10877 }, { 149,10877 }, { 150,10877 }, { 151,10877 }, { 152,10877 }, + { 153,10877 }, { 154,10877 }, { 155,10877 }, { 156,10877 }, { 157,10877 }, + { 158,10877 }, { 159,10877 }, { 160,10877 }, { 161,10877 }, { 162,10877 }, + { 163,10877 }, { 164,10877 }, { 165,10877 }, { 166,10877 }, { 167,10877 }, + { 168,10877 }, { 169,10877 }, { 170,10877 }, { 171,10877 }, { 172,10877 }, + { 173,10877 }, { 174,10877 }, { 175,10877 }, { 176,10877 }, { 177,10877 }, + { 178,10877 }, { 179,10877 }, { 180,10877 }, { 181,10877 }, { 182,10877 }, + + { 183,10877 }, { 184,10877 }, { 185,10877 }, { 186,10877 }, { 187,10877 }, + { 188,10877 }, { 189,10877 }, { 190,10877 }, { 191,10877 }, { 192,10877 }, + { 193,10877 }, { 194,10877 }, { 195,10877 }, { 196,10877 }, { 197,10877 }, + { 198,10877 }, { 199,10877 }, { 200,10877 }, { 201,10877 }, { 202,10877 }, + { 203,10877 }, { 204,10877 }, { 205,10877 }, { 206,10877 }, { 207,10877 }, + { 208,10877 }, { 209,10877 }, { 210,10877 }, { 211,10877 }, { 212,10877 }, + { 213,10877 }, { 214,10877 }, { 215,10877 }, { 216,10877 }, { 217,10877 }, + { 218,10877 }, { 219,10877 }, { 220,10877 }, { 221,10877 }, { 222,10877 }, + { 223,10877 }, { 224,10877 }, { 225,10877 }, { 226,10877 }, { 227,10877 }, + { 228,10877 }, { 229,10877 }, { 230,10877 }, { 231,10877 }, { 232,10877 }, + + { 233,10877 }, { 234,10877 }, { 235,10877 }, { 236,10877 }, { 237,10877 }, + { 238,10877 }, { 239,10877 }, { 240,10877 }, { 241,10877 }, { 242,10877 }, + { 243,10877 }, { 244,10877 }, { 245,10877 }, { 246,10877 }, { 247,10877 }, + { 248,10877 }, { 249,10877 }, { 250,10877 }, { 251,10877 }, { 252,10877 }, + { 253,10877 }, { 254,10877 }, { 255,10877 }, { 256,10877 }, { 0, 0 }, + { 0,106714 }, { 1,10619 }, { 2,10619 }, { 3,10619 }, { 4,10619 }, + { 5,10619 }, { 6,10619 }, { 7,10619 }, { 8,10619 }, { 9,10619 }, + { 10,4676 }, { 11,10619 }, { 12,10619 }, { 13,4711 }, { 14,10619 }, + { 15,10619 }, { 16,10619 }, { 17,10619 }, { 18,10619 }, { 19,10619 }, + { 20,10619 }, { 21,10619 }, { 22,10619 }, { 23,10619 }, { 24,10619 }, + + { 25,10619 }, { 26,10619 }, { 27,10619 }, { 28,10619 }, { 29,10619 }, + { 30,10619 }, { 31,10619 }, { 32,10619 }, { 33,10619 }, { 34,10619 }, + { 35,10619 }, { 36,10619 }, { 37,10619 }, { 38,10619 }, { 39,10619 }, + { 40,10619 }, { 41,10619 }, { 42,4752 }, { 43,10619 }, { 44,10619 }, + { 45,10619 }, { 46,10619 }, { 47,10619 }, { 48,10619 }, { 49,10619 }, + { 50,10619 }, { 51,10619 }, { 52,10619 }, { 53,10619 }, { 54,10619 }, + { 55,10619 }, { 56,10619 }, { 57,10619 }, { 58,10619 }, { 59,10619 }, + { 60,10619 }, { 61,10619 }, { 62,10619 }, { 63,10619 }, { 64,10619 }, + { 65,10619 }, { 66,10619 }, { 67,10619 }, { 68,10619 }, { 69,10619 }, + { 70,10619 }, { 71,10619 }, { 72,10619 }, { 73,10619 }, { 74,10619 }, + + { 75,10619 }, { 76,10619 }, { 77,10619 }, { 78,10619 }, { 79,10619 }, + { 80,10619 }, { 81,10619 }, { 82,10619 }, { 83,10619 }, { 84,10619 }, + { 85,10619 }, { 86,10619 }, { 87,10619 }, { 88,10619 }, { 89,10619 }, + { 90,10619 }, { 91,10619 }, { 92,10619 }, { 93,10619 }, { 94,10619 }, + { 95,10619 }, { 96,10619 }, { 97,10619 }, { 98,10619 }, { 99,10619 }, + { 100,10619 }, { 101,10619 }, { 102,10619 }, { 103,10619 }, { 104,10619 }, + { 105,10619 }, { 106,10619 }, { 107,10619 }, { 108,10619 }, { 109,10619 }, + { 110,10619 }, { 111,10619 }, { 112,10619 }, { 113,10619 }, { 114,10619 }, + { 115,10619 }, { 116,10619 }, { 117,10619 }, { 118,10619 }, { 119,10619 }, + { 120,10619 }, { 121,10619 }, { 122,10619 }, { 123,10619 }, { 124,10619 }, + + { 125,10619 }, { 126,10619 }, { 127,10619 }, { 128,10619 }, { 129,10619 }, + { 130,10619 }, { 131,10619 }, { 132,10619 }, { 133,10619 }, { 134,10619 }, + { 135,10619 }, { 136,10619 }, { 137,10619 }, { 138,10619 }, { 139,10619 }, + { 140,10619 }, { 141,10619 }, { 142,10619 }, { 143,10619 }, { 144,10619 }, + { 145,10619 }, { 146,10619 }, { 147,10619 }, { 148,10619 }, { 149,10619 }, + { 150,10619 }, { 151,10619 }, { 152,10619 }, { 153,10619 }, { 154,10619 }, + { 155,10619 }, { 156,10619 }, { 157,10619 }, { 158,10619 }, { 159,10619 }, + { 160,10619 }, { 161,10619 }, { 162,10619 }, { 163,10619 }, { 164,10619 }, + { 165,10619 }, { 166,10619 }, { 167,10619 }, { 168,10619 }, { 169,10619 }, + { 170,10619 }, { 171,10619 }, { 172,10619 }, { 173,10619 }, { 174,10619 }, + + { 175,10619 }, { 176,10619 }, { 177,10619 }, { 178,10619 }, { 179,10619 }, + { 180,10619 }, { 181,10619 }, { 182,10619 }, { 183,10619 }, { 184,10619 }, + { 185,10619 }, { 186,10619 }, { 187,10619 }, { 188,10619 }, { 189,10619 }, + { 190,10619 }, { 191,10619 }, { 192,10619 }, { 193,10619 }, { 194,10619 }, + { 195,10619 }, { 196,10619 }, { 197,10619 }, { 198,10619 }, { 199,10619 }, + { 200,10619 }, { 201,10619 }, { 202,10619 }, { 203,10619 }, { 204,10619 }, + { 205,10619 }, { 206,10619 }, { 207,10619 }, { 208,10619 }, { 209,10619 }, + { 210,10619 }, { 211,10619 }, { 212,10619 }, { 213,10619 }, { 214,10619 }, + { 215,10619 }, { 216,10619 }, { 217,10619 }, { 218,10619 }, { 219,10619 }, + { 220,10619 }, { 221,10619 }, { 222,10619 }, { 223,10619 }, { 224,10619 }, + + { 225,10619 }, { 226,10619 }, { 227,10619 }, { 228,10619 }, { 229,10619 }, + { 230,10619 }, { 231,10619 }, { 232,10619 }, { 233,10619 }, { 234,10619 }, + { 235,10619 }, { 236,10619 }, { 237,10619 }, { 238,10619 }, { 239,10619 }, + { 240,10619 }, { 241,10619 }, { 242,10619 }, { 243,10619 }, { 244,10619 }, + { 245,10619 }, { 246,10619 }, { 247,10619 }, { 248,10619 }, { 249,10619 }, + { 250,10619 }, { 251,10619 }, { 252,10619 }, { 253,10619 }, { 254,10619 }, + { 255,10619 }, { 256,10619 }, { 0, 0 }, { 0,106456 }, { 1,3356 }, + { 2,3356 }, { 3,3356 }, { 4,3356 }, { 5,3356 }, { 6,3356 }, + { 7,3356 }, { 8,3356 }, { 9,3356 }, { 10,3356 }, { 11,3356 }, + { 12,3356 }, { 13,3356 }, { 14,3356 }, { 15,3356 }, { 16,3356 }, + + { 17,3356 }, { 18,3356 }, { 19,3356 }, { 20,3356 }, { 21,3356 }, + { 22,3356 }, { 23,3356 }, { 24,3356 }, { 25,3356 }, { 26,3356 }, + { 27,3356 }, { 28,3356 }, { 29,3356 }, { 30,3356 }, { 31,3356 }, + { 32,3356 }, { 33,3356 }, { 34,10877 }, { 35,3356 }, { 36,3356 }, + { 37,3356 }, { 38,3356 }, { 39,11134 }, { 40,3356 }, { 41,3356 }, + { 42,3356 }, { 43,3356 }, { 44,3356 }, { 45,3356 }, { 46,3356 }, + { 47,3356 }, { 48,3356 }, { 49,3356 }, { 50,3356 }, { 51,3356 }, + { 52,3356 }, { 53,3356 }, { 54,3356 }, { 55,3356 }, { 56,3356 }, + { 57,3356 }, { 58,3356 }, { 59,3356 }, { 60,3356 }, { 61,3356 }, + { 62,3356 }, { 63,3356 }, { 64,3356 }, { 65,11391 }, { 66,11391 }, + + { 67,11391 }, { 68,11391 }, { 69,11391 }, { 70,11391 }, { 71,11391 }, + { 72,11391 }, { 73,11391 }, { 74,11391 }, { 75,11391 }, { 76,11391 }, + { 77,11391 }, { 78,11391 }, { 79,11391 }, { 80,11391 }, { 81,11391 }, + { 82,11391 }, { 83,11391 }, { 84,11391 }, { 85,11391 }, { 86,11391 }, + { 87,11391 }, { 88,11391 }, { 89,11391 }, { 90,11391 }, { 91,3356 }, + { 92,3356 }, { 93,3356 }, { 94,3356 }, { 95,11391 }, { 96,3356 }, + { 97,11391 }, { 98,11391 }, { 99,11391 }, { 100,11391 }, { 101,11391 }, + { 102,11391 }, { 103,11391 }, { 104,11391 }, { 105,11391 }, { 106,11391 }, + { 107,11391 }, { 108,11391 }, { 109,11391 }, { 110,11391 }, { 111,11391 }, + { 112,11391 }, { 113,11391 }, { 114,11391 }, { 115,11391 }, { 116,11391 }, + + { 117,11391 }, { 118,11391 }, { 119,11391 }, { 120,11391 }, { 121,11391 }, + { 122,11391 }, { 123,3356 }, { 124,3356 }, { 125,3356 }, { 126,3356 }, + { 127,11391 }, { 128,11391 }, { 129,11391 }, { 130,11391 }, { 131,11391 }, + { 132,11391 }, { 133,11391 }, { 134,11391 }, { 135,11391 }, { 136,11391 }, + { 137,11391 }, { 138,11391 }, { 139,11391 }, { 140,11391 }, { 141,11391 }, + { 142,11391 }, { 143,11391 }, { 144,11391 }, { 145,11391 }, { 146,11391 }, + { 147,11391 }, { 148,11391 }, { 149,11391 }, { 150,11391 }, { 151,11391 }, + { 152,11391 }, { 153,11391 }, { 154,11391 }, { 155,11391 }, { 156,11391 }, + { 157,11391 }, { 158,11391 }, { 159,11391 }, { 160,11391 }, { 161,11391 }, + { 162,11391 }, { 163,11391 }, { 164,11391 }, { 165,11391 }, { 166,11391 }, + + { 167,11391 }, { 168,11391 }, { 169,11391 }, { 170,11391 }, { 171,11391 }, + { 172,11391 }, { 173,11391 }, { 174,11391 }, { 175,11391 }, { 176,11391 }, + { 177,11391 }, { 178,11391 }, { 179,11391 }, { 180,11391 }, { 181,11391 }, + { 182,11391 }, { 183,11391 }, { 184,11391 }, { 185,11391 }, { 186,11391 }, + { 187,11391 }, { 188,11391 }, { 189,11391 }, { 190,11391 }, { 191,11391 }, + { 192,11391 }, { 193,11391 }, { 194,11391 }, { 195,11391 }, { 196,11391 }, + { 197,11391 }, { 198,11391 }, { 199,11391 }, { 200,11391 }, { 201,11391 }, + { 202,11391 }, { 203,11391 }, { 204,11391 }, { 205,11391 }, { 206,11391 }, + { 207,11391 }, { 208,11391 }, { 209,11391 }, { 210,11391 }, { 211,11391 }, + { 212,11391 }, { 213,11391 }, { 214,11391 }, { 215,11391 }, { 216,11391 }, + + { 217,11391 }, { 218,11391 }, { 219,11391 }, { 220,11391 }, { 221,11391 }, + { 222,11391 }, { 223,11391 }, { 224,11391 }, { 225,11391 }, { 226,11391 }, + { 227,11391 }, { 228,11391 }, { 229,11391 }, { 230,11391 }, { 231,11391 }, + { 232,11391 }, { 233,11391 }, { 234,11391 }, { 235,11391 }, { 236,11391 }, + { 237,11391 }, { 238,11391 }, { 239,11391 }, { 240,11391 }, { 241,11391 }, + { 242,11391 }, { 243,11391 }, { 244,11391 }, { 245,11391 }, { 246,11391 }, + { 247,11391 }, { 248,11391 }, { 249,11391 }, { 250,11391 }, { 251,11391 }, + { 252,11391 }, { 253,11391 }, { 254,11391 }, { 255,11391 }, { 256,3356 }, + { 0, 0 }, { 0,106198 }, { 1,3098 }, { 2,3098 }, { 3,3098 }, + { 4,3098 }, { 5,3098 }, { 6,3098 }, { 7,3098 }, { 8,3098 }, + + { 9,3098 }, { 10,3098 }, { 11,3098 }, { 12,3098 }, { 13,3098 }, + { 14,3098 }, { 15,3098 }, { 16,3098 }, { 17,3098 }, { 18,3098 }, + { 19,3098 }, { 20,3098 }, { 21,3098 }, { 22,3098 }, { 23,3098 }, + { 24,3098 }, { 25,3098 }, { 26,3098 }, { 27,3098 }, { 28,3098 }, + { 29,3098 }, { 30,3098 }, { 31,3098 }, { 32,3098 }, { 33,3098 }, + { 34,10619 }, { 35,3098 }, { 36,3098 }, { 37,3098 }, { 38,3098 }, + { 39,10876 }, { 40,3098 }, { 41,3098 }, { 42,3098 }, { 43,3098 }, + { 44,3098 }, { 45,3098 }, { 46,3098 }, { 47,3098 }, { 48,3098 }, + { 49,3098 }, { 50,3098 }, { 51,3098 }, { 52,3098 }, { 53,3098 }, + { 54,3098 }, { 55,3098 }, { 56,3098 }, { 57,3098 }, { 58,3098 }, + + { 59,3098 }, { 60,3098 }, { 61,3098 }, { 62,3098 }, { 63,3098 }, + { 64,3098 }, { 65,11133 }, { 66,11133 }, { 67,11133 }, { 68,11133 }, + { 69,11133 }, { 70,11133 }, { 71,11133 }, { 72,11133 }, { 73,11133 }, + { 74,11133 }, { 75,11133 }, { 76,11133 }, { 77,11133 }, { 78,11133 }, + { 79,11133 }, { 80,11133 }, { 81,11133 }, { 82,11133 }, { 83,11133 }, + { 84,11133 }, { 85,11133 }, { 86,11133 }, { 87,11133 }, { 88,11133 }, + { 89,11133 }, { 90,11133 }, { 91,3098 }, { 92,3098 }, { 93,3098 }, + { 94,3098 }, { 95,11133 }, { 96,3098 }, { 97,11133 }, { 98,11133 }, + { 99,11133 }, { 100,11133 }, { 101,11133 }, { 102,11133 }, { 103,11133 }, + { 104,11133 }, { 105,11133 }, { 106,11133 }, { 107,11133 }, { 108,11133 }, + + { 109,11133 }, { 110,11133 }, { 111,11133 }, { 112,11133 }, { 113,11133 }, + { 114,11133 }, { 115,11133 }, { 116,11133 }, { 117,11133 }, { 118,11133 }, + { 119,11133 }, { 120,11133 }, { 121,11133 }, { 122,11133 }, { 123,3098 }, + { 124,3098 }, { 125,3098 }, { 126,3098 }, { 127,11133 }, { 128,11133 }, + { 129,11133 }, { 130,11133 }, { 131,11133 }, { 132,11133 }, { 133,11133 }, + { 134,11133 }, { 135,11133 }, { 136,11133 }, { 137,11133 }, { 138,11133 }, + { 139,11133 }, { 140,11133 }, { 141,11133 }, { 142,11133 }, { 143,11133 }, + { 144,11133 }, { 145,11133 }, { 146,11133 }, { 147,11133 }, { 148,11133 }, + { 149,11133 }, { 150,11133 }, { 151,11133 }, { 152,11133 }, { 153,11133 }, + { 154,11133 }, { 155,11133 }, { 156,11133 }, { 157,11133 }, { 158,11133 }, + + { 159,11133 }, { 160,11133 }, { 161,11133 }, { 162,11133 }, { 163,11133 }, + { 164,11133 }, { 165,11133 }, { 166,11133 }, { 167,11133 }, { 168,11133 }, + { 169,11133 }, { 170,11133 }, { 171,11133 }, { 172,11133 }, { 173,11133 }, + { 174,11133 }, { 175,11133 }, { 176,11133 }, { 177,11133 }, { 178,11133 }, + { 179,11133 }, { 180,11133 }, { 181,11133 }, { 182,11133 }, { 183,11133 }, + { 184,11133 }, { 185,11133 }, { 186,11133 }, { 187,11133 }, { 188,11133 }, + { 189,11133 }, { 190,11133 }, { 191,11133 }, { 192,11133 }, { 193,11133 }, + { 194,11133 }, { 195,11133 }, { 196,11133 }, { 197,11133 }, { 198,11133 }, + { 199,11133 }, { 200,11133 }, { 201,11133 }, { 202,11133 }, { 203,11133 }, + { 204,11133 }, { 205,11133 }, { 206,11133 }, { 207,11133 }, { 208,11133 }, + + { 209,11133 }, { 210,11133 }, { 211,11133 }, { 212,11133 }, { 213,11133 }, + { 214,11133 }, { 215,11133 }, { 216,11133 }, { 217,11133 }, { 218,11133 }, + { 219,11133 }, { 220,11133 }, { 221,11133 }, { 222,11133 }, { 223,11133 }, + { 224,11133 }, { 225,11133 }, { 226,11133 }, { 227,11133 }, { 228,11133 }, + { 229,11133 }, { 230,11133 }, { 231,11133 }, { 232,11133 }, { 233,11133 }, + { 234,11133 }, { 235,11133 }, { 236,11133 }, { 237,11133 }, { 238,11133 }, + { 239,11133 }, { 240,11133 }, { 241,11133 }, { 242,11133 }, { 243,11133 }, + { 244,11133 }, { 245,11133 }, { 246,11133 }, { 247,11133 }, { 248,11133 }, + { 249,11133 }, { 250,11133 }, { 251,11133 }, { 252,11133 }, { 253,11133 }, + { 254,11133 }, { 255,11133 }, { 256,3098 }, { 0, 0 }, { 0,105940 }, + + { 1,2840 }, { 2,2840 }, { 3,2840 }, { 4,2840 }, { 5,2840 }, + { 6,2840 }, { 7,2840 }, { 8,2840 }, { 9,2840 }, { 10,3980 }, + { 11,2840 }, { 12,2840 }, { 13,4192 }, { 14,2840 }, { 15,2840 }, + { 16,2840 }, { 17,2840 }, { 18,2840 }, { 19,2840 }, { 20,2840 }, + { 21,2840 }, { 22,2840 }, { 23,2840 }, { 24,2840 }, { 25,2840 }, + { 26,2840 }, { 27,2840 }, { 28,2840 }, { 29,2840 }, { 30,2840 }, + { 31,2840 }, { 32,2840 }, { 33,2840 }, { 34,2840 }, { 35,2840 }, + { 36,2840 }, { 37,2840 }, { 38,2840 }, { 39,2840 }, { 40,2840 }, + { 41,2840 }, { 42,2840 }, { 43,2840 }, { 44,2840 }, { 45,2840 }, + { 46,2840 }, { 47,2840 }, { 48,2840 }, { 49,2840 }, { 50,2840 }, + + { 51,2840 }, { 52,2840 }, { 53,2840 }, { 54,2840 }, { 55,2840 }, + { 56,2840 }, { 57,2840 }, { 58,2840 }, { 59,2840 }, { 60,2840 }, + { 61,2840 }, { 62,2840 }, { 63,2840 }, { 64,2840 }, { 65,2840 }, + { 66,2840 }, { 67,2840 }, { 68,2840 }, { 69,2840 }, { 70,2840 }, + { 71,2840 }, { 72,2840 }, { 73,2840 }, { 74,2840 }, { 75,2840 }, + { 76,2840 }, { 77,2840 }, { 78,2840 }, { 79,2840 }, { 80,2840 }, + { 81,2840 }, { 82,2840 }, { 83,2840 }, { 84,2840 }, { 85,2840 }, + { 86,2840 }, { 87,2840 }, { 88,2840 }, { 89,2840 }, { 90,2840 }, + { 91,2840 }, { 92,2840 }, { 93,2840 }, { 94,2840 }, { 95,2840 }, + { 96,2840 }, { 97,2840 }, { 98,2840 }, { 99,2840 }, { 100,2840 }, + + { 101,2840 }, { 102,2840 }, { 103,2840 }, { 104,2840 }, { 105,2840 }, + { 106,2840 }, { 107,2840 }, { 108,2840 }, { 109,2840 }, { 110,2840 }, + { 111,2840 }, { 112,2840 }, { 113,2840 }, { 114,2840 }, { 115,2840 }, + { 116,2840 }, { 117,2840 }, { 118,2840 }, { 119,2840 }, { 120,2840 }, + { 121,2840 }, { 122,2840 }, { 123,2840 }, { 124,2840 }, { 125,2840 }, + { 126,2840 }, { 127,2840 }, { 128,2840 }, { 129,2840 }, { 130,2840 }, + { 131,2840 }, { 132,2840 }, { 133,2840 }, { 134,2840 }, { 135,2840 }, + { 136,2840 }, { 137,2840 }, { 138,2840 }, { 139,2840 }, { 140,2840 }, + { 141,2840 }, { 142,2840 }, { 143,2840 }, { 144,2840 }, { 145,2840 }, + { 146,2840 }, { 147,2840 }, { 148,2840 }, { 149,2840 }, { 150,2840 }, + + { 151,2840 }, { 152,2840 }, { 153,2840 }, { 154,2840 }, { 155,2840 }, + { 156,2840 }, { 157,2840 }, { 158,2840 }, { 159,2840 }, { 160,2840 }, + { 161,2840 }, { 162,2840 }, { 163,2840 }, { 164,2840 }, { 165,2840 }, + { 166,2840 }, { 167,2840 }, { 168,2840 }, { 169,2840 }, { 170,2840 }, + { 171,2840 }, { 172,2840 }, { 173,2840 }, { 174,2840 }, { 175,2840 }, + { 176,2840 }, { 177,2840 }, { 178,2840 }, { 179,2840 }, { 180,2840 }, + { 181,2840 }, { 182,2840 }, { 183,2840 }, { 184,2840 }, { 185,2840 }, + { 186,2840 }, { 187,2840 }, { 188,2840 }, { 189,2840 }, { 190,2840 }, + { 191,2840 }, { 192,2840 }, { 193,2840 }, { 194,2840 }, { 195,2840 }, + { 196,2840 }, { 197,2840 }, { 198,2840 }, { 199,2840 }, { 200,2840 }, + + { 201,2840 }, { 202,2840 }, { 203,2840 }, { 204,2840 }, { 205,2840 }, + { 206,2840 }, { 207,2840 }, { 208,2840 }, { 209,2840 }, { 210,2840 }, + { 211,2840 }, { 212,2840 }, { 213,2840 }, { 214,2840 }, { 215,2840 }, + { 216,2840 }, { 217,2840 }, { 218,2840 }, { 219,2840 }, { 220,2840 }, + { 221,2840 }, { 222,2840 }, { 223,2840 }, { 224,2840 }, { 225,2840 }, + { 226,2840 }, { 227,2840 }, { 228,2840 }, { 229,2840 }, { 230,2840 }, + { 231,2840 }, { 232,2840 }, { 233,2840 }, { 234,2840 }, { 235,2840 }, + { 236,2840 }, { 237,2840 }, { 238,2840 }, { 239,2840 }, { 240,2840 }, + { 241,2840 }, { 242,2840 }, { 243,2840 }, { 244,2840 }, { 245,2840 }, + { 246,2840 }, { 247,2840 }, { 248,2840 }, { 249,2840 }, { 250,2840 }, + + { 251,2840 }, { 252,2840 }, { 253,2840 }, { 254,2840 }, { 255,2840 }, + { 256,2840 }, { 0, 0 }, { 0,105682 }, { 1,2582 }, { 2,2582 }, + { 3,2582 }, { 4,2582 }, { 5,2582 }, { 6,2582 }, { 7,2582 }, + { 8,2582 }, { 9,2582 }, { 10,3722 }, { 11,2582 }, { 12,2582 }, + { 13,3934 }, { 14,2582 }, { 15,2582 }, { 16,2582 }, { 17,2582 }, + { 18,2582 }, { 19,2582 }, { 20,2582 }, { 21,2582 }, { 22,2582 }, + { 23,2582 }, { 24,2582 }, { 25,2582 }, { 26,2582 }, { 27,2582 }, + { 28,2582 }, { 29,2582 }, { 30,2582 }, { 31,2582 }, { 32,2582 }, + { 33,2582 }, { 34,2582 }, { 35,2582 }, { 36,2582 }, { 37,2582 }, + { 38,2582 }, { 39,2582 }, { 40,2582 }, { 41,2582 }, { 42,2582 }, + + { 43,2582 }, { 44,2582 }, { 45,2582 }, { 46,2582 }, { 47,2582 }, + { 48,2582 }, { 49,2582 }, { 50,2582 }, { 51,2582 }, { 52,2582 }, + { 53,2582 }, { 54,2582 }, { 55,2582 }, { 56,2582 }, { 57,2582 }, + { 58,2582 }, { 59,2582 }, { 60,2582 }, { 61,2582 }, { 62,2582 }, + { 63,2582 }, { 64,2582 }, { 65,2582 }, { 66,2582 }, { 67,2582 }, + { 68,2582 }, { 69,2582 }, { 70,2582 }, { 71,2582 }, { 72,2582 }, + { 73,2582 }, { 74,2582 }, { 75,2582 }, { 76,2582 }, { 77,2582 }, + { 78,2582 }, { 79,2582 }, { 80,2582 }, { 81,2582 }, { 82,2582 }, + { 83,2582 }, { 84,2582 }, { 85,2582 }, { 86,2582 }, { 87,2582 }, + { 88,2582 }, { 89,2582 }, { 90,2582 }, { 91,2582 }, { 92,2582 }, + + { 93,2582 }, { 94,2582 }, { 95,2582 }, { 96,2582 }, { 97,2582 }, + { 98,2582 }, { 99,2582 }, { 100,2582 }, { 101,2582 }, { 102,2582 }, + { 103,2582 }, { 104,2582 }, { 105,2582 }, { 106,2582 }, { 107,2582 }, + { 108,2582 }, { 109,2582 }, { 110,2582 }, { 111,2582 }, { 112,2582 }, + { 113,2582 }, { 114,2582 }, { 115,2582 }, { 116,2582 }, { 117,2582 }, + { 118,2582 }, { 119,2582 }, { 120,2582 }, { 121,2582 }, { 122,2582 }, + { 123,2582 }, { 124,2582 }, { 125,2582 }, { 126,2582 }, { 127,2582 }, + { 128,2582 }, { 129,2582 }, { 130,2582 }, { 131,2582 }, { 132,2582 }, + { 133,2582 }, { 134,2582 }, { 135,2582 }, { 136,2582 }, { 137,2582 }, + { 138,2582 }, { 139,2582 }, { 140,2582 }, { 141,2582 }, { 142,2582 }, + + { 143,2582 }, { 144,2582 }, { 145,2582 }, { 146,2582 }, { 147,2582 }, + { 148,2582 }, { 149,2582 }, { 150,2582 }, { 151,2582 }, { 152,2582 }, + { 153,2582 }, { 154,2582 }, { 155,2582 }, { 156,2582 }, { 157,2582 }, + { 158,2582 }, { 159,2582 }, { 160,2582 }, { 161,2582 }, { 162,2582 }, + { 163,2582 }, { 164,2582 }, { 165,2582 }, { 166,2582 }, { 167,2582 }, + { 168,2582 }, { 169,2582 }, { 170,2582 }, { 171,2582 }, { 172,2582 }, + { 173,2582 }, { 174,2582 }, { 175,2582 }, { 176,2582 }, { 177,2582 }, + { 178,2582 }, { 179,2582 }, { 180,2582 }, { 181,2582 }, { 182,2582 }, + { 183,2582 }, { 184,2582 }, { 185,2582 }, { 186,2582 }, { 187,2582 }, + { 188,2582 }, { 189,2582 }, { 190,2582 }, { 191,2582 }, { 192,2582 }, + + { 193,2582 }, { 194,2582 }, { 195,2582 }, { 196,2582 }, { 197,2582 }, + { 198,2582 }, { 199,2582 }, { 200,2582 }, { 201,2582 }, { 202,2582 }, + { 203,2582 }, { 204,2582 }, { 205,2582 }, { 206,2582 }, { 207,2582 }, + { 208,2582 }, { 209,2582 }, { 210,2582 }, { 211,2582 }, { 212,2582 }, + { 213,2582 }, { 214,2582 }, { 215,2582 }, { 216,2582 }, { 217,2582 }, + { 218,2582 }, { 219,2582 }, { 220,2582 }, { 221,2582 }, { 222,2582 }, + { 223,2582 }, { 224,2582 }, { 225,2582 }, { 226,2582 }, { 227,2582 }, + { 228,2582 }, { 229,2582 }, { 230,2582 }, { 231,2582 }, { 232,2582 }, + { 233,2582 }, { 234,2582 }, { 235,2582 }, { 236,2582 }, { 237,2582 }, + { 238,2582 }, { 239,2582 }, { 240,2582 }, { 241,2582 }, { 242,2582 }, + + { 243,2582 }, { 244,2582 }, { 245,2582 }, { 246,2582 }, { 247,2582 }, + { 248,2582 }, { 249,2582 }, { 250,2582 }, { 251,2582 }, { 252,2582 }, + { 253,2582 }, { 254,2582 }, { 255,2582 }, { 256,2582 }, { 0, 0 }, + { 0,105424 }, { 1,10616 }, { 2,10616 }, { 3,10616 }, { 4,10616 }, + { 5,10616 }, { 6,10616 }, { 7,10616 }, { 8,10616 }, { 9,10616 }, + { 10,3678 }, { 11,10616 }, { 12,10616 }, { 13,3680 }, { 14,10616 }, + { 15,10616 }, { 16,10616 }, { 17,10616 }, { 18,10616 }, { 19,10616 }, + { 20,10616 }, { 21,10616 }, { 22,10616 }, { 23,10616 }, { 24,10616 }, + { 25,10616 }, { 26,10616 }, { 27,10616 }, { 28,10616 }, { 29,10616 }, + { 30,10616 }, { 31,10616 }, { 32,10616 }, { 33,10616 }, { 34,10616 }, + + { 35,10616 }, { 36,10616 }, { 37,10616 }, { 38,10616 }, { 39,10616 }, + { 40,10616 }, { 41,10616 }, { 42,10616 }, { 43,10616 }, { 44,10616 }, + { 45,10616 }, { 46,10616 }, { 47,10616 }, { 48,10616 }, { 49,10616 }, + { 50,10616 }, { 51,10616 }, { 52,10616 }, { 53,10616 }, { 54,10616 }, + { 55,10616 }, { 56,10616 }, { 57,10616 }, { 58,10616 }, { 59,10616 }, + { 60,10616 }, { 61,10616 }, { 62,10616 }, { 63,10616 }, { 64,10616 }, + { 65,10874 }, { 66,10874 }, { 67,10874 }, { 68,10874 }, { 69,10874 }, + { 70,10874 }, { 71,10874 }, { 72,10874 }, { 73,10874 }, { 74,10874 }, + { 75,10874 }, { 76,10874 }, { 77,10874 }, { 78,10874 }, { 79,10874 }, + { 80,10874 }, { 81,10874 }, { 82,10874 }, { 83,10874 }, { 84,10874 }, + + { 85,10874 }, { 86,10874 }, { 87,10874 }, { 88,10874 }, { 89,10874 }, + { 90,10874 }, { 91,10616 }, { 92,10616 }, { 93,10616 }, { 94,10616 }, + { 95,10874 }, { 96,10616 }, { 97,10874 }, { 98,10874 }, { 99,10874 }, + { 100,10874 }, { 101,10874 }, { 102,10874 }, { 103,10874 }, { 104,10874 }, + { 105,10874 }, { 106,10874 }, { 107,10874 }, { 108,10874 }, { 109,10874 }, + { 110,10874 }, { 111,10874 }, { 112,10874 }, { 113,10874 }, { 114,10874 }, + { 115,10874 }, { 116,10874 }, { 117,10874 }, { 118,10874 }, { 119,10874 }, + { 120,10874 }, { 121,10874 }, { 122,10874 }, { 123,10616 }, { 124,10616 }, + { 125,10616 }, { 126,10616 }, { 127,10874 }, { 128,10874 }, { 129,10874 }, + { 130,10874 }, { 131,10874 }, { 132,10874 }, { 133,10874 }, { 134,10874 }, + + { 135,10874 }, { 136,10874 }, { 137,10874 }, { 138,10874 }, { 139,10874 }, + { 140,10874 }, { 141,10874 }, { 142,10874 }, { 143,10874 }, { 144,10874 }, + { 145,10874 }, { 146,10874 }, { 147,10874 }, { 148,10874 }, { 149,10874 }, + { 150,10874 }, { 151,10874 }, { 152,10874 }, { 153,10874 }, { 154,10874 }, + { 155,10874 }, { 156,10874 }, { 157,10874 }, { 158,10874 }, { 159,10874 }, + { 160,10874 }, { 161,10874 }, { 162,10874 }, { 163,10874 }, { 164,10874 }, + { 165,10874 }, { 166,10874 }, { 167,10874 }, { 168,10874 }, { 169,10874 }, + { 170,10874 }, { 171,10874 }, { 172,10874 }, { 173,10874 }, { 174,10874 }, + { 175,10874 }, { 176,10874 }, { 177,10874 }, { 178,10874 }, { 179,10874 }, + { 180,10874 }, { 181,10874 }, { 182,10874 }, { 183,10874 }, { 184,10874 }, + + { 185,10874 }, { 186,10874 }, { 187,10874 }, { 188,10874 }, { 189,10874 }, + { 190,10874 }, { 191,10874 }, { 192,10874 }, { 193,10874 }, { 194,10874 }, + { 195,10874 }, { 196,10874 }, { 197,10874 }, { 198,10874 }, { 199,10874 }, + { 200,10874 }, { 201,10874 }, { 202,10874 }, { 203,10874 }, { 204,10874 }, + { 205,10874 }, { 206,10874 }, { 207,10874 }, { 208,10874 }, { 209,10874 }, + { 210,10874 }, { 211,10874 }, { 212,10874 }, { 213,10874 }, { 214,10874 }, + { 215,10874 }, { 216,10874 }, { 217,10874 }, { 218,10874 }, { 219,10874 }, + { 220,10874 }, { 221,10874 }, { 222,10874 }, { 223,10874 }, { 224,10874 }, + { 225,10874 }, { 226,10874 }, { 227,10874 }, { 228,10874 }, { 229,10874 }, + { 230,10874 }, { 231,10874 }, { 232,10874 }, { 233,10874 }, { 234,10874 }, + + { 235,10874 }, { 236,10874 }, { 237,10874 }, { 238,10874 }, { 239,10874 }, + { 240,10874 }, { 241,10874 }, { 242,10874 }, { 243,10874 }, { 244,10874 }, + { 245,10874 }, { 246,10874 }, { 247,10874 }, { 248,10874 }, { 249,10874 }, + { 250,10874 }, { 251,10874 }, { 252,10874 }, { 253,10874 }, { 254,10874 }, + { 255,10874 }, { 256,10616 }, { 0, 0 }, { 0,105166 }, { 1,10358 }, + { 2,10358 }, { 3,10358 }, { 4,10358 }, { 5,10358 }, { 6,10358 }, + { 7,10358 }, { 8,10358 }, { 9,10358 }, { 10,3420 }, { 11,10358 }, + { 12,10358 }, { 13,3422 }, { 14,10358 }, { 15,10358 }, { 16,10358 }, + { 17,10358 }, { 18,10358 }, { 19,10358 }, { 20,10358 }, { 21,10358 }, + { 22,10358 }, { 23,10358 }, { 24,10358 }, { 25,10358 }, { 26,10358 }, + + { 27,10358 }, { 28,10358 }, { 29,10358 }, { 30,10358 }, { 31,10358 }, + { 32,10358 }, { 33,10358 }, { 34,10358 }, { 35,10358 }, { 36,10358 }, + { 37,10358 }, { 38,10358 }, { 39,10358 }, { 40,10358 }, { 41,10358 }, + { 42,10358 }, { 43,10358 }, { 44,10358 }, { 45,10358 }, { 46,10358 }, + { 47,10358 }, { 48,10358 }, { 49,10358 }, { 50,10358 }, { 51,10358 }, + { 52,10358 }, { 53,10358 }, { 54,10358 }, { 55,10358 }, { 56,10358 }, + { 57,10358 }, { 58,10358 }, { 59,10358 }, { 60,10358 }, { 61,10358 }, + { 62,10358 }, { 63,10358 }, { 64,10358 }, { 65,10616 }, { 66,10616 }, + { 67,10616 }, { 68,10616 }, { 69,10616 }, { 70,10616 }, { 71,10616 }, + { 72,10616 }, { 73,10616 }, { 74,10616 }, { 75,10616 }, { 76,10616 }, + + { 77,10616 }, { 78,10616 }, { 79,10616 }, { 80,10616 }, { 81,10616 }, + { 82,10616 }, { 83,10616 }, { 84,10616 }, { 85,10616 }, { 86,10616 }, + { 87,10616 }, { 88,10616 }, { 89,10616 }, { 90,10616 }, { 91,10358 }, + { 92,10358 }, { 93,10358 }, { 94,10358 }, { 95,10616 }, { 96,10358 }, + { 97,10616 }, { 98,10616 }, { 99,10616 }, { 100,10616 }, { 101,10616 }, + { 102,10616 }, { 103,10616 }, { 104,10616 }, { 105,10616 }, { 106,10616 }, + { 107,10616 }, { 108,10616 }, { 109,10616 }, { 110,10616 }, { 111,10616 }, + { 112,10616 }, { 113,10616 }, { 114,10616 }, { 115,10616 }, { 116,10616 }, + { 117,10616 }, { 118,10616 }, { 119,10616 }, { 120,10616 }, { 121,10616 }, + { 122,10616 }, { 123,10358 }, { 124,10358 }, { 125,10358 }, { 126,10358 }, + + { 127,10616 }, { 128,10616 }, { 129,10616 }, { 130,10616 }, { 131,10616 }, + { 132,10616 }, { 133,10616 }, { 134,10616 }, { 135,10616 }, { 136,10616 }, + { 137,10616 }, { 138,10616 }, { 139,10616 }, { 140,10616 }, { 141,10616 }, + { 142,10616 }, { 143,10616 }, { 144,10616 }, { 145,10616 }, { 146,10616 }, + { 147,10616 }, { 148,10616 }, { 149,10616 }, { 150,10616 }, { 151,10616 }, + { 152,10616 }, { 153,10616 }, { 154,10616 }, { 155,10616 }, { 156,10616 }, + { 157,10616 }, { 158,10616 }, { 159,10616 }, { 160,10616 }, { 161,10616 }, + { 162,10616 }, { 163,10616 }, { 164,10616 }, { 165,10616 }, { 166,10616 }, + { 167,10616 }, { 168,10616 }, { 169,10616 }, { 170,10616 }, { 171,10616 }, + { 172,10616 }, { 173,10616 }, { 174,10616 }, { 175,10616 }, { 176,10616 }, + + { 177,10616 }, { 178,10616 }, { 179,10616 }, { 180,10616 }, { 181,10616 }, + { 182,10616 }, { 183,10616 }, { 184,10616 }, { 185,10616 }, { 186,10616 }, + { 187,10616 }, { 188,10616 }, { 189,10616 }, { 190,10616 }, { 191,10616 }, + { 192,10616 }, { 193,10616 }, { 194,10616 }, { 195,10616 }, { 196,10616 }, + { 197,10616 }, { 198,10616 }, { 199,10616 }, { 200,10616 }, { 201,10616 }, + { 202,10616 }, { 203,10616 }, { 204,10616 }, { 205,10616 }, { 206,10616 }, + { 207,10616 }, { 208,10616 }, { 209,10616 }, { 210,10616 }, { 211,10616 }, + { 212,10616 }, { 213,10616 }, { 214,10616 }, { 215,10616 }, { 216,10616 }, + { 217,10616 }, { 218,10616 }, { 219,10616 }, { 220,10616 }, { 221,10616 }, + { 222,10616 }, { 223,10616 }, { 224,10616 }, { 225,10616 }, { 226,10616 }, + + { 227,10616 }, { 228,10616 }, { 229,10616 }, { 230,10616 }, { 231,10616 }, + { 232,10616 }, { 233,10616 }, { 234,10616 }, { 235,10616 }, { 236,10616 }, + { 237,10616 }, { 238,10616 }, { 239,10616 }, { 240,10616 }, { 241,10616 }, + { 242,10616 }, { 243,10616 }, { 244,10616 }, { 245,10616 }, { 246,10616 }, + { 247,10616 }, { 248,10616 }, { 249,10616 }, { 250,10616 }, { 251,10616 }, + { 252,10616 }, { 253,10616 }, { 254,10616 }, { 255,10616 }, { 256,10358 }, + { 0, 0 }, { 0,104908 }, { 1,1808 }, { 2,1808 }, { 3,1808 }, + { 4,1808 }, { 5,1808 }, { 6,1808 }, { 7,1808 }, { 8,1808 }, + { 9,1810 }, { 10,1810 }, { 11,1808 }, { 12,1808 }, { 13,1810 }, + { 14,1808 }, { 15,1808 }, { 16,1808 }, { 17,1808 }, { 18,1808 }, + + { 19,1808 }, { 20,1808 }, { 21,1808 }, { 22,1808 }, { 23,1808 }, + { 24,1808 }, { 25,1808 }, { 26,1808 }, { 27,1808 }, { 28,1808 }, + { 29,1808 }, { 30,1808 }, { 31,1808 }, { 32,1810 }, { 33,1812 }, + { 34,1875 }, { 35,1814 }, { 36,2133 }, { 37,2135 }, { 38,2390 }, + { 39,2453 }, { 40,2711 }, { 41,1808 }, { 42,2713 }, { 43,2717 }, + { 44,1808 }, { 45,2724 }, { 46,2749 }, { 47,2726 }, { 48,2783 }, + { 49,2842 }, { 50,2842 }, { 51,2842 }, { 52,2842 }, { 53,2842 }, + { 54,2842 }, { 55,2842 }, { 56,2842 }, { 57,2842 }, { 58,2730 }, + { 59,1808 }, { 60,2815 }, { 61,2818 }, { 62,2821 }, { 63,2824 }, + { 64,1808 }, { 65,4700 }, { 66,10616 }, { 67,4700 }, { 68,4700 }, + + { 69,4700 }, { 70,4700 }, { 71,4700 }, { 72,4700 }, { 73,4700 }, + { 74,4700 }, { 75,4700 }, { 76,4700 }, { 77,4700 }, { 78,4700 }, + { 79,4700 }, { 80,4700 }, { 81,4700 }, { 82,4700 }, { 83,4700 }, + { 84,4700 }, { 85,4700 }, { 86,4700 }, { 87,4700 }, { 88,4700 }, + { 89,4700 }, { 90,4700 }, { 91,1808 }, { 92,2844 }, { 93,1808 }, + { 94,2846 }, { 95,4700 }, { 96,8555 }, { 97,4700 }, { 98,10616 }, + { 99,4700 }, { 100,4700 }, { 101,4700 }, { 102,4700 }, { 103,4700 }, + { 104,4700 }, { 105,4700 }, { 106,4700 }, { 107,4700 }, { 108,4700 }, + { 109,4700 }, { 110,4700 }, { 111,4700 }, { 112,4700 }, { 113,4700 }, + { 114,4700 }, { 115,4700 }, { 116,4700 }, { 117,4700 }, { 118,4700 }, + + { 119,4700 }, { 120,4700 }, { 121,4700 }, { 122,4700 }, { 123,1808 }, + { 124,2868 }, { 125,1808 }, { 126,1808 }, { 127,4700 }, { 128,4700 }, + { 129,4700 }, { 130,4700 }, { 131,4700 }, { 132,4700 }, { 133,4700 }, + { 134,4700 }, { 135,4700 }, { 136,4700 }, { 137,4700 }, { 138,4700 }, + { 139,4700 }, { 140,4700 }, { 141,4700 }, { 142,4700 }, { 143,4700 }, + { 144,4700 }, { 145,4700 }, { 146,4700 }, { 147,4700 }, { 148,4700 }, + { 149,4700 }, { 150,4700 }, { 151,4700 }, { 152,4700 }, { 153,4700 }, + { 154,4700 }, { 155,4700 }, { 156,4700 }, { 157,4700 }, { 158,4700 }, + { 159,4700 }, { 160,4700 }, { 161,4700 }, { 162,4700 }, { 163,4700 }, + { 164,4700 }, { 165,4700 }, { 166,4700 }, { 167,4700 }, { 168,4700 }, + + { 169,4700 }, { 170,4700 }, { 171,4700 }, { 172,4700 }, { 173,4700 }, + { 174,4700 }, { 175,4700 }, { 176,4700 }, { 177,4700 }, { 178,4700 }, + { 179,4700 }, { 180,4700 }, { 181,4700 }, { 182,4700 }, { 183,4700 }, + { 184,4700 }, { 185,4700 }, { 186,4700 }, { 187,4700 }, { 188,4700 }, + { 189,4700 }, { 190,4700 }, { 191,4700 }, { 192,4700 }, { 193,4700 }, + { 194,4700 }, { 195,4700 }, { 196,4700 }, { 197,4700 }, { 198,4700 }, + { 199,4700 }, { 200,4700 }, { 201,4700 }, { 202,4700 }, { 203,4700 }, + { 204,4700 }, { 205,4700 }, { 206,4700 }, { 207,4700 }, { 208,4700 }, + { 209,4700 }, { 210,4700 }, { 211,4700 }, { 212,4700 }, { 213,4700 }, + { 214,4700 }, { 215,4700 }, { 216,4700 }, { 217,4700 }, { 218,4700 }, + + { 219,4700 }, { 220,4700 }, { 221,4700 }, { 222,4700 }, { 223,4700 }, + { 224,4700 }, { 225,4700 }, { 226,4700 }, { 227,4700 }, { 228,4700 }, + { 229,4700 }, { 230,4700 }, { 231,4700 }, { 232,4700 }, { 233,4700 }, + { 234,4700 }, { 235,4700 }, { 236,4700 }, { 237,4700 }, { 238,4700 }, + { 239,4700 }, { 240,4700 }, { 241,4700 }, { 242,4700 }, { 243,4700 }, + { 244,4700 }, { 245,4700 }, { 246,4700 }, { 247,4700 }, { 248,4700 }, + { 249,4700 }, { 250,4700 }, { 251,4700 }, { 252,4700 }, { 253,4700 }, + { 254,4700 }, { 255,4700 }, { 256,1808 }, { 0, 0 }, { 0,104650 }, + { 1,1550 }, { 2,1550 }, { 3,1550 }, { 4,1550 }, { 5,1550 }, + { 6,1550 }, { 7,1550 }, { 8,1550 }, { 9,1552 }, { 10,1552 }, + + { 11,1550 }, { 12,1550 }, { 13,1552 }, { 14,1550 }, { 15,1550 }, + { 16,1550 }, { 17,1550 }, { 18,1550 }, { 19,1550 }, { 20,1550 }, + { 21,1550 }, { 22,1550 }, { 23,1550 }, { 24,1550 }, { 25,1550 }, + { 26,1550 }, { 27,1550 }, { 28,1550 }, { 29,1550 }, { 30,1550 }, + { 31,1550 }, { 32,1552 }, { 33,1554 }, { 34,1617 }, { 35,1556 }, + { 36,1875 }, { 37,1877 }, { 38,2132 }, { 39,2195 }, { 40,2453 }, + { 41,1550 }, { 42,2455 }, { 43,2459 }, { 44,1550 }, { 45,2466 }, + { 46,2491 }, { 47,2468 }, { 48,2525 }, { 49,2584 }, { 50,2584 }, + { 51,2584 }, { 52,2584 }, { 53,2584 }, { 54,2584 }, { 55,2584 }, + { 56,2584 }, { 57,2584 }, { 58,2472 }, { 59,1550 }, { 60,2557 }, + + { 61,2560 }, { 62,2563 }, { 63,2566 }, { 64,1550 }, { 65,4442 }, + { 66,10358 }, { 67,4442 }, { 68,4442 }, { 69,4442 }, { 70,4442 }, + { 71,4442 }, { 72,4442 }, { 73,4442 }, { 74,4442 }, { 75,4442 }, + { 76,4442 }, { 77,4442 }, { 78,4442 }, { 79,4442 }, { 80,4442 }, + { 81,4442 }, { 82,4442 }, { 83,4442 }, { 84,4442 }, { 85,4442 }, + { 86,4442 }, { 87,4442 }, { 88,4442 }, { 89,4442 }, { 90,4442 }, + { 91,1550 }, { 92,2586 }, { 93,1550 }, { 94,2588 }, { 95,4442 }, + { 96,8297 }, { 97,4442 }, { 98,10358 }, { 99,4442 }, { 100,4442 }, + { 101,4442 }, { 102,4442 }, { 103,4442 }, { 104,4442 }, { 105,4442 }, + { 106,4442 }, { 107,4442 }, { 108,4442 }, { 109,4442 }, { 110,4442 }, + + { 111,4442 }, { 112,4442 }, { 113,4442 }, { 114,4442 }, { 115,4442 }, + { 116,4442 }, { 117,4442 }, { 118,4442 }, { 119,4442 }, { 120,4442 }, + { 121,4442 }, { 122,4442 }, { 123,1550 }, { 124,2610 }, { 125,1550 }, + { 126,1550 }, { 127,4442 }, { 128,4442 }, { 129,4442 }, { 130,4442 }, + { 131,4442 }, { 132,4442 }, { 133,4442 }, { 134,4442 }, { 135,4442 }, + { 136,4442 }, { 137,4442 }, { 138,4442 }, { 139,4442 }, { 140,4442 }, + { 141,4442 }, { 142,4442 }, { 143,4442 }, { 144,4442 }, { 145,4442 }, + { 146,4442 }, { 147,4442 }, { 148,4442 }, { 149,4442 }, { 150,4442 }, + { 151,4442 }, { 152,4442 }, { 153,4442 }, { 154,4442 }, { 155,4442 }, + { 156,4442 }, { 157,4442 }, { 158,4442 }, { 159,4442 }, { 160,4442 }, + + { 161,4442 }, { 162,4442 }, { 163,4442 }, { 164,4442 }, { 165,4442 }, + { 166,4442 }, { 167,4442 }, { 168,4442 }, { 169,4442 }, { 170,4442 }, + { 171,4442 }, { 172,4442 }, { 173,4442 }, { 174,4442 }, { 175,4442 }, + { 176,4442 }, { 177,4442 }, { 178,4442 }, { 179,4442 }, { 180,4442 }, + { 181,4442 }, { 182,4442 }, { 183,4442 }, { 184,4442 }, { 185,4442 }, + { 186,4442 }, { 187,4442 }, { 188,4442 }, { 189,4442 }, { 190,4442 }, + { 191,4442 }, { 192,4442 }, { 193,4442 }, { 194,4442 }, { 195,4442 }, + { 196,4442 }, { 197,4442 }, { 198,4442 }, { 199,4442 }, { 200,4442 }, + { 201,4442 }, { 202,4442 }, { 203,4442 }, { 204,4442 }, { 205,4442 }, + { 206,4442 }, { 207,4442 }, { 208,4442 }, { 209,4442 }, { 210,4442 }, + + { 211,4442 }, { 212,4442 }, { 213,4442 }, { 214,4442 }, { 215,4442 }, + { 216,4442 }, { 217,4442 }, { 218,4442 }, { 219,4442 }, { 220,4442 }, + { 221,4442 }, { 222,4442 }, { 223,4442 }, { 224,4442 }, { 225,4442 }, + { 226,4442 }, { 227,4442 }, { 228,4442 }, { 229,4442 }, { 230,4442 }, + { 231,4442 }, { 232,4442 }, { 233,4442 }, { 234,4442 }, { 235,4442 }, + { 236,4442 }, { 237,4442 }, { 238,4442 }, { 239,4442 }, { 240,4442 }, + { 241,4442 }, { 242,4442 }, { 243,4442 }, { 244,4442 }, { 245,4442 }, + { 246,4442 }, { 247,4442 }, { 248,4442 }, { 249,4442 }, { 250,4442 }, + { 251,4442 }, { 252,4442 }, { 253,4442 }, { 254,4442 }, { 255,4442 }, + { 256,1550 }, { 0, 0 }, { 0,104392 }, { 1,1292 }, { 2,1292 }, + + { 3,1292 }, { 4,1292 }, { 5,1292 }, { 6,1292 }, { 7,1292 }, + { 8,1292 }, { 9,1294 }, { 10,1294 }, { 11,1292 }, { 12,1292 }, + { 13,1294 }, { 14,1292 }, { 15,1292 }, { 16,1292 }, { 17,1292 }, + { 18,1292 }, { 19,1292 }, { 20,1292 }, { 21,1292 }, { 22,1292 }, + { 23,1292 }, { 24,1292 }, { 25,1292 }, { 26,1292 }, { 27,1292 }, + { 28,1292 }, { 29,1292 }, { 30,1292 }, { 31,1292 }, { 32,1294 }, + { 33,1296 }, { 34,1359 }, { 35,1298 }, { 36,1617 }, { 37,1619 }, + { 38,1874 }, { 39,1937 }, { 40,2195 }, { 41,1292 }, { 42,2197 }, + { 43,2201 }, { 44,1292 }, { 45,2208 }, { 46,2233 }, { 47,2210 }, + { 48,2267 }, { 49,2326 }, { 50,2326 }, { 51,2326 }, { 52,2326 }, + + { 53,2326 }, { 54,2326 }, { 55,2326 }, { 56,2326 }, { 57,2326 }, + { 58,2214 }, { 59,1292 }, { 60,2299 }, { 61,2302 }, { 62,2305 }, + { 63,2308 }, { 64,1292 }, { 65,4184 }, { 66,10100 }, { 67,4184 }, + { 68,4184 }, { 69,4184 }, { 70,4184 }, { 71,4184 }, { 72,4184 }, + { 73,4184 }, { 74,4184 }, { 75,4184 }, { 76,4184 }, { 77,4184 }, + { 78,4184 }, { 79,4184 }, { 80,4184 }, { 81,4184 }, { 82,4184 }, + { 83,4184 }, { 84,4184 }, { 85,4184 }, { 86,4184 }, { 87,4184 }, + { 88,4184 }, { 89,4184 }, { 90,4184 }, { 91,1292 }, { 92,2328 }, + { 93,1292 }, { 94,2330 }, { 95,4184 }, { 96,8039 }, { 97,4184 }, + { 98,10100 }, { 99,4184 }, { 100,4184 }, { 101,4184 }, { 102,4184 }, + + { 103,4184 }, { 104,4184 }, { 105,4184 }, { 106,4184 }, { 107,4184 }, + { 108,4184 }, { 109,4184 }, { 110,4184 }, { 111,4184 }, { 112,4184 }, + { 113,4184 }, { 114,4184 }, { 115,4184 }, { 116,4184 }, { 117,4184 }, + { 118,4184 }, { 119,4184 }, { 120,4184 }, { 121,4184 }, { 122,4184 }, + { 123,1292 }, { 124,2352 }, { 125,1292 }, { 126,1292 }, { 127,4184 }, + { 128,4184 }, { 129,4184 }, { 130,4184 }, { 131,4184 }, { 132,4184 }, + { 133,4184 }, { 134,4184 }, { 135,4184 }, { 136,4184 }, { 137,4184 }, + { 138,4184 }, { 139,4184 }, { 140,4184 }, { 141,4184 }, { 142,4184 }, + { 143,4184 }, { 144,4184 }, { 145,4184 }, { 146,4184 }, { 147,4184 }, + { 148,4184 }, { 149,4184 }, { 150,4184 }, { 151,4184 }, { 152,4184 }, + + { 153,4184 }, { 154,4184 }, { 155,4184 }, { 156,4184 }, { 157,4184 }, + { 158,4184 }, { 159,4184 }, { 160,4184 }, { 161,4184 }, { 162,4184 }, + { 163,4184 }, { 164,4184 }, { 165,4184 }, { 166,4184 }, { 167,4184 }, + { 168,4184 }, { 169,4184 }, { 170,4184 }, { 171,4184 }, { 172,4184 }, + { 173,4184 }, { 174,4184 }, { 175,4184 }, { 176,4184 }, { 177,4184 }, + { 178,4184 }, { 179,4184 }, { 180,4184 }, { 181,4184 }, { 182,4184 }, + { 183,4184 }, { 184,4184 }, { 185,4184 }, { 186,4184 }, { 187,4184 }, + { 188,4184 }, { 189,4184 }, { 190,4184 }, { 191,4184 }, { 192,4184 }, + { 193,4184 }, { 194,4184 }, { 195,4184 }, { 196,4184 }, { 197,4184 }, + { 198,4184 }, { 199,4184 }, { 200,4184 }, { 201,4184 }, { 202,4184 }, + + { 203,4184 }, { 204,4184 }, { 205,4184 }, { 206,4184 }, { 207,4184 }, + { 208,4184 }, { 209,4184 }, { 210,4184 }, { 211,4184 }, { 212,4184 }, + { 213,4184 }, { 214,4184 }, { 215,4184 }, { 216,4184 }, { 217,4184 }, + { 218,4184 }, { 219,4184 }, { 220,4184 }, { 221,4184 }, { 222,4184 }, + { 223,4184 }, { 224,4184 }, { 225,4184 }, { 226,4184 }, { 227,4184 }, + { 228,4184 }, { 229,4184 }, { 230,4184 }, { 231,4184 }, { 232,4184 }, + { 233,4184 }, { 234,4184 }, { 235,4184 }, { 236,4184 }, { 237,4184 }, + { 238,4184 }, { 239,4184 }, { 240,4184 }, { 241,4184 }, { 242,4184 }, + { 243,4184 }, { 244,4184 }, { 245,4184 }, { 246,4184 }, { 247,4184 }, + { 248,4184 }, { 249,4184 }, { 250,4184 }, { 251,4184 }, { 252,4184 }, + + { 253,4184 }, { 254,4184 }, { 255,4184 }, { 256,1292 }, { 0, 0 }, + { 0,104134 }, { 1,1034 }, { 2,1034 }, { 3,1034 }, { 4,1034 }, + { 5,1034 }, { 6,1034 }, { 7,1034 }, { 8,1034 }, { 9,1036 }, + { 10,1036 }, { 11,1034 }, { 12,1034 }, { 13,1036 }, { 14,1034 }, + { 15,1034 }, { 16,1034 }, { 17,1034 }, { 18,1034 }, { 19,1034 }, + { 20,1034 }, { 21,1034 }, { 22,1034 }, { 23,1034 }, { 24,1034 }, + { 25,1034 }, { 26,1034 }, { 27,1034 }, { 28,1034 }, { 29,1034 }, + { 30,1034 }, { 31,1034 }, { 32,1036 }, { 33,1038 }, { 34,1101 }, + { 35,1040 }, { 36,1359 }, { 37,1361 }, { 38,1616 }, { 39,1679 }, + { 40,1937 }, { 41,1034 }, { 42,1939 }, { 43,1943 }, { 44,1034 }, + + { 45,1950 }, { 46,1975 }, { 47,1952 }, { 48,2009 }, { 49,2068 }, + { 50,2068 }, { 51,2068 }, { 52,2068 }, { 53,2068 }, { 54,2068 }, + { 55,2068 }, { 56,2068 }, { 57,2068 }, { 58,1956 }, { 59,1034 }, + { 60,2041 }, { 61,2044 }, { 62,2047 }, { 63,2050 }, { 64,1034 }, + { 65,3926 }, { 66,9842 }, { 67,3926 }, { 68,3926 }, { 69,3926 }, + { 70,3926 }, { 71,3926 }, { 72,3926 }, { 73,3926 }, { 74,3926 }, + { 75,3926 }, { 76,3926 }, { 77,3926 }, { 78,3926 }, { 79,3926 }, + { 80,3926 }, { 81,3926 }, { 82,3926 }, { 83,3926 }, { 84,3926 }, + { 85,3926 }, { 86,3926 }, { 87,3926 }, { 88,3926 }, { 89,3926 }, + { 90,3926 }, { 91,1034 }, { 92,2070 }, { 93,1034 }, { 94,2072 }, + + { 95,3926 }, { 96,7781 }, { 97,3926 }, { 98,9842 }, { 99,3926 }, + { 100,3926 }, { 101,3926 }, { 102,3926 }, { 103,3926 }, { 104,3926 }, + { 105,3926 }, { 106,3926 }, { 107,3926 }, { 108,3926 }, { 109,3926 }, + { 110,3926 }, { 111,3926 }, { 112,3926 }, { 113,3926 }, { 114,3926 }, + { 115,3926 }, { 116,3926 }, { 117,3926 }, { 118,3926 }, { 119,3926 }, + { 120,3926 }, { 121,3926 }, { 122,3926 }, { 123,1034 }, { 124,2094 }, + { 125,1034 }, { 126,1034 }, { 127,3926 }, { 128,3926 }, { 129,3926 }, + { 130,3926 }, { 131,3926 }, { 132,3926 }, { 133,3926 }, { 134,3926 }, + { 135,3926 }, { 136,3926 }, { 137,3926 }, { 138,3926 }, { 139,3926 }, + { 140,3926 }, { 141,3926 }, { 142,3926 }, { 143,3926 }, { 144,3926 }, + + { 145,3926 }, { 146,3926 }, { 147,3926 }, { 148,3926 }, { 149,3926 }, + { 150,3926 }, { 151,3926 }, { 152,3926 }, { 153,3926 }, { 154,3926 }, + { 155,3926 }, { 156,3926 }, { 157,3926 }, { 158,3926 }, { 159,3926 }, + { 160,3926 }, { 161,3926 }, { 162,3926 }, { 163,3926 }, { 164,3926 }, + { 165,3926 }, { 166,3926 }, { 167,3926 }, { 168,3926 }, { 169,3926 }, + { 170,3926 }, { 171,3926 }, { 172,3926 }, { 173,3926 }, { 174,3926 }, + { 175,3926 }, { 176,3926 }, { 177,3926 }, { 178,3926 }, { 179,3926 }, + { 180,3926 }, { 181,3926 }, { 182,3926 }, { 183,3926 }, { 184,3926 }, + { 185,3926 }, { 186,3926 }, { 187,3926 }, { 188,3926 }, { 189,3926 }, + { 190,3926 }, { 191,3926 }, { 192,3926 }, { 193,3926 }, { 194,3926 }, + + { 195,3926 }, { 196,3926 }, { 197,3926 }, { 198,3926 }, { 199,3926 }, + { 200,3926 }, { 201,3926 }, { 202,3926 }, { 203,3926 }, { 204,3926 }, + { 205,3926 }, { 206,3926 }, { 207,3926 }, { 208,3926 }, { 209,3926 }, + { 210,3926 }, { 211,3926 }, { 212,3926 }, { 213,3926 }, { 214,3926 }, + { 215,3926 }, { 216,3926 }, { 217,3926 }, { 218,3926 }, { 219,3926 }, + { 220,3926 }, { 221,3926 }, { 222,3926 }, { 223,3926 }, { 224,3926 }, + { 225,3926 }, { 226,3926 }, { 227,3926 }, { 228,3926 }, { 229,3926 }, + { 230,3926 }, { 231,3926 }, { 232,3926 }, { 233,3926 }, { 234,3926 }, + { 235,3926 }, { 236,3926 }, { 237,3926 }, { 238,3926 }, { 239,3926 }, + { 240,3926 }, { 241,3926 }, { 242,3926 }, { 243,3926 }, { 244,3926 }, + + { 245,3926 }, { 246,3926 }, { 247,3926 }, { 248,3926 }, { 249,3926 }, + { 250,3926 }, { 251,3926 }, { 252,3926 }, { 253,3926 }, { 254,3926 }, + { 255,3926 }, { 256,1034 }, { 0, 0 }, { 0,103876 }, { 1, 776 }, + { 2, 776 }, { 3, 776 }, { 4, 776 }, { 5, 776 }, { 6, 776 }, + { 7, 776 }, { 8, 776 }, { 9, 776 }, { 10, 776 }, { 11, 776 }, + { 12, 776 }, { 13, 776 }, { 14, 776 }, { 15, 776 }, { 16, 776 }, + { 17, 776 }, { 18, 776 }, { 19, 776 }, { 20, 776 }, { 21, 776 }, + { 22, 776 }, { 23, 776 }, { 24, 776 }, { 25, 776 }, { 26, 776 }, + { 27, 776 }, { 28, 776 }, { 29, 776 }, { 30, 776 }, { 31, 776 }, + { 32, 776 }, { 33, 776 }, { 34, 776 }, { 35, 776 }, { 36, 776 }, + + { 37, 776 }, { 38, 776 }, { 39, 776 }, { 40, 776 }, { 41, 776 }, + { 42, 776 }, { 43, 776 }, { 44, 776 }, { 45, 776 }, { 46, 776 }, + { 47, 776 }, { 48, 776 }, { 49, 776 }, { 50, 776 }, { 51, 776 }, + { 52, 776 }, { 53, 776 }, { 54, 776 }, { 55, 776 }, { 56, 776 }, + { 57, 776 }, { 58, 776 }, { 59, 776 }, { 60, 776 }, { 61, 776 }, + { 62, 776 }, { 63, 776 }, { 64, 776 }, { 65, 776 }, { 66, 776 }, + { 67, 776 }, { 68, 776 }, { 69, 776 }, { 70, 776 }, { 71, 776 }, + { 72, 776 }, { 73, 776 }, { 74, 776 }, { 75, 776 }, { 76, 776 }, + { 77, 776 }, { 78, 776 }, { 79, 776 }, { 80, 776 }, { 81, 776 }, + { 82, 776 }, { 83, 776 }, { 84, 776 }, { 85, 776 }, { 86, 776 }, + + { 87, 776 }, { 88, 776 }, { 89, 776 }, { 90, 776 }, { 91, 776 }, + { 92, 776 }, { 93, 776 }, { 94, 776 }, { 95, 776 }, { 96, 776 }, + { 97, 776 }, { 98, 776 }, { 99, 776 }, { 100, 776 }, { 101, 776 }, + { 102, 776 }, { 103, 776 }, { 104, 776 }, { 105, 776 }, { 106, 776 }, + { 107, 776 }, { 108, 776 }, { 109, 776 }, { 110, 776 }, { 111, 776 }, + { 112, 776 }, { 113, 776 }, { 114, 776 }, { 115, 776 }, { 116, 776 }, + { 117, 776 }, { 118, 776 }, { 119, 776 }, { 120, 776 }, { 121, 776 }, + { 122, 776 }, { 123, 776 }, { 124, 776 }, { 125, 776 }, { 126, 776 }, + { 127, 776 }, { 128, 776 }, { 129, 776 }, { 130, 776 }, { 131, 776 }, + { 132, 776 }, { 133, 776 }, { 134, 776 }, { 135, 776 }, { 136, 776 }, + + { 137, 776 }, { 138, 776 }, { 139, 776 }, { 140, 776 }, { 141, 776 }, + { 142, 776 }, { 143, 776 }, { 144, 776 }, { 145, 776 }, { 146, 776 }, + { 147, 776 }, { 148, 776 }, { 149, 776 }, { 150, 776 }, { 151, 776 }, + { 152, 776 }, { 153, 776 }, { 154, 776 }, { 155, 776 }, { 156, 776 }, + { 157, 776 }, { 158, 776 }, { 159, 776 }, { 160, 776 }, { 161, 776 }, + { 162, 776 }, { 163, 776 }, { 164, 776 }, { 165, 776 }, { 166, 776 }, + { 167, 776 }, { 168, 776 }, { 169, 776 }, { 170, 776 }, { 171, 776 }, + { 172, 776 }, { 173, 776 }, { 174, 776 }, { 175, 776 }, { 176, 776 }, + { 177, 776 }, { 178, 776 }, { 179, 776 }, { 180, 776 }, { 181, 776 }, + { 182, 776 }, { 183, 776 }, { 184, 776 }, { 185, 776 }, { 186, 776 }, + + { 187, 776 }, { 188, 776 }, { 189, 776 }, { 190, 776 }, { 191, 776 }, + { 192, 776 }, { 193, 776 }, { 194, 776 }, { 195, 776 }, { 196, 776 }, + { 197, 776 }, { 198, 776 }, { 199, 776 }, { 200, 776 }, { 201, 776 }, + { 202, 776 }, { 203, 776 }, { 204, 776 }, { 205, 776 }, { 206, 776 }, + { 207, 776 }, { 208, 776 }, { 209, 776 }, { 210, 776 }, { 211, 776 }, + { 212, 776 }, { 213, 776 }, { 214, 776 }, { 215, 776 }, { 216, 776 }, + { 217, 776 }, { 218, 776 }, { 219, 776 }, { 220, 776 }, { 221, 776 }, + { 222, 776 }, { 223, 776 }, { 224, 776 }, { 225, 776 }, { 226, 776 }, + { 227, 776 }, { 228, 776 }, { 229, 776 }, { 230, 776 }, { 231, 776 }, + { 232, 776 }, { 233, 776 }, { 234, 776 }, { 235, 776 }, { 236, 776 }, + + { 237, 776 }, { 238, 776 }, { 239, 776 }, { 240, 776 }, { 241, 776 }, + { 242, 776 }, { 243, 776 }, { 244, 776 }, { 245, 776 }, { 246, 776 }, + { 247, 776 }, { 248, 776 }, { 249, 776 }, { 250, 776 }, { 251, 776 }, + { 252, 776 }, { 253, 776 }, { 254, 776 }, { 255, 776 }, { 256, 776 }, + { 0, 0 }, { 0,103618 }, { 1, 518 }, { 2, 518 }, { 3, 518 }, + { 4, 518 }, { 5, 518 }, { 6, 518 }, { 7, 518 }, { 8, 518 }, + { 9, 518 }, { 10, 518 }, { 11, 518 }, { 12, 518 }, { 13, 518 }, + { 14, 518 }, { 15, 518 }, { 16, 518 }, { 17, 518 }, { 18, 518 }, + { 19, 518 }, { 20, 518 }, { 21, 518 }, { 22, 518 }, { 23, 518 }, + { 24, 518 }, { 25, 518 }, { 26, 518 }, { 27, 518 }, { 28, 518 }, + + { 29, 518 }, { 30, 518 }, { 31, 518 }, { 32, 518 }, { 33, 518 }, + { 34, 518 }, { 35, 518 }, { 36, 518 }, { 37, 518 }, { 38, 518 }, + { 39, 518 }, { 40, 518 }, { 41, 518 }, { 42, 518 }, { 43, 518 }, + { 44, 518 }, { 45, 518 }, { 46, 518 }, { 47, 518 }, { 48, 518 }, + { 49, 518 }, { 50, 518 }, { 51, 518 }, { 52, 518 }, { 53, 518 }, + { 54, 518 }, { 55, 518 }, { 56, 518 }, { 57, 518 }, { 58, 518 }, + { 59, 518 }, { 60, 518 }, { 61, 518 }, { 62, 518 }, { 63, 518 }, + { 64, 518 }, { 65, 518 }, { 66, 518 }, { 67, 518 }, { 68, 518 }, + { 69, 518 }, { 70, 518 }, { 71, 518 }, { 72, 518 }, { 73, 518 }, + { 74, 518 }, { 75, 518 }, { 76, 518 }, { 77, 518 }, { 78, 518 }, + + { 79, 518 }, { 80, 518 }, { 81, 518 }, { 82, 518 }, { 83, 518 }, + { 84, 518 }, { 85, 518 }, { 86, 518 }, { 87, 518 }, { 88, 518 }, + { 89, 518 }, { 90, 518 }, { 91, 518 }, { 92, 518 }, { 93, 518 }, + { 94, 518 }, { 95, 518 }, { 96, 518 }, { 97, 518 }, { 98, 518 }, + { 99, 518 }, { 100, 518 }, { 101, 518 }, { 102, 518 }, { 103, 518 }, + { 104, 518 }, { 105, 518 }, { 106, 518 }, { 107, 518 }, { 108, 518 }, + { 109, 518 }, { 110, 518 }, { 111, 518 }, { 112, 518 }, { 113, 518 }, + { 114, 518 }, { 115, 518 }, { 116, 518 }, { 117, 518 }, { 118, 518 }, + { 119, 518 }, { 120, 518 }, { 121, 518 }, { 122, 518 }, { 123, 518 }, + { 124, 518 }, { 125, 518 }, { 126, 518 }, { 127, 518 }, { 128, 518 }, + + { 129, 518 }, { 130, 518 }, { 131, 518 }, { 132, 518 }, { 133, 518 }, + { 134, 518 }, { 135, 518 }, { 136, 518 }, { 137, 518 }, { 138, 518 }, + { 139, 518 }, { 140, 518 }, { 141, 518 }, { 142, 518 }, { 143, 518 }, + { 144, 518 }, { 145, 518 }, { 146, 518 }, { 147, 518 }, { 148, 518 }, + { 149, 518 }, { 150, 518 }, { 151, 518 }, { 152, 518 }, { 153, 518 }, + { 154, 518 }, { 155, 518 }, { 156, 518 }, { 157, 518 }, { 158, 518 }, + { 159, 518 }, { 160, 518 }, { 161, 518 }, { 162, 518 }, { 163, 518 }, + { 164, 518 }, { 165, 518 }, { 166, 518 }, { 167, 518 }, { 168, 518 }, + { 169, 518 }, { 170, 518 }, { 171, 518 }, { 172, 518 }, { 173, 518 }, + { 174, 518 }, { 175, 518 }, { 176, 518 }, { 177, 518 }, { 178, 518 }, + + { 179, 518 }, { 180, 518 }, { 181, 518 }, { 182, 518 }, { 183, 518 }, + { 184, 518 }, { 185, 518 }, { 186, 518 }, { 187, 518 }, { 188, 518 }, + { 189, 518 }, { 190, 518 }, { 191, 518 }, { 192, 518 }, { 193, 518 }, + { 194, 518 }, { 195, 518 }, { 196, 518 }, { 197, 518 }, { 198, 518 }, + { 199, 518 }, { 200, 518 }, { 201, 518 }, { 202, 518 }, { 203, 518 }, + { 204, 518 }, { 205, 518 }, { 206, 518 }, { 207, 518 }, { 208, 518 }, + { 209, 518 }, { 210, 518 }, { 211, 518 }, { 212, 518 }, { 213, 518 }, + { 214, 518 }, { 215, 518 }, { 216, 518 }, { 217, 518 }, { 218, 518 }, + { 219, 518 }, { 220, 518 }, { 221, 518 }, { 222, 518 }, { 223, 518 }, + { 224, 518 }, { 225, 518 }, { 226, 518 }, { 227, 518 }, { 228, 518 }, + + { 229, 518 }, { 230, 518 }, { 231, 518 }, { 232, 518 }, { 233, 518 }, + { 234, 518 }, { 235, 518 }, { 236, 518 }, { 237, 518 }, { 238, 518 }, + { 239, 518 }, { 240, 518 }, { 241, 518 }, { 242, 518 }, { 243, 518 }, + { 244, 518 }, { 245, 518 }, { 246, 518 }, { 247, 518 }, { 248, 518 }, + { 249, 518 }, { 250, 518 }, { 251, 518 }, { 252, 518 }, { 253, 518 }, + { 254, 518 }, { 255, 518 }, { 256, 518 }, { 0, 4 }, { 0,103360 }, + { 1,9325 }, { 2,9325 }, { 3,9325 }, { 4,9325 }, { 5,9325 }, + { 6,9325 }, { 7,9325 }, { 8,9325 }, { 9,9325 }, { 10,9325 }, + { 11,9325 }, { 12,9325 }, { 13,9325 }, { 14,9325 }, { 15,9325 }, + { 16,9325 }, { 17,9325 }, { 18,9325 }, { 19,9325 }, { 20,9325 }, + + { 21,9325 }, { 22,9325 }, { 23,9325 }, { 24,9325 }, { 25,9325 }, + { 26,9325 }, { 27,9325 }, { 28,9325 }, { 29,9325 }, { 30,9325 }, + { 31,9325 }, { 32,9325 }, { 33,9325 }, { 34,9325 }, { 35,9325 }, + { 36,9325 }, { 37,9325 }, { 38,9325 }, { 39,9325 }, { 40,9325 }, + { 41,9325 }, { 42,9325 }, { 43,9325 }, { 44,9325 }, { 45,9325 }, + { 46,9325 }, { 47,9325 }, { 48,9325 }, { 49,9325 }, { 50,9325 }, + { 51,9325 }, { 52,9325 }, { 53,9325 }, { 54,9325 }, { 55,9325 }, + { 56,9325 }, { 57,9325 }, { 58,9325 }, { 59,9325 }, { 0, 0 }, + { 61,9325 }, { 62,9325 }, { 63,9325 }, { 64,9325 }, { 65,9325 }, + { 66,9325 }, { 67,9325 }, { 68,9325 }, { 69,9325 }, { 70,9325 }, + + { 71,9325 }, { 72,9325 }, { 73,9325 }, { 74,9325 }, { 75,9325 }, + { 76,9325 }, { 77,9325 }, { 78,9325 }, { 79,9325 }, { 80,9325 }, + { 81,9325 }, { 82,9325 }, { 83,9325 }, { 84,9325 }, { 85,9325 }, + { 86,9325 }, { 87,9325 }, { 88,9325 }, { 89,9325 }, { 90,9325 }, + { 91,9325 }, { 92,9325 }, { 93,9325 }, { 94,9325 }, { 95,9325 }, + { 96,9325 }, { 97,9325 }, { 98,9325 }, { 99,9325 }, { 100,9325 }, + { 101,9325 }, { 102,9325 }, { 103,9325 }, { 104,9325 }, { 105,9325 }, + { 106,9325 }, { 107,9325 }, { 108,9325 }, { 109,9325 }, { 110,9325 }, + { 111,9325 }, { 112,9325 }, { 113,9325 }, { 114,9325 }, { 115,9325 }, + { 116,9325 }, { 117,9325 }, { 118,9325 }, { 119,9325 }, { 120,9325 }, + + { 121,9325 }, { 122,9325 }, { 123,9325 }, { 124,9325 }, { 125,9325 }, + { 126,9325 }, { 127,9325 }, { 128,9325 }, { 129,9325 }, { 130,9325 }, + { 131,9325 }, { 132,9325 }, { 133,9325 }, { 134,9325 }, { 135,9325 }, + { 136,9325 }, { 137,9325 }, { 138,9325 }, { 139,9325 }, { 140,9325 }, + { 141,9325 }, { 142,9325 }, { 143,9325 }, { 144,9325 }, { 145,9325 }, + { 146,9325 }, { 147,9325 }, { 148,9325 }, { 149,9325 }, { 150,9325 }, + { 151,9325 }, { 152,9325 }, { 153,9325 }, { 154,9325 }, { 155,9325 }, + { 156,9325 }, { 157,9325 }, { 158,9325 }, { 159,9325 }, { 160,9325 }, + { 161,9325 }, { 162,9325 }, { 163,9325 }, { 164,9325 }, { 165,9325 }, + { 166,9325 }, { 167,9325 }, { 168,9325 }, { 169,9325 }, { 170,9325 }, + + { 171,9325 }, { 172,9325 }, { 173,9325 }, { 174,9325 }, { 175,9325 }, + { 176,9325 }, { 177,9325 }, { 178,9325 }, { 179,9325 }, { 180,9325 }, + { 181,9325 }, { 182,9325 }, { 183,9325 }, { 184,9325 }, { 185,9325 }, + { 186,9325 }, { 187,9325 }, { 188,9325 }, { 189,9325 }, { 190,9325 }, + { 191,9325 }, { 192,9325 }, { 193,9325 }, { 194,9325 }, { 195,9325 }, + { 196,9325 }, { 197,9325 }, { 198,9325 }, { 199,9325 }, { 200,9325 }, + { 201,9325 }, { 202,9325 }, { 203,9325 }, { 204,9325 }, { 205,9325 }, + { 206,9325 }, { 207,9325 }, { 208,9325 }, { 209,9325 }, { 210,9325 }, + { 211,9325 }, { 212,9325 }, { 213,9325 }, { 214,9325 }, { 215,9325 }, + { 216,9325 }, { 217,9325 }, { 218,9325 }, { 219,9325 }, { 220,9325 }, + + { 221,9325 }, { 222,9325 }, { 223,9325 }, { 224,9325 }, { 225,9325 }, + { 226,9325 }, { 227,9325 }, { 228,9325 }, { 229,9325 }, { 230,9325 }, + { 231,9325 }, { 232,9325 }, { 233,9325 }, { 234,9325 }, { 235,9325 }, + { 236,9325 }, { 237,9325 }, { 238,9325 }, { 239,9325 }, { 240,9325 }, + { 241,9325 }, { 242,9325 }, { 243,9325 }, { 244,9325 }, { 245,9325 }, + { 246,9325 }, { 247,9325 }, { 248,9325 }, { 249,9325 }, { 250,9325 }, + { 251,9325 }, { 252,9325 }, { 253,9325 }, { 254,9325 }, { 255,9325 }, + { 256,9325 }, { 0, 4 }, { 0,103102 }, { 0, 142 }, { 0,103100 }, + { 0, 9 }, { 0,103098 }, { 0, 142 }, { 0,103096 }, { 0, 6 }, + { 0,103094 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 9,9323 }, { 10,9323 }, { 0, 0 }, { 0, 0 }, { 13,9323 }, + { 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, 0 }, { 32,9323 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 63,9325 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 61,9323 }, + { 0, 142 }, { 0,103033 }, { 1,9370 }, { 2,9370 }, { 3,9370 }, + { 4,9370 }, { 5,9370 }, { 6,9370 }, { 7,9370 }, { 8,9370 }, + { 9,9370 }, { 10,9370 }, { 11,9370 }, { 12,9370 }, { 13,9370 }, + { 14,9370 }, { 15,9370 }, { 16,9370 }, { 17,9370 }, { 18,9370 }, + { 19,9370 }, { 20,9370 }, { 21,9370 }, { 22,9370 }, { 23,9370 }, + { 24,9370 }, { 25,9370 }, { 26,9370 }, { 27,9370 }, { 28,9370 }, + { 29,9370 }, { 30,9370 }, { 31,9370 }, { 32,9370 }, { 33,9370 }, + { 34,9262 }, { 35,9370 }, { 36,9370 }, { 37,9370 }, { 38,9370 }, + { 39,9370 }, { 40,9370 }, { 41,9370 }, { 42,9370 }, { 43,9370 }, + + { 44,9370 }, { 45,9370 }, { 46,9370 }, { 47,9370 }, { 48,9370 }, + { 49,9370 }, { 50,9370 }, { 51,9370 }, { 52,9370 }, { 53,9370 }, + { 54,9370 }, { 55,9370 }, { 56,9370 }, { 57,9370 }, { 58,9370 }, + { 59,9370 }, { 60,9370 }, { 61,9370 }, { 62,9370 }, { 63,9370 }, + { 64,9370 }, { 65,9370 }, { 66,9370 }, { 67,9370 }, { 68,9370 }, + { 69,9370 }, { 70,9370 }, { 71,9370 }, { 72,9370 }, { 73,9370 }, + { 74,9370 }, { 75,9370 }, { 76,9370 }, { 77,9370 }, { 78,9370 }, + { 79,9370 }, { 80,9370 }, { 81,9370 }, { 82,9370 }, { 83,9370 }, + { 84,9370 }, { 85,9370 }, { 86,9370 }, { 87,9370 }, { 88,9370 }, + { 89,9370 }, { 90,9370 }, { 91,9370 }, { 92,9628 }, { 93,9370 }, + + { 94,9370 }, { 95,9370 }, { 96,9370 }, { 97,9370 }, { 98,9370 }, + { 99,9370 }, { 100,9370 }, { 101,9370 }, { 102,9370 }, { 103,9370 }, + { 104,9370 }, { 105,9370 }, { 106,9370 }, { 107,9370 }, { 108,9370 }, + { 109,9370 }, { 110,9370 }, { 111,9370 }, { 112,9370 }, { 113,9370 }, + { 114,9370 }, { 115,9370 }, { 116,9370 }, { 117,9370 }, { 118,9370 }, + { 119,9370 }, { 120,9370 }, { 121,9370 }, { 122,9370 }, { 123,9370 }, + { 124,9370 }, { 125,9370 }, { 126,9370 }, { 127,9370 }, { 128,9370 }, + { 129,9370 }, { 130,9370 }, { 131,9370 }, { 132,9370 }, { 133,9370 }, + { 134,9370 }, { 135,9370 }, { 136,9370 }, { 137,9370 }, { 138,9370 }, + { 139,9370 }, { 140,9370 }, { 141,9370 }, { 142,9370 }, { 143,9370 }, + + { 144,9370 }, { 145,9370 }, { 146,9370 }, { 147,9370 }, { 148,9370 }, + { 149,9370 }, { 150,9370 }, { 151,9370 }, { 152,9370 }, { 153,9370 }, + { 154,9370 }, { 155,9370 }, { 156,9370 }, { 157,9370 }, { 158,9370 }, + { 159,9370 }, { 160,9370 }, { 161,9370 }, { 162,9370 }, { 163,9370 }, + { 164,9370 }, { 165,9370 }, { 166,9370 }, { 167,9370 }, { 168,9370 }, + { 169,9370 }, { 170,9370 }, { 171,9370 }, { 172,9370 }, { 173,9370 }, + { 174,9370 }, { 175,9370 }, { 176,9370 }, { 177,9370 }, { 178,9370 }, + { 179,9370 }, { 180,9370 }, { 181,9370 }, { 182,9370 }, { 183,9370 }, + { 184,9370 }, { 185,9370 }, { 186,9370 }, { 187,9370 }, { 188,9370 }, + { 189,9370 }, { 190,9370 }, { 191,9370 }, { 192,9370 }, { 193,9370 }, + + { 194,9370 }, { 195,9370 }, { 196,9370 }, { 197,9370 }, { 198,9370 }, + { 199,9370 }, { 200,9370 }, { 201,9370 }, { 202,9370 }, { 203,9370 }, + { 204,9370 }, { 205,9370 }, { 206,9370 }, { 207,9370 }, { 208,9370 }, + { 209,9370 }, { 210,9370 }, { 211,9370 }, { 212,9370 }, { 213,9370 }, + { 214,9370 }, { 215,9370 }, { 216,9370 }, { 217,9370 }, { 218,9370 }, + { 219,9370 }, { 220,9370 }, { 221,9370 }, { 222,9370 }, { 223,9370 }, + { 224,9370 }, { 225,9370 }, { 226,9370 }, { 227,9370 }, { 228,9370 }, + { 229,9370 }, { 230,9370 }, { 231,9370 }, { 232,9370 }, { 233,9370 }, + { 234,9370 }, { 235,9370 }, { 236,9370 }, { 237,9370 }, { 238,9370 }, + { 239,9370 }, { 240,9370 }, { 241,9370 }, { 242,9370 }, { 243,9370 }, + + { 244,9370 }, { 245,9370 }, { 246,9370 }, { 247,9370 }, { 248,9370 }, + { 249,9370 }, { 250,9370 }, { 251,9370 }, { 252,9370 }, { 253,9370 }, + { 254,9370 }, { 255,9370 }, { 256,9370 }, { 0, 142 }, { 0,102775 }, + { 0, 142 }, { 0,102773 }, { 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, 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 }, { 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, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,9004 }, { 0, 0 }, { 65,9628 }, + { 66,9628 }, { 67,9628 }, { 68,9628 }, { 69,9628 }, { 70,9628 }, + { 71,9628 }, { 72,9628 }, { 73,9628 }, { 74,9628 }, { 75,9628 }, + { 76,9628 }, { 77,9628 }, { 78,9628 }, { 79,9628 }, { 80,9628 }, + { 81,9628 }, { 82,9628 }, { 83,9628 }, { 84,9628 }, { 85,9628 }, + + { 86,9628 }, { 87,9628 }, { 88,9628 }, { 89,9628 }, { 90,9628 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9628 }, + { 0, 0 }, { 97,9628 }, { 98,9628 }, { 99,9628 }, { 100,9628 }, + { 101,9628 }, { 102,9628 }, { 103,9628 }, { 104,9628 }, { 105,9628 }, + { 106,9628 }, { 107,9628 }, { 108,9628 }, { 109,9628 }, { 110,9628 }, + { 111,9628 }, { 112,9628 }, { 113,9628 }, { 114,9628 }, { 115,9628 }, + { 116,9628 }, { 117,9628 }, { 118,9628 }, { 119,9628 }, { 120,9628 }, + { 121,9628 }, { 122,9628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,9628 }, { 128,9628 }, { 129,9628 }, { 130,9628 }, + { 131,9628 }, { 132,9628 }, { 133,9628 }, { 134,9628 }, { 135,9628 }, + + { 136,9628 }, { 137,9628 }, { 138,9628 }, { 139,9628 }, { 140,9628 }, + { 141,9628 }, { 142,9628 }, { 143,9628 }, { 144,9628 }, { 145,9628 }, + { 146,9628 }, { 147,9628 }, { 148,9628 }, { 149,9628 }, { 150,9628 }, + { 151,9628 }, { 152,9628 }, { 153,9628 }, { 154,9628 }, { 155,9628 }, + { 156,9628 }, { 157,9628 }, { 158,9628 }, { 159,9628 }, { 160,9628 }, + { 161,9628 }, { 162,9628 }, { 163,9628 }, { 164,9628 }, { 165,9628 }, + { 166,9628 }, { 167,9628 }, { 168,9628 }, { 169,9628 }, { 170,9628 }, + { 171,9628 }, { 172,9628 }, { 173,9628 }, { 174,9628 }, { 175,9628 }, + { 176,9628 }, { 177,9628 }, { 178,9628 }, { 179,9628 }, { 180,9628 }, + { 181,9628 }, { 182,9628 }, { 183,9628 }, { 184,9628 }, { 185,9628 }, + + { 186,9628 }, { 187,9628 }, { 188,9628 }, { 189,9628 }, { 190,9628 }, + { 191,9628 }, { 192,9628 }, { 193,9628 }, { 194,9628 }, { 195,9628 }, + { 196,9628 }, { 197,9628 }, { 198,9628 }, { 199,9628 }, { 200,9628 }, + { 201,9628 }, { 202,9628 }, { 203,9628 }, { 204,9628 }, { 205,9628 }, + { 206,9628 }, { 207,9628 }, { 208,9628 }, { 209,9628 }, { 210,9628 }, + { 211,9628 }, { 212,9628 }, { 213,9628 }, { 214,9628 }, { 215,9628 }, + { 216,9628 }, { 217,9628 }, { 218,9628 }, { 219,9628 }, { 220,9628 }, + { 221,9628 }, { 222,9628 }, { 223,9628 }, { 224,9628 }, { 225,9628 }, + { 226,9628 }, { 227,9628 }, { 228,9628 }, { 229,9628 }, { 230,9628 }, + { 231,9628 }, { 232,9628 }, { 233,9628 }, { 234,9628 }, { 235,9628 }, + + { 236,9628 }, { 237,9628 }, { 238,9628 }, { 239,9628 }, { 240,9628 }, + { 241,9628 }, { 242,9628 }, { 243,9628 }, { 244,9628 }, { 245,9628 }, + { 246,9628 }, { 247,9628 }, { 248,9628 }, { 249,9628 }, { 250,9628 }, + { 251,9628 }, { 252,9628 }, { 253,9628 }, { 254,9628 }, { 255,9628 }, + { 0, 142 }, { 0,102518 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 38,8751 }, + { 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, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,8755 }, { 0, 142 }, { 0,102455 }, + { 1,9565 }, { 2,9565 }, { 3,9565 }, { 4,9565 }, { 5,9565 }, + { 6,9565 }, { 7,9565 }, { 8,9565 }, { 9,9565 }, { 10,9565 }, + { 11,9565 }, { 12,9565 }, { 13,9565 }, { 14,9565 }, { 15,9565 }, + + { 16,9565 }, { 17,9565 }, { 18,9565 }, { 19,9565 }, { 20,9565 }, + { 21,9565 }, { 22,9565 }, { 23,9565 }, { 24,9565 }, { 25,9565 }, + { 26,9565 }, { 27,9565 }, { 28,9565 }, { 29,9565 }, { 30,9565 }, + { 31,9565 }, { 32,9565 }, { 33,9565 }, { 34,9565 }, { 35,9565 }, + { 36,9565 }, { 37,9565 }, { 38,9565 }, { 39,8684 }, { 40,9565 }, + { 41,9565 }, { 42,9565 }, { 43,9565 }, { 44,9565 }, { 45,9565 }, + { 46,9565 }, { 47,9565 }, { 48,9565 }, { 49,9565 }, { 50,9565 }, + { 51,9565 }, { 52,9565 }, { 53,9565 }, { 54,9565 }, { 55,9565 }, + { 56,9565 }, { 57,9565 }, { 58,9565 }, { 59,9565 }, { 60,9565 }, + { 61,9565 }, { 62,9565 }, { 63,9565 }, { 64,9565 }, { 65,9565 }, + + { 66,9565 }, { 67,9565 }, { 68,9565 }, { 69,9565 }, { 70,9565 }, + { 71,9565 }, { 72,9565 }, { 73,9565 }, { 74,9565 }, { 75,9565 }, + { 76,9565 }, { 77,9565 }, { 78,9565 }, { 79,9565 }, { 80,9565 }, + { 81,9565 }, { 82,9565 }, { 83,9565 }, { 84,9565 }, { 85,9565 }, + { 86,9565 }, { 87,9565 }, { 88,9565 }, { 89,9565 }, { 90,9565 }, + { 91,9565 }, { 92,9823 }, { 93,9565 }, { 94,9565 }, { 95,9565 }, + { 96,9565 }, { 97,9565 }, { 98,9565 }, { 99,9565 }, { 100,9565 }, + { 101,9565 }, { 102,9565 }, { 103,9565 }, { 104,9565 }, { 105,9565 }, + { 106,9565 }, { 107,9565 }, { 108,9565 }, { 109,9565 }, { 110,9565 }, + { 111,9565 }, { 112,9565 }, { 113,9565 }, { 114,9565 }, { 115,9565 }, + + { 116,9565 }, { 117,9565 }, { 118,9565 }, { 119,9565 }, { 120,9565 }, + { 121,9565 }, { 122,9565 }, { 123,9565 }, { 124,9565 }, { 125,9565 }, + { 126,9565 }, { 127,9565 }, { 128,9565 }, { 129,9565 }, { 130,9565 }, + { 131,9565 }, { 132,9565 }, { 133,9565 }, { 134,9565 }, { 135,9565 }, + { 136,9565 }, { 137,9565 }, { 138,9565 }, { 139,9565 }, { 140,9565 }, + { 141,9565 }, { 142,9565 }, { 143,9565 }, { 144,9565 }, { 145,9565 }, + { 146,9565 }, { 147,9565 }, { 148,9565 }, { 149,9565 }, { 150,9565 }, + { 151,9565 }, { 152,9565 }, { 153,9565 }, { 154,9565 }, { 155,9565 }, + { 156,9565 }, { 157,9565 }, { 158,9565 }, { 159,9565 }, { 160,9565 }, + { 161,9565 }, { 162,9565 }, { 163,9565 }, { 164,9565 }, { 165,9565 }, + + { 166,9565 }, { 167,9565 }, { 168,9565 }, { 169,9565 }, { 170,9565 }, + { 171,9565 }, { 172,9565 }, { 173,9565 }, { 174,9565 }, { 175,9565 }, + { 176,9565 }, { 177,9565 }, { 178,9565 }, { 179,9565 }, { 180,9565 }, + { 181,9565 }, { 182,9565 }, { 183,9565 }, { 184,9565 }, { 185,9565 }, + { 186,9565 }, { 187,9565 }, { 188,9565 }, { 189,9565 }, { 190,9565 }, + { 191,9565 }, { 192,9565 }, { 193,9565 }, { 194,9565 }, { 195,9565 }, + { 196,9565 }, { 197,9565 }, { 198,9565 }, { 199,9565 }, { 200,9565 }, + { 201,9565 }, { 202,9565 }, { 203,9565 }, { 204,9565 }, { 205,9565 }, + { 206,9565 }, { 207,9565 }, { 208,9565 }, { 209,9565 }, { 210,9565 }, + { 211,9565 }, { 212,9565 }, { 213,9565 }, { 214,9565 }, { 215,9565 }, + + { 216,9565 }, { 217,9565 }, { 218,9565 }, { 219,9565 }, { 220,9565 }, + { 221,9565 }, { 222,9565 }, { 223,9565 }, { 224,9565 }, { 225,9565 }, + { 226,9565 }, { 227,9565 }, { 228,9565 }, { 229,9565 }, { 230,9565 }, + { 231,9565 }, { 232,9565 }, { 233,9565 }, { 234,9565 }, { 235,9565 }, + { 236,9565 }, { 237,9565 }, { 238,9565 }, { 239,9565 }, { 240,9565 }, + { 241,9565 }, { 242,9565 }, { 243,9565 }, { 244,9565 }, { 245,9565 }, + { 246,9565 }, { 247,9565 }, { 248,9565 }, { 249,9565 }, { 250,9565 }, + { 251,9565 }, { 252,9565 }, { 253,9565 }, { 254,9565 }, { 255,9565 }, + { 256,9565 }, { 0, 142 }, { 0,102197 }, { 0, 142 }, { 0,102195 }, + { 0, 0 }, { 0, 0 }, { 0, 142 }, { 0,102191 }, { 0, 0 }, + + { 0, 0 }, { 9,9823 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, + { 0,102184 }, { 0, 142 }, { 0,102182 }, { 0, 0 }, { 0, 0 }, + { 0, 142 }, { 0,102178 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,9823 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, + { 0,102159 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 43,9851 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,9859 }, + + { 45,9848 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 47,9861 }, + { 61,9851 }, { 0, 0 }, { 65,9059 }, { 66,9825 }, { 61,9853 }, + { 68,9828 }, { 0, 0 }, { 70,9834 }, { 0, 129 }, { 0,102125 }, + { 73,9836 }, { 61,9850 }, { 62,9852 }, { 61,9863 }, { 58,9893 }, + { 0, 0 }, { 79,9843 }, { 0, 0 }, { 0, 0 }, { 82,9846 }, + { 83,9848 }, { 46,9829 }, { 85,9851 }, { 48,9862 }, { 49,9862 }, + { 50,9862 }, { 51,9862 }, { 52,9862 }, { 53,9862 }, { 54,9862 }, + { 55,9862 }, { 56,9862 }, { 57,9862 }, { 0, 0 }, { 97,9059 }, + { 98,9825 }, { 61,9831 }, { 100,9828 }, { 0, 0 }, { 102,9834 }, + { 0, 142 }, { 0,102093 }, { 105,9836 }, { 0, 142 }, { 0,102090 }, + + { 0, 0 }, { 0, 142 }, { 0,102087 }, { 111,9843 }, { 0, 142 }, + { 0,102084 }, { 114,9846 }, { 115,9848 }, { 0, 0 }, { 117,9851 }, + { 46,9855 }, { 0, 0 }, { 48,9888 }, { 49,9888 }, { 50,9888 }, + { 51,9888 }, { 52,9888 }, { 53,9888 }, { 54,9888 }, { 55,9888 }, + { 56,9888 }, { 57,9888 }, { 0, 129 }, { 0,102066 }, { 0, 118 }, + { 0,102064 }, { 0, 142 }, { 0,102062 }, { 0, 0 }, { 0, 0 }, + { 66,9823 }, { 0, 0 }, { 0, 0 }, { 69,9915 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 47,9815 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, { 0,102040 }, + + { 0, 14 }, { 0,102038 }, { 88,9926 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 60,9859 }, { 61,9867 }, { 62,9869 }, { 0, 0 }, + { 61,9888 }, { 62,9893 }, { 98,9823 }, { 61,9894 }, { 62,9909 }, + { 101,9915 }, { 0, 0 }, { 62,9946 }, { 63,9958 }, { 46,9796 }, + { 0, 0 }, { 48,9829 }, { 49,9829 }, { 50,9829 }, { 51,9829 }, + { 52,9829 }, { 53,9829 }, { 54,9829 }, { 55,9829 }, { 56,9829 }, + { 57,9829 }, { 0, 131 }, { 0,102007 }, { 0, 0 }, { 120,9926 }, + { 0, 14 }, { 0,102003 }, { 0, 0 }, { 61,9943 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 69,9856 }, { 0, 15 }, { 0,101995 }, + { 0, 0 }, { 10,9894 }, { 0, 10 }, { 0,101991 }, { 0, 0 }, + + { 0, 10 }, { 0,101988 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 61,9927 }, { 10,9883 }, { 0, 13 }, { 0,101976 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 101,9856 }, + { 0, 0 }, { 0, 15 }, { 0,101962 }, { 0, 138 }, { 0,101960 }, + { 48,9884 }, { 49,9884 }, { 50,9884 }, { 51,9884 }, { 52,9884 }, + { 53,9884 }, { 54,9884 }, { 55,9884 }, { 56,9884 }, { 57,9884 }, + { 0, 0 }, { 47,9888 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,9884 }, { 66,10141 }, { 67,9884 }, + + { 68,9884 }, { 69,9884 }, { 70,9884 }, { 71,9884 }, { 72,9884 }, + { 73,9884 }, { 74,9884 }, { 75,9884 }, { 76,9884 }, { 77,9884 }, + { 78,10398 }, { 79,9884 }, { 80,9884 }, { 81,9884 }, { 82,10655 }, + { 83,10912 }, { 84,9884 }, { 85,9884 }, { 86,9884 }, { 87,9884 }, + { 88,9884 }, { 89,9884 }, { 90,9884 }, { 124,9929 }, { 47,9867 }, + { 62,9873 }, { 0, 0 }, { 95,9884 }, { 0, 0 }, { 97,9884 }, + { 98,10141 }, { 99,9884 }, { 100,9884 }, { 101,9884 }, { 102,9884 }, + { 103,9884 }, { 104,9884 }, { 105,9884 }, { 106,9884 }, { 107,9884 }, + { 108,9884 }, { 109,9884 }, { 110,10398 }, { 111,9884 }, { 112,9884 }, + { 113,9884 }, { 114,10655 }, { 115,10912 }, { 116,9884 }, { 117,9884 }, + + { 118,9884 }, { 119,9884 }, { 120,9884 }, { 121,9884 }, { 122,9884 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,9884 }, + { 128,9884 }, { 129,9884 }, { 130,9884 }, { 131,9884 }, { 132,9884 }, + { 133,9884 }, { 134,9884 }, { 135,9884 }, { 136,9884 }, { 137,9884 }, + { 138,9884 }, { 139,9884 }, { 140,9884 }, { 141,9884 }, { 142,9884 }, + { 143,9884 }, { 144,9884 }, { 145,9884 }, { 146,9884 }, { 147,9884 }, + { 148,9884 }, { 149,9884 }, { 150,9884 }, { 151,9884 }, { 152,9884 }, + { 153,9884 }, { 154,9884 }, { 155,9884 }, { 156,9884 }, { 157,9884 }, + { 158,9884 }, { 159,9884 }, { 160,9884 }, { 161,9884 }, { 162,9884 }, + { 163,9884 }, { 164,9884 }, { 165,9884 }, { 166,9884 }, { 167,9884 }, + + { 168,9884 }, { 169,9884 }, { 170,9884 }, { 171,9884 }, { 172,9884 }, + { 173,9884 }, { 174,9884 }, { 175,9884 }, { 176,9884 }, { 177,9884 }, + { 178,9884 }, { 179,9884 }, { 180,9884 }, { 181,9884 }, { 182,9884 }, + { 183,9884 }, { 184,9884 }, { 185,9884 }, { 186,9884 }, { 187,9884 }, + { 188,9884 }, { 189,9884 }, { 190,9884 }, { 191,9884 }, { 192,9884 }, + { 193,9884 }, { 194,9884 }, { 195,9884 }, { 196,9884 }, { 197,9884 }, + { 198,9884 }, { 199,9884 }, { 200,9884 }, { 201,9884 }, { 202,9884 }, + { 203,9884 }, { 204,9884 }, { 205,9884 }, { 206,9884 }, { 207,9884 }, + { 208,9884 }, { 209,9884 }, { 210,9884 }, { 211,9884 }, { 212,9884 }, + { 213,9884 }, { 214,9884 }, { 215,9884 }, { 216,9884 }, { 217,9884 }, + + { 218,9884 }, { 219,9884 }, { 220,9884 }, { 221,9884 }, { 222,9884 }, + { 223,9884 }, { 224,9884 }, { 225,9884 }, { 226,9884 }, { 227,9884 }, + { 228,9884 }, { 229,9884 }, { 230,9884 }, { 231,9884 }, { 232,9884 }, + { 233,9884 }, { 234,9884 }, { 235,9884 }, { 236,9884 }, { 237,9884 }, + { 238,9884 }, { 239,9884 }, { 240,9884 }, { 241,9884 }, { 242,9884 }, + { 243,9884 }, { 244,9884 }, { 245,9884 }, { 246,9884 }, { 247,9884 }, + { 248,9884 }, { 249,9884 }, { 250,9884 }, { 251,9884 }, { 252,9884 }, + { 253,9884 }, { 254,9884 }, { 255,9884 }, { 0, 131 }, { 0,101750 }, + { 0, 138 }, { 0,101748 }, { 0, 141 }, { 0,101746 }, { 0, 141 }, + { 0,101744 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 10,9655 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 10,9653 }, { 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 }, { 34,10912 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,11170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,9627 }, { 49,9627 }, { 50,9627 }, + { 51,9627 }, { 52,9627 }, { 53,9627 }, { 54,9627 }, { 55,9627 }, + { 56,9627 }, { 57,9627 }, { 0, 0 }, { 0, 0 }, { 60,9629 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,9627 }, + { 66,9627 }, { 67,9627 }, { 68,9627 }, { 69,9627 }, { 70,9627 }, + { 71,9627 }, { 72,9627 }, { 73,9627 }, { 74,9627 }, { 75,9627 }, + { 76,9627 }, { 77,9627 }, { 78,9627 }, { 79,9627 }, { 80,9627 }, + { 81,9627 }, { 82,11428 }, { 83,9627 }, { 84,9627 }, { 85,9627 }, + { 86,9627 }, { 87,9627 }, { 88,9627 }, { 89,9627 }, { 90,9627 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9627 }, + { 0, 0 }, { 97,9627 }, { 98,9627 }, { 99,9627 }, { 100,9627 }, + { 101,9627 }, { 102,9627 }, { 103,9627 }, { 104,9627 }, { 105,9627 }, + { 106,9627 }, { 107,9627 }, { 108,9627 }, { 109,9627 }, { 110,9627 }, + + { 111,9627 }, { 112,9627 }, { 113,9627 }, { 114,11428 }, { 115,9627 }, + { 116,9627 }, { 117,9627 }, { 118,9627 }, { 119,9627 }, { 120,9627 }, + { 121,9627 }, { 122,9627 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,9627 }, { 128,9627 }, { 129,9627 }, { 130,9627 }, + { 131,9627 }, { 132,9627 }, { 133,9627 }, { 134,9627 }, { 135,9627 }, + { 136,9627 }, { 137,9627 }, { 138,9627 }, { 139,9627 }, { 140,9627 }, + { 141,9627 }, { 142,9627 }, { 143,9627 }, { 144,9627 }, { 145,9627 }, + { 146,9627 }, { 147,9627 }, { 148,9627 }, { 149,9627 }, { 150,9627 }, + { 151,9627 }, { 152,9627 }, { 153,9627 }, { 154,9627 }, { 155,9627 }, + { 156,9627 }, { 157,9627 }, { 158,9627 }, { 159,9627 }, { 160,9627 }, + + { 161,9627 }, { 162,9627 }, { 163,9627 }, { 164,9627 }, { 165,9627 }, + { 166,9627 }, { 167,9627 }, { 168,9627 }, { 169,9627 }, { 170,9627 }, + { 171,9627 }, { 172,9627 }, { 173,9627 }, { 174,9627 }, { 175,9627 }, + { 176,9627 }, { 177,9627 }, { 178,9627 }, { 179,9627 }, { 180,9627 }, + { 181,9627 }, { 182,9627 }, { 183,9627 }, { 184,9627 }, { 185,9627 }, + { 186,9627 }, { 187,9627 }, { 188,9627 }, { 189,9627 }, { 190,9627 }, + { 191,9627 }, { 192,9627 }, { 193,9627 }, { 194,9627 }, { 195,9627 }, + { 196,9627 }, { 197,9627 }, { 198,9627 }, { 199,9627 }, { 200,9627 }, + { 201,9627 }, { 202,9627 }, { 203,9627 }, { 204,9627 }, { 205,9627 }, + { 206,9627 }, { 207,9627 }, { 208,9627 }, { 209,9627 }, { 210,9627 }, + + { 211,9627 }, { 212,9627 }, { 213,9627 }, { 214,9627 }, { 215,9627 }, + { 216,9627 }, { 217,9627 }, { 218,9627 }, { 219,9627 }, { 220,9627 }, + { 221,9627 }, { 222,9627 }, { 223,9627 }, { 224,9627 }, { 225,9627 }, + { 226,9627 }, { 227,9627 }, { 228,9627 }, { 229,9627 }, { 230,9627 }, + { 231,9627 }, { 232,9627 }, { 233,9627 }, { 234,9627 }, { 235,9627 }, + { 236,9627 }, { 237,9627 }, { 238,9627 }, { 239,9627 }, { 240,9627 }, + { 241,9627 }, { 242,9627 }, { 243,9627 }, { 244,9627 }, { 245,9627 }, + { 246,9627 }, { 247,9627 }, { 248,9627 }, { 249,9627 }, { 250,9627 }, + { 251,9627 }, { 252,9627 }, { 253,9627 }, { 254,9627 }, { 255,9627 }, + { 0, 131 }, { 0,101493 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,9370 }, + { 49,9370 }, { 50,9370 }, { 51,9370 }, { 52,9370 }, { 53,9370 }, + + { 54,9370 }, { 55,9370 }, { 56,9370 }, { 57,9370 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,11428 }, { 66,9370 }, { 67,9370 }, { 68,9370 }, + { 69,9370 }, { 70,9370 }, { 71,9370 }, { 72,9370 }, { 73,9370 }, + { 74,9370 }, { 75,9370 }, { 76,11685 }, { 77,9370 }, { 78,9370 }, + { 79,11942 }, { 80,9370 }, { 81,9370 }, { 82,9370 }, { 83,9370 }, + { 84,9370 }, { 85,9370 }, { 86,9370 }, { 87,9370 }, { 88,9370 }, + { 89,9370 }, { 90,9370 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,9370 }, { 0, 0 }, { 97,11428 }, { 98,9370 }, + { 99,9370 }, { 100,9370 }, { 101,9370 }, { 102,9370 }, { 103,9370 }, + + { 104,9370 }, { 105,9370 }, { 106,9370 }, { 107,9370 }, { 108,11685 }, + { 109,9370 }, { 110,9370 }, { 111,11942 }, { 112,9370 }, { 113,9370 }, + { 114,9370 }, { 115,9370 }, { 116,9370 }, { 117,9370 }, { 118,9370 }, + { 119,9370 }, { 120,9370 }, { 121,9370 }, { 122,9370 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,9370 }, { 128,9370 }, + { 129,9370 }, { 130,9370 }, { 131,9370 }, { 132,9370 }, { 133,9370 }, + { 134,9370 }, { 135,9370 }, { 136,9370 }, { 137,9370 }, { 138,9370 }, + { 139,9370 }, { 140,9370 }, { 141,9370 }, { 142,9370 }, { 143,9370 }, + { 144,9370 }, { 145,9370 }, { 146,9370 }, { 147,9370 }, { 148,9370 }, + { 149,9370 }, { 150,9370 }, { 151,9370 }, { 152,9370 }, { 153,9370 }, + + { 154,9370 }, { 155,9370 }, { 156,9370 }, { 157,9370 }, { 158,9370 }, + { 159,9370 }, { 160,9370 }, { 161,9370 }, { 162,9370 }, { 163,9370 }, + { 164,9370 }, { 165,9370 }, { 166,9370 }, { 167,9370 }, { 168,9370 }, + { 169,9370 }, { 170,9370 }, { 171,9370 }, { 172,9370 }, { 173,9370 }, + { 174,9370 }, { 175,9370 }, { 176,9370 }, { 177,9370 }, { 178,9370 }, + { 179,9370 }, { 180,9370 }, { 181,9370 }, { 182,9370 }, { 183,9370 }, + { 184,9370 }, { 185,9370 }, { 186,9370 }, { 187,9370 }, { 188,9370 }, + { 189,9370 }, { 190,9370 }, { 191,9370 }, { 192,9370 }, { 193,9370 }, + { 194,9370 }, { 195,9370 }, { 196,9370 }, { 197,9370 }, { 198,9370 }, + { 199,9370 }, { 200,9370 }, { 201,9370 }, { 202,9370 }, { 203,9370 }, + + { 204,9370 }, { 205,9370 }, { 206,9370 }, { 207,9370 }, { 208,9370 }, + { 209,9370 }, { 210,9370 }, { 211,9370 }, { 212,9370 }, { 213,9370 }, + { 214,9370 }, { 215,9370 }, { 216,9370 }, { 217,9370 }, { 218,9370 }, + { 219,9370 }, { 220,9370 }, { 221,9370 }, { 222,9370 }, { 223,9370 }, + { 224,9370 }, { 225,9370 }, { 226,9370 }, { 227,9370 }, { 228,9370 }, + { 229,9370 }, { 230,9370 }, { 231,9370 }, { 232,9370 }, { 233,9370 }, + { 234,9370 }, { 235,9370 }, { 236,9370 }, { 237,9370 }, { 238,9370 }, + { 239,9370 }, { 240,9370 }, { 241,9370 }, { 242,9370 }, { 243,9370 }, + { 244,9370 }, { 245,9370 }, { 246,9370 }, { 247,9370 }, { 248,9370 }, + { 249,9370 }, { 250,9370 }, { 251,9370 }, { 252,9370 }, { 253,9370 }, + + { 254,9370 }, { 255,9370 }, { 0, 131 }, { 0,101236 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,9113 }, { 49,9113 }, { 50,9113 }, { 51,9113 }, + { 52,9113 }, { 53,9113 }, { 54,9113 }, { 55,9113 }, { 56,9113 }, + { 57,9113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,9113 }, { 66,9113 }, + { 67,9113 }, { 68,9113 }, { 69,11942 }, { 70,9113 }, { 71,9113 }, + { 72,9113 }, { 73,9113 }, { 74,9113 }, { 75,9113 }, { 76,9113 }, + { 77,9113 }, { 78,9113 }, { 79,12199 }, { 80,9113 }, { 81,9113 }, + { 82,9113 }, { 83,9113 }, { 84,9113 }, { 85,9113 }, { 86,9113 }, + { 87,9113 }, { 88,9113 }, { 89,9113 }, { 90,9113 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9113 }, { 0, 0 }, + + { 97,9113 }, { 98,9113 }, { 99,9113 }, { 100,9113 }, { 101,11942 }, + { 102,9113 }, { 103,9113 }, { 104,9113 }, { 105,9113 }, { 106,9113 }, + { 107,9113 }, { 108,9113 }, { 109,9113 }, { 110,9113 }, { 111,12199 }, + { 112,9113 }, { 113,9113 }, { 114,9113 }, { 115,9113 }, { 116,9113 }, + { 117,9113 }, { 118,9113 }, { 119,9113 }, { 120,9113 }, { 121,9113 }, + { 122,9113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,9113 }, { 128,9113 }, { 129,9113 }, { 130,9113 }, { 131,9113 }, + { 132,9113 }, { 133,9113 }, { 134,9113 }, { 135,9113 }, { 136,9113 }, + { 137,9113 }, { 138,9113 }, { 139,9113 }, { 140,9113 }, { 141,9113 }, + { 142,9113 }, { 143,9113 }, { 144,9113 }, { 145,9113 }, { 146,9113 }, + + { 147,9113 }, { 148,9113 }, { 149,9113 }, { 150,9113 }, { 151,9113 }, + { 152,9113 }, { 153,9113 }, { 154,9113 }, { 155,9113 }, { 156,9113 }, + { 157,9113 }, { 158,9113 }, { 159,9113 }, { 160,9113 }, { 161,9113 }, + { 162,9113 }, { 163,9113 }, { 164,9113 }, { 165,9113 }, { 166,9113 }, + { 167,9113 }, { 168,9113 }, { 169,9113 }, { 170,9113 }, { 171,9113 }, + { 172,9113 }, { 173,9113 }, { 174,9113 }, { 175,9113 }, { 176,9113 }, + { 177,9113 }, { 178,9113 }, { 179,9113 }, { 180,9113 }, { 181,9113 }, + { 182,9113 }, { 183,9113 }, { 184,9113 }, { 185,9113 }, { 186,9113 }, + { 187,9113 }, { 188,9113 }, { 189,9113 }, { 190,9113 }, { 191,9113 }, + { 192,9113 }, { 193,9113 }, { 194,9113 }, { 195,9113 }, { 196,9113 }, + + { 197,9113 }, { 198,9113 }, { 199,9113 }, { 200,9113 }, { 201,9113 }, + { 202,9113 }, { 203,9113 }, { 204,9113 }, { 205,9113 }, { 206,9113 }, + { 207,9113 }, { 208,9113 }, { 209,9113 }, { 210,9113 }, { 211,9113 }, + { 212,9113 }, { 213,9113 }, { 214,9113 }, { 215,9113 }, { 216,9113 }, + { 217,9113 }, { 218,9113 }, { 219,9113 }, { 220,9113 }, { 221,9113 }, + { 222,9113 }, { 223,9113 }, { 224,9113 }, { 225,9113 }, { 226,9113 }, + { 227,9113 }, { 228,9113 }, { 229,9113 }, { 230,9113 }, { 231,9113 }, + { 232,9113 }, { 233,9113 }, { 234,9113 }, { 235,9113 }, { 236,9113 }, + { 237,9113 }, { 238,9113 }, { 239,9113 }, { 240,9113 }, { 241,9113 }, + { 242,9113 }, { 243,9113 }, { 244,9113 }, { 245,9113 }, { 246,9113 }, + + { 247,9113 }, { 248,9113 }, { 249,9113 }, { 250,9113 }, { 251,9113 }, + { 252,9113 }, { 253,9113 }, { 254,9113 }, { 255,9113 }, { 0, 131 }, + { 0,100979 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,8856 }, { 49,8856 }, + { 50,8856 }, { 51,8856 }, { 52,8856 }, { 53,8856 }, { 54,8856 }, + { 55,8856 }, { 56,8856 }, { 57,8856 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,8856 }, { 66,8856 }, { 67,12199 }, { 68,8856 }, { 69,8856 }, + { 70,8856 }, { 71,8856 }, { 72,8856 }, { 73,8856 }, { 74,8856 }, + { 75,8856 }, { 76,12456 }, { 77,12713 }, { 78,12970 }, { 79,8856 }, + { 80,8856 }, { 81,8856 }, { 82,8856 }, { 83,8856 }, { 84,8856 }, + { 85,8856 }, { 86,13227 }, { 87,8856 }, { 88,13484 }, { 89,8856 }, + + { 90,8856 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,8856 }, { 0, 0 }, { 97,8856 }, { 98,8856 }, { 99,12199 }, + { 100,8856 }, { 101,8856 }, { 102,8856 }, { 103,8856 }, { 104,8856 }, + { 105,8856 }, { 106,8856 }, { 107,8856 }, { 108,12456 }, { 109,12713 }, + { 110,12970 }, { 111,8856 }, { 112,8856 }, { 113,8856 }, { 114,8856 }, + { 115,8856 }, { 116,8856 }, { 117,8856 }, { 118,13227 }, { 119,8856 }, + { 120,13484 }, { 121,8856 }, { 122,8856 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,8856 }, { 128,8856 }, { 129,8856 }, + { 130,8856 }, { 131,8856 }, { 132,8856 }, { 133,8856 }, { 134,8856 }, + { 135,8856 }, { 136,8856 }, { 137,8856 }, { 138,8856 }, { 139,8856 }, + + { 140,8856 }, { 141,8856 }, { 142,8856 }, { 143,8856 }, { 144,8856 }, + { 145,8856 }, { 146,8856 }, { 147,8856 }, { 148,8856 }, { 149,8856 }, + { 150,8856 }, { 151,8856 }, { 152,8856 }, { 153,8856 }, { 154,8856 }, + { 155,8856 }, { 156,8856 }, { 157,8856 }, { 158,8856 }, { 159,8856 }, + { 160,8856 }, { 161,8856 }, { 162,8856 }, { 163,8856 }, { 164,8856 }, + { 165,8856 }, { 166,8856 }, { 167,8856 }, { 168,8856 }, { 169,8856 }, + { 170,8856 }, { 171,8856 }, { 172,8856 }, { 173,8856 }, { 174,8856 }, + { 175,8856 }, { 176,8856 }, { 177,8856 }, { 178,8856 }, { 179,8856 }, + { 180,8856 }, { 181,8856 }, { 182,8856 }, { 183,8856 }, { 184,8856 }, + { 185,8856 }, { 186,8856 }, { 187,8856 }, { 188,8856 }, { 189,8856 }, + + { 190,8856 }, { 191,8856 }, { 192,8856 }, { 193,8856 }, { 194,8856 }, + { 195,8856 }, { 196,8856 }, { 197,8856 }, { 198,8856 }, { 199,8856 }, + { 200,8856 }, { 201,8856 }, { 202,8856 }, { 203,8856 }, { 204,8856 }, + { 205,8856 }, { 206,8856 }, { 207,8856 }, { 208,8856 }, { 209,8856 }, + { 210,8856 }, { 211,8856 }, { 212,8856 }, { 213,8856 }, { 214,8856 }, + { 215,8856 }, { 216,8856 }, { 217,8856 }, { 218,8856 }, { 219,8856 }, + { 220,8856 }, { 221,8856 }, { 222,8856 }, { 223,8856 }, { 224,8856 }, + { 225,8856 }, { 226,8856 }, { 227,8856 }, { 228,8856 }, { 229,8856 }, + { 230,8856 }, { 231,8856 }, { 232,8856 }, { 233,8856 }, { 234,8856 }, + { 235,8856 }, { 236,8856 }, { 237,8856 }, { 238,8856 }, { 239,8856 }, + + { 240,8856 }, { 241,8856 }, { 242,8856 }, { 243,8856 }, { 244,8856 }, + { 245,8856 }, { 246,8856 }, { 247,8856 }, { 248,8856 }, { 249,8856 }, + { 250,8856 }, { 251,8856 }, { 252,8856 }, { 253,8856 }, { 254,8856 }, + { 255,8856 }, { 0, 131 }, { 0,100722 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,8599 }, { 49,8599 }, { 50,8599 }, { 51,8599 }, { 52,8599 }, + { 53,8599 }, { 54,8599 }, { 55,8599 }, { 56,8599 }, { 57,8599 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,8599 }, { 66,8599 }, { 67,8599 }, + { 68,8599 }, { 69,8599 }, { 70,8599 }, { 71,8599 }, { 72,8599 }, + { 73,13484 }, { 74,8599 }, { 75,8599 }, { 76,8599 }, { 77,8599 }, + { 78,8599 }, { 79,13741 }, { 80,8599 }, { 81,8599 }, { 82,8599 }, + + { 83,8599 }, { 84,8599 }, { 85,13998 }, { 86,8599 }, { 87,8599 }, + { 88,8599 }, { 89,8599 }, { 90,8599 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,8599 }, { 0, 0 }, { 97,8599 }, + { 98,8599 }, { 99,8599 }, { 100,8599 }, { 101,8599 }, { 102,8599 }, + { 103,8599 }, { 104,8599 }, { 105,13484 }, { 106,8599 }, { 107,8599 }, + { 108,8599 }, { 109,8599 }, { 110,8599 }, { 111,13741 }, { 112,8599 }, + { 113,8599 }, { 114,8599 }, { 115,8599 }, { 116,8599 }, { 117,13998 }, + { 118,8599 }, { 119,8599 }, { 120,8599 }, { 121,8599 }, { 122,8599 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,8599 }, + { 128,8599 }, { 129,8599 }, { 130,8599 }, { 131,8599 }, { 132,8599 }, + + { 133,8599 }, { 134,8599 }, { 135,8599 }, { 136,8599 }, { 137,8599 }, + { 138,8599 }, { 139,8599 }, { 140,8599 }, { 141,8599 }, { 142,8599 }, + { 143,8599 }, { 144,8599 }, { 145,8599 }, { 146,8599 }, { 147,8599 }, + { 148,8599 }, { 149,8599 }, { 150,8599 }, { 151,8599 }, { 152,8599 }, + { 153,8599 }, { 154,8599 }, { 155,8599 }, { 156,8599 }, { 157,8599 }, + { 158,8599 }, { 159,8599 }, { 160,8599 }, { 161,8599 }, { 162,8599 }, + { 163,8599 }, { 164,8599 }, { 165,8599 }, { 166,8599 }, { 167,8599 }, + { 168,8599 }, { 169,8599 }, { 170,8599 }, { 171,8599 }, { 172,8599 }, + { 173,8599 }, { 174,8599 }, { 175,8599 }, { 176,8599 }, { 177,8599 }, + { 178,8599 }, { 179,8599 }, { 180,8599 }, { 181,8599 }, { 182,8599 }, + + { 183,8599 }, { 184,8599 }, { 185,8599 }, { 186,8599 }, { 187,8599 }, + { 188,8599 }, { 189,8599 }, { 190,8599 }, { 191,8599 }, { 192,8599 }, + { 193,8599 }, { 194,8599 }, { 195,8599 }, { 196,8599 }, { 197,8599 }, + { 198,8599 }, { 199,8599 }, { 200,8599 }, { 201,8599 }, { 202,8599 }, + { 203,8599 }, { 204,8599 }, { 205,8599 }, { 206,8599 }, { 207,8599 }, + { 208,8599 }, { 209,8599 }, { 210,8599 }, { 211,8599 }, { 212,8599 }, + { 213,8599 }, { 214,8599 }, { 215,8599 }, { 216,8599 }, { 217,8599 }, + { 218,8599 }, { 219,8599 }, { 220,8599 }, { 221,8599 }, { 222,8599 }, + { 223,8599 }, { 224,8599 }, { 225,8599 }, { 226,8599 }, { 227,8599 }, + { 228,8599 }, { 229,8599 }, { 230,8599 }, { 231,8599 }, { 232,8599 }, + + { 233,8599 }, { 234,8599 }, { 235,8599 }, { 236,8599 }, { 237,8599 }, + { 238,8599 }, { 239,8599 }, { 240,8599 }, { 241,8599 }, { 242,8599 }, + { 243,8599 }, { 244,8599 }, { 245,8599 }, { 246,8599 }, { 247,8599 }, + { 248,8599 }, { 249,8599 }, { 250,8599 }, { 251,8599 }, { 252,8599 }, + { 253,8599 }, { 254,8599 }, { 255,8599 }, { 0, 131 }, { 0,100465 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,8342 }, { 49,8342 }, { 50,8342 }, + { 51,8342 }, { 52,8342 }, { 53,8342 }, { 54,8342 }, { 55,8342 }, + { 56,8342 }, { 57,8342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,8342 }, + { 66,8342 }, { 67,8342 }, { 68,8342 }, { 69,8342 }, { 70,8342 }, + { 71,8342 }, { 72,8342 }, { 73,8342 }, { 74,8342 }, { 75,8342 }, + + { 76,13998 }, { 77,8342 }, { 78,8342 }, { 79,14255 }, { 80,8342 }, + { 81,8342 }, { 82,8342 }, { 83,8342 }, { 84,8342 }, { 85,8342 }, + { 86,8342 }, { 87,8342 }, { 88,8342 }, { 89,8342 }, { 90,8342 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,8342 }, + { 0, 0 }, { 97,8342 }, { 98,8342 }, { 99,8342 }, { 100,8342 }, + { 101,8342 }, { 102,8342 }, { 103,8342 }, { 104,8342 }, { 105,8342 }, + { 106,8342 }, { 107,8342 }, { 108,13998 }, { 109,8342 }, { 110,8342 }, + { 111,14255 }, { 112,8342 }, { 113,8342 }, { 114,8342 }, { 115,8342 }, + { 116,8342 }, { 117,8342 }, { 118,8342 }, { 119,8342 }, { 120,8342 }, + { 121,8342 }, { 122,8342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,8342 }, { 128,8342 }, { 129,8342 }, { 130,8342 }, + { 131,8342 }, { 132,8342 }, { 133,8342 }, { 134,8342 }, { 135,8342 }, + { 136,8342 }, { 137,8342 }, { 138,8342 }, { 139,8342 }, { 140,8342 }, + { 141,8342 }, { 142,8342 }, { 143,8342 }, { 144,8342 }, { 145,8342 }, + { 146,8342 }, { 147,8342 }, { 148,8342 }, { 149,8342 }, { 150,8342 }, + { 151,8342 }, { 152,8342 }, { 153,8342 }, { 154,8342 }, { 155,8342 }, + { 156,8342 }, { 157,8342 }, { 158,8342 }, { 159,8342 }, { 160,8342 }, + { 161,8342 }, { 162,8342 }, { 163,8342 }, { 164,8342 }, { 165,8342 }, + { 166,8342 }, { 167,8342 }, { 168,8342 }, { 169,8342 }, { 170,8342 }, + { 171,8342 }, { 172,8342 }, { 173,8342 }, { 174,8342 }, { 175,8342 }, + + { 176,8342 }, { 177,8342 }, { 178,8342 }, { 179,8342 }, { 180,8342 }, + { 181,8342 }, { 182,8342 }, { 183,8342 }, { 184,8342 }, { 185,8342 }, + { 186,8342 }, { 187,8342 }, { 188,8342 }, { 189,8342 }, { 190,8342 }, + { 191,8342 }, { 192,8342 }, { 193,8342 }, { 194,8342 }, { 195,8342 }, + { 196,8342 }, { 197,8342 }, { 198,8342 }, { 199,8342 }, { 200,8342 }, + { 201,8342 }, { 202,8342 }, { 203,8342 }, { 204,8342 }, { 205,8342 }, + { 206,8342 }, { 207,8342 }, { 208,8342 }, { 209,8342 }, { 210,8342 }, + { 211,8342 }, { 212,8342 }, { 213,8342 }, { 214,8342 }, { 215,8342 }, + { 216,8342 }, { 217,8342 }, { 218,8342 }, { 219,8342 }, { 220,8342 }, + { 221,8342 }, { 222,8342 }, { 223,8342 }, { 224,8342 }, { 225,8342 }, + + { 226,8342 }, { 227,8342 }, { 228,8342 }, { 229,8342 }, { 230,8342 }, + { 231,8342 }, { 232,8342 }, { 233,8342 }, { 234,8342 }, { 235,8342 }, + { 236,8342 }, { 237,8342 }, { 238,8342 }, { 239,8342 }, { 240,8342 }, + { 241,8342 }, { 242,8342 }, { 243,8342 }, { 244,8342 }, { 245,8342 }, + { 246,8342 }, { 247,8342 }, { 248,8342 }, { 249,8342 }, { 250,8342 }, + { 251,8342 }, { 252,8342 }, { 253,8342 }, { 254,8342 }, { 255,8342 }, + { 0, 131 }, { 0,100208 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,8085 }, + { 49,8085 }, { 50,8085 }, { 51,8085 }, { 52,8085 }, { 53,8085 }, + { 54,8085 }, { 55,8085 }, { 56,8085 }, { 57,8085 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,8085 }, { 66,8085 }, { 67,8085 }, { 68,8085 }, + + { 69,8085 }, { 70,8085 }, { 71,8085 }, { 72,8085 }, { 73,8085 }, + { 74,8085 }, { 75,8085 }, { 76,8085 }, { 77,8085 }, { 78,8085 }, + { 79,8085 }, { 80,8085 }, { 81,8085 }, { 82,8085 }, { 83,8085 }, + { 84,8085 }, { 85,8085 }, { 86,8085 }, { 87,8085 }, { 88,8085 }, + { 89,8085 }, { 90,8085 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,8085 }, { 0, 0 }, { 97,8085 }, { 98,8085 }, + { 99,8085 }, { 100,8085 }, { 101,8085 }, { 102,8085 }, { 103,8085 }, + { 104,8085 }, { 105,8085 }, { 106,8085 }, { 107,8085 }, { 108,8085 }, + { 109,8085 }, { 110,8085 }, { 111,8085 }, { 112,8085 }, { 113,8085 }, + { 114,8085 }, { 115,8085 }, { 116,8085 }, { 117,8085 }, { 118,8085 }, + + { 119,8085 }, { 120,8085 }, { 121,8085 }, { 122,8085 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,8085 }, { 128,8085 }, + { 129,8085 }, { 130,8085 }, { 131,8085 }, { 132,8085 }, { 133,8085 }, + { 134,8085 }, { 135,8085 }, { 136,8085 }, { 137,8085 }, { 138,8085 }, + { 139,8085 }, { 140,8085 }, { 141,8085 }, { 142,8085 }, { 143,8085 }, + { 144,8085 }, { 145,8085 }, { 146,8085 }, { 147,8085 }, { 148,8085 }, + { 149,8085 }, { 150,8085 }, { 151,8085 }, { 152,8085 }, { 153,8085 }, + { 154,8085 }, { 155,8085 }, { 156,8085 }, { 157,8085 }, { 158,8085 }, + { 159,8085 }, { 160,8085 }, { 161,8085 }, { 162,8085 }, { 163,8085 }, + { 164,8085 }, { 165,8085 }, { 166,8085 }, { 167,8085 }, { 168,8085 }, + + { 169,8085 }, { 170,8085 }, { 171,8085 }, { 172,8085 }, { 173,8085 }, + { 174,8085 }, { 175,8085 }, { 176,8085 }, { 177,8085 }, { 178,8085 }, + { 179,8085 }, { 180,8085 }, { 181,8085 }, { 182,8085 }, { 183,8085 }, + { 184,8085 }, { 185,8085 }, { 186,8085 }, { 187,8085 }, { 188,8085 }, + { 189,8085 }, { 190,8085 }, { 191,8085 }, { 192,8085 }, { 193,8085 }, + { 194,8085 }, { 195,8085 }, { 196,8085 }, { 197,8085 }, { 198,8085 }, + { 199,8085 }, { 200,8085 }, { 201,8085 }, { 202,8085 }, { 203,8085 }, + { 204,8085 }, { 205,8085 }, { 206,8085 }, { 207,8085 }, { 208,8085 }, + { 209,8085 }, { 210,8085 }, { 211,8085 }, { 212,8085 }, { 213,8085 }, + { 214,8085 }, { 215,8085 }, { 216,8085 }, { 217,8085 }, { 218,8085 }, + + { 219,8085 }, { 220,8085 }, { 221,8085 }, { 222,8085 }, { 223,8085 }, + { 224,8085 }, { 225,8085 }, { 226,8085 }, { 227,8085 }, { 228,8085 }, + { 229,8085 }, { 230,8085 }, { 231,8085 }, { 232,8085 }, { 233,8085 }, + { 234,8085 }, { 235,8085 }, { 236,8085 }, { 237,8085 }, { 238,8085 }, + { 239,8085 }, { 240,8085 }, { 241,8085 }, { 242,8085 }, { 243,8085 }, + { 244,8085 }, { 245,8085 }, { 246,8085 }, { 247,8085 }, { 248,8085 }, + { 249,8085 }, { 250,8085 }, { 251,8085 }, { 252,8085 }, { 253,8085 }, + { 254,8085 }, { 255,8085 }, { 0, 131 }, { 0,99951 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,7828 }, { 49,7828 }, { 50,7828 }, { 51,7828 }, + { 52,7828 }, { 53,7828 }, { 54,7828 }, { 55,7828 }, { 56,7828 }, + { 57,7828 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7828 }, { 66,7828 }, + { 67,7828 }, { 68,7828 }, { 69,7828 }, { 70,13998 }, { 71,7828 }, + { 72,7828 }, { 73,7828 }, { 74,7828 }, { 75,7828 }, { 76,7828 }, + { 77,14255 }, { 78,14512 }, { 79,7828 }, { 80,7828 }, { 81,7828 }, + { 82,7828 }, { 83,14769 }, { 84,7828 }, { 85,7828 }, { 86,7828 }, + { 87,7828 }, { 88,7828 }, { 89,7828 }, { 90,7828 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7828 }, { 0, 0 }, + { 97,7828 }, { 98,7828 }, { 99,7828 }, { 100,7828 }, { 101,7828 }, + { 102,13998 }, { 103,7828 }, { 104,7828 }, { 105,7828 }, { 106,7828 }, + { 107,7828 }, { 108,7828 }, { 109,14255 }, { 110,14512 }, { 111,7828 }, + + { 112,7828 }, { 113,7828 }, { 114,7828 }, { 115,14769 }, { 116,7828 }, + { 117,7828 }, { 118,7828 }, { 119,7828 }, { 120,7828 }, { 121,7828 }, + { 122,7828 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,7828 }, { 128,7828 }, { 129,7828 }, { 130,7828 }, { 131,7828 }, + { 132,7828 }, { 133,7828 }, { 134,7828 }, { 135,7828 }, { 136,7828 }, + { 137,7828 }, { 138,7828 }, { 139,7828 }, { 140,7828 }, { 141,7828 }, + { 142,7828 }, { 143,7828 }, { 144,7828 }, { 145,7828 }, { 146,7828 }, + { 147,7828 }, { 148,7828 }, { 149,7828 }, { 150,7828 }, { 151,7828 }, + { 152,7828 }, { 153,7828 }, { 154,7828 }, { 155,7828 }, { 156,7828 }, + { 157,7828 }, { 158,7828 }, { 159,7828 }, { 160,7828 }, { 161,7828 }, + + { 162,7828 }, { 163,7828 }, { 164,7828 }, { 165,7828 }, { 166,7828 }, + { 167,7828 }, { 168,7828 }, { 169,7828 }, { 170,7828 }, { 171,7828 }, + { 172,7828 }, { 173,7828 }, { 174,7828 }, { 175,7828 }, { 176,7828 }, + { 177,7828 }, { 178,7828 }, { 179,7828 }, { 180,7828 }, { 181,7828 }, + { 182,7828 }, { 183,7828 }, { 184,7828 }, { 185,7828 }, { 186,7828 }, + { 187,7828 }, { 188,7828 }, { 189,7828 }, { 190,7828 }, { 191,7828 }, + { 192,7828 }, { 193,7828 }, { 194,7828 }, { 195,7828 }, { 196,7828 }, + { 197,7828 }, { 198,7828 }, { 199,7828 }, { 200,7828 }, { 201,7828 }, + { 202,7828 }, { 203,7828 }, { 204,7828 }, { 205,7828 }, { 206,7828 }, + { 207,7828 }, { 208,7828 }, { 209,7828 }, { 210,7828 }, { 211,7828 }, + + { 212,7828 }, { 213,7828 }, { 214,7828 }, { 215,7828 }, { 216,7828 }, + { 217,7828 }, { 218,7828 }, { 219,7828 }, { 220,7828 }, { 221,7828 }, + { 222,7828 }, { 223,7828 }, { 224,7828 }, { 225,7828 }, { 226,7828 }, + { 227,7828 }, { 228,7828 }, { 229,7828 }, { 230,7828 }, { 231,7828 }, + { 232,7828 }, { 233,7828 }, { 234,7828 }, { 235,7828 }, { 236,7828 }, + { 237,7828 }, { 238,7828 }, { 239,7828 }, { 240,7828 }, { 241,7828 }, + { 242,7828 }, { 243,7828 }, { 244,7828 }, { 245,7828 }, { 246,7828 }, + { 247,7828 }, { 248,7828 }, { 249,7828 }, { 250,7828 }, { 251,7828 }, + { 252,7828 }, { 253,7828 }, { 254,7828 }, { 255,7828 }, { 0, 131 }, + { 0,99694 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,7571 }, { 49,7571 }, + { 50,7571 }, { 51,7571 }, { 52,7571 }, { 53,7571 }, { 54,7571 }, + + { 55,7571 }, { 56,7571 }, { 57,7571 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,7571 }, { 66,7571 }, { 67,7571 }, { 68,7571 }, { 69,7571 }, + { 70,7571 }, { 71,7571 }, { 72,7571 }, { 73,14769 }, { 74,7571 }, + { 75,7571 }, { 76,7571 }, { 77,7571 }, { 78,7571 }, { 79,7571 }, + { 80,7571 }, { 81,7571 }, { 82,7571 }, { 83,7571 }, { 84,7571 }, + { 85,7571 }, { 86,7571 }, { 87,7571 }, { 88,7571 }, { 89,7571 }, + { 90,7571 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,7571 }, { 0, 0 }, { 97,7571 }, { 98,7571 }, { 99,7571 }, + { 100,7571 }, { 101,7571 }, { 102,7571 }, { 103,7571 }, { 104,7571 }, + + { 105,14769 }, { 106,7571 }, { 107,7571 }, { 108,7571 }, { 109,7571 }, + { 110,7571 }, { 111,7571 }, { 112,7571 }, { 113,7571 }, { 114,7571 }, + { 115,7571 }, { 116,7571 }, { 117,7571 }, { 118,7571 }, { 119,7571 }, + { 120,7571 }, { 121,7571 }, { 122,7571 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,7571 }, { 128,7571 }, { 129,7571 }, + { 130,7571 }, { 131,7571 }, { 132,7571 }, { 133,7571 }, { 134,7571 }, + { 135,7571 }, { 136,7571 }, { 137,7571 }, { 138,7571 }, { 139,7571 }, + { 140,7571 }, { 141,7571 }, { 142,7571 }, { 143,7571 }, { 144,7571 }, + { 145,7571 }, { 146,7571 }, { 147,7571 }, { 148,7571 }, { 149,7571 }, + { 150,7571 }, { 151,7571 }, { 152,7571 }, { 153,7571 }, { 154,7571 }, + + { 155,7571 }, { 156,7571 }, { 157,7571 }, { 158,7571 }, { 159,7571 }, + { 160,7571 }, { 161,7571 }, { 162,7571 }, { 163,7571 }, { 164,7571 }, + { 165,7571 }, { 166,7571 }, { 167,7571 }, { 168,7571 }, { 169,7571 }, + { 170,7571 }, { 171,7571 }, { 172,7571 }, { 173,7571 }, { 174,7571 }, + { 175,7571 }, { 176,7571 }, { 177,7571 }, { 178,7571 }, { 179,7571 }, + { 180,7571 }, { 181,7571 }, { 182,7571 }, { 183,7571 }, { 184,7571 }, + { 185,7571 }, { 186,7571 }, { 187,7571 }, { 188,7571 }, { 189,7571 }, + { 190,7571 }, { 191,7571 }, { 192,7571 }, { 193,7571 }, { 194,7571 }, + { 195,7571 }, { 196,7571 }, { 197,7571 }, { 198,7571 }, { 199,7571 }, + { 200,7571 }, { 201,7571 }, { 202,7571 }, { 203,7571 }, { 204,7571 }, + + { 205,7571 }, { 206,7571 }, { 207,7571 }, { 208,7571 }, { 209,7571 }, + { 210,7571 }, { 211,7571 }, { 212,7571 }, { 213,7571 }, { 214,7571 }, + { 215,7571 }, { 216,7571 }, { 217,7571 }, { 218,7571 }, { 219,7571 }, + { 220,7571 }, { 221,7571 }, { 222,7571 }, { 223,7571 }, { 224,7571 }, + { 225,7571 }, { 226,7571 }, { 227,7571 }, { 228,7571 }, { 229,7571 }, + { 230,7571 }, { 231,7571 }, { 232,7571 }, { 233,7571 }, { 234,7571 }, + { 235,7571 }, { 236,7571 }, { 237,7571 }, { 238,7571 }, { 239,7571 }, + { 240,7571 }, { 241,7571 }, { 242,7571 }, { 243,7571 }, { 244,7571 }, + { 245,7571 }, { 246,7571 }, { 247,7571 }, { 248,7571 }, { 249,7571 }, + { 250,7571 }, { 251,7571 }, { 252,7571 }, { 253,7571 }, { 254,7571 }, + + { 255,7571 }, { 0, 131 }, { 0,99437 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,7314 }, { 49,7314 }, { 50,7314 }, { 51,7314 }, { 52,7314 }, + { 53,7314 }, { 54,7314 }, { 55,7314 }, { 56,7314 }, { 57,7314 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,14769 }, { 66,7314 }, { 67,7314 }, + { 68,7314 }, { 69,15026 }, { 70,7314 }, { 71,7314 }, { 72,7314 }, + { 73,7314 }, { 74,7314 }, { 75,7314 }, { 76,7314 }, { 77,7314 }, + { 78,7314 }, { 79,7314 }, { 80,7314 }, { 81,7314 }, { 82,7314 }, + { 83,7314 }, { 84,7314 }, { 85,7314 }, { 86,7314 }, { 87,7314 }, + { 88,7314 }, { 89,7314 }, { 90,7314 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,7314 }, { 0, 0 }, { 97,14769 }, + + { 98,7314 }, { 99,7314 }, { 100,7314 }, { 101,15026 }, { 102,7314 }, + { 103,7314 }, { 104,7314 }, { 105,7314 }, { 106,7314 }, { 107,7314 }, + { 108,7314 }, { 109,7314 }, { 110,7314 }, { 111,7314 }, { 112,7314 }, + { 113,7314 }, { 114,7314 }, { 115,7314 }, { 116,7314 }, { 117,7314 }, + { 118,7314 }, { 119,7314 }, { 120,7314 }, { 121,7314 }, { 122,7314 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,7314 }, + { 128,7314 }, { 129,7314 }, { 130,7314 }, { 131,7314 }, { 132,7314 }, + { 133,7314 }, { 134,7314 }, { 135,7314 }, { 136,7314 }, { 137,7314 }, + { 138,7314 }, { 139,7314 }, { 140,7314 }, { 141,7314 }, { 142,7314 }, + { 143,7314 }, { 144,7314 }, { 145,7314 }, { 146,7314 }, { 147,7314 }, + + { 148,7314 }, { 149,7314 }, { 150,7314 }, { 151,7314 }, { 152,7314 }, + { 153,7314 }, { 154,7314 }, { 155,7314 }, { 156,7314 }, { 157,7314 }, + { 158,7314 }, { 159,7314 }, { 160,7314 }, { 161,7314 }, { 162,7314 }, + { 163,7314 }, { 164,7314 }, { 165,7314 }, { 166,7314 }, { 167,7314 }, + { 168,7314 }, { 169,7314 }, { 170,7314 }, { 171,7314 }, { 172,7314 }, + { 173,7314 }, { 174,7314 }, { 175,7314 }, { 176,7314 }, { 177,7314 }, + { 178,7314 }, { 179,7314 }, { 180,7314 }, { 181,7314 }, { 182,7314 }, + { 183,7314 }, { 184,7314 }, { 185,7314 }, { 186,7314 }, { 187,7314 }, + { 188,7314 }, { 189,7314 }, { 190,7314 }, { 191,7314 }, { 192,7314 }, + { 193,7314 }, { 194,7314 }, { 195,7314 }, { 196,7314 }, { 197,7314 }, + + { 198,7314 }, { 199,7314 }, { 200,7314 }, { 201,7314 }, { 202,7314 }, + { 203,7314 }, { 204,7314 }, { 205,7314 }, { 206,7314 }, { 207,7314 }, + { 208,7314 }, { 209,7314 }, { 210,7314 }, { 211,7314 }, { 212,7314 }, + { 213,7314 }, { 214,7314 }, { 215,7314 }, { 216,7314 }, { 217,7314 }, + { 218,7314 }, { 219,7314 }, { 220,7314 }, { 221,7314 }, { 222,7314 }, + { 223,7314 }, { 224,7314 }, { 225,7314 }, { 226,7314 }, { 227,7314 }, + { 228,7314 }, { 229,7314 }, { 230,7314 }, { 231,7314 }, { 232,7314 }, + { 233,7314 }, { 234,7314 }, { 235,7314 }, { 236,7314 }, { 237,7314 }, + { 238,7314 }, { 239,7314 }, { 240,7314 }, { 241,7314 }, { 242,7314 }, + { 243,7314 }, { 244,7314 }, { 245,7314 }, { 246,7314 }, { 247,7314 }, + + { 248,7314 }, { 249,7314 }, { 250,7314 }, { 251,7314 }, { 252,7314 }, + { 253,7314 }, { 254,7314 }, { 255,7314 }, { 0, 131 }, { 0,99180 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,7057 }, { 49,7057 }, { 50,7057 }, + { 51,7057 }, { 52,7057 }, { 53,7057 }, { 54,7057 }, { 55,7057 }, + { 56,7057 }, { 57,7057 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7057 }, + { 66,7057 }, { 67,7057 }, { 68,7057 }, { 69,7057 }, { 70,7057 }, + { 71,7057 }, { 72,7057 }, { 73,7057 }, { 74,7057 }, { 75,7057 }, + { 76,7057 }, { 77,7057 }, { 78,7057 }, { 79,7057 }, { 80,7057 }, + { 81,7057 }, { 82,15026 }, { 83,7057 }, { 84,7057 }, { 85,7057 }, + { 86,7057 }, { 87,7057 }, { 88,7057 }, { 89,7057 }, { 90,7057 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7057 }, + { 0, 0 }, { 97,7057 }, { 98,7057 }, { 99,7057 }, { 100,7057 }, + { 101,7057 }, { 102,7057 }, { 103,7057 }, { 104,7057 }, { 105,7057 }, + { 106,7057 }, { 107,7057 }, { 108,7057 }, { 109,7057 }, { 110,7057 }, + { 111,7057 }, { 112,7057 }, { 113,7057 }, { 114,15026 }, { 115,7057 }, + { 116,7057 }, { 117,7057 }, { 118,7057 }, { 119,7057 }, { 120,7057 }, + { 121,7057 }, { 122,7057 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,7057 }, { 128,7057 }, { 129,7057 }, { 130,7057 }, + { 131,7057 }, { 132,7057 }, { 133,7057 }, { 134,7057 }, { 135,7057 }, + { 136,7057 }, { 137,7057 }, { 138,7057 }, { 139,7057 }, { 140,7057 }, + + { 141,7057 }, { 142,7057 }, { 143,7057 }, { 144,7057 }, { 145,7057 }, + { 146,7057 }, { 147,7057 }, { 148,7057 }, { 149,7057 }, { 150,7057 }, + { 151,7057 }, { 152,7057 }, { 153,7057 }, { 154,7057 }, { 155,7057 }, + { 156,7057 }, { 157,7057 }, { 158,7057 }, { 159,7057 }, { 160,7057 }, + { 161,7057 }, { 162,7057 }, { 163,7057 }, { 164,7057 }, { 165,7057 }, + { 166,7057 }, { 167,7057 }, { 168,7057 }, { 169,7057 }, { 170,7057 }, + { 171,7057 }, { 172,7057 }, { 173,7057 }, { 174,7057 }, { 175,7057 }, + { 176,7057 }, { 177,7057 }, { 178,7057 }, { 179,7057 }, { 180,7057 }, + { 181,7057 }, { 182,7057 }, { 183,7057 }, { 184,7057 }, { 185,7057 }, + { 186,7057 }, { 187,7057 }, { 188,7057 }, { 189,7057 }, { 190,7057 }, + + { 191,7057 }, { 192,7057 }, { 193,7057 }, { 194,7057 }, { 195,7057 }, + { 196,7057 }, { 197,7057 }, { 198,7057 }, { 199,7057 }, { 200,7057 }, + { 201,7057 }, { 202,7057 }, { 203,7057 }, { 204,7057 }, { 205,7057 }, + { 206,7057 }, { 207,7057 }, { 208,7057 }, { 209,7057 }, { 210,7057 }, + { 211,7057 }, { 212,7057 }, { 213,7057 }, { 214,7057 }, { 215,7057 }, + { 216,7057 }, { 217,7057 }, { 218,7057 }, { 219,7057 }, { 220,7057 }, + { 221,7057 }, { 222,7057 }, { 223,7057 }, { 224,7057 }, { 225,7057 }, + { 226,7057 }, { 227,7057 }, { 228,7057 }, { 229,7057 }, { 230,7057 }, + { 231,7057 }, { 232,7057 }, { 233,7057 }, { 234,7057 }, { 235,7057 }, + { 236,7057 }, { 237,7057 }, { 238,7057 }, { 239,7057 }, { 240,7057 }, + + { 241,7057 }, { 242,7057 }, { 243,7057 }, { 244,7057 }, { 245,7057 }, + { 246,7057 }, { 247,7057 }, { 248,7057 }, { 249,7057 }, { 250,7057 }, + { 251,7057 }, { 252,7057 }, { 253,7057 }, { 254,7057 }, { 255,7057 }, + { 0, 131 }, { 0,98923 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,6800 }, + { 49,6800 }, { 50,6800 }, { 51,6800 }, { 52,6800 }, { 53,6800 }, + { 54,6800 }, { 55,6800 }, { 56,6800 }, { 57,6800 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,6800 }, { 66,6800 }, { 67,6800 }, { 68,6800 }, + { 69,6800 }, { 70,6800 }, { 71,6800 }, { 72,6800 }, { 73,6800 }, + { 74,6800 }, { 75,6800 }, { 76,6800 }, { 77,6800 }, { 78,6800 }, + { 79,6800 }, { 80,6800 }, { 81,6800 }, { 82,15026 }, { 83,6800 }, + + { 84,6800 }, { 85,15283 }, { 86,6800 }, { 87,6800 }, { 88,6800 }, + { 89,6800 }, { 90,6800 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,6800 }, { 0, 0 }, { 97,6800 }, { 98,6800 }, + { 99,6800 }, { 100,6800 }, { 101,6800 }, { 102,6800 }, { 103,6800 }, + { 104,6800 }, { 105,6800 }, { 106,6800 }, { 107,6800 }, { 108,6800 }, + { 109,6800 }, { 110,6800 }, { 111,6800 }, { 112,6800 }, { 113,6800 }, + { 114,15026 }, { 115,6800 }, { 116,6800 }, { 117,15283 }, { 118,6800 }, + { 119,6800 }, { 120,6800 }, { 121,6800 }, { 122,6800 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,6800 }, { 128,6800 }, + { 129,6800 }, { 130,6800 }, { 131,6800 }, { 132,6800 }, { 133,6800 }, + + { 134,6800 }, { 135,6800 }, { 136,6800 }, { 137,6800 }, { 138,6800 }, + { 139,6800 }, { 140,6800 }, { 141,6800 }, { 142,6800 }, { 143,6800 }, + { 144,6800 }, { 145,6800 }, { 146,6800 }, { 147,6800 }, { 148,6800 }, + { 149,6800 }, { 150,6800 }, { 151,6800 }, { 152,6800 }, { 153,6800 }, + { 154,6800 }, { 155,6800 }, { 156,6800 }, { 157,6800 }, { 158,6800 }, + { 159,6800 }, { 160,6800 }, { 161,6800 }, { 162,6800 }, { 163,6800 }, + { 164,6800 }, { 165,6800 }, { 166,6800 }, { 167,6800 }, { 168,6800 }, + { 169,6800 }, { 170,6800 }, { 171,6800 }, { 172,6800 }, { 173,6800 }, + { 174,6800 }, { 175,6800 }, { 176,6800 }, { 177,6800 }, { 178,6800 }, + { 179,6800 }, { 180,6800 }, { 181,6800 }, { 182,6800 }, { 183,6800 }, + + { 184,6800 }, { 185,6800 }, { 186,6800 }, { 187,6800 }, { 188,6800 }, + { 189,6800 }, { 190,6800 }, { 191,6800 }, { 192,6800 }, { 193,6800 }, + { 194,6800 }, { 195,6800 }, { 196,6800 }, { 197,6800 }, { 198,6800 }, + { 199,6800 }, { 200,6800 }, { 201,6800 }, { 202,6800 }, { 203,6800 }, + { 204,6800 }, { 205,6800 }, { 206,6800 }, { 207,6800 }, { 208,6800 }, + { 209,6800 }, { 210,6800 }, { 211,6800 }, { 212,6800 }, { 213,6800 }, + { 214,6800 }, { 215,6800 }, { 216,6800 }, { 217,6800 }, { 218,6800 }, + { 219,6800 }, { 220,6800 }, { 221,6800 }, { 222,6800 }, { 223,6800 }, + { 224,6800 }, { 225,6800 }, { 226,6800 }, { 227,6800 }, { 228,6800 }, + { 229,6800 }, { 230,6800 }, { 231,6800 }, { 232,6800 }, { 233,6800 }, + + { 234,6800 }, { 235,6800 }, { 236,6800 }, { 237,6800 }, { 238,6800 }, + { 239,6800 }, { 240,6800 }, { 241,6800 }, { 242,6800 }, { 243,6800 }, + { 244,6800 }, { 245,6800 }, { 246,6800 }, { 247,6800 }, { 248,6800 }, + { 249,6800 }, { 250,6800 }, { 251,6800 }, { 252,6800 }, { 253,6800 }, + { 254,6800 }, { 255,6800 }, { 0, 131 }, { 0,98666 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,6543 }, { 49,6543 }, { 50,6543 }, { 51,6543 }, + { 52,6543 }, { 53,6543 }, { 54,6543 }, { 55,6543 }, { 56,6543 }, + { 57,6543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,6543 }, { 66,6543 }, + { 67,6543 }, { 68,6543 }, { 69,15283 }, { 70,6543 }, { 71,6543 }, + { 72,6543 }, { 73,6543 }, { 74,6543 }, { 75,6543 }, { 76,6543 }, + + { 77,6543 }, { 78,6543 }, { 79,6543 }, { 80,6543 }, { 81,6543 }, + { 82,6543 }, { 83,6543 }, { 84,6543 }, { 85,6543 }, { 86,6543 }, + { 87,6543 }, { 88,6543 }, { 89,6543 }, { 90,6543 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6543 }, { 0, 0 }, + { 97,6543 }, { 98,6543 }, { 99,6543 }, { 100,6543 }, { 101,15283 }, + { 102,6543 }, { 103,6543 }, { 104,6543 }, { 105,6543 }, { 106,6543 }, + { 107,6543 }, { 108,6543 }, { 109,6543 }, { 110,6543 }, { 111,6543 }, + { 112,6543 }, { 113,6543 }, { 114,6543 }, { 115,6543 }, { 116,6543 }, + { 117,6543 }, { 118,6543 }, { 119,6543 }, { 120,6543 }, { 121,6543 }, + { 122,6543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,6543 }, { 128,6543 }, { 129,6543 }, { 130,6543 }, { 131,6543 }, + { 132,6543 }, { 133,6543 }, { 134,6543 }, { 135,6543 }, { 136,6543 }, + { 137,6543 }, { 138,6543 }, { 139,6543 }, { 140,6543 }, { 141,6543 }, + { 142,6543 }, { 143,6543 }, { 144,6543 }, { 145,6543 }, { 146,6543 }, + { 147,6543 }, { 148,6543 }, { 149,6543 }, { 150,6543 }, { 151,6543 }, + { 152,6543 }, { 153,6543 }, { 154,6543 }, { 155,6543 }, { 156,6543 }, + { 157,6543 }, { 158,6543 }, { 159,6543 }, { 160,6543 }, { 161,6543 }, + { 162,6543 }, { 163,6543 }, { 164,6543 }, { 165,6543 }, { 166,6543 }, + { 167,6543 }, { 168,6543 }, { 169,6543 }, { 170,6543 }, { 171,6543 }, + { 172,6543 }, { 173,6543 }, { 174,6543 }, { 175,6543 }, { 176,6543 }, + + { 177,6543 }, { 178,6543 }, { 179,6543 }, { 180,6543 }, { 181,6543 }, + { 182,6543 }, { 183,6543 }, { 184,6543 }, { 185,6543 }, { 186,6543 }, + { 187,6543 }, { 188,6543 }, { 189,6543 }, { 190,6543 }, { 191,6543 }, + { 192,6543 }, { 193,6543 }, { 194,6543 }, { 195,6543 }, { 196,6543 }, + { 197,6543 }, { 198,6543 }, { 199,6543 }, { 200,6543 }, { 201,6543 }, + { 202,6543 }, { 203,6543 }, { 204,6543 }, { 205,6543 }, { 206,6543 }, + { 207,6543 }, { 208,6543 }, { 209,6543 }, { 210,6543 }, { 211,6543 }, + { 212,6543 }, { 213,6543 }, { 214,6543 }, { 215,6543 }, { 216,6543 }, + { 217,6543 }, { 218,6543 }, { 219,6543 }, { 220,6543 }, { 221,6543 }, + { 222,6543 }, { 223,6543 }, { 224,6543 }, { 225,6543 }, { 226,6543 }, + + { 227,6543 }, { 228,6543 }, { 229,6543 }, { 230,6543 }, { 231,6543 }, + { 232,6543 }, { 233,6543 }, { 234,6543 }, { 235,6543 }, { 236,6543 }, + { 237,6543 }, { 238,6543 }, { 239,6543 }, { 240,6543 }, { 241,6543 }, + { 242,6543 }, { 243,6543 }, { 244,6543 }, { 245,6543 }, { 246,6543 }, + { 247,6543 }, { 248,6543 }, { 249,6543 }, { 250,6543 }, { 251,6543 }, + { 252,6543 }, { 253,6543 }, { 254,6543 }, { 255,6543 }, { 0, 131 }, + { 0,98409 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,6286 }, { 49,6286 }, + { 50,6286 }, { 51,6286 }, { 52,6286 }, { 53,6286 }, { 54,6286 }, + { 55,6286 }, { 56,6286 }, { 57,6286 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,6286 }, { 66,6286 }, { 67,6286 }, { 68,6286 }, { 69,6286 }, + + { 70,6286 }, { 71,6286 }, { 72,6286 }, { 73,6286 }, { 74,6286 }, + { 75,6286 }, { 76,6286 }, { 77,6286 }, { 78,6286 }, { 79,6286 }, + { 80,6286 }, { 81,6286 }, { 82,6286 }, { 83,6286 }, { 84,15283 }, + { 85,6286 }, { 86,6286 }, { 87,15540 }, { 88,6286 }, { 89,6286 }, + { 90,6286 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,6286 }, { 0, 0 }, { 97,6286 }, { 98,6286 }, { 99,6286 }, + { 100,6286 }, { 101,6286 }, { 102,6286 }, { 103,6286 }, { 104,6286 }, + { 105,6286 }, { 106,6286 }, { 107,6286 }, { 108,6286 }, { 109,6286 }, + { 110,6286 }, { 111,6286 }, { 112,6286 }, { 113,6286 }, { 114,6286 }, + { 115,6286 }, { 116,15283 }, { 117,6286 }, { 118,6286 }, { 119,15540 }, + + { 120,6286 }, { 121,6286 }, { 122,6286 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,6286 }, { 128,6286 }, { 129,6286 }, + { 130,6286 }, { 131,6286 }, { 132,6286 }, { 133,6286 }, { 134,6286 }, + { 135,6286 }, { 136,6286 }, { 137,6286 }, { 138,6286 }, { 139,6286 }, + { 140,6286 }, { 141,6286 }, { 142,6286 }, { 143,6286 }, { 144,6286 }, + { 145,6286 }, { 146,6286 }, { 147,6286 }, { 148,6286 }, { 149,6286 }, + { 150,6286 }, { 151,6286 }, { 152,6286 }, { 153,6286 }, { 154,6286 }, + { 155,6286 }, { 156,6286 }, { 157,6286 }, { 158,6286 }, { 159,6286 }, + { 160,6286 }, { 161,6286 }, { 162,6286 }, { 163,6286 }, { 164,6286 }, + { 165,6286 }, { 166,6286 }, { 167,6286 }, { 168,6286 }, { 169,6286 }, + + { 170,6286 }, { 171,6286 }, { 172,6286 }, { 173,6286 }, { 174,6286 }, + { 175,6286 }, { 176,6286 }, { 177,6286 }, { 178,6286 }, { 179,6286 }, + { 180,6286 }, { 181,6286 }, { 182,6286 }, { 183,6286 }, { 184,6286 }, + { 185,6286 }, { 186,6286 }, { 187,6286 }, { 188,6286 }, { 189,6286 }, + { 190,6286 }, { 191,6286 }, { 192,6286 }, { 193,6286 }, { 194,6286 }, + { 195,6286 }, { 196,6286 }, { 197,6286 }, { 198,6286 }, { 199,6286 }, + { 200,6286 }, { 201,6286 }, { 202,6286 }, { 203,6286 }, { 204,6286 }, + { 205,6286 }, { 206,6286 }, { 207,6286 }, { 208,6286 }, { 209,6286 }, + { 210,6286 }, { 211,6286 }, { 212,6286 }, { 213,6286 }, { 214,6286 }, + { 215,6286 }, { 216,6286 }, { 217,6286 }, { 218,6286 }, { 219,6286 }, + + { 220,6286 }, { 221,6286 }, { 222,6286 }, { 223,6286 }, { 224,6286 }, + { 225,6286 }, { 226,6286 }, { 227,6286 }, { 228,6286 }, { 229,6286 }, + { 230,6286 }, { 231,6286 }, { 232,6286 }, { 233,6286 }, { 234,6286 }, + { 235,6286 }, { 236,6286 }, { 237,6286 }, { 238,6286 }, { 239,6286 }, + { 240,6286 }, { 241,6286 }, { 242,6286 }, { 243,6286 }, { 244,6286 }, + { 245,6286 }, { 246,6286 }, { 247,6286 }, { 248,6286 }, { 249,6286 }, + { 250,6286 }, { 251,6286 }, { 252,6286 }, { 253,6286 }, { 254,6286 }, + { 255,6286 }, { 0, 131 }, { 0,98152 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,6029 }, { 49,6029 }, { 50,6029 }, { 51,6029 }, { 52,6029 }, + { 53,6029 }, { 54,6029 }, { 55,6029 }, { 56,6029 }, { 57,6029 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,6029 }, { 66,6029 }, { 67,6029 }, + { 68,6029 }, { 69,6029 }, { 70,6029 }, { 71,6029 }, { 72,15540 }, + { 73,6029 }, { 74,6029 }, { 75,6029 }, { 76,6029 }, { 77,6029 }, + { 78,6029 }, { 79,6029 }, { 80,6029 }, { 81,6029 }, { 82,15797 }, + { 83,6029 }, { 84,6029 }, { 85,6029 }, { 86,6029 }, { 87,6029 }, + { 88,6029 }, { 89,6029 }, { 90,6029 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,6029 }, { 0, 0 }, { 97,6029 }, + { 98,6029 }, { 99,6029 }, { 100,6029 }, { 101,6029 }, { 102,6029 }, + { 103,6029 }, { 104,15540 }, { 105,6029 }, { 106,6029 }, { 107,6029 }, + { 108,6029 }, { 109,6029 }, { 110,6029 }, { 111,6029 }, { 112,6029 }, + + { 113,6029 }, { 114,15797 }, { 115,6029 }, { 116,6029 }, { 117,6029 }, + { 118,6029 }, { 119,6029 }, { 120,6029 }, { 121,6029 }, { 122,6029 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,6029 }, + { 128,6029 }, { 129,6029 }, { 130,6029 }, { 131,6029 }, { 132,6029 }, + { 133,6029 }, { 134,6029 }, { 135,6029 }, { 136,6029 }, { 137,6029 }, + { 138,6029 }, { 139,6029 }, { 140,6029 }, { 141,6029 }, { 142,6029 }, + { 143,6029 }, { 144,6029 }, { 145,6029 }, { 146,6029 }, { 147,6029 }, + { 148,6029 }, { 149,6029 }, { 150,6029 }, { 151,6029 }, { 152,6029 }, + { 153,6029 }, { 154,6029 }, { 155,6029 }, { 156,6029 }, { 157,6029 }, + { 158,6029 }, { 159,6029 }, { 160,6029 }, { 161,6029 }, { 162,6029 }, + + { 163,6029 }, { 164,6029 }, { 165,6029 }, { 166,6029 }, { 167,6029 }, + { 168,6029 }, { 169,6029 }, { 170,6029 }, { 171,6029 }, { 172,6029 }, + { 173,6029 }, { 174,6029 }, { 175,6029 }, { 176,6029 }, { 177,6029 }, + { 178,6029 }, { 179,6029 }, { 180,6029 }, { 181,6029 }, { 182,6029 }, + { 183,6029 }, { 184,6029 }, { 185,6029 }, { 186,6029 }, { 187,6029 }, + { 188,6029 }, { 189,6029 }, { 190,6029 }, { 191,6029 }, { 192,6029 }, + { 193,6029 }, { 194,6029 }, { 195,6029 }, { 196,6029 }, { 197,6029 }, + { 198,6029 }, { 199,6029 }, { 200,6029 }, { 201,6029 }, { 202,6029 }, + { 203,6029 }, { 204,6029 }, { 205,6029 }, { 206,6029 }, { 207,6029 }, + { 208,6029 }, { 209,6029 }, { 210,6029 }, { 211,6029 }, { 212,6029 }, + + { 213,6029 }, { 214,6029 }, { 215,6029 }, { 216,6029 }, { 217,6029 }, + { 218,6029 }, { 219,6029 }, { 220,6029 }, { 221,6029 }, { 222,6029 }, + { 223,6029 }, { 224,6029 }, { 225,6029 }, { 226,6029 }, { 227,6029 }, + { 228,6029 }, { 229,6029 }, { 230,6029 }, { 231,6029 }, { 232,6029 }, + { 233,6029 }, { 234,6029 }, { 235,6029 }, { 236,6029 }, { 237,6029 }, + { 238,6029 }, { 239,6029 }, { 240,6029 }, { 241,6029 }, { 242,6029 }, + { 243,6029 }, { 244,6029 }, { 245,6029 }, { 246,6029 }, { 247,6029 }, + { 248,6029 }, { 249,6029 }, { 250,6029 }, { 251,6029 }, { 252,6029 }, + { 253,6029 }, { 254,6029 }, { 255,6029 }, { 0, 131 }, { 0,97895 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,5772 }, { 49,5772 }, { 50,5772 }, + { 51,5772 }, { 52,5772 }, { 53,5772 }, { 54,5772 }, { 55,5772 }, + + { 56,5772 }, { 57,5772 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5772 }, + { 66,5772 }, { 67,5772 }, { 68,5772 }, { 69,5772 }, { 70,5772 }, + { 71,5772 }, { 72,5772 }, { 73,5772 }, { 74,5772 }, { 75,5772 }, + { 76,5772 }, { 77,5772 }, { 78,15797 }, { 79,5772 }, { 80,5772 }, + { 81,5772 }, { 82,5772 }, { 83,16054 }, { 84,5772 }, { 85,5772 }, + { 86,5772 }, { 87,5772 }, { 88,5772 }, { 89,5772 }, { 90,5772 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5772 }, + { 0, 0 }, { 97,5772 }, { 98,5772 }, { 99,5772 }, { 100,5772 }, + { 101,5772 }, { 102,5772 }, { 103,5772 }, { 104,5772 }, { 105,5772 }, + + { 106,5772 }, { 107,5772 }, { 108,5772 }, { 109,5772 }, { 110,15797 }, + { 111,5772 }, { 112,5772 }, { 113,5772 }, { 114,5772 }, { 115,16054 }, + { 116,5772 }, { 117,5772 }, { 118,5772 }, { 119,5772 }, { 120,5772 }, + { 121,5772 }, { 122,5772 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,5772 }, { 128,5772 }, { 129,5772 }, { 130,5772 }, + { 131,5772 }, { 132,5772 }, { 133,5772 }, { 134,5772 }, { 135,5772 }, + { 136,5772 }, { 137,5772 }, { 138,5772 }, { 139,5772 }, { 140,5772 }, + { 141,5772 }, { 142,5772 }, { 143,5772 }, { 144,5772 }, { 145,5772 }, + { 146,5772 }, { 147,5772 }, { 148,5772 }, { 149,5772 }, { 150,5772 }, + { 151,5772 }, { 152,5772 }, { 153,5772 }, { 154,5772 }, { 155,5772 }, + + { 156,5772 }, { 157,5772 }, { 158,5772 }, { 159,5772 }, { 160,5772 }, + { 161,5772 }, { 162,5772 }, { 163,5772 }, { 164,5772 }, { 165,5772 }, + { 166,5772 }, { 167,5772 }, { 168,5772 }, { 169,5772 }, { 170,5772 }, + { 171,5772 }, { 172,5772 }, { 173,5772 }, { 174,5772 }, { 175,5772 }, + { 176,5772 }, { 177,5772 }, { 178,5772 }, { 179,5772 }, { 180,5772 }, + { 181,5772 }, { 182,5772 }, { 183,5772 }, { 184,5772 }, { 185,5772 }, + { 186,5772 }, { 187,5772 }, { 188,5772 }, { 189,5772 }, { 190,5772 }, + { 191,5772 }, { 192,5772 }, { 193,5772 }, { 194,5772 }, { 195,5772 }, + { 196,5772 }, { 197,5772 }, { 198,5772 }, { 199,5772 }, { 200,5772 }, + { 201,5772 }, { 202,5772 }, { 203,5772 }, { 204,5772 }, { 205,5772 }, + + { 206,5772 }, { 207,5772 }, { 208,5772 }, { 209,5772 }, { 210,5772 }, + { 211,5772 }, { 212,5772 }, { 213,5772 }, { 214,5772 }, { 215,5772 }, + { 216,5772 }, { 217,5772 }, { 218,5772 }, { 219,5772 }, { 220,5772 }, + { 221,5772 }, { 222,5772 }, { 223,5772 }, { 224,5772 }, { 225,5772 }, + { 226,5772 }, { 227,5772 }, { 228,5772 }, { 229,5772 }, { 230,5772 }, + { 231,5772 }, { 232,5772 }, { 233,5772 }, { 234,5772 }, { 235,5772 }, + { 236,5772 }, { 237,5772 }, { 238,5772 }, { 239,5772 }, { 240,5772 }, + { 241,5772 }, { 242,5772 }, { 243,5772 }, { 244,5772 }, { 245,5772 }, + { 246,5772 }, { 247,5772 }, { 248,5772 }, { 249,5772 }, { 250,5772 }, + { 251,5772 }, { 252,5772 }, { 253,5772 }, { 254,5772 }, { 255,5772 }, + + { 0, 131 }, { 0,97638 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5515 }, + + { 49,5515 }, { 50,5515 }, { 51,5515 }, { 52,5515 }, { 53,5515 }, + { 54,5515 }, { 55,5515 }, { 56,5515 }, { 57,5515 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,16054 }, { 66,5515 }, { 67,5515 }, { 68,5515 }, + { 69,5515 }, { 70,5515 }, { 71,5515 }, { 72,5515 }, { 73,5515 }, + { 74,5515 }, { 75,5515 }, { 76,5515 }, { 77,5515 }, { 78,5515 }, + { 79,5515 }, { 80,5515 }, { 81,5515 }, { 82,5515 }, { 83,5515 }, + { 84,5515 }, { 85,5515 }, { 86,5515 }, { 87,5515 }, { 88,5515 }, + { 89,5515 }, { 90,5515 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,5515 }, { 0, 0 }, { 97,16054 }, { 98,5515 }, + + { 99,5515 }, { 100,5515 }, { 101,5515 }, { 102,5515 }, { 103,5515 }, + { 104,5515 }, { 105,5515 }, { 106,5515 }, { 107,5515 }, { 108,5515 }, + { 109,5515 }, { 110,5515 }, { 111,5515 }, { 112,5515 }, { 113,5515 }, + { 114,5515 }, { 115,5515 }, { 116,5515 }, { 117,5515 }, { 118,5515 }, + { 119,5515 }, { 120,5515 }, { 121,5515 }, { 122,5515 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,5515 }, { 128,5515 }, + { 129,5515 }, { 130,5515 }, { 131,5515 }, { 132,5515 }, { 133,5515 }, + { 134,5515 }, { 135,5515 }, { 136,5515 }, { 137,5515 }, { 138,5515 }, + { 139,5515 }, { 140,5515 }, { 141,5515 }, { 142,5515 }, { 143,5515 }, + { 144,5515 }, { 145,5515 }, { 146,5515 }, { 147,5515 }, { 148,5515 }, + + { 149,5515 }, { 150,5515 }, { 151,5515 }, { 152,5515 }, { 153,5515 }, + { 154,5515 }, { 155,5515 }, { 156,5515 }, { 157,5515 }, { 158,5515 }, + { 159,5515 }, { 160,5515 }, { 161,5515 }, { 162,5515 }, { 163,5515 }, + { 164,5515 }, { 165,5515 }, { 166,5515 }, { 167,5515 }, { 168,5515 }, + { 169,5515 }, { 170,5515 }, { 171,5515 }, { 172,5515 }, { 173,5515 }, + { 174,5515 }, { 175,5515 }, { 176,5515 }, { 177,5515 }, { 178,5515 }, + { 179,5515 }, { 180,5515 }, { 181,5515 }, { 182,5515 }, { 183,5515 }, + { 184,5515 }, { 185,5515 }, { 186,5515 }, { 187,5515 }, { 188,5515 }, + { 189,5515 }, { 190,5515 }, { 191,5515 }, { 192,5515 }, { 193,5515 }, + { 194,5515 }, { 195,5515 }, { 196,5515 }, { 197,5515 }, { 198,5515 }, + + { 199,5515 }, { 200,5515 }, { 201,5515 }, { 202,5515 }, { 203,5515 }, + { 204,5515 }, { 205,5515 }, { 206,5515 }, { 207,5515 }, { 208,5515 }, + { 209,5515 }, { 210,5515 }, { 211,5515 }, { 212,5515 }, { 213,5515 }, + { 214,5515 }, { 215,5515 }, { 216,5515 }, { 217,5515 }, { 218,5515 }, + { 219,5515 }, { 220,5515 }, { 221,5515 }, { 222,5515 }, { 223,5515 }, + { 224,5515 }, { 225,5515 }, { 226,5515 }, { 227,5515 }, { 228,5515 }, + { 229,5515 }, { 230,5515 }, { 231,5515 }, { 232,5515 }, { 233,5515 }, + { 234,5515 }, { 235,5515 }, { 236,5515 }, { 237,5515 }, { 238,5515 }, + { 239,5515 }, { 240,5515 }, { 241,5515 }, { 242,5515 }, { 243,5515 }, + { 244,5515 }, { 245,5515 }, { 246,5515 }, { 247,5515 }, { 248,5515 }, + + { 249,5515 }, { 250,5515 }, { 251,5515 }, { 252,5515 }, { 253,5515 }, + { 254,5515 }, { 255,5515 }, { 0, 131 }, { 0,97381 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,5258 }, { 49,5258 }, { 50,5258 }, { 51,5258 }, + { 52,5258 }, { 53,5258 }, { 54,5258 }, { 55,5258 }, { 56,5258 }, + { 57,5258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5258 }, { 66,5258 }, + { 67,5258 }, { 68,5258 }, { 69,5258 }, { 70,5258 }, { 71,5258 }, + { 72,16054 }, { 73,5258 }, { 74,5258 }, { 75,5258 }, { 76,5258 }, + { 77,5258 }, { 78,5258 }, { 79,5258 }, { 80,5258 }, { 81,5258 }, + { 82,5258 }, { 83,5258 }, { 84,5258 }, { 85,5258 }, { 86,5258 }, + { 87,5258 }, { 88,5258 }, { 89,5258 }, { 90,5258 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5258 }, { 0, 0 }, + { 97,5258 }, { 98,5258 }, { 99,5258 }, { 100,5258 }, { 101,5258 }, + { 102,5258 }, { 103,5258 }, { 104,16054 }, { 105,5258 }, { 106,5258 }, + { 107,5258 }, { 108,5258 }, { 109,5258 }, { 110,5258 }, { 111,5258 }, + { 112,5258 }, { 113,5258 }, { 114,5258 }, { 115,5258 }, { 116,5258 }, + { 117,5258 }, { 118,5258 }, { 119,5258 }, { 120,5258 }, { 121,5258 }, + { 122,5258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,5258 }, { 128,5258 }, { 129,5258 }, { 130,5258 }, { 131,5258 }, + { 132,5258 }, { 133,5258 }, { 134,5258 }, { 135,5258 }, { 136,5258 }, + { 137,5258 }, { 138,5258 }, { 139,5258 }, { 140,5258 }, { 141,5258 }, + + { 142,5258 }, { 143,5258 }, { 144,5258 }, { 145,5258 }, { 146,5258 }, + { 147,5258 }, { 148,5258 }, { 149,5258 }, { 150,5258 }, { 151,5258 }, + { 152,5258 }, { 153,5258 }, { 154,5258 }, { 155,5258 }, { 156,5258 }, + { 157,5258 }, { 158,5258 }, { 159,5258 }, { 160,5258 }, { 161,5258 }, + { 162,5258 }, { 163,5258 }, { 164,5258 }, { 165,5258 }, { 166,5258 }, + { 167,5258 }, { 168,5258 }, { 169,5258 }, { 170,5258 }, { 171,5258 }, + { 172,5258 }, { 173,5258 }, { 174,5258 }, { 175,5258 }, { 176,5258 }, + { 177,5258 }, { 178,5258 }, { 179,5258 }, { 180,5258 }, { 181,5258 }, + { 182,5258 }, { 183,5258 }, { 184,5258 }, { 185,5258 }, { 186,5258 }, + { 187,5258 }, { 188,5258 }, { 189,5258 }, { 190,5258 }, { 191,5258 }, + + { 192,5258 }, { 193,5258 }, { 194,5258 }, { 195,5258 }, { 196,5258 }, + { 197,5258 }, { 198,5258 }, { 199,5258 }, { 200,5258 }, { 201,5258 }, + { 202,5258 }, { 203,5258 }, { 204,5258 }, { 205,5258 }, { 206,5258 }, + { 207,5258 }, { 208,5258 }, { 209,5258 }, { 210,5258 }, { 211,5258 }, + { 212,5258 }, { 213,5258 }, { 214,5258 }, { 215,5258 }, { 216,5258 }, + { 217,5258 }, { 218,5258 }, { 219,5258 }, { 220,5258 }, { 221,5258 }, + { 222,5258 }, { 223,5258 }, { 224,5258 }, { 225,5258 }, { 226,5258 }, + { 227,5258 }, { 228,5258 }, { 229,5258 }, { 230,5258 }, { 231,5258 }, + { 232,5258 }, { 233,5258 }, { 234,5258 }, { 235,5258 }, { 236,5258 }, + { 237,5258 }, { 238,5258 }, { 239,5258 }, { 240,5258 }, { 241,5258 }, + + { 242,5258 }, { 243,5258 }, { 244,5258 }, { 245,5258 }, { 246,5258 }, + { 247,5258 }, { 248,5258 }, { 249,5258 }, { 250,5258 }, { 251,5258 }, + { 252,5258 }, { 253,5258 }, { 254,5258 }, { 255,5258 }, { 0, 131 }, + { 0,97124 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5001 }, { 49,5001 }, + { 50,5001 }, { 51,5001 }, { 52,5001 }, { 53,5001 }, { 54,5001 }, + { 55,5001 }, { 56,5001 }, { 57,5001 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,5001 }, { 66,5001 }, { 67,5001 }, { 68,5001 }, { 69,5001 }, + { 70,5001 }, { 71,5001 }, { 72,5001 }, { 73,5001 }, { 74,5001 }, + { 75,5001 }, { 76,5001 }, { 77,5001 }, { 78,5001 }, { 79,16054 }, + { 80,5001 }, { 81,5001 }, { 82,5001 }, { 83,5001 }, { 84,5001 }, + + { 85,5001 }, { 86,5001 }, { 87,5001 }, { 88,5001 }, { 89,5001 }, + { 90,5001 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,5001 }, { 0, 0 }, { 97,5001 }, { 98,5001 }, { 99,5001 }, + { 100,5001 }, { 101,5001 }, { 102,5001 }, { 103,5001 }, { 104,5001 }, + { 105,5001 }, { 106,5001 }, { 107,5001 }, { 108,5001 }, { 109,5001 }, + { 110,5001 }, { 111,16054 }, { 112,5001 }, { 113,5001 }, { 114,5001 }, + { 115,5001 }, { 116,5001 }, { 117,5001 }, { 118,5001 }, { 119,5001 }, + { 120,5001 }, { 121,5001 }, { 122,5001 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,5001 }, { 128,5001 }, { 129,5001 }, + { 130,5001 }, { 131,5001 }, { 132,5001 }, { 133,5001 }, { 134,5001 }, + + { 135,5001 }, { 136,5001 }, { 137,5001 }, { 138,5001 }, { 139,5001 }, + { 140,5001 }, { 141,5001 }, { 142,5001 }, { 143,5001 }, { 144,5001 }, + { 145,5001 }, { 146,5001 }, { 147,5001 }, { 148,5001 }, { 149,5001 }, + { 150,5001 }, { 151,5001 }, { 152,5001 }, { 153,5001 }, { 154,5001 }, + { 155,5001 }, { 156,5001 }, { 157,5001 }, { 158,5001 }, { 159,5001 }, + { 160,5001 }, { 161,5001 }, { 162,5001 }, { 163,5001 }, { 164,5001 }, + { 165,5001 }, { 166,5001 }, { 167,5001 }, { 168,5001 }, { 169,5001 }, + { 170,5001 }, { 171,5001 }, { 172,5001 }, { 173,5001 }, { 174,5001 }, + { 175,5001 }, { 176,5001 }, { 177,5001 }, { 178,5001 }, { 179,5001 }, + { 180,5001 }, { 181,5001 }, { 182,5001 }, { 183,5001 }, { 184,5001 }, + + { 185,5001 }, { 186,5001 }, { 187,5001 }, { 188,5001 }, { 189,5001 }, + { 190,5001 }, { 191,5001 }, { 192,5001 }, { 193,5001 }, { 194,5001 }, + { 195,5001 }, { 196,5001 }, { 197,5001 }, { 198,5001 }, { 199,5001 }, + { 200,5001 }, { 201,5001 }, { 202,5001 }, { 203,5001 }, { 204,5001 }, + { 205,5001 }, { 206,5001 }, { 207,5001 }, { 208,5001 }, { 209,5001 }, + { 210,5001 }, { 211,5001 }, { 212,5001 }, { 213,5001 }, { 214,5001 }, + { 215,5001 }, { 216,5001 }, { 217,5001 }, { 218,5001 }, { 219,5001 }, + { 220,5001 }, { 221,5001 }, { 222,5001 }, { 223,5001 }, { 224,5001 }, + { 225,5001 }, { 226,5001 }, { 227,5001 }, { 228,5001 }, { 229,5001 }, + { 230,5001 }, { 231,5001 }, { 232,5001 }, { 233,5001 }, { 234,5001 }, + + { 235,5001 }, { 236,5001 }, { 237,5001 }, { 238,5001 }, { 239,5001 }, + { 240,5001 }, { 241,5001 }, { 242,5001 }, { 243,5001 }, { 244,5001 }, + { 245,5001 }, { 246,5001 }, { 247,5001 }, { 248,5001 }, { 249,5001 }, + { 250,5001 }, { 251,5001 }, { 252,5001 }, { 253,5001 }, { 254,5001 }, + { 255,5001 }, { 0, 131 }, { 0,96867 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,4744 }, { 49,4744 }, { 50,4744 }, { 51,4744 }, { 52,4744 }, + { 53,4744 }, { 54,4744 }, { 55,4744 }, { 56,4744 }, { 57,4744 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,4744 }, { 66,4744 }, { 67,4744 }, + { 68,4744 }, { 69,4744 }, { 70,4744 }, { 71,4744 }, { 72,4744 }, + { 73,16054 }, { 74,4744 }, { 75,4744 }, { 76,4744 }, { 77,4744 }, + + { 78,4744 }, { 79,4744 }, { 80,4744 }, { 81,4744 }, { 82,4744 }, + { 83,4744 }, { 84,4744 }, { 85,4744 }, { 86,4744 }, { 87,4744 }, + { 88,4744 }, { 89,4744 }, { 90,4744 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,4744 }, { 0, 0 }, { 97,4744 }, + { 98,4744 }, { 99,4744 }, { 100,4744 }, { 101,4744 }, { 102,4744 }, + { 103,4744 }, { 104,4744 }, { 105,16054 }, { 106,4744 }, { 107,4744 }, + { 108,4744 }, { 109,4744 }, { 110,4744 }, { 111,4744 }, { 112,4744 }, + { 113,4744 }, { 114,4744 }, { 115,4744 }, { 116,4744 }, { 117,4744 }, + { 118,4744 }, { 119,4744 }, { 120,4744 }, { 121,4744 }, { 122,4744 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,4744 }, + + { 128,4744 }, { 129,4744 }, { 130,4744 }, { 131,4744 }, { 132,4744 }, + { 133,4744 }, { 134,4744 }, { 135,4744 }, { 136,4744 }, { 137,4744 }, + { 138,4744 }, { 139,4744 }, { 140,4744 }, { 141,4744 }, { 142,4744 }, + { 143,4744 }, { 144,4744 }, { 145,4744 }, { 146,4744 }, { 147,4744 }, + { 148,4744 }, { 149,4744 }, { 150,4744 }, { 151,4744 }, { 152,4744 }, + { 153,4744 }, { 154,4744 }, { 155,4744 }, { 156,4744 }, { 157,4744 }, + { 158,4744 }, { 159,4744 }, { 160,4744 }, { 161,4744 }, { 162,4744 }, + { 163,4744 }, { 164,4744 }, { 165,4744 }, { 166,4744 }, { 167,4744 }, + { 168,4744 }, { 169,4744 }, { 170,4744 }, { 171,4744 }, { 172,4744 }, + { 173,4744 }, { 174,4744 }, { 175,4744 }, { 176,4744 }, { 177,4744 }, + + { 178,4744 }, { 179,4744 }, { 180,4744 }, { 181,4744 }, { 182,4744 }, + { 183,4744 }, { 184,4744 }, { 185,4744 }, { 186,4744 }, { 187,4744 }, + { 188,4744 }, { 189,4744 }, { 190,4744 }, { 191,4744 }, { 192,4744 }, + { 193,4744 }, { 194,4744 }, { 195,4744 }, { 196,4744 }, { 197,4744 }, + { 198,4744 }, { 199,4744 }, { 200,4744 }, { 201,4744 }, { 202,4744 }, + { 203,4744 }, { 204,4744 }, { 205,4744 }, { 206,4744 }, { 207,4744 }, + { 208,4744 }, { 209,4744 }, { 210,4744 }, { 211,4744 }, { 212,4744 }, + { 213,4744 }, { 214,4744 }, { 215,4744 }, { 216,4744 }, { 217,4744 }, + { 218,4744 }, { 219,4744 }, { 220,4744 }, { 221,4744 }, { 222,4744 }, + { 223,4744 }, { 224,4744 }, { 225,4744 }, { 226,4744 }, { 227,4744 }, + + { 228,4744 }, { 229,4744 }, { 230,4744 }, { 231,4744 }, { 232,4744 }, + { 233,4744 }, { 234,4744 }, { 235,4744 }, { 236,4744 }, { 237,4744 }, + { 238,4744 }, { 239,4744 }, { 240,4744 }, { 241,4744 }, { 242,4744 }, + { 243,4744 }, { 244,4744 }, { 245,4744 }, { 246,4744 }, { 247,4744 }, + { 248,4744 }, { 249,4744 }, { 250,4744 }, { 251,4744 }, { 252,4744 }, + { 253,4744 }, { 254,4744 }, { 255,4744 }, { 0, 131 }, { 0,96610 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,4487 }, { 49,4487 }, { 50,4487 }, + { 51,4487 }, { 52,4487 }, { 53,4487 }, { 54,4487 }, { 55,4487 }, + { 56,4487 }, { 57,4487 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,4487 }, + { 66,4487 }, { 67,4487 }, { 68,4487 }, { 69,4487 }, { 70,4487 }, + + { 71,4487 }, { 72,4487 }, { 73,4487 }, { 74,4487 }, { 75,4487 }, + { 76,4487 }, { 77,4487 }, { 78,4487 }, { 79,4487 }, { 80,4487 }, + { 81,4487 }, { 82,4487 }, { 83,4487 }, { 84,4487 }, { 85,4487 }, + { 86,4487 }, { 87,4487 }, { 88,4487 }, { 89,4487 }, { 90,4487 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16054 }, + { 0, 0 }, { 97,4487 }, { 98,4487 }, { 99,4487 }, { 100,4487 }, + { 101,4487 }, { 102,4487 }, { 103,4487 }, { 104,4487 }, { 105,4487 }, + { 106,4487 }, { 107,4487 }, { 108,4487 }, { 109,4487 }, { 110,4487 }, + { 111,4487 }, { 112,4487 }, { 113,4487 }, { 114,4487 }, { 115,4487 }, + { 116,4487 }, { 117,4487 }, { 118,4487 }, { 119,4487 }, { 120,4487 }, + + { 121,4487 }, { 122,4487 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,4487 }, { 128,4487 }, { 129,4487 }, { 130,4487 }, + { 131,4487 }, { 132,4487 }, { 133,4487 }, { 134,4487 }, { 135,4487 }, + { 136,4487 }, { 137,4487 }, { 138,4487 }, { 139,4487 }, { 140,4487 }, + { 141,4487 }, { 142,4487 }, { 143,4487 }, { 144,4487 }, { 145,4487 }, + { 146,4487 }, { 147,4487 }, { 148,4487 }, { 149,4487 }, { 150,4487 }, + { 151,4487 }, { 152,4487 }, { 153,4487 }, { 154,4487 }, { 155,4487 }, + { 156,4487 }, { 157,4487 }, { 158,4487 }, { 159,4487 }, { 160,4487 }, + { 161,4487 }, { 162,4487 }, { 163,4487 }, { 164,4487 }, { 165,4487 }, + { 166,4487 }, { 167,4487 }, { 168,4487 }, { 169,4487 }, { 170,4487 }, + + { 171,4487 }, { 172,4487 }, { 173,4487 }, { 174,4487 }, { 175,4487 }, + { 176,4487 }, { 177,4487 }, { 178,4487 }, { 179,4487 }, { 180,4487 }, + { 181,4487 }, { 182,4487 }, { 183,4487 }, { 184,4487 }, { 185,4487 }, + { 186,4487 }, { 187,4487 }, { 188,4487 }, { 189,4487 }, { 190,4487 }, + { 191,4487 }, { 192,4487 }, { 193,4487 }, { 194,4487 }, { 195,4487 }, + { 196,4487 }, { 197,4487 }, { 198,4487 }, { 199,4487 }, { 200,4487 }, + { 201,4487 }, { 202,4487 }, { 203,4487 }, { 204,4487 }, { 205,4487 }, + { 206,4487 }, { 207,4487 }, { 208,4487 }, { 209,4487 }, { 210,4487 }, + { 211,4487 }, { 212,4487 }, { 213,4487 }, { 214,4487 }, { 215,4487 }, + { 216,4487 }, { 217,4487 }, { 218,4487 }, { 219,4487 }, { 220,4487 }, + + { 221,4487 }, { 222,4487 }, { 223,4487 }, { 224,4487 }, { 225,4487 }, + { 226,4487 }, { 227,4487 }, { 228,4487 }, { 229,4487 }, { 230,4487 }, + { 231,4487 }, { 232,4487 }, { 233,4487 }, { 234,4487 }, { 235,4487 }, + { 236,4487 }, { 237,4487 }, { 238,4487 }, { 239,4487 }, { 240,4487 }, + { 241,4487 }, { 242,4487 }, { 243,4487 }, { 244,4487 }, { 245,4487 }, + { 246,4487 }, { 247,4487 }, { 248,4487 }, { 249,4487 }, { 250,4487 }, + { 251,4487 }, { 252,4487 }, { 253,4487 }, { 254,4487 }, { 255,4487 }, + { 0, 142 }, { 0,96353 }, { 1,16054 }, { 2,16054 }, { 3,16054 }, + { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, { 8,16054 }, + { 9,16054 }, { 10,16054 }, { 11,16054 }, { 12,16054 }, { 13,16054 }, + + { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, { 18,16054 }, + { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, { 23,16054 }, + { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, { 28,16054 }, + { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, { 33,16054 }, + { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, { 38,16054 }, + { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, { 43,16054 }, + { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, { 48,16054 }, + { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, { 53,16054 }, + { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, { 58,16054 }, + { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, { 63,16054 }, + + { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, + { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, + { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, + { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, + { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, + { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, { 93,16054 }, + { 94,16054 }, { 95,16054 }, { 96,4238 }, { 97,16054 }, { 98,16054 }, + { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, + { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, + { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, + + { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, + { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, { 123,16054 }, + { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, { 128,16054 }, + { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, + { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, + { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, + { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, + { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, + { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, + { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, + + { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, + { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, + { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, + { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, + { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, + { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, + { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, + { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, + { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, + { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, + + { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, + { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, + { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, + { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, + { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, + { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, + { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, + { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, + { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 15 }, { 0,96095 }, + { 1,16054 }, { 2,16054 }, { 3,16054 }, { 4,16054 }, { 5,16054 }, + + { 6,16054 }, { 7,16054 }, { 8,16054 }, { 9,16054 }, { 0, 0 }, + { 11,16054 }, { 12,16054 }, { 0, 0 }, { 14,16054 }, { 15,16054 }, + { 16,16054 }, { 17,16054 }, { 18,16054 }, { 19,16054 }, { 20,16054 }, + { 21,16054 }, { 22,16054 }, { 23,16054 }, { 24,16054 }, { 25,16054 }, + { 26,16054 }, { 27,16054 }, { 28,16054 }, { 29,16054 }, { 30,16054 }, + { 31,16054 }, { 32,16054 }, { 33,16054 }, { 34,16054 }, { 35,16054 }, + { 36,16054 }, { 37,16054 }, { 38,16054 }, { 39,16054 }, { 40,16054 }, + { 41,16054 }, { 0, 0 }, { 43,16054 }, { 44,16054 }, { 45,16054 }, + { 46,16054 }, { 47,16054 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + + { 56,16054 }, { 57,16054 }, { 58,16054 }, { 59,16054 }, { 60,16054 }, + { 61,16054 }, { 62,16054 }, { 63,16054 }, { 64,16054 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 91,16054 }, { 92,16054 }, { 93,16054 }, { 94,16054 }, { 95,16054 }, + { 96,16054 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 123,16054 }, { 124,16054 }, { 125,16054 }, + { 126,16054 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + + { 256,16054 }, { 0, 11 }, { 0,95837 }, { 1,16054 }, { 2,16054 }, + { 3,16054 }, { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, + { 8,16054 }, { 9,16054 }, { 0, 0 }, { 11,16054 }, { 12,16054 }, + { 0, 0 }, { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, + { 18,16054 }, { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, + { 23,16054 }, { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, + { 28,16054 }, { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, + { 33,16054 }, { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, + { 38,16054 }, { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, + { 43,16054 }, { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, + + { 48,16054 }, { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, + { 53,16054 }, { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, + { 58,16054 }, { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, + { 0, 0 }, { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, + { 68,16054 }, { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, + { 73,16054 }, { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, + { 78,16054 }, { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, + { 83,16054 }, { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, + { 88,16054 }, { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, + { 93,16054 }, { 94,16054 }, { 95,16054 }, { 96,16054 }, { 97,16054 }, + + { 98,16054 }, { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, + { 103,16054 }, { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, + { 108,16054 }, { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, + { 113,16054 }, { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, + { 118,16054 }, { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, + { 123,16054 }, { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, + { 128,16054 }, { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, + { 133,16054 }, { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, + { 138,16054 }, { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, + { 143,16054 }, { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, + + { 148,16054 }, { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, + { 153,16054 }, { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, + { 158,16054 }, { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, + { 163,16054 }, { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, + { 168,16054 }, { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, + { 173,16054 }, { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, + { 178,16054 }, { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, + { 183,16054 }, { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, + { 188,16054 }, { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, + { 193,16054 }, { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, + + { 198,16054 }, { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, + { 203,16054 }, { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, + { 208,16054 }, { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, + { 213,16054 }, { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, + { 218,16054 }, { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, + { 223,16054 }, { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, + { 228,16054 }, { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, + { 233,16054 }, { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, + { 238,16054 }, { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, + { 243,16054 }, { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, + + { 248,16054 }, { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, + { 253,16054 }, { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 142 }, + { 0,95579 }, { 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, 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 }, { 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, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, + { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, + { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, + { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, + { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, + + { 90,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,16054 }, { 0, 0 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, + { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, + { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, + { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, + { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, + { 120,16054 }, { 121,16054 }, { 122,16054 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, + { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, + { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, + + { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, + { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, + { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, + { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, + { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, + { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, + { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, + { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, + { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, + { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, + + { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, + { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, + { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, + { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, + { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, + { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, + { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, + { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, + { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, + { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, + + { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, + { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, + { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, + { 255,16054 }, { 0, 142 }, { 0,95322 }, { 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, 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 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, + { 68,16054 }, { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, + { 73,16054 }, { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, + { 78,16054 }, { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, + + { 83,16054 }, { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, + { 88,16054 }, { 89,16054 }, { 90,16054 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,16054 }, { 0, 0 }, { 97,16054 }, + { 98,16054 }, { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, + { 103,16054 }, { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, + { 108,16054 }, { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, + { 113,16054 }, { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, + { 118,16054 }, { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,16054 }, + { 128,16054 }, { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, + + { 133,16054 }, { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, + { 138,16054 }, { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, + { 143,16054 }, { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, + { 148,16054 }, { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, + { 153,16054 }, { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, + { 158,16054 }, { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, + { 163,16054 }, { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, + { 168,16054 }, { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, + { 173,16054 }, { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, + { 178,16054 }, { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, + + { 183,16054 }, { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, + { 188,16054 }, { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, + { 193,16054 }, { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, + { 198,16054 }, { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, + { 203,16054 }, { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, + { 208,16054 }, { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, + { 213,16054 }, { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, + { 218,16054 }, { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, + { 223,16054 }, { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, + { 228,16054 }, { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, + + { 233,16054 }, { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, + { 238,16054 }, { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, + { 243,16054 }, { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, + { 248,16054 }, { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, + { 253,16054 }, { 254,16054 }, { 255,16054 }, { 0, 137 }, { 0,95065 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + { 56,16054 }, { 57,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16054 }, + { 0, 0 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + { 0, 140 }, { 0,94808 }, { 1,16054 }, { 2,16054 }, { 3,16054 }, + { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, { 8,16054 }, + { 9,16054 }, { 0, 0 }, { 11,16054 }, { 12,16054 }, { 0, 0 }, + { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, { 18,16054 }, + + { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, { 23,16054 }, + { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, { 28,16054 }, + { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, { 33,16054 }, + { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, { 38,16054 }, + { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, { 43,16054 }, + { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, { 48,16054 }, + { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, { 53,16054 }, + { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, { 58,16054 }, + { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, { 63,16054 }, + { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, + + { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, + { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, + { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, + { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, + { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, { 93,16054 }, + { 94,16054 }, { 95,16054 }, { 96,16054 }, { 97,16054 }, { 98,16054 }, + { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, + { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, + { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, + { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, + + { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, { 123,16054 }, + { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, { 128,16054 }, + { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, + { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, + { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, + { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, + { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, + { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, + { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, + { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, + + { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, + { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, + { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, + { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, + { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, + { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, + { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, + { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, + { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, + { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, + + { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, + { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, + { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, + { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, + { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, + { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, + { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, + { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 140 }, { 0,94550 }, + { 1,15796 }, { 2,15796 }, { 3,15796 }, { 4,15796 }, { 5,15796 }, + { 6,15796 }, { 7,15796 }, { 8,15796 }, { 9,15796 }, { 10,2461 }, + + { 11,15796 }, { 12,15796 }, { 13,2463 }, { 14,15796 }, { 15,15796 }, + { 16,15796 }, { 17,15796 }, { 18,15796 }, { 19,15796 }, { 20,15796 }, + { 21,15796 }, { 22,15796 }, { 23,15796 }, { 24,15796 }, { 25,15796 }, + { 26,15796 }, { 27,15796 }, { 28,15796 }, { 29,15796 }, { 30,15796 }, + { 31,15796 }, { 32,15796 }, { 33,15796 }, { 34,15796 }, { 35,15796 }, + { 36,15796 }, { 37,15796 }, { 38,15796 }, { 39,15796 }, { 40,15796 }, + { 41,15796 }, { 42,15796 }, { 43,15796 }, { 44,15796 }, { 45,15796 }, + { 46,15796 }, { 47,15796 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + { 56,16054 }, { 57,16054 }, { 58,15796 }, { 59,16312 }, { 60,15796 }, + + { 61,15796 }, { 62,15796 }, { 63,15796 }, { 64,15796 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 91,15796 }, { 92,15796 }, { 93,15796 }, { 94,15796 }, { 95,16054 }, + { 96,15796 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 123,15796 }, { 124,15796 }, { 125,15796 }, + { 126,15796 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + { 256,15796 }, { 0, 131 }, { 0,94292 }, { 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, 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 }, { 34,3454 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 39,3712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,2169 }, { 49,2169 }, { 50,2169 }, { 51,2169 }, { 52,2169 }, + + { 53,2169 }, { 54,2169 }, { 55,2169 }, { 56,2169 }, { 57,2169 }, + { 0, 0 }, { 0, 0 }, { 60,2171 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,2169 }, { 66,2169 }, { 67,2169 }, + { 68,2169 }, { 69,2169 }, { 70,2169 }, { 71,2169 }, { 72,2169 }, + { 73,2169 }, { 74,2169 }, { 75,2169 }, { 76,2169 }, { 77,2169 }, + { 78,2169 }, { 79,2169 }, { 80,2169 }, { 81,2169 }, { 82,2169 }, + { 83,2169 }, { 84,2169 }, { 85,2169 }, { 86,2169 }, { 87,2169 }, + { 88,2169 }, { 89,2169 }, { 90,2169 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,2169 }, { 0, 0 }, { 97,2169 }, + { 98,2169 }, { 99,2169 }, { 100,2169 }, { 101,2169 }, { 102,2169 }, + + { 103,2169 }, { 104,2169 }, { 105,2169 }, { 106,2169 }, { 107,2169 }, + { 108,2169 }, { 109,2169 }, { 110,2169 }, { 111,2169 }, { 112,2169 }, + { 113,2169 }, { 114,2169 }, { 115,2169 }, { 116,2169 }, { 117,2169 }, + { 118,2169 }, { 119,2169 }, { 120,2169 }, { 121,2169 }, { 122,2169 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,2169 }, + { 128,2169 }, { 129,2169 }, { 130,2169 }, { 131,2169 }, { 132,2169 }, + { 133,2169 }, { 134,2169 }, { 135,2169 }, { 136,2169 }, { 137,2169 }, + { 138,2169 }, { 139,2169 }, { 140,2169 }, { 141,2169 }, { 142,2169 }, + { 143,2169 }, { 144,2169 }, { 145,2169 }, { 146,2169 }, { 147,2169 }, + { 148,2169 }, { 149,2169 }, { 150,2169 }, { 151,2169 }, { 152,2169 }, + + { 153,2169 }, { 154,2169 }, { 155,2169 }, { 156,2169 }, { 157,2169 }, + { 158,2169 }, { 159,2169 }, { 160,2169 }, { 161,2169 }, { 162,2169 }, + { 163,2169 }, { 164,2169 }, { 165,2169 }, { 166,2169 }, { 167,2169 }, + { 168,2169 }, { 169,2169 }, { 170,2169 }, { 171,2169 }, { 172,2169 }, + { 173,2169 }, { 174,2169 }, { 175,2169 }, { 176,2169 }, { 177,2169 }, + { 178,2169 }, { 179,2169 }, { 180,2169 }, { 181,2169 }, { 182,2169 }, + { 183,2169 }, { 184,2169 }, { 185,2169 }, { 186,2169 }, { 187,2169 }, + { 188,2169 }, { 189,2169 }, { 190,2169 }, { 191,2169 }, { 192,2169 }, + { 193,2169 }, { 194,2169 }, { 195,2169 }, { 196,2169 }, { 197,2169 }, + { 198,2169 }, { 199,2169 }, { 200,2169 }, { 201,2169 }, { 202,2169 }, + + { 203,2169 }, { 204,2169 }, { 205,2169 }, { 206,2169 }, { 207,2169 }, + { 208,2169 }, { 209,2169 }, { 210,2169 }, { 211,2169 }, { 212,2169 }, + { 213,2169 }, { 214,2169 }, { 215,2169 }, { 216,2169 }, { 217,2169 }, + { 218,2169 }, { 219,2169 }, { 220,2169 }, { 221,2169 }, { 222,2169 }, + { 223,2169 }, { 224,2169 }, { 225,2169 }, { 226,2169 }, { 227,2169 }, + { 228,2169 }, { 229,2169 }, { 230,2169 }, { 231,2169 }, { 232,2169 }, + { 233,2169 }, { 234,2169 }, { 235,2169 }, { 236,2169 }, { 237,2169 }, + { 238,2169 }, { 239,2169 }, { 240,2169 }, { 241,2169 }, { 242,2169 }, + { 243,2169 }, { 244,2169 }, { 245,2169 }, { 246,2169 }, { 247,2169 }, + { 248,2169 }, { 249,2169 }, { 250,2169 }, { 251,2169 }, { 252,2169 }, + + { 253,2169 }, { 254,2169 }, { 255,2169 }, { 0, 4 }, { 0,94035 }, + { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, + { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, + { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, + { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, + { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, + { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, + + { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 0, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, + { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, + { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, + { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, + { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, + + { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, + { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, + { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, + { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, + { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, + { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, + { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, + { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, + + { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, + { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, + { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, + { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, + { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, + { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, + { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, + { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, + { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, + + { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, + { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, + { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, + { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, + { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, + { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, + { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, + { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, + { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, + + { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, + { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, + { 256, 0 }, { 0, 2 }, { 0,93777 }, { 0, 9 }, { 0,93775 }, + { 0, 106 }, { 0,93773 }, { 0, 133 }, { 0,93771 }, { 0, 97 }, + { 0,93769 }, { 0, 104 }, { 0,93767 }, { 9, 0 }, { 10, 0 }, + { 0, 98 }, { 0,93763 }, { 13, 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 }, + { 0, 0 }, { 32, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 61,1692 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,1928 }, { 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 }, { 80,1930 }, { 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, 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 }, { 112,1930 }, + { 0, 0 }, { 0,93663 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, + { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, + { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, + { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, + + { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, + { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, + { 34,-108 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, + { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, + { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, + { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 258 }, { 93, 0 }, + { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, + + { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 0 }, { 0,93405 }, + { 1,15425 }, { 2,15425 }, { 3,15425 }, { 4,15425 }, { 5,15425 }, + { 6,15425 }, { 7,15425 }, { 8,15425 }, { 9,15425 }, { 10,15425 }, + { 11,15425 }, { 12,15425 }, { 13,15425 }, { 14,15425 }, { 15,15425 }, + + { 16,15425 }, { 17,15425 }, { 18,15425 }, { 19,15425 }, { 20,15425 }, + { 21,15425 }, { 22,15425 }, { 23,15425 }, { 24,15425 }, { 25,15425 }, + { 26,15425 }, { 27,15425 }, { 28,15425 }, { 29,15425 }, { 30,15425 }, + { 31,15425 }, { 32,15425 }, { 33,15425 }, { 34,15425 }, { 35,15425 }, + { 36,15425 }, { 37,15425 }, { 38,15425 }, { 39,15425 }, { 40,15425 }, + { 41,15425 }, { 42,15425 }, { 43,15425 }, { 44,15425 }, { 45,15425 }, + { 46,15425 }, { 47,15425 }, { 48,15425 }, { 49,15425 }, { 50,15425 }, + { 51,15425 }, { 52,15425 }, { 53,15425 }, { 54,15425 }, { 55,15425 }, + { 56,15425 }, { 57,15425 }, { 58,15425 }, { 59,15425 }, { 60,15425 }, + { 61,15425 }, { 62,15425 }, { 63,15425 }, { 64,15425 }, { 65,15425 }, + + { 66,15425 }, { 67,15425 }, { 68,15425 }, { 69,15425 }, { 70,15425 }, + { 71,15425 }, { 72,15425 }, { 73,15425 }, { 74,15425 }, { 75,15425 }, + { 76,15425 }, { 77,15425 }, { 78,15425 }, { 79,15425 }, { 80,15425 }, + { 81,15425 }, { 82,15425 }, { 83,15425 }, { 84,15425 }, { 85,15425 }, + { 86,15425 }, { 87,15425 }, { 88,15425 }, { 89,15425 }, { 90,15425 }, + { 91,15425 }, { 92,15425 }, { 93,15425 }, { 94,15425 }, { 95,15425 }, + { 96,15425 }, { 97,15425 }, { 98,15425 }, { 99,15425 }, { 100,15425 }, + { 101,15425 }, { 102,15425 }, { 103,15425 }, { 104,15425 }, { 105,15425 }, + { 106,15425 }, { 107,15425 }, { 108,15425 }, { 109,15425 }, { 110,15425 }, + { 111,15425 }, { 112,15425 }, { 113,15425 }, { 114,15425 }, { 115,15425 }, + + { 116,15425 }, { 117,15425 }, { 118,15425 }, { 119,15425 }, { 120,15425 }, + { 121,15425 }, { 122,15425 }, { 123,15425 }, { 124,15425 }, { 125,15425 }, + { 126,15425 }, { 127,15425 }, { 128,15425 }, { 129,15425 }, { 130,15425 }, + { 131,15425 }, { 132,15425 }, { 133,15425 }, { 134,15425 }, { 135,15425 }, + { 136,15425 }, { 137,15425 }, { 138,15425 }, { 139,15425 }, { 140,15425 }, + { 141,15425 }, { 142,15425 }, { 143,15425 }, { 144,15425 }, { 145,15425 }, + { 146,15425 }, { 147,15425 }, { 148,15425 }, { 149,15425 }, { 150,15425 }, + { 151,15425 }, { 152,15425 }, { 153,15425 }, { 154,15425 }, { 155,15425 }, + { 156,15425 }, { 157,15425 }, { 158,15425 }, { 159,15425 }, { 160,15425 }, + { 161,15425 }, { 162,15425 }, { 163,15425 }, { 164,15425 }, { 165,15425 }, + + { 166,15425 }, { 167,15425 }, { 168,15425 }, { 169,15425 }, { 170,15425 }, + { 171,15425 }, { 172,15425 }, { 173,15425 }, { 174,15425 }, { 175,15425 }, + { 176,15425 }, { 177,15425 }, { 178,15425 }, { 179,15425 }, { 180,15425 }, + { 181,15425 }, { 182,15425 }, { 183,15425 }, { 184,15425 }, { 185,15425 }, + { 186,15425 }, { 187,15425 }, { 188,15425 }, { 189,15425 }, { 190,15425 }, + { 191,15425 }, { 192,15425 }, { 193,15425 }, { 194,15425 }, { 195,15425 }, + { 196,15425 }, { 197,15425 }, { 198,15425 }, { 199,15425 }, { 200,15425 }, + { 201,15425 }, { 202,15425 }, { 203,15425 }, { 204,15425 }, { 205,15425 }, + { 206,15425 }, { 207,15425 }, { 208,15425 }, { 209,15425 }, { 210,15425 }, + { 211,15425 }, { 212,15425 }, { 213,15425 }, { 214,15425 }, { 215,15425 }, + + { 216,15425 }, { 217,15425 }, { 218,15425 }, { 219,15425 }, { 220,15425 }, + { 221,15425 }, { 222,15425 }, { 223,15425 }, { 224,15425 }, { 225,15425 }, + { 226,15425 }, { 227,15425 }, { 228,15425 }, { 229,15425 }, { 230,15425 }, + { 231,15425 }, { 232,15425 }, { 233,15425 }, { 234,15425 }, { 235,15425 }, + { 236,15425 }, { 237,15425 }, { 238,15425 }, { 239,15425 }, { 240,15425 }, + { 241,15425 }, { 242,15425 }, { 243,15425 }, { 244,15425 }, { 245,15425 }, + { 246,15425 }, { 247,15425 }, { 248,15425 }, { 249,15425 }, { 250,15425 }, + { 251,15425 }, { 252,15425 }, { 253,15425 }, { 254,15425 }, { 255,15425 }, + { 256,15425 }, { 0, 132 }, { 0,93147 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0,93138 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,15425 }, { 49,15425 }, { 50,15425 }, { 51,15425 }, { 52,15425 }, + { 53,15425 }, { 54,15425 }, { 55,15425 }, { 56,15425 }, { 57,15425 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,15425 }, { 66,15425 }, { 67,15425 }, + { 68,15425 }, { 69,15425 }, { 70,15425 }, { 71,15425 }, { 72,15425 }, + { 73,15425 }, { 74,15425 }, { 75,15425 }, { 76,15425 }, { 77,15425 }, + { 78,15425 }, { 79,15425 }, { 80,15425 }, { 81,15425 }, { 82,15425 }, + { 83,15425 }, { 84,15425 }, { 85,15425 }, { 86,15425 }, { 87,15425 }, + { 88,15425 }, { 89,15425 }, { 90,15425 }, { 82,1538 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,15425 }, { 0, 0 }, { 97,15425 }, + { 98,15425 }, { 99,15425 }, { 100,15425 }, { 101,15425 }, { 102,15425 }, + { 103,15425 }, { 104,15425 }, { 105,15425 }, { 106,15425 }, { 107,15425 }, + + { 108,15425 }, { 109,15425 }, { 110,15425 }, { 111,15425 }, { 112,15425 }, + { 113,15425 }, { 114,15425 }, { 115,15425 }, { 116,15425 }, { 117,15425 }, + { 118,15425 }, { 119,15425 }, { 120,15425 }, { 121,15425 }, { 122,15425 }, + { 114,1538 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,15425 }, + { 128,15425 }, { 129,15425 }, { 130,15425 }, { 131,15425 }, { 132,15425 }, + { 133,15425 }, { 134,15425 }, { 135,15425 }, { 136,15425 }, { 137,15425 }, + { 138,15425 }, { 139,15425 }, { 140,15425 }, { 141,15425 }, { 142,15425 }, + { 143,15425 }, { 144,15425 }, { 145,15425 }, { 146,15425 }, { 147,15425 }, + { 148,15425 }, { 149,15425 }, { 150,15425 }, { 151,15425 }, { 152,15425 }, + { 153,15425 }, { 154,15425 }, { 155,15425 }, { 156,15425 }, { 157,15425 }, + + { 158,15425 }, { 159,15425 }, { 160,15425 }, { 161,15425 }, { 162,15425 }, + { 163,15425 }, { 164,15425 }, { 165,15425 }, { 166,15425 }, { 167,15425 }, + { 168,15425 }, { 169,15425 }, { 170,15425 }, { 171,15425 }, { 172,15425 }, + { 173,15425 }, { 174,15425 }, { 175,15425 }, { 176,15425 }, { 177,15425 }, + { 178,15425 }, { 179,15425 }, { 180,15425 }, { 181,15425 }, { 182,15425 }, + { 183,15425 }, { 184,15425 }, { 185,15425 }, { 186,15425 }, { 187,15425 }, + { 188,15425 }, { 189,15425 }, { 190,15425 }, { 191,15425 }, { 192,15425 }, + { 193,15425 }, { 194,15425 }, { 195,15425 }, { 196,15425 }, { 197,15425 }, + { 198,15425 }, { 199,15425 }, { 200,15425 }, { 201,15425 }, { 202,15425 }, + { 203,15425 }, { 204,15425 }, { 205,15425 }, { 206,15425 }, { 207,15425 }, + + { 208,15425 }, { 209,15425 }, { 210,15425 }, { 211,15425 }, { 212,15425 }, + { 213,15425 }, { 214,15425 }, { 215,15425 }, { 216,15425 }, { 217,15425 }, + { 218,15425 }, { 219,15425 }, { 220,15425 }, { 221,15425 }, { 222,15425 }, + { 223,15425 }, { 224,15425 }, { 225,15425 }, { 226,15425 }, { 227,15425 }, + { 228,15425 }, { 229,15425 }, { 230,15425 }, { 231,15425 }, { 232,15425 }, + { 233,15425 }, { 234,15425 }, { 235,15425 }, { 236,15425 }, { 237,15425 }, + { 238,15425 }, { 239,15425 }, { 240,15425 }, { 241,15425 }, { 242,15425 }, + { 243,15425 }, { 244,15425 }, { 245,15425 }, { 246,15425 }, { 247,15425 }, + { 248,15425 }, { 249,15425 }, { 250,15425 }, { 251,15425 }, { 252,15425 }, + { 253,15425 }, { 254,15425 }, { 255,15425 }, { 0, 0 }, { 0,92890 }, + + { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, + { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, + { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, + { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, + { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39,-881 }, { 40, 0 }, + { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, + { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, + { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, + { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, + { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, + { 91, 0 }, { 92, 258 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, + { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + + { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, + { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, + { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, + { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, + { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, + { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, + { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, + { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, + { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, + + { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, + { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, + { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, + { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, + { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, + { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, + { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, + { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, + { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, + + { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, + { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, + { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, + { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, + { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, + { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, + { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, + { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, + { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, + + { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, + { 256, 0 }, { 0, 0 }, { 0,92632 }, { 1,15167 }, { 2,15167 }, + { 3,15167 }, { 4,15167 }, { 5,15167 }, { 6,15167 }, { 7,15167 }, + { 8,15167 }, { 9,15167 }, { 10,15167 }, { 11,15167 }, { 12,15167 }, + { 13,15167 }, { 14,15167 }, { 15,15167 }, { 16,15167 }, { 17,15167 }, + { 18,15167 }, { 19,15167 }, { 20,15167 }, { 21,15167 }, { 22,15167 }, + { 23,15167 }, { 24,15167 }, { 25,15167 }, { 26,15167 }, { 27,15167 }, + { 28,15167 }, { 29,15167 }, { 30,15167 }, { 31,15167 }, { 32,15167 }, + { 33,15167 }, { 34,15167 }, { 35,15167 }, { 36,15167 }, { 37,15167 }, + { 38,15167 }, { 39,15167 }, { 40,15167 }, { 41,15167 }, { 42,15167 }, + + { 43,15167 }, { 44,15167 }, { 45,15167 }, { 46,15167 }, { 47,15167 }, + { 48,15167 }, { 49,15167 }, { 50,15167 }, { 51,15167 }, { 52,15167 }, + { 53,15167 }, { 54,15167 }, { 55,15167 }, { 56,15167 }, { 57,15167 }, + { 58,15167 }, { 59,15167 }, { 60,15167 }, { 61,15167 }, { 62,15167 }, + { 63,15167 }, { 64,15167 }, { 65,15167 }, { 66,15167 }, { 67,15167 }, + { 68,15167 }, { 69,15167 }, { 70,15167 }, { 71,15167 }, { 72,15167 }, + { 73,15167 }, { 74,15167 }, { 75,15167 }, { 76,15167 }, { 77,15167 }, + { 78,15167 }, { 79,15167 }, { 80,15167 }, { 81,15167 }, { 82,15167 }, + { 83,15167 }, { 84,15167 }, { 85,15167 }, { 86,15167 }, { 87,15167 }, + { 88,15167 }, { 89,15167 }, { 90,15167 }, { 91,15167 }, { 92,15167 }, + + { 93,15167 }, { 94,15167 }, { 95,15167 }, { 96,15167 }, { 97,15167 }, + { 98,15167 }, { 99,15167 }, { 100,15167 }, { 101,15167 }, { 102,15167 }, + { 103,15167 }, { 104,15167 }, { 105,15167 }, { 106,15167 }, { 107,15167 }, + { 108,15167 }, { 109,15167 }, { 110,15167 }, { 111,15167 }, { 112,15167 }, + { 113,15167 }, { 114,15167 }, { 115,15167 }, { 116,15167 }, { 117,15167 }, + { 118,15167 }, { 119,15167 }, { 120,15167 }, { 121,15167 }, { 122,15167 }, + { 123,15167 }, { 124,15167 }, { 125,15167 }, { 126,15167 }, { 127,15167 }, + { 128,15167 }, { 129,15167 }, { 130,15167 }, { 131,15167 }, { 132,15167 }, + { 133,15167 }, { 134,15167 }, { 135,15167 }, { 136,15167 }, { 137,15167 }, + { 138,15167 }, { 139,15167 }, { 140,15167 }, { 141,15167 }, { 142,15167 }, + + { 143,15167 }, { 144,15167 }, { 145,15167 }, { 146,15167 }, { 147,15167 }, + { 148,15167 }, { 149,15167 }, { 150,15167 }, { 151,15167 }, { 152,15167 }, + { 153,15167 }, { 154,15167 }, { 155,15167 }, { 156,15167 }, { 157,15167 }, + { 158,15167 }, { 159,15167 }, { 160,15167 }, { 161,15167 }, { 162,15167 }, + { 163,15167 }, { 164,15167 }, { 165,15167 }, { 166,15167 }, { 167,15167 }, + { 168,15167 }, { 169,15167 }, { 170,15167 }, { 171,15167 }, { 172,15167 }, + { 173,15167 }, { 174,15167 }, { 175,15167 }, { 176,15167 }, { 177,15167 }, + { 178,15167 }, { 179,15167 }, { 180,15167 }, { 181,15167 }, { 182,15167 }, + { 183,15167 }, { 184,15167 }, { 185,15167 }, { 186,15167 }, { 187,15167 }, + { 188,15167 }, { 189,15167 }, { 190,15167 }, { 191,15167 }, { 192,15167 }, + + { 193,15167 }, { 194,15167 }, { 195,15167 }, { 196,15167 }, { 197,15167 }, + { 198,15167 }, { 199,15167 }, { 200,15167 }, { 201,15167 }, { 202,15167 }, + { 203,15167 }, { 204,15167 }, { 205,15167 }, { 206,15167 }, { 207,15167 }, + { 208,15167 }, { 209,15167 }, { 210,15167 }, { 211,15167 }, { 212,15167 }, + { 213,15167 }, { 214,15167 }, { 215,15167 }, { 216,15167 }, { 217,15167 }, + { 218,15167 }, { 219,15167 }, { 220,15167 }, { 221,15167 }, { 222,15167 }, + { 223,15167 }, { 224,15167 }, { 225,15167 }, { 226,15167 }, { 227,15167 }, + { 228,15167 }, { 229,15167 }, { 230,15167 }, { 231,15167 }, { 232,15167 }, + { 233,15167 }, { 234,15167 }, { 235,15167 }, { 236,15167 }, { 237,15167 }, + { 238,15167 }, { 239,15167 }, { 240,15167 }, { 241,15167 }, { 242,15167 }, + + { 243,15167 }, { 244,15167 }, { 245,15167 }, { 246,15167 }, { 247,15167 }, + { 248,15167 }, { 249,15167 }, { 250,15167 }, { 251,15167 }, { 252,15167 }, + { 253,15167 }, { 254,15167 }, { 255,15167 }, { 256,15167 }, { 0, 0 }, + { 0,92374 }, { 0, 0 }, { 0,92372 }, { 0, 0 }, { 0, 0 }, + { 0,92369 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, + { 0, 0 }, { 0,92363 }, { 0, 0 }, { 0,92361 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,92354 }, { 0, 0 }, { 0, 0 }, { 0,92351 }, { 0, 0 }, + { 0,92349 }, { 0, 0 }, { 0, 0 }, { 0,92346 }, { 0, 94 }, + { 0,92344 }, { 0, 0 }, { 32, 0 }, { 0, 113 }, { 0,92340 }, + + { 0, 92 }, { 0,92338 }, { 0, 114 }, { 0,92336 }, { 0, 93 }, + { 0,92334 }, { 0, 115 }, { 0,92332 }, { 0, 0 }, { 0,92330 }, + { 0, 96 }, { 0,92328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 8 }, { 0,92323 }, { 0, 6 }, { 0,92321 }, { 0, 95 }, + { 0,92319 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-764 }, { 66, 2 }, { 0, 0 }, { 68, 5 }, { 0, 0 }, + { 70, 11 }, { 0, 0 }, { 0,92302 }, { 73, 13 }, { 0, 0 }, + { 73, 777 }, { 0, 130 }, { 0,92297 }, { 0, 0 }, { 79, 20 }, + { 0, 0 }, { 79,1032 }, { 82, 23 }, { 83, 25 }, { 79,1280 }, + + { 85, 28 }, { 66,2050 }, { 76,1281 }, { 0, 117 }, { 0,92285 }, + { 46,2278 }, { 78,2046 }, { 69,2057 }, { 42,2273 }, { 0, 0 }, + { 0, 0 }, { 0,92278 }, { 97,-764 }, { 98, 2 }, { 0, 0 }, + { 100, 5 }, { 0, 0 }, { 102, 11 }, { 0, 130 }, { 0,92270 }, + { 105, 13 }, { 78,2292 }, { 105, 777 }, { 0, 0 }, { 84,2293 }, + { 0, 0 }, { 111, 20 }, { 0, 0 }, { 111,1032 }, { 114, 23 }, + { 115, 25 }, { 111,1280 }, { 117, 28 }, { 98,2050 }, { 108,1281 }, + { 48,2281 }, { 49,2281 }, { 0, 0 }, { 110,2046 }, { 101,2057 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + + { 0, 0 }, { 0, 129 }, { 0,92237 }, { 110,2292 }, { 0, 111 }, + { 0,92234 }, { 116,2293 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 69, 87 }, { 0, 109 }, { 0,92226 }, { 0, 106 }, + { 0,92224 }, { 0, 0 }, { 48,15063 }, { 49,15063 }, { 50,15063 }, + { 51,15063 }, { 52,15063 }, { 53,15063 }, { 54,15063 }, { 55,15063 }, + { 56,15063 }, { 57,15063 }, { 0, 0 }, { 0, 0 }, { 0,92210 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 105 }, { 0,92202 }, { 69, 60 }, { 0, 0 }, + { 0,92199 }, { 0, 116 }, { 0,92197 }, { 101, 87 }, { 83,2494 }, + { 0, 110 }, { 0,92193 }, { 0, 0 }, { 46, -33 }, { 0, 0 }, + + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 112 }, { 0,92178 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 60,2452 }, { 61,2454 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 101, 60 }, { 69, 27 }, { 43,15013 }, { 0, 0 }, { 45,15013 }, + { 62,2448 }, { 115,2494 }, { 48,15025 }, { 49,15025 }, { 50,15025 }, + { 51,15025 }, { 52,15025 }, { 53,15025 }, { 54,15025 }, { 55,15025 }, + { 56,15025 }, { 57,15025 }, { 0, 0 }, { 48,15029 }, { 49,15029 }, + { 50,15029 }, { 51,15029 }, { 52,15029 }, { 53,15029 }, { 54,15029 }, + { 55,15029 }, { 56,15029 }, { 57,15029 }, { 61,2426 }, { 0, 0 }, + + { 0, 5 }, { 0,92138 }, { 0, 0 }, { 101, 27 }, { 0, 0 }, + { 65,15029 }, { 66,15029 }, { 67,15029 }, { 68,15029 }, { 69,15029 }, + { 70,15029 }, { 10,2367 }, { 0, 120 }, { 0,92126 }, { 13,2589 }, + { 0, 131 }, { 0,92123 }, { 0, 0 }, { 0,92121 }, { 0, 100 }, + { 0,92119 }, { 0, 0 }, { 61,2404 }, { 0, 134 }, { 0,92115 }, + { 0, 99 }, { 0,92113 }, { 0, 103 }, { 0,92111 }, { 0, 14 }, + { 0,92109 }, { 0, 17 }, { 0,92107 }, { 0, 10 }, { 0,92105 }, + { 0, 12 }, { 0,92103 }, { 97,15029 }, { 98,15029 }, { 99,15029 }, + { 100,15029 }, { 101,15029 }, { 102,15029 }, { 0, 16 }, { 0,92095 }, + { 0, 138 }, { 0,92093 }, { 0, 141 }, { 0,92091 }, { 0, 139 }, + + { 0,92089 }, { 0, 139 }, { 0,92087 }, { 0, 3 }, { 0,92085 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 10, -2 }, { 0, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,2574 }, { 0, 0 }, + { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 0, 131 }, { 0,91866 }, { 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, 0 }, { 0,91847 }, { 0, 108 }, { 0,91845 }, + { 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, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-257 }, { 49,-257 }, { 50,-257 }, { 51,-257 }, + { 52,-257 }, { 53,-257 }, { 54,-257 }, { 55,-257 }, { 56,-257 }, + { 57,-257 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-257 }, { 66,-257 }, + { 67,-257 }, { 68,-257 }, { 69,-257 }, { 70,-257 }, { 71,-257 }, + { 72,-257 }, { 73,-257 }, { 74,-257 }, { 75,-257 }, { 76,-257 }, + + { 77,-257 }, { 78,-257 }, { 79,-257 }, { 80,-257 }, { 81,-257 }, + { 82,-257 }, { 83,14755 }, { 84,-257 }, { 85,-257 }, { 86,-257 }, + { 87,-257 }, { 88,-257 }, { 89,-257 }, { 90,-257 }, { 72,2307 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-257 }, { 0, 0 }, + { 97,-257 }, { 98,-257 }, { 99,-257 }, { 100,-257 }, { 101,-257 }, + { 102,-257 }, { 103,-257 }, { 104,-257 }, { 105,-257 }, { 106,-257 }, + { 107,-257 }, { 108,-257 }, { 109,-257 }, { 110,-257 }, { 111,-257 }, + { 112,-257 }, { 113,-257 }, { 114,-257 }, { 115,14755 }, { 116,-257 }, + { 117,-257 }, { 118,-257 }, { 119,-257 }, { 120,-257 }, { 121,-257 }, + { 122,-257 }, { 104,2307 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-257 }, { 128,-257 }, { 129,-257 }, { 130,-257 }, { 131,-257 }, + { 132,-257 }, { 133,-257 }, { 134,-257 }, { 135,-257 }, { 136,-257 }, + { 137,-257 }, { 138,-257 }, { 139,-257 }, { 140,-257 }, { 141,-257 }, + { 142,-257 }, { 143,-257 }, { 144,-257 }, { 145,-257 }, { 146,-257 }, + { 147,-257 }, { 148,-257 }, { 149,-257 }, { 150,-257 }, { 151,-257 }, + { 152,-257 }, { 153,-257 }, { 154,-257 }, { 155,-257 }, { 156,-257 }, + { 157,-257 }, { 158,-257 }, { 159,-257 }, { 160,-257 }, { 161,-257 }, + { 162,-257 }, { 163,-257 }, { 164,-257 }, { 165,-257 }, { 166,-257 }, + { 167,-257 }, { 168,-257 }, { 169,-257 }, { 170,-257 }, { 171,-257 }, + { 172,-257 }, { 173,-257 }, { 174,-257 }, { 175,-257 }, { 176,-257 }, + + { 177,-257 }, { 178,-257 }, { 179,-257 }, { 180,-257 }, { 181,-257 }, + { 182,-257 }, { 183,-257 }, { 184,-257 }, { 185,-257 }, { 186,-257 }, + { 187,-257 }, { 188,-257 }, { 189,-257 }, { 190,-257 }, { 191,-257 }, + { 192,-257 }, { 193,-257 }, { 194,-257 }, { 195,-257 }, { 196,-257 }, + { 197,-257 }, { 198,-257 }, { 199,-257 }, { 200,-257 }, { 201,-257 }, + { 202,-257 }, { 203,-257 }, { 204,-257 }, { 205,-257 }, { 206,-257 }, + { 207,-257 }, { 208,-257 }, { 209,-257 }, { 210,-257 }, { 211,-257 }, + { 212,-257 }, { 213,-257 }, { 214,-257 }, { 215,-257 }, { 216,-257 }, + { 217,-257 }, { 218,-257 }, { 219,-257 }, { 220,-257 }, { 221,-257 }, + { 222,-257 }, { 223,-257 }, { 224,-257 }, { 225,-257 }, { 226,-257 }, + + { 227,-257 }, { 228,-257 }, { 229,-257 }, { 230,-257 }, { 231,-257 }, + { 232,-257 }, { 233,-257 }, { 234,-257 }, { 235,-257 }, { 236,-257 }, + { 237,-257 }, { 238,-257 }, { 239,-257 }, { 240,-257 }, { 241,-257 }, + { 242,-257 }, { 243,-257 }, { 244,-257 }, { 245,-257 }, { 246,-257 }, + { 247,-257 }, { 248,-257 }, { 249,-257 }, { 250,-257 }, { 251,-257 }, + { 252,-257 }, { 253,-257 }, { 254,-257 }, { 255,-257 }, { 0, 131 }, + { 0,91609 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91600 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91595 }, + { 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, 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 }, { 48,-514 }, { 49,-514 }, + { 50,-514 }, { 51,-514 }, { 52,-514 }, { 53,-514 }, { 54,-514 }, + { 55,-514 }, { 56,-514 }, { 57,-514 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-514 }, { 66,-514 }, { 67,-514 }, { 68,14755 }, { 69,-514 }, + + { 70,-514 }, { 71,-514 }, { 72,-514 }, { 73,-514 }, { 74,-514 }, + { 75,-514 }, { 76,-514 }, { 77,-514 }, { 78,-514 }, { 79,-514 }, + { 80,-514 }, { 81,-514 }, { 82,-514 }, { 83,-514 }, { 84,-514 }, + { 85,-514 }, { 86,-514 }, { 87,-514 }, { 88,-514 }, { 89,-514 }, + { 90,-514 }, { 82,2076 }, { 78,2073 }, { 0, 0 }, { 0, 0 }, + { 95,-514 }, { 0, 0 }, { 97,-514 }, { 98,-514 }, { 99,-514 }, + { 100,14755 }, { 101,-514 }, { 102,-514 }, { 103,-514 }, { 104,-514 }, + { 105,-514 }, { 106,-514 }, { 107,-514 }, { 108,-514 }, { 109,-514 }, + { 110,-514 }, { 111,-514 }, { 112,-514 }, { 113,-514 }, { 114,-514 }, + { 115,-514 }, { 116,-514 }, { 117,-514 }, { 118,-514 }, { 119,-514 }, + + { 120,-514 }, { 121,-514 }, { 122,-514 }, { 114,2076 }, { 110,2073 }, + { 0, 0 }, { 0, 0 }, { 127,-514 }, { 128,-514 }, { 129,-514 }, + { 130,-514 }, { 131,-514 }, { 132,-514 }, { 133,-514 }, { 134,-514 }, + { 135,-514 }, { 136,-514 }, { 137,-514 }, { 138,-514 }, { 139,-514 }, + { 140,-514 }, { 141,-514 }, { 142,-514 }, { 143,-514 }, { 144,-514 }, + { 145,-514 }, { 146,-514 }, { 147,-514 }, { 148,-514 }, { 149,-514 }, + { 150,-514 }, { 151,-514 }, { 152,-514 }, { 153,-514 }, { 154,-514 }, + { 155,-514 }, { 156,-514 }, { 157,-514 }, { 158,-514 }, { 159,-514 }, + { 160,-514 }, { 161,-514 }, { 162,-514 }, { 163,-514 }, { 164,-514 }, + { 165,-514 }, { 166,-514 }, { 167,-514 }, { 168,-514 }, { 169,-514 }, + + { 170,-514 }, { 171,-514 }, { 172,-514 }, { 173,-514 }, { 174,-514 }, + { 175,-514 }, { 176,-514 }, { 177,-514 }, { 178,-514 }, { 179,-514 }, + { 180,-514 }, { 181,-514 }, { 182,-514 }, { 183,-514 }, { 184,-514 }, + { 185,-514 }, { 186,-514 }, { 187,-514 }, { 188,-514 }, { 189,-514 }, + { 190,-514 }, { 191,-514 }, { 192,-514 }, { 193,-514 }, { 194,-514 }, + { 195,-514 }, { 196,-514 }, { 197,-514 }, { 198,-514 }, { 199,-514 }, + { 200,-514 }, { 201,-514 }, { 202,-514 }, { 203,-514 }, { 204,-514 }, + { 205,-514 }, { 206,-514 }, { 207,-514 }, { 208,-514 }, { 209,-514 }, + { 210,-514 }, { 211,-514 }, { 212,-514 }, { 213,-514 }, { 214,-514 }, + { 215,-514 }, { 216,-514 }, { 217,-514 }, { 218,-514 }, { 219,-514 }, + + { 220,-514 }, { 221,-514 }, { 222,-514 }, { 223,-514 }, { 224,-514 }, + { 225,-514 }, { 226,-514 }, { 227,-514 }, { 228,-514 }, { 229,-514 }, + { 230,-514 }, { 231,-514 }, { 232,-514 }, { 233,-514 }, { 234,-514 }, + { 235,-514 }, { 236,-514 }, { 237,-514 }, { 238,-514 }, { 239,-514 }, + { 240,-514 }, { 241,-514 }, { 242,-514 }, { 243,-514 }, { 244,-514 }, + { 245,-514 }, { 246,-514 }, { 247,-514 }, { 248,-514 }, { 249,-514 }, + { 250,-514 }, { 251,-514 }, { 252,-514 }, { 253,-514 }, { 254,-514 }, + { 255,-514 }, { 0, 131 }, { 0,91352 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91340 }, + + { 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, 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 }, + { 48,-771 }, { 49,-771 }, { 50,-771 }, { 51,-771 }, { 52,-771 }, + { 53,-771 }, { 54,-771 }, { 55,-771 }, { 56,-771 }, { 57,-771 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-771 }, { 66,-771 }, { 67,-771 }, + { 68,-771 }, { 69,-771 }, { 70,-771 }, { 71,-771 }, { 72,-771 }, + { 73,-771 }, { 74,-771 }, { 75,-771 }, { 76,-771 }, { 77,-771 }, + { 78,-771 }, { 79,-771 }, { 80,-771 }, { 81,-771 }, { 82,14755 }, + { 83,-771 }, { 84,-771 }, { 85,-771 }, { 86,-771 }, { 87,-771 }, + { 88,-771 }, { 89,-771 }, { 90,-771 }, { 79,2061 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-771 }, { 0, 0 }, { 97,-771 }, + { 98,-771 }, { 99,-771 }, { 100,-771 }, { 101,-771 }, { 102,-771 }, + { 103,-771 }, { 104,-771 }, { 105,-771 }, { 106,-771 }, { 107,-771 }, + { 108,-771 }, { 109,-771 }, { 110,-771 }, { 111,-771 }, { 112,-771 }, + + { 113,-771 }, { 114,14755 }, { 115,-771 }, { 116,-771 }, { 117,-771 }, + { 118,-771 }, { 119,-771 }, { 120,-771 }, { 121,-771 }, { 122,-771 }, + { 111,2061 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-771 }, + { 128,-771 }, { 129,-771 }, { 130,-771 }, { 131,-771 }, { 132,-771 }, + { 133,-771 }, { 134,-771 }, { 135,-771 }, { 136,-771 }, { 137,-771 }, + { 138,-771 }, { 139,-771 }, { 140,-771 }, { 141,-771 }, { 142,-771 }, + { 143,-771 }, { 144,-771 }, { 145,-771 }, { 146,-771 }, { 147,-771 }, + { 148,-771 }, { 149,-771 }, { 150,-771 }, { 151,-771 }, { 152,-771 }, + { 153,-771 }, { 154,-771 }, { 155,-771 }, { 156,-771 }, { 157,-771 }, + { 158,-771 }, { 159,-771 }, { 160,-771 }, { 161,-771 }, { 162,-771 }, + + { 163,-771 }, { 164,-771 }, { 165,-771 }, { 166,-771 }, { 167,-771 }, + { 168,-771 }, { 169,-771 }, { 170,-771 }, { 171,-771 }, { 172,-771 }, + { 173,-771 }, { 174,-771 }, { 175,-771 }, { 176,-771 }, { 177,-771 }, + { 178,-771 }, { 179,-771 }, { 180,-771 }, { 181,-771 }, { 182,-771 }, + { 183,-771 }, { 184,-771 }, { 185,-771 }, { 186,-771 }, { 187,-771 }, + { 188,-771 }, { 189,-771 }, { 190,-771 }, { 191,-771 }, { 192,-771 }, + { 193,-771 }, { 194,-771 }, { 195,-771 }, { 196,-771 }, { 197,-771 }, + { 198,-771 }, { 199,-771 }, { 200,-771 }, { 201,-771 }, { 202,-771 }, + { 203,-771 }, { 204,-771 }, { 205,-771 }, { 206,-771 }, { 207,-771 }, + { 208,-771 }, { 209,-771 }, { 210,-771 }, { 211,-771 }, { 212,-771 }, + + { 213,-771 }, { 214,-771 }, { 215,-771 }, { 216,-771 }, { 217,-771 }, + { 218,-771 }, { 219,-771 }, { 220,-771 }, { 221,-771 }, { 222,-771 }, + { 223,-771 }, { 224,-771 }, { 225,-771 }, { 226,-771 }, { 227,-771 }, + { 228,-771 }, { 229,-771 }, { 230,-771 }, { 231,-771 }, { 232,-771 }, + { 233,-771 }, { 234,-771 }, { 235,-771 }, { 236,-771 }, { 237,-771 }, + { 238,-771 }, { 239,-771 }, { 240,-771 }, { 241,-771 }, { 242,-771 }, + { 243,-771 }, { 244,-771 }, { 245,-771 }, { 246,-771 }, { 247,-771 }, + { 248,-771 }, { 249,-771 }, { 250,-771 }, { 251,-771 }, { 252,-771 }, + { 253,-771 }, { 254,-771 }, { 255,-771 }, { 0, 45 }, { 0,91095 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0,91089 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,91082 }, { 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, 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 }, { 48,-1028 }, { 49,-1028 }, { 50,-1028 }, + { 51,-1028 }, { 52,-1028 }, { 53,-1028 }, { 54,-1028 }, { 55,-1028 }, + + { 56,-1028 }, { 57,-1028 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-1028 }, + { 66,-1028 }, { 67,-1028 }, { 68,-1028 }, { 69,-1028 }, { 70,-1028 }, + { 71,-1028 }, { 72,-1028 }, { 73,-1028 }, { 74,-1028 }, { 75,-1028 }, + { 76,-1028 }, { 77,-1028 }, { 78,-1028 }, { 79,-1028 }, { 80,-1028 }, + { 81,-1028 }, { 82,-1028 }, { 83,-1028 }, { 84,-1028 }, { 85,-1028 }, + { 86,-1028 }, { 87,-1028 }, { 88,-1028 }, { 89,-1028 }, { 90,-1028 }, + { 85,1821 }, { 79,1816 }, { 0, 0 }, { 0, 0 }, { 95,-1028 }, + { 0, 0 }, { 97,-1028 }, { 98,-1028 }, { 99,-1028 }, { 100,-1028 }, + { 101,-1028 }, { 102,-1028 }, { 103,-1028 }, { 104,-1028 }, { 105,-1028 }, + + { 106,-1028 }, { 107,-1028 }, { 108,-1028 }, { 109,-1028 }, { 110,-1028 }, + { 111,-1028 }, { 112,-1028 }, { 113,-1028 }, { 114,-1028 }, { 115,-1028 }, + { 116,-1028 }, { 117,-1028 }, { 118,-1028 }, { 119,-1028 }, { 120,-1028 }, + { 121,-1028 }, { 122,-1028 }, { 117,1821 }, { 111,1816 }, { 0, 0 }, + { 0, 0 }, { 127,-1028 }, { 128,-1028 }, { 129,-1028 }, { 130,-1028 }, + { 131,-1028 }, { 132,-1028 }, { 133,-1028 }, { 134,-1028 }, { 135,-1028 }, + { 136,-1028 }, { 137,-1028 }, { 138,-1028 }, { 139,-1028 }, { 140,-1028 }, + { 141,-1028 }, { 142,-1028 }, { 143,-1028 }, { 144,-1028 }, { 145,-1028 }, + { 146,-1028 }, { 147,-1028 }, { 148,-1028 }, { 149,-1028 }, { 150,-1028 }, + { 151,-1028 }, { 152,-1028 }, { 153,-1028 }, { 154,-1028 }, { 155,-1028 }, + + { 156,-1028 }, { 157,-1028 }, { 158,-1028 }, { 159,-1028 }, { 160,-1028 }, + { 161,-1028 }, { 162,-1028 }, { 163,-1028 }, { 164,-1028 }, { 165,-1028 }, + { 166,-1028 }, { 167,-1028 }, { 168,-1028 }, { 169,-1028 }, { 170,-1028 }, + { 171,-1028 }, { 172,-1028 }, { 173,-1028 }, { 174,-1028 }, { 175,-1028 }, + { 176,-1028 }, { 177,-1028 }, { 178,-1028 }, { 179,-1028 }, { 180,-1028 }, + { 181,-1028 }, { 182,-1028 }, { 183,-1028 }, { 184,-1028 }, { 185,-1028 }, + { 186,-1028 }, { 187,-1028 }, { 188,-1028 }, { 189,-1028 }, { 190,-1028 }, + { 191,-1028 }, { 192,-1028 }, { 193,-1028 }, { 194,-1028 }, { 195,-1028 }, + { 196,-1028 }, { 197,-1028 }, { 198,-1028 }, { 199,-1028 }, { 200,-1028 }, + { 201,-1028 }, { 202,-1028 }, { 203,-1028 }, { 204,-1028 }, { 205,-1028 }, + + { 206,-1028 }, { 207,-1028 }, { 208,-1028 }, { 209,-1028 }, { 210,-1028 }, + { 211,-1028 }, { 212,-1028 }, { 213,-1028 }, { 214,-1028 }, { 215,-1028 }, + { 216,-1028 }, { 217,-1028 }, { 218,-1028 }, { 219,-1028 }, { 220,-1028 }, + { 221,-1028 }, { 222,-1028 }, { 223,-1028 }, { 224,-1028 }, { 225,-1028 }, + { 226,-1028 }, { 227,-1028 }, { 228,-1028 }, { 229,-1028 }, { 230,-1028 }, + { 231,-1028 }, { 232,-1028 }, { 233,-1028 }, { 234,-1028 }, { 235,-1028 }, + { 236,-1028 }, { 237,-1028 }, { 238,-1028 }, { 239,-1028 }, { 240,-1028 }, + { 241,-1028 }, { 242,-1028 }, { 243,-1028 }, { 244,-1028 }, { 245,-1028 }, + { 246,-1028 }, { 247,-1028 }, { 248,-1028 }, { 249,-1028 }, { 250,-1028 }, + { 251,-1028 }, { 252,-1028 }, { 253,-1028 }, { 254,-1028 }, { 255,-1028 }, + + { 0, 0 }, { 0,90838 }, { 1,-2825 }, { 2,-2825 }, { 3,-2825 }, + { 4,-2825 }, { 5,-2825 }, { 6,-2825 }, { 7,-2825 }, { 8,-2825 }, + { 9,-2825 }, { 10,-2825 }, { 11,-2825 }, { 12,-2825 }, { 13,-2825 }, + { 14,-2825 }, { 15,-2825 }, { 16,-2825 }, { 17,-2825 }, { 18,-2825 }, + { 19,-2825 }, { 20,-2825 }, { 21,-2825 }, { 22,-2825 }, { 23,-2825 }, + { 24,-2825 }, { 25,-2825 }, { 26,-2825 }, { 27,-2825 }, { 28,-2825 }, + { 29,-2825 }, { 30,-2825 }, { 31,-2825 }, { 32,-2825 }, { 33,-2825 }, + { 34,-2933 }, { 35,-2825 }, { 36,-2825 }, { 37,-2825 }, { 38,-2825 }, + { 39,-2825 }, { 40,-2825 }, { 41,-2825 }, { 42,-2825 }, { 43,-2825 }, + { 44,-2825 }, { 45,-2825 }, { 46,-2825 }, { 47,-2825 }, { 48,-2825 }, + + { 49,-2825 }, { 50,-2825 }, { 51,-2825 }, { 52,-2825 }, { 53,-2825 }, + { 54,-2825 }, { 55,-2825 }, { 56,-2825 }, { 57,-2825 }, { 58,-2825 }, + { 59,-2825 }, { 60,-2825 }, { 61,-2825 }, { 62,-2825 }, { 63,-2825 }, + { 64,-2825 }, { 65,-2825 }, { 66,-2825 }, { 67,-2825 }, { 68,-2825 }, + { 69,-2825 }, { 70,-2825 }, { 71,-2825 }, { 72,-2825 }, { 73,-2825 }, + { 74,-2825 }, { 75,-2825 }, { 76,-2825 }, { 77,-2825 }, { 78,-2825 }, + { 79,-2825 }, { 80,-2825 }, { 81,-2825 }, { 82,-2825 }, { 83,-2825 }, + { 84,-2825 }, { 85,-2825 }, { 86,-2825 }, { 87,-2825 }, { 88,-2825 }, + { 89,-2825 }, { 90,-2825 }, { 91,-2825 }, { 92,-2567 }, { 93,-2825 }, + { 94,-2825 }, { 95,-2825 }, { 96,-2825 }, { 97,-2825 }, { 98,-2825 }, + + { 99,-2825 }, { 100,-2825 }, { 101,-2825 }, { 102,-2825 }, { 103,-2825 }, + { 104,-2825 }, { 105,-2825 }, { 106,-2825 }, { 107,-2825 }, { 108,-2825 }, + { 109,-2825 }, { 110,-2825 }, { 111,-2825 }, { 112,-2825 }, { 113,-2825 }, + { 114,-2825 }, { 115,-2825 }, { 116,-2825 }, { 117,-2825 }, { 118,-2825 }, + { 119,-2825 }, { 120,-2825 }, { 121,-2825 }, { 122,-2825 }, { 123,-2825 }, + { 124,-2825 }, { 125,-2825 }, { 126,-2825 }, { 127,-2825 }, { 128,-2825 }, + { 129,-2825 }, { 130,-2825 }, { 131,-2825 }, { 132,-2825 }, { 133,-2825 }, + { 134,-2825 }, { 135,-2825 }, { 136,-2825 }, { 137,-2825 }, { 138,-2825 }, + { 139,-2825 }, { 140,-2825 }, { 141,-2825 }, { 142,-2825 }, { 143,-2825 }, + { 144,-2825 }, { 145,-2825 }, { 146,-2825 }, { 147,-2825 }, { 148,-2825 }, + + { 149,-2825 }, { 150,-2825 }, { 151,-2825 }, { 152,-2825 }, { 153,-2825 }, + { 154,-2825 }, { 155,-2825 }, { 156,-2825 }, { 157,-2825 }, { 158,-2825 }, + { 159,-2825 }, { 160,-2825 }, { 161,-2825 }, { 162,-2825 }, { 163,-2825 }, + { 164,-2825 }, { 165,-2825 }, { 166,-2825 }, { 167,-2825 }, { 168,-2825 }, + { 169,-2825 }, { 170,-2825 }, { 171,-2825 }, { 172,-2825 }, { 173,-2825 }, + { 174,-2825 }, { 175,-2825 }, { 176,-2825 }, { 177,-2825 }, { 178,-2825 }, + { 179,-2825 }, { 180,-2825 }, { 181,-2825 }, { 182,-2825 }, { 183,-2825 }, + { 184,-2825 }, { 185,-2825 }, { 186,-2825 }, { 187,-2825 }, { 188,-2825 }, + { 189,-2825 }, { 190,-2825 }, { 191,-2825 }, { 192,-2825 }, { 193,-2825 }, + { 194,-2825 }, { 195,-2825 }, { 196,-2825 }, { 197,-2825 }, { 198,-2825 }, + + { 199,-2825 }, { 200,-2825 }, { 201,-2825 }, { 202,-2825 }, { 203,-2825 }, + { 204,-2825 }, { 205,-2825 }, { 206,-2825 }, { 207,-2825 }, { 208,-2825 }, + { 209,-2825 }, { 210,-2825 }, { 211,-2825 }, { 212,-2825 }, { 213,-2825 }, + { 214,-2825 }, { 215,-2825 }, { 216,-2825 }, { 217,-2825 }, { 218,-2825 }, + { 219,-2825 }, { 220,-2825 }, { 221,-2825 }, { 222,-2825 }, { 223,-2825 }, + { 224,-2825 }, { 225,-2825 }, { 226,-2825 }, { 227,-2825 }, { 228,-2825 }, + { 229,-2825 }, { 230,-2825 }, { 231,-2825 }, { 232,-2825 }, { 233,-2825 }, + { 234,-2825 }, { 235,-2825 }, { 236,-2825 }, { 237,-2825 }, { 238,-2825 }, + { 239,-2825 }, { 240,-2825 }, { 241,-2825 }, { 242,-2825 }, { 243,-2825 }, + { 244,-2825 }, { 245,-2825 }, { 246,-2825 }, { 247,-2825 }, { 248,-2825 }, + + { 249,-2825 }, { 250,-2825 }, { 251,-2825 }, { 252,-2825 }, { 253,-2825 }, + { 254,-2825 }, { 255,-2825 }, { 256,-2825 }, { 0, 0 }, { 0,90580 }, + { 1,-2310 }, { 2,-2310 }, { 3,-2310 }, { 4,-2310 }, { 5,-2310 }, + { 6,-2310 }, { 7,-2310 }, { 8,-2310 }, { 9,-2310 }, { 10,-2310 }, + { 11,-2310 }, { 12,-2310 }, { 13,-2310 }, { 14,-2310 }, { 15,-2310 }, + { 16,-2310 }, { 17,-2310 }, { 18,-2310 }, { 19,-2310 }, { 20,-2310 }, + { 21,-2310 }, { 22,-2310 }, { 23,-2310 }, { 24,-2310 }, { 25,-2310 }, + { 26,-2310 }, { 27,-2310 }, { 28,-2310 }, { 29,-2310 }, { 30,-2310 }, + { 31,-2310 }, { 32,-2310 }, { 33,-2310 }, { 34,-2310 }, { 35,-2310 }, + { 36,-2310 }, { 37,-2310 }, { 38,-2310 }, { 39,-3191 }, { 40,-2310 }, + + { 41,-2310 }, { 42,-2310 }, { 43,-2310 }, { 44,-2310 }, { 45,-2310 }, + { 46,-2310 }, { 47,-2310 }, { 48,-2310 }, { 49,-2310 }, { 50,-2310 }, + { 51,-2310 }, { 52,-2310 }, { 53,-2310 }, { 54,-2310 }, { 55,-2310 }, + { 56,-2310 }, { 57,-2310 }, { 58,-2310 }, { 59,-2310 }, { 60,-2310 }, + { 61,-2310 }, { 62,-2310 }, { 63,-2310 }, { 64,-2310 }, { 65,-2310 }, + { 66,-2310 }, { 67,-2310 }, { 68,-2310 }, { 69,-2310 }, { 70,-2310 }, + { 71,-2310 }, { 72,-2310 }, { 73,-2310 }, { 74,-2310 }, { 75,-2310 }, + { 76,-2310 }, { 77,-2310 }, { 78,-2310 }, { 79,-2310 }, { 80,-2310 }, + { 81,-2310 }, { 82,-2310 }, { 83,-2310 }, { 84,-2310 }, { 85,-2310 }, + { 86,-2310 }, { 87,-2310 }, { 88,-2310 }, { 89,-2310 }, { 90,-2310 }, + + { 91,-2310 }, { 92,-2052 }, { 93,-2310 }, { 94,-2310 }, { 95,-2310 }, + { 96,-2310 }, { 97,-2310 }, { 98,-2310 }, { 99,-2310 }, { 100,-2310 }, + { 101,-2310 }, { 102,-2310 }, { 103,-2310 }, { 104,-2310 }, { 105,-2310 }, + { 106,-2310 }, { 107,-2310 }, { 108,-2310 }, { 109,-2310 }, { 110,-2310 }, + { 111,-2310 }, { 112,-2310 }, { 113,-2310 }, { 114,-2310 }, { 115,-2310 }, + { 116,-2310 }, { 117,-2310 }, { 118,-2310 }, { 119,-2310 }, { 120,-2310 }, + { 121,-2310 }, { 122,-2310 }, { 123,-2310 }, { 124,-2310 }, { 125,-2310 }, + { 126,-2310 }, { 127,-2310 }, { 128,-2310 }, { 129,-2310 }, { 130,-2310 }, + { 131,-2310 }, { 132,-2310 }, { 133,-2310 }, { 134,-2310 }, { 135,-2310 }, + { 136,-2310 }, { 137,-2310 }, { 138,-2310 }, { 139,-2310 }, { 140,-2310 }, + + { 141,-2310 }, { 142,-2310 }, { 143,-2310 }, { 144,-2310 }, { 145,-2310 }, + { 146,-2310 }, { 147,-2310 }, { 148,-2310 }, { 149,-2310 }, { 150,-2310 }, + { 151,-2310 }, { 152,-2310 }, { 153,-2310 }, { 154,-2310 }, { 155,-2310 }, + { 156,-2310 }, { 157,-2310 }, { 158,-2310 }, { 159,-2310 }, { 160,-2310 }, + { 161,-2310 }, { 162,-2310 }, { 163,-2310 }, { 164,-2310 }, { 165,-2310 }, + { 166,-2310 }, { 167,-2310 }, { 168,-2310 }, { 169,-2310 }, { 170,-2310 }, + { 171,-2310 }, { 172,-2310 }, { 173,-2310 }, { 174,-2310 }, { 175,-2310 }, + { 176,-2310 }, { 177,-2310 }, { 178,-2310 }, { 179,-2310 }, { 180,-2310 }, + { 181,-2310 }, { 182,-2310 }, { 183,-2310 }, { 184,-2310 }, { 185,-2310 }, + { 186,-2310 }, { 187,-2310 }, { 188,-2310 }, { 189,-2310 }, { 190,-2310 }, + + { 191,-2310 }, { 192,-2310 }, { 193,-2310 }, { 194,-2310 }, { 195,-2310 }, + { 196,-2310 }, { 197,-2310 }, { 198,-2310 }, { 199,-2310 }, { 200,-2310 }, + { 201,-2310 }, { 202,-2310 }, { 203,-2310 }, { 204,-2310 }, { 205,-2310 }, + { 206,-2310 }, { 207,-2310 }, { 208,-2310 }, { 209,-2310 }, { 210,-2310 }, + { 211,-2310 }, { 212,-2310 }, { 213,-2310 }, { 214,-2310 }, { 215,-2310 }, + { 216,-2310 }, { 217,-2310 }, { 218,-2310 }, { 219,-2310 }, { 220,-2310 }, + { 221,-2310 }, { 222,-2310 }, { 223,-2310 }, { 224,-2310 }, { 225,-2310 }, + { 226,-2310 }, { 227,-2310 }, { 228,-2310 }, { 229,-2310 }, { 230,-2310 }, + { 231,-2310 }, { 232,-2310 }, { 233,-2310 }, { 234,-2310 }, { 235,-2310 }, + { 236,-2310 }, { 237,-2310 }, { 238,-2310 }, { 239,-2310 }, { 240,-2310 }, + + { 241,-2310 }, { 242,-2310 }, { 243,-2310 }, { 244,-2310 }, { 245,-2310 }, + { 246,-2310 }, { 247,-2310 }, { 248,-2310 }, { 249,-2310 }, { 250,-2310 }, + { 251,-2310 }, { 252,-2310 }, { 253,-2310 }, { 254,-2310 }, { 255,-2310 }, + { 256,-2310 }, { 0, 131 }, { 0,90322 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,90315 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,90304 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,90294 }, { 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, 0 }, { 0, 0 }, + { 48,-1801 }, { 49,-1801 }, { 50,-1801 }, { 51,-1801 }, { 52,-1801 }, + { 53,-1801 }, { 54,-1801 }, { 55,-1801 }, { 56,-1801 }, { 57,-1801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-1801 }, { 66,-1801 }, { 67,-1801 }, + { 68,-1801 }, { 69,13982 }, { 70,-1801 }, { 71,-1801 }, { 72,-1801 }, + { 73,-1801 }, { 74,-1801 }, { 75,-1801 }, { 76,-1801 }, { 77,-1801 }, + { 78,-1801 }, { 79,-1801 }, { 80,-1801 }, { 81,-1801 }, { 82,-1801 }, + + { 83,-1801 }, { 84,-1801 }, { 85,-1801 }, { 86,-1801 }, { 87,-1801 }, + { 88,-1801 }, { 89,-1801 }, { 90,-1801 }, { 84,28110 }, { 74,1289 }, + { 65,1529 }, { 0, 0 }, { 95,-1801 }, { 0, 0 }, { 97,-1801 }, + { 98,-1801 }, { 99,-1801 }, { 100,-1801 }, { 101,13982 }, { 102,-1801 }, + { 103,-1801 }, { 104,-1801 }, { 105,-1801 }, { 106,-1801 }, { 107,-1801 }, + { 108,-1801 }, { 109,-1801 }, { 110,-1801 }, { 111,-1801 }, { 112,-1801 }, + { 113,-1801 }, { 114,-1801 }, { 115,-1801 }, { 116,-1801 }, { 117,-1801 }, + { 118,-1801 }, { 119,-1801 }, { 120,-1801 }, { 121,-1801 }, { 122,-1801 }, + { 116,28110 }, { 106,1289 }, { 97,1529 }, { 0, 0 }, { 127,-1801 }, + { 128,-1801 }, { 129,-1801 }, { 130,-1801 }, { 131,-1801 }, { 132,-1801 }, + + { 133,-1801 }, { 134,-1801 }, { 135,-1801 }, { 136,-1801 }, { 137,-1801 }, + { 138,-1801 }, { 139,-1801 }, { 140,-1801 }, { 141,-1801 }, { 142,-1801 }, + { 143,-1801 }, { 144,-1801 }, { 145,-1801 }, { 146,-1801 }, { 147,-1801 }, + { 148,-1801 }, { 149,-1801 }, { 150,-1801 }, { 151,-1801 }, { 152,-1801 }, + { 153,-1801 }, { 154,-1801 }, { 155,-1801 }, { 156,-1801 }, { 157,-1801 }, + { 158,-1801 }, { 159,-1801 }, { 160,-1801 }, { 161,-1801 }, { 162,-1801 }, + { 163,-1801 }, { 164,-1801 }, { 165,-1801 }, { 166,-1801 }, { 167,-1801 }, + { 168,-1801 }, { 169,-1801 }, { 170,-1801 }, { 171,-1801 }, { 172,-1801 }, + { 173,-1801 }, { 174,-1801 }, { 175,-1801 }, { 176,-1801 }, { 177,-1801 }, + { 178,-1801 }, { 179,-1801 }, { 180,-1801 }, { 181,-1801 }, { 182,-1801 }, + + { 183,-1801 }, { 184,-1801 }, { 185,-1801 }, { 186,-1801 }, { 187,-1801 }, + { 188,-1801 }, { 189,-1801 }, { 190,-1801 }, { 191,-1801 }, { 192,-1801 }, + { 193,-1801 }, { 194,-1801 }, { 195,-1801 }, { 196,-1801 }, { 197,-1801 }, + { 198,-1801 }, { 199,-1801 }, { 200,-1801 }, { 201,-1801 }, { 202,-1801 }, + { 203,-1801 }, { 204,-1801 }, { 205,-1801 }, { 206,-1801 }, { 207,-1801 }, + { 208,-1801 }, { 209,-1801 }, { 210,-1801 }, { 211,-1801 }, { 212,-1801 }, + { 213,-1801 }, { 214,-1801 }, { 215,-1801 }, { 216,-1801 }, { 217,-1801 }, + { 218,-1801 }, { 219,-1801 }, { 220,-1801 }, { 221,-1801 }, { 222,-1801 }, + { 223,-1801 }, { 224,-1801 }, { 225,-1801 }, { 226,-1801 }, { 227,-1801 }, + { 228,-1801 }, { 229,-1801 }, { 230,-1801 }, { 231,-1801 }, { 232,-1801 }, + + { 233,-1801 }, { 234,-1801 }, { 235,-1801 }, { 236,-1801 }, { 237,-1801 }, + { 238,-1801 }, { 239,-1801 }, { 240,-1801 }, { 241,-1801 }, { 242,-1801 }, + { 243,-1801 }, { 244,-1801 }, { 245,-1801 }, { 246,-1801 }, { 247,-1801 }, + { 248,-1801 }, { 249,-1801 }, { 250,-1801 }, { 251,-1801 }, { 252,-1801 }, + { 253,-1801 }, { 254,-1801 }, { 255,-1801 }, { 0, 131 }, { 0,90065 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,90056 }, { 0, 0 }, + { 0,90054 }, { 0, 119 }, { 0,90052 }, { 0, 0 }, { 0,90050 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,1296 }, { 10,1296 }, + + { 0, 0 }, { 0, 0 }, { 13,1296 }, { 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, 129 }, { 0,90021 }, { 0, 0 }, + { 0, 0 }, { 32,1296 }, { 48,-2058 }, { 49,-2058 }, { 50,-2058 }, + { 51,-2058 }, { 52,-2058 }, { 53,-2058 }, { 54,-2058 }, { 55,-2058 }, + { 56,-2058 }, { 57,-2058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-2058 }, + { 66,-2058 }, { 67,-2058 }, { 68,-2058 }, { 69,-2058 }, { 70,-2058 }, + { 71,-2058 }, { 72,-2058 }, { 73,-2058 }, { 74,-2058 }, { 75,-2058 }, + + { 76,13982 }, { 77,-2058 }, { 78,-2058 }, { 79,-2058 }, { 80,-2058 }, + { 81,-2058 }, { 82,-2058 }, { 83,14239 }, { 84,14496 }, { 85,-2058 }, + { 86,-2058 }, { 87,-2058 }, { 88,-2058 }, { 89,-2058 }, { 90,-2058 }, + { 82,1295 }, { 48, 0 }, { 49, 0 }, { 83,1298 }, { 95,-2058 }, + { 0, 0 }, { 97,-2058 }, { 98,-2058 }, { 99,-2058 }, { 100,-2058 }, + { 101,-2058 }, { 102,-2058 }, { 103,-2058 }, { 104,-2058 }, { 105,-2058 }, + { 106,-2058 }, { 107,-2058 }, { 108,13982 }, { 109,-2058 }, { 110,-2058 }, + { 111,-2058 }, { 112,-2058 }, { 113,-2058 }, { 114,-2058 }, { 115,14239 }, + { 116,14496 }, { 117,-2058 }, { 118,-2058 }, { 119,-2058 }, { 120,-2058 }, + { 121,-2058 }, { 122,-2058 }, { 114,1295 }, { 0, 0 }, { 0, 0 }, + + { 115,1298 }, { 127,-2058 }, { 128,-2058 }, { 129,-2058 }, { 130,-2058 }, + { 131,-2058 }, { 132,-2058 }, { 133,-2058 }, { 134,-2058 }, { 135,-2058 }, + { 136,-2058 }, { 137,-2058 }, { 138,-2058 }, { 139,-2058 }, { 140,-2058 }, + { 141,-2058 }, { 142,-2058 }, { 143,-2058 }, { 144,-2058 }, { 145,-2058 }, + { 146,-2058 }, { 147,-2058 }, { 148,-2058 }, { 149,-2058 }, { 150,-2058 }, + { 151,-2058 }, { 152,-2058 }, { 153,-2058 }, { 154,-2058 }, { 155,-2058 }, + { 156,-2058 }, { 157,-2058 }, { 158,-2058 }, { 159,-2058 }, { 160,-2058 }, + { 161,-2058 }, { 162,-2058 }, { 163,-2058 }, { 164,-2058 }, { 165,-2058 }, + { 166,-2058 }, { 167,-2058 }, { 168,-2058 }, { 169,-2058 }, { 170,-2058 }, + { 171,-2058 }, { 172,-2058 }, { 173,-2058 }, { 174,-2058 }, { 175,-2058 }, + + { 176,-2058 }, { 177,-2058 }, { 178,-2058 }, { 179,-2058 }, { 180,-2058 }, + { 181,-2058 }, { 182,-2058 }, { 183,-2058 }, { 184,-2058 }, { 185,-2058 }, + { 186,-2058 }, { 187,-2058 }, { 188,-2058 }, { 189,-2058 }, { 190,-2058 }, + { 191,-2058 }, { 192,-2058 }, { 193,-2058 }, { 194,-2058 }, { 195,-2058 }, + { 196,-2058 }, { 197,-2058 }, { 198,-2058 }, { 199,-2058 }, { 200,-2058 }, + { 201,-2058 }, { 202,-2058 }, { 203,-2058 }, { 204,-2058 }, { 205,-2058 }, + { 206,-2058 }, { 207,-2058 }, { 208,-2058 }, { 209,-2058 }, { 210,-2058 }, + { 211,-2058 }, { 212,-2058 }, { 213,-2058 }, { 214,-2058 }, { 215,-2058 }, + { 216,-2058 }, { 217,-2058 }, { 218,-2058 }, { 219,-2058 }, { 220,-2058 }, + { 221,-2058 }, { 222,-2058 }, { 223,-2058 }, { 224,-2058 }, { 225,-2058 }, + + { 226,-2058 }, { 227,-2058 }, { 228,-2058 }, { 229,-2058 }, { 230,-2058 }, + { 231,-2058 }, { 232,-2058 }, { 233,-2058 }, { 234,-2058 }, { 235,-2058 }, + { 236,-2058 }, { 237,-2058 }, { 238,-2058 }, { 239,-2058 }, { 240,-2058 }, + { 241,-2058 }, { 242,-2058 }, { 243,-2058 }, { 244,-2058 }, { 245,-2058 }, + { 246,-2058 }, { 247,-2058 }, { 248,-2058 }, { 249,-2058 }, { 250,-2058 }, + { 251,-2058 }, { 252,-2058 }, { 253,-2058 }, { 254,-2058 }, { 255,-2058 }, + { 0, 131 }, { 0,89808 }, { 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, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,89784 }, { 0, 135 }, { 0,89782 }, { 0, 101 }, { 0,89780 }, + { 0, 121 }, { 0,89778 }, { 0, 107 }, { 0,89776 }, { 0, 102 }, + { 0,89774 }, { 9,1270 }, { 0, 5 }, { 0,89771 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-2315 }, + { 49,-2315 }, { 50,-2315 }, { 51,-2315 }, { 52,-2315 }, { 53,-2315 }, + { 54,-2315 }, { 55,-2315 }, { 56,-2315 }, { 57,-2315 }, { 32,1270 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,14496 }, { 66,-2315 }, { 67,-2315 }, { 68,-2315 }, + + { 69,-2315 }, { 70,-2315 }, { 71,-2315 }, { 72,-2315 }, { 73,-2315 }, + { 74,-2315 }, { 75,-2315 }, { 76,-2315 }, { 77,-2315 }, { 78,-2315 }, + { 79,14753 }, { 80,-2315 }, { 81,-2315 }, { 82,-2315 }, { 83,-2315 }, + { 84,-2315 }, { 85,-2315 }, { 86,-2315 }, { 87,-2315 }, { 88,-2315 }, + { 89,-2315 }, { 90,-2315 }, { 67,1270 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-2315 }, { 0, 0 }, { 97,14496 }, { 98,-2315 }, + { 99,-2315 }, { 100,-2315 }, { 101,-2315 }, { 102,-2315 }, { 103,-2315 }, + { 104,-2315 }, { 105,-2315 }, { 106,-2315 }, { 107,-2315 }, { 108,-2315 }, + { 109,-2315 }, { 110,-2315 }, { 111,14753 }, { 112,-2315 }, { 113,-2315 }, + { 114,-2315 }, { 115,-2315 }, { 116,-2315 }, { 117,-2315 }, { 118,-2315 }, + + { 119,-2315 }, { 120,-2315 }, { 121,-2315 }, { 122,-2315 }, { 99,1270 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-2315 }, { 128,-2315 }, + { 129,-2315 }, { 130,-2315 }, { 131,-2315 }, { 132,-2315 }, { 133,-2315 }, + { 134,-2315 }, { 135,-2315 }, { 136,-2315 }, { 137,-2315 }, { 138,-2315 }, + { 139,-2315 }, { 140,-2315 }, { 141,-2315 }, { 142,-2315 }, { 143,-2315 }, + { 144,-2315 }, { 145,-2315 }, { 146,-2315 }, { 147,-2315 }, { 148,-2315 }, + { 149,-2315 }, { 150,-2315 }, { 151,-2315 }, { 152,-2315 }, { 153,-2315 }, + { 154,-2315 }, { 155,-2315 }, { 156,-2315 }, { 157,-2315 }, { 158,-2315 }, + { 159,-2315 }, { 160,-2315 }, { 161,-2315 }, { 162,-2315 }, { 163,-2315 }, + { 164,-2315 }, { 165,-2315 }, { 166,-2315 }, { 167,-2315 }, { 168,-2315 }, + + { 169,-2315 }, { 170,-2315 }, { 171,-2315 }, { 172,-2315 }, { 173,-2315 }, + { 174,-2315 }, { 175,-2315 }, { 176,-2315 }, { 177,-2315 }, { 178,-2315 }, + { 179,-2315 }, { 180,-2315 }, { 181,-2315 }, { 182,-2315 }, { 183,-2315 }, + { 184,-2315 }, { 185,-2315 }, { 186,-2315 }, { 187,-2315 }, { 188,-2315 }, + { 189,-2315 }, { 190,-2315 }, { 191,-2315 }, { 192,-2315 }, { 193,-2315 }, + { 194,-2315 }, { 195,-2315 }, { 196,-2315 }, { 197,-2315 }, { 198,-2315 }, + { 199,-2315 }, { 200,-2315 }, { 201,-2315 }, { 202,-2315 }, { 203,-2315 }, + { 204,-2315 }, { 205,-2315 }, { 206,-2315 }, { 207,-2315 }, { 208,-2315 }, + { 209,-2315 }, { 210,-2315 }, { 211,-2315 }, { 212,-2315 }, { 213,-2315 }, + { 214,-2315 }, { 215,-2315 }, { 216,-2315 }, { 217,-2315 }, { 218,-2315 }, + + { 219,-2315 }, { 220,-2315 }, { 221,-2315 }, { 222,-2315 }, { 223,-2315 }, + { 224,-2315 }, { 225,-2315 }, { 226,-2315 }, { 227,-2315 }, { 228,-2315 }, + { 229,-2315 }, { 230,-2315 }, { 231,-2315 }, { 232,-2315 }, { 233,-2315 }, + { 234,-2315 }, { 235,-2315 }, { 236,-2315 }, { 237,-2315 }, { 238,-2315 }, + { 239,-2315 }, { 240,-2315 }, { 241,-2315 }, { 242,-2315 }, { 243,-2315 }, + { 244,-2315 }, { 245,-2315 }, { 246,-2315 }, { 247,-2315 }, { 248,-2315 }, + { 249,-2315 }, { 250,-2315 }, { 251,-2315 }, { 252,-2315 }, { 253,-2315 }, + { 254,-2315 }, { 255,-2315 }, { 0, 131 }, { 0,89551 }, { 0, 5 }, + { 0,89549 }, { 0, 0 }, { 0,89547 }, { 0, 136 }, { 0,89545 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,89540 }, + + { 10,-222 }, { 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,89524 }, { 0, 0 }, { 0,89522 }, { 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, 0 }, { 48,-2572 }, { 49,-2572 }, { 50,-2572 }, { 51,-2572 }, + { 52,-2572 }, { 53,-2572 }, { 54,-2572 }, { 55,-2572 }, { 56,-2572 }, + { 57,-2572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 60,-235 }, { 65,-2572 }, { 66,-2572 }, + { 67,-2572 }, { 68,-2572 }, { 69,-2572 }, { 70,-2572 }, { 71,-2572 }, + { 72,-2572 }, { 73,-2572 }, { 74,-2572 }, { 75,-2572 }, { 76,-2572 }, + { 77,-2572 }, { 78,14753 }, { 79,-2572 }, { 80,-2572 }, { 81,-2572 }, + { 82,-2572 }, { 83,-2572 }, { 84,-2572 }, { 85,-2572 }, { 86,-2572 }, + { 87,-2572 }, { 88,-2572 }, { 89,-2572 }, { 90,-2572 }, { 80,1030 }, + { 65,1260 }, { 0, 0 }, { 65,1266 }, { 95,-2572 }, { 0, 0 }, + { 97,-2572 }, { 98,-2572 }, { 99,-2572 }, { 100,-2572 }, { 101,-2572 }, + { 102,-2572 }, { 103,-2572 }, { 104,-2572 }, { 105,-2572 }, { 106,-2572 }, + { 107,-2572 }, { 108,-2572 }, { 109,-2572 }, { 110,14753 }, { 111,-2572 }, + + { 112,-2572 }, { 113,-2572 }, { 114,-2572 }, { 115,-2572 }, { 116,-2572 }, + { 117,-2572 }, { 118,-2572 }, { 119,-2572 }, { 120,-2572 }, { 121,-2572 }, + { 122,-2572 }, { 112,1030 }, { 97,1260 }, { 0, 0 }, { 97,1266 }, + { 127,-2572 }, { 128,-2572 }, { 129,-2572 }, { 130,-2572 }, { 131,-2572 }, + { 132,-2572 }, { 133,-2572 }, { 134,-2572 }, { 135,-2572 }, { 136,-2572 }, + { 137,-2572 }, { 138,-2572 }, { 139,-2572 }, { 140,-2572 }, { 141,-2572 }, + { 142,-2572 }, { 143,-2572 }, { 144,-2572 }, { 145,-2572 }, { 146,-2572 }, + { 147,-2572 }, { 148,-2572 }, { 149,-2572 }, { 150,-2572 }, { 151,-2572 }, + { 152,-2572 }, { 153,-2572 }, { 154,-2572 }, { 155,-2572 }, { 156,-2572 }, + { 157,-2572 }, { 158,-2572 }, { 159,-2572 }, { 160,-2572 }, { 161,-2572 }, + + { 162,-2572 }, { 163,-2572 }, { 164,-2572 }, { 165,-2572 }, { 166,-2572 }, + { 167,-2572 }, { 168,-2572 }, { 169,-2572 }, { 170,-2572 }, { 171,-2572 }, + { 172,-2572 }, { 173,-2572 }, { 174,-2572 }, { 175,-2572 }, { 176,-2572 }, + { 177,-2572 }, { 178,-2572 }, { 179,-2572 }, { 180,-2572 }, { 181,-2572 }, + { 182,-2572 }, { 183,-2572 }, { 184,-2572 }, { 185,-2572 }, { 186,-2572 }, + { 187,-2572 }, { 188,-2572 }, { 189,-2572 }, { 190,-2572 }, { 191,-2572 }, + { 192,-2572 }, { 193,-2572 }, { 194,-2572 }, { 195,-2572 }, { 196,-2572 }, + { 197,-2572 }, { 198,-2572 }, { 199,-2572 }, { 200,-2572 }, { 201,-2572 }, + { 202,-2572 }, { 203,-2572 }, { 204,-2572 }, { 205,-2572 }, { 206,-2572 }, + { 207,-2572 }, { 208,-2572 }, { 209,-2572 }, { 210,-2572 }, { 211,-2572 }, + + { 212,-2572 }, { 213,-2572 }, { 214,-2572 }, { 215,-2572 }, { 216,-2572 }, + { 217,-2572 }, { 218,-2572 }, { 219,-2572 }, { 220,-2572 }, { 221,-2572 }, + { 222,-2572 }, { 223,-2572 }, { 224,-2572 }, { 225,-2572 }, { 226,-2572 }, + { 227,-2572 }, { 228,-2572 }, { 229,-2572 }, { 230,-2572 }, { 231,-2572 }, + { 232,-2572 }, { 233,-2572 }, { 234,-2572 }, { 235,-2572 }, { 236,-2572 }, + { 237,-2572 }, { 238,-2572 }, { 239,-2572 }, { 240,-2572 }, { 241,-2572 }, + { 242,-2572 }, { 243,-2572 }, { 244,-2572 }, { 245,-2572 }, { 246,-2572 }, + { 247,-2572 }, { 248,-2572 }, { 249,-2572 }, { 250,-2572 }, { 251,-2572 }, + { 252,-2572 }, { 253,-2572 }, { 254,-2572 }, { 255,-2572 }, { 0, 131 }, + { 0,89294 }, { 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,89279 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,89268 }, { 0, 0 }, { 0,89266 }, { 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, 0 }, { 0, 0 }, { 48,-2829 }, { 49,-2829 }, + { 50,-2829 }, { 51,-2829 }, { 52,-2829 }, { 53,-2829 }, { 54,-2829 }, + + { 55,-2829 }, { 56,-2829 }, { 57,-2829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-2829 }, { 66,-2829 }, { 67,14753 }, { 68,-2829 }, { 69,-2829 }, + { 70,15010 }, { 71,-2829 }, { 72,-2829 }, { 73,-2829 }, { 74,-2829 }, + { 75,-2829 }, { 76,-2829 }, { 77,-2829 }, { 78,-2829 }, { 79,-2829 }, + { 80,-2829 }, { 81,-2829 }, { 82,-2829 }, { 83,-2829 }, { 84,-2829 }, + { 85,-2829 }, { 86,-2829 }, { 87,-2829 }, { 88,-2829 }, { 89,-2829 }, + { 90,-2829 }, { 76,41728 }, { 66,1019 }, { 65,1264 }, { 0, 0 }, + { 95,-2829 }, { 0, 0 }, { 97,-2829 }, { 98,-2829 }, { 99,14753 }, + { 100,-2829 }, { 101,-2829 }, { 102,15010 }, { 103,-2829 }, { 104,-2829 }, + + { 105,-2829 }, { 106,-2829 }, { 107,-2829 }, { 108,-2829 }, { 109,-2829 }, + { 110,-2829 }, { 111,-2829 }, { 112,-2829 }, { 113,-2829 }, { 114,-2829 }, + { 115,-2829 }, { 116,-2829 }, { 117,-2829 }, { 118,-2829 }, { 119,-2829 }, + { 120,-2829 }, { 121,-2829 }, { 122,-2829 }, { 108,41728 }, { 98,1019 }, + { 97,1264 }, { 0, 0 }, { 127,-2829 }, { 128,-2829 }, { 129,-2829 }, + { 130,-2829 }, { 131,-2829 }, { 132,-2829 }, { 133,-2829 }, { 134,-2829 }, + { 135,-2829 }, { 136,-2829 }, { 137,-2829 }, { 138,-2829 }, { 139,-2829 }, + { 140,-2829 }, { 141,-2829 }, { 142,-2829 }, { 143,-2829 }, { 144,-2829 }, + { 145,-2829 }, { 146,-2829 }, { 147,-2829 }, { 148,-2829 }, { 149,-2829 }, + { 150,-2829 }, { 151,-2829 }, { 152,-2829 }, { 153,-2829 }, { 154,-2829 }, + + { 155,-2829 }, { 156,-2829 }, { 157,-2829 }, { 158,-2829 }, { 159,-2829 }, + { 160,-2829 }, { 161,-2829 }, { 162,-2829 }, { 163,-2829 }, { 164,-2829 }, + { 165,-2829 }, { 166,-2829 }, { 167,-2829 }, { 168,-2829 }, { 169,-2829 }, + { 170,-2829 }, { 171,-2829 }, { 172,-2829 }, { 173,-2829 }, { 174,-2829 }, + { 175,-2829 }, { 176,-2829 }, { 177,-2829 }, { 178,-2829 }, { 179,-2829 }, + { 180,-2829 }, { 181,-2829 }, { 182,-2829 }, { 183,-2829 }, { 184,-2829 }, + { 185,-2829 }, { 186,-2829 }, { 187,-2829 }, { 188,-2829 }, { 189,-2829 }, + { 190,-2829 }, { 191,-2829 }, { 192,-2829 }, { 193,-2829 }, { 194,-2829 }, + { 195,-2829 }, { 196,-2829 }, { 197,-2829 }, { 198,-2829 }, { 199,-2829 }, + { 200,-2829 }, { 201,-2829 }, { 202,-2829 }, { 203,-2829 }, { 204,-2829 }, + + { 205,-2829 }, { 206,-2829 }, { 207,-2829 }, { 208,-2829 }, { 209,-2829 }, + { 210,-2829 }, { 211,-2829 }, { 212,-2829 }, { 213,-2829 }, { 214,-2829 }, + { 215,-2829 }, { 216,-2829 }, { 217,-2829 }, { 218,-2829 }, { 219,-2829 }, + { 220,-2829 }, { 221,-2829 }, { 222,-2829 }, { 223,-2829 }, { 224,-2829 }, + { 225,-2829 }, { 226,-2829 }, { 227,-2829 }, { 228,-2829 }, { 229,-2829 }, + { 230,-2829 }, { 231,-2829 }, { 232,-2829 }, { 233,-2829 }, { 234,-2829 }, + { 235,-2829 }, { 236,-2829 }, { 237,-2829 }, { 238,-2829 }, { 239,-2829 }, + { 240,-2829 }, { 241,-2829 }, { 242,-2829 }, { 243,-2829 }, { 244,-2829 }, + { 245,-2829 }, { 246,-2829 }, { 247,-2829 }, { 248,-2829 }, { 249,-2829 }, + { 250,-2829 }, { 251,-2829 }, { 252,-2829 }, { 253,-2829 }, { 254,-2829 }, + + { 255,-2829 }, { 0, 36 }, { 0,89037 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,89015 }, + { 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, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-3086 }, { 49,-3086 }, { 50,-3086 }, { 51,-3086 }, { 52,-3086 }, + { 53,-3086 }, { 54,-3086 }, { 55,-3086 }, { 56,-3086 }, { 57,-3086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-3086 }, { 66,-3086 }, { 67,-3086 }, + { 68,-3086 }, { 69,-3086 }, { 70,-3086 }, { 71,-3086 }, { 72,-3086 }, + { 73,-3086 }, { 74,-3086 }, { 75,-3086 }, { 76,-3086 }, { 77,-3086 }, + { 78,-3086 }, { 79,-3086 }, { 80,-3086 }, { 81,-3086 }, { 82,-3086 }, + { 83,-3086 }, { 84,-3086 }, { 85,-3086 }, { 86,-3086 }, { 87,-3086 }, + { 88,-3086 }, { 89,-3086 }, { 90,-3086 }, { 69,1288 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-3086 }, { 0, 0 }, { 97,-3086 }, + + { 98,-3086 }, { 99,-3086 }, { 100,-3086 }, { 101,-3086 }, { 102,-3086 }, + { 103,-3086 }, { 104,-3086 }, { 105,-3086 }, { 106,-3086 }, { 107,-3086 }, + { 108,-3086 }, { 109,-3086 }, { 110,-3086 }, { 111,-3086 }, { 112,-3086 }, + { 113,-3086 }, { 114,-3086 }, { 115,-3086 }, { 116,-3086 }, { 117,-3086 }, + { 118,-3086 }, { 119,-3086 }, { 120,-3086 }, { 121,-3086 }, { 122,-3086 }, + { 101,1288 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-3086 }, + { 128,-3086 }, { 129,-3086 }, { 130,-3086 }, { 131,-3086 }, { 132,-3086 }, + { 133,-3086 }, { 134,-3086 }, { 135,-3086 }, { 136,-3086 }, { 137,-3086 }, + { 138,-3086 }, { 139,-3086 }, { 140,-3086 }, { 141,-3086 }, { 142,-3086 }, + { 143,-3086 }, { 144,-3086 }, { 145,-3086 }, { 146,-3086 }, { 147,-3086 }, + + { 148,-3086 }, { 149,-3086 }, { 150,-3086 }, { 151,-3086 }, { 152,-3086 }, + { 153,-3086 }, { 154,-3086 }, { 155,-3086 }, { 156,-3086 }, { 157,-3086 }, + { 158,-3086 }, { 159,-3086 }, { 160,-3086 }, { 161,-3086 }, { 162,-3086 }, + { 163,-3086 }, { 164,-3086 }, { 165,-3086 }, { 166,-3086 }, { 167,-3086 }, + { 168,-3086 }, { 169,-3086 }, { 170,-3086 }, { 171,-3086 }, { 172,-3086 }, + { 173,-3086 }, { 174,-3086 }, { 175,-3086 }, { 176,-3086 }, { 177,-3086 }, + { 178,-3086 }, { 179,-3086 }, { 180,-3086 }, { 181,-3086 }, { 182,-3086 }, + { 183,-3086 }, { 184,-3086 }, { 185,-3086 }, { 186,-3086 }, { 187,-3086 }, + { 188,-3086 }, { 189,-3086 }, { 190,-3086 }, { 191,-3086 }, { 192,-3086 }, + { 193,-3086 }, { 194,-3086 }, { 195,-3086 }, { 196,-3086 }, { 197,-3086 }, + + { 198,-3086 }, { 199,-3086 }, { 200,-3086 }, { 201,-3086 }, { 202,-3086 }, + { 203,-3086 }, { 204,-3086 }, { 205,-3086 }, { 206,-3086 }, { 207,-3086 }, + { 208,-3086 }, { 209,-3086 }, { 210,-3086 }, { 211,-3086 }, { 212,-3086 }, + { 213,-3086 }, { 214,-3086 }, { 215,-3086 }, { 216,-3086 }, { 217,-3086 }, + { 218,-3086 }, { 219,-3086 }, { 220,-3086 }, { 221,-3086 }, { 222,-3086 }, + { 223,-3086 }, { 224,-3086 }, { 225,-3086 }, { 226,-3086 }, { 227,-3086 }, + { 228,-3086 }, { 229,-3086 }, { 230,-3086 }, { 231,-3086 }, { 232,-3086 }, + { 233,-3086 }, { 234,-3086 }, { 235,-3086 }, { 236,-3086 }, { 237,-3086 }, + { 238,-3086 }, { 239,-3086 }, { 240,-3086 }, { 241,-3086 }, { 242,-3086 }, + { 243,-3086 }, { 244,-3086 }, { 245,-3086 }, { 246,-3086 }, { 247,-3086 }, + + { 248,-3086 }, { 249,-3086 }, { 250,-3086 }, { 251,-3086 }, { 252,-3086 }, + { 253,-3086 }, { 254,-3086 }, { 255,-3086 }, { 0, 131 }, { 0,88780 }, + { 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,88765 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88761 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88756 }, { 0, 7 }, + { 0,88754 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, + { 10, 0 }, { 0, 0 }, { 0, 0 }, { 13, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-3343 }, { 49,-3343 }, { 50,-3343 }, + { 51,-3343 }, { 52,-3343 }, { 53,-3343 }, { 54,-3343 }, { 55,-3343 }, + { 56,-3343 }, { 57,-3343 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-3343 }, + { 66,-3343 }, { 67,-3343 }, { 68,-3343 }, { 69,-3343 }, { 70,-3343 }, + { 71,-3343 }, { 72,14753 }, { 73,-3343 }, { 74,-3343 }, { 75,-3343 }, + { 76,-3343 }, { 77,-3343 }, { 78,-3343 }, { 79,-3343 }, { 80,-3343 }, + { 81,-3343 }, { 82,-3343 }, { 83,-3343 }, { 84,-3343 }, { 85,-3343 }, + { 86,-3343 }, { 87,-3343 }, { 88,-3343 }, { 89,-3343 }, { 90,-3343 }, + + { 76,1272 }, { 73,1279 }, { 69,1525 }, { 0, 0 }, { 95,-3343 }, + { 0, 0 }, { 97,-3343 }, { 98,-3343 }, { 99,-3343 }, { 100,-3343 }, + { 101,-3343 }, { 102,-3343 }, { 103,-3343 }, { 104,14753 }, { 105,-3343 }, + { 106,-3343 }, { 107,-3343 }, { 108,-3343 }, { 109,-3343 }, { 110,-3343 }, + { 111,-3343 }, { 112,-3343 }, { 113,-3343 }, { 114,-3343 }, { 115,-3343 }, + { 116,-3343 }, { 117,-3343 }, { 118,-3343 }, { 119,-3343 }, { 120,-3343 }, + { 121,-3343 }, { 122,-3343 }, { 108,1272 }, { 105,1279 }, { 101,1525 }, + { 0, 0 }, { 127,-3343 }, { 128,-3343 }, { 129,-3343 }, { 130,-3343 }, + { 131,-3343 }, { 132,-3343 }, { 133,-3343 }, { 134,-3343 }, { 135,-3343 }, + { 136,-3343 }, { 137,-3343 }, { 138,-3343 }, { 139,-3343 }, { 140,-3343 }, + + { 141,-3343 }, { 142,-3343 }, { 143,-3343 }, { 144,-3343 }, { 145,-3343 }, + { 146,-3343 }, { 147,-3343 }, { 148,-3343 }, { 149,-3343 }, { 150,-3343 }, + { 151,-3343 }, { 152,-3343 }, { 153,-3343 }, { 154,-3343 }, { 155,-3343 }, + { 156,-3343 }, { 157,-3343 }, { 158,-3343 }, { 159,-3343 }, { 160,-3343 }, + { 161,-3343 }, { 162,-3343 }, { 163,-3343 }, { 164,-3343 }, { 165,-3343 }, + { 166,-3343 }, { 167,-3343 }, { 168,-3343 }, { 169,-3343 }, { 170,-3343 }, + { 171,-3343 }, { 172,-3343 }, { 173,-3343 }, { 174,-3343 }, { 175,-3343 }, + { 176,-3343 }, { 177,-3343 }, { 178,-3343 }, { 179,-3343 }, { 180,-3343 }, + { 181,-3343 }, { 182,-3343 }, { 183,-3343 }, { 184,-3343 }, { 185,-3343 }, + { 186,-3343 }, { 187,-3343 }, { 188,-3343 }, { 189,-3343 }, { 190,-3343 }, + + { 191,-3343 }, { 192,-3343 }, { 193,-3343 }, { 194,-3343 }, { 195,-3343 }, + { 196,-3343 }, { 197,-3343 }, { 198,-3343 }, { 199,-3343 }, { 200,-3343 }, + { 201,-3343 }, { 202,-3343 }, { 203,-3343 }, { 204,-3343 }, { 205,-3343 }, + { 206,-3343 }, { 207,-3343 }, { 208,-3343 }, { 209,-3343 }, { 210,-3343 }, + { 211,-3343 }, { 212,-3343 }, { 213,-3343 }, { 214,-3343 }, { 215,-3343 }, + { 216,-3343 }, { 217,-3343 }, { 218,-3343 }, { 219,-3343 }, { 220,-3343 }, + { 221,-3343 }, { 222,-3343 }, { 223,-3343 }, { 224,-3343 }, { 225,-3343 }, + { 226,-3343 }, { 227,-3343 }, { 228,-3343 }, { 229,-3343 }, { 230,-3343 }, + { 231,-3343 }, { 232,-3343 }, { 233,-3343 }, { 234,-3343 }, { 235,-3343 }, + { 236,-3343 }, { 237,-3343 }, { 238,-3343 }, { 239,-3343 }, { 240,-3343 }, + + { 241,-3343 }, { 242,-3343 }, { 243,-3343 }, { 244,-3343 }, { 245,-3343 }, + { 246,-3343 }, { 247,-3343 }, { 248,-3343 }, { 249,-3343 }, { 250,-3343 }, + { 251,-3343 }, { 252,-3343 }, { 253,-3343 }, { 254,-3343 }, { 255,-3343 }, + { 0, 131 }, { 0,88523 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,88514 }, { 0, 135 }, { 0,88512 }, { 0, 0 }, { 0,88510 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9, 0 }, { 0, 0 }, { 9,1293 }, { 10,1293 }, + { 0, 0 }, { 0, 0 }, { 13,1295 }, { 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 }, { 32, 0 }, + { 0, 0 }, { 32,1293 }, { 0, 0 }, { 0, 0 }, { 48,-3600 }, + { 49,-3600 }, { 50,-3600 }, { 51,-3600 }, { 52,-3600 }, { 53,-3600 }, + { 54,-3600 }, { 55,-3600 }, { 56,-3600 }, { 57,-3600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-3600 }, { 66,-3600 }, { 67,-3600 }, { 68,-3600 }, + { 69,-3600 }, { 70,-3600 }, { 71,-3600 }, { 72,-3600 }, { 73,-3600 }, + { 74,-3600 }, { 75,-3600 }, { 76,-3600 }, { 77,-3600 }, { 78,-3600 }, + { 79,-3600 }, { 80,-3600 }, { 81,-3600 }, { 82,-3600 }, { 83,14753 }, + + { 84,-3600 }, { 85,-3600 }, { 86,-3600 }, { 87,-3600 }, { 88,-3600 }, + { 89,-3600 }, { 90,-3600 }, { 82,1295 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-3600 }, { 0, 0 }, { 97,-3600 }, { 98,-3600 }, + { 99,-3600 }, { 100,-3600 }, { 101,-3600 }, { 102,-3600 }, { 103,-3600 }, + { 104,-3600 }, { 105,-3600 }, { 106,-3600 }, { 107,-3600 }, { 108,-3600 }, + { 109,-3600 }, { 110,-3600 }, { 111,-3600 }, { 112,-3600 }, { 113,-3600 }, + { 114,-3600 }, { 115,14753 }, { 116,-3600 }, { 117,-3600 }, { 118,-3600 }, + { 119,-3600 }, { 120,-3600 }, { 121,-3600 }, { 122,-3600 }, { 114,1295 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-3600 }, { 128,-3600 }, + { 129,-3600 }, { 130,-3600 }, { 131,-3600 }, { 132,-3600 }, { 133,-3600 }, + + { 134,-3600 }, { 135,-3600 }, { 136,-3600 }, { 137,-3600 }, { 138,-3600 }, + { 139,-3600 }, { 140,-3600 }, { 141,-3600 }, { 142,-3600 }, { 143,-3600 }, + { 144,-3600 }, { 145,-3600 }, { 146,-3600 }, { 147,-3600 }, { 148,-3600 }, + { 149,-3600 }, { 150,-3600 }, { 151,-3600 }, { 152,-3600 }, { 153,-3600 }, + { 154,-3600 }, { 155,-3600 }, { 156,-3600 }, { 157,-3600 }, { 158,-3600 }, + { 159,-3600 }, { 160,-3600 }, { 161,-3600 }, { 162,-3600 }, { 163,-3600 }, + { 164,-3600 }, { 165,-3600 }, { 166,-3600 }, { 167,-3600 }, { 168,-3600 }, + { 169,-3600 }, { 170,-3600 }, { 171,-3600 }, { 172,-3600 }, { 173,-3600 }, + { 174,-3600 }, { 175,-3600 }, { 176,-3600 }, { 177,-3600 }, { 178,-3600 }, + { 179,-3600 }, { 180,-3600 }, { 181,-3600 }, { 182,-3600 }, { 183,-3600 }, + + { 184,-3600 }, { 185,-3600 }, { 186,-3600 }, { 187,-3600 }, { 188,-3600 }, + { 189,-3600 }, { 190,-3600 }, { 191,-3600 }, { 192,-3600 }, { 193,-3600 }, + { 194,-3600 }, { 195,-3600 }, { 196,-3600 }, { 197,-3600 }, { 198,-3600 }, + { 199,-3600 }, { 200,-3600 }, { 201,-3600 }, { 202,-3600 }, { 203,-3600 }, + { 204,-3600 }, { 205,-3600 }, { 206,-3600 }, { 207,-3600 }, { 208,-3600 }, + { 209,-3600 }, { 210,-3600 }, { 211,-3600 }, { 212,-3600 }, { 213,-3600 }, + { 214,-3600 }, { 215,-3600 }, { 216,-3600 }, { 217,-3600 }, { 218,-3600 }, + { 219,-3600 }, { 220,-3600 }, { 221,-3600 }, { 222,-3600 }, { 223,-3600 }, + { 224,-3600 }, { 225,-3600 }, { 226,-3600 }, { 227,-3600 }, { 228,-3600 }, + { 229,-3600 }, { 230,-3600 }, { 231,-3600 }, { 232,-3600 }, { 233,-3600 }, + + { 234,-3600 }, { 235,-3600 }, { 236,-3600 }, { 237,-3600 }, { 238,-3600 }, + { 239,-3600 }, { 240,-3600 }, { 241,-3600 }, { 242,-3600 }, { 243,-3600 }, + { 244,-3600 }, { 245,-3600 }, { 246,-3600 }, { 247,-3600 }, { 248,-3600 }, + { 249,-3600 }, { 250,-3600 }, { 251,-3600 }, { 252,-3600 }, { 253,-3600 }, + { 254,-3600 }, { 255,-3600 }, { 0, 131 }, { 0,88266 }, { 0, 0 }, + { 0,88264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88256 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,88249 }, { 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, 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 }, { 48,-3857 }, { 49,-3857 }, { 50,-3857 }, { 51,-3857 }, + { 52,-3857 }, { 53,-3857 }, { 54,-3857 }, { 55,-3857 }, { 56,-3857 }, + { 57,-3857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-3857 }, { 66,-3857 }, + { 67,-3857 }, { 68,-3857 }, { 69,-3857 }, { 70,-3857 }, { 71,-3857 }, + { 72,-3857 }, { 73,-3857 }, { 74,-3857 }, { 75,-3857 }, { 76,-3857 }, + + { 77,-3857 }, { 78,-3857 }, { 79,-3857 }, { 80,14753 }, { 81,-3857 }, + { 82,-3857 }, { 83,-3857 }, { 84,-3857 }, { 85,-3857 }, { 86,-3857 }, + { 87,-3857 }, { 88,-3857 }, { 89,-3857 }, { 90,-3857 }, { 89,1285 }, + { 82,1279 }, { 76,1547 }, { 0, 0 }, { 95,-3857 }, { 0, 0 }, + { 97,-3857 }, { 98,-3857 }, { 99,-3857 }, { 100,-3857 }, { 101,-3857 }, + { 102,-3857 }, { 103,-3857 }, { 104,-3857 }, { 105,-3857 }, { 106,-3857 }, + { 107,-3857 }, { 108,-3857 }, { 109,-3857 }, { 110,-3857 }, { 111,-3857 }, + { 112,14753 }, { 113,-3857 }, { 114,-3857 }, { 115,-3857 }, { 116,-3857 }, + { 117,-3857 }, { 118,-3857 }, { 119,-3857 }, { 120,-3857 }, { 121,-3857 }, + { 122,-3857 }, { 121,1285 }, { 114,1279 }, { 108,1547 }, { 0, 0 }, + + { 127,-3857 }, { 128,-3857 }, { 129,-3857 }, { 130,-3857 }, { 131,-3857 }, + { 132,-3857 }, { 133,-3857 }, { 134,-3857 }, { 135,-3857 }, { 136,-3857 }, + { 137,-3857 }, { 138,-3857 }, { 139,-3857 }, { 140,-3857 }, { 141,-3857 }, + { 142,-3857 }, { 143,-3857 }, { 144,-3857 }, { 145,-3857 }, { 146,-3857 }, + { 147,-3857 }, { 148,-3857 }, { 149,-3857 }, { 150,-3857 }, { 151,-3857 }, + { 152,-3857 }, { 153,-3857 }, { 154,-3857 }, { 155,-3857 }, { 156,-3857 }, + { 157,-3857 }, { 158,-3857 }, { 159,-3857 }, { 160,-3857 }, { 161,-3857 }, + { 162,-3857 }, { 163,-3857 }, { 164,-3857 }, { 165,-3857 }, { 166,-3857 }, + { 167,-3857 }, { 168,-3857 }, { 169,-3857 }, { 170,-3857 }, { 171,-3857 }, + { 172,-3857 }, { 173,-3857 }, { 174,-3857 }, { 175,-3857 }, { 176,-3857 }, + + { 177,-3857 }, { 178,-3857 }, { 179,-3857 }, { 180,-3857 }, { 181,-3857 }, + { 182,-3857 }, { 183,-3857 }, { 184,-3857 }, { 185,-3857 }, { 186,-3857 }, + { 187,-3857 }, { 188,-3857 }, { 189,-3857 }, { 190,-3857 }, { 191,-3857 }, + { 192,-3857 }, { 193,-3857 }, { 194,-3857 }, { 195,-3857 }, { 196,-3857 }, + { 197,-3857 }, { 198,-3857 }, { 199,-3857 }, { 200,-3857 }, { 201,-3857 }, + { 202,-3857 }, { 203,-3857 }, { 204,-3857 }, { 205,-3857 }, { 206,-3857 }, + { 207,-3857 }, { 208,-3857 }, { 209,-3857 }, { 210,-3857 }, { 211,-3857 }, + { 212,-3857 }, { 213,-3857 }, { 214,-3857 }, { 215,-3857 }, { 216,-3857 }, + { 217,-3857 }, { 218,-3857 }, { 219,-3857 }, { 220,-3857 }, { 221,-3857 }, + { 222,-3857 }, { 223,-3857 }, { 224,-3857 }, { 225,-3857 }, { 226,-3857 }, + + { 227,-3857 }, { 228,-3857 }, { 229,-3857 }, { 230,-3857 }, { 231,-3857 }, + { 232,-3857 }, { 233,-3857 }, { 234,-3857 }, { 235,-3857 }, { 236,-3857 }, + { 237,-3857 }, { 238,-3857 }, { 239,-3857 }, { 240,-3857 }, { 241,-3857 }, + { 242,-3857 }, { 243,-3857 }, { 244,-3857 }, { 245,-3857 }, { 246,-3857 }, + { 247,-3857 }, { 248,-3857 }, { 249,-3857 }, { 250,-3857 }, { 251,-3857 }, + { 252,-3857 }, { 253,-3857 }, { 254,-3857 }, { 255,-3857 }, { 0, 131 }, + { 0,88009 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,88002 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-4114 }, { 49,-4114 }, + { 50,-4114 }, { 51,-4114 }, { 52,-4114 }, { 53,-4114 }, { 54,-4114 }, + { 55,-4114 }, { 56,-4114 }, { 57,-4114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-4114 }, { 66,-4114 }, { 67,-4114 }, { 68,14753 }, { 69,-4114 }, + + { 70,-4114 }, { 71,-4114 }, { 72,-4114 }, { 73,-4114 }, { 74,-4114 }, + { 75,-4114 }, { 76,-4114 }, { 77,-4114 }, { 78,-4114 }, { 79,-4114 }, + { 80,-4114 }, { 81,-4114 }, { 82,-4114 }, { 83,-4114 }, { 84,-4114 }, + { 85,-4114 }, { 86,-4114 }, { 87,-4114 }, { 88,-4114 }, { 89,-4114 }, + { 90,-4114 }, { 84,1537 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-4114 }, { 0, 0 }, { 97,-4114 }, { 98,-4114 }, { 99,-4114 }, + { 100,14753 }, { 101,-4114 }, { 102,-4114 }, { 103,-4114 }, { 104,-4114 }, + { 105,-4114 }, { 106,-4114 }, { 107,-4114 }, { 108,-4114 }, { 109,-4114 }, + { 110,-4114 }, { 111,-4114 }, { 112,-4114 }, { 113,-4114 }, { 114,-4114 }, + { 115,-4114 }, { 116,-4114 }, { 117,-4114 }, { 118,-4114 }, { 119,-4114 }, + + { 120,-4114 }, { 121,-4114 }, { 122,-4114 }, { 116,1537 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-4114 }, { 128,-4114 }, { 129,-4114 }, + { 130,-4114 }, { 131,-4114 }, { 132,-4114 }, { 133,-4114 }, { 134,-4114 }, + { 135,-4114 }, { 136,-4114 }, { 137,-4114 }, { 138,-4114 }, { 139,-4114 }, + { 140,-4114 }, { 141,-4114 }, { 142,-4114 }, { 143,-4114 }, { 144,-4114 }, + { 145,-4114 }, { 146,-4114 }, { 147,-4114 }, { 148,-4114 }, { 149,-4114 }, + { 150,-4114 }, { 151,-4114 }, { 152,-4114 }, { 153,-4114 }, { 154,-4114 }, + { 155,-4114 }, { 156,-4114 }, { 157,-4114 }, { 158,-4114 }, { 159,-4114 }, + { 160,-4114 }, { 161,-4114 }, { 162,-4114 }, { 163,-4114 }, { 164,-4114 }, + { 165,-4114 }, { 166,-4114 }, { 167,-4114 }, { 168,-4114 }, { 169,-4114 }, + + { 170,-4114 }, { 171,-4114 }, { 172,-4114 }, { 173,-4114 }, { 174,-4114 }, + { 175,-4114 }, { 176,-4114 }, { 177,-4114 }, { 178,-4114 }, { 179,-4114 }, + { 180,-4114 }, { 181,-4114 }, { 182,-4114 }, { 183,-4114 }, { 184,-4114 }, + { 185,-4114 }, { 186,-4114 }, { 187,-4114 }, { 188,-4114 }, { 189,-4114 }, + { 190,-4114 }, { 191,-4114 }, { 192,-4114 }, { 193,-4114 }, { 194,-4114 }, + { 195,-4114 }, { 196,-4114 }, { 197,-4114 }, { 198,-4114 }, { 199,-4114 }, + { 200,-4114 }, { 201,-4114 }, { 202,-4114 }, { 203,-4114 }, { 204,-4114 }, + { 205,-4114 }, { 206,-4114 }, { 207,-4114 }, { 208,-4114 }, { 209,-4114 }, + { 210,-4114 }, { 211,-4114 }, { 212,-4114 }, { 213,-4114 }, { 214,-4114 }, + { 215,-4114 }, { 216,-4114 }, { 217,-4114 }, { 218,-4114 }, { 219,-4114 }, + + { 220,-4114 }, { 221,-4114 }, { 222,-4114 }, { 223,-4114 }, { 224,-4114 }, + { 225,-4114 }, { 226,-4114 }, { 227,-4114 }, { 228,-4114 }, { 229,-4114 }, + { 230,-4114 }, { 231,-4114 }, { 232,-4114 }, { 233,-4114 }, { 234,-4114 }, + { 235,-4114 }, { 236,-4114 }, { 237,-4114 }, { 238,-4114 }, { 239,-4114 }, + { 240,-4114 }, { 241,-4114 }, { 242,-4114 }, { 243,-4114 }, { 244,-4114 }, + { 245,-4114 }, { 246,-4114 }, { 247,-4114 }, { 248,-4114 }, { 249,-4114 }, + { 250,-4114 }, { 251,-4114 }, { 252,-4114 }, { 253,-4114 }, { 254,-4114 }, + { 255,-4114 }, { 0, 131 }, { 0,87752 }, { 0, 0 }, { 0,87750 }, + { 0, 122 }, { 0,87748 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,87732 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,87727 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-4371 }, { 49,-4371 }, { 50,-4371 }, { 51,-4371 }, { 52,-4371 }, + { 53,-4371 }, { 54,-4371 }, { 55,-4371 }, { 56,-4371 }, { 57,-4371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,14753 }, { 66,-4371 }, { 67,-4371 }, + { 68,-4371 }, { 69,-4371 }, { 70,-4371 }, { 71,-4371 }, { 72,-4371 }, + { 73,-4371 }, { 74,-4371 }, { 75,-4371 }, { 76,-4371 }, { 77,-4371 }, + { 78,-4371 }, { 79,-4371 }, { 80,-4371 }, { 81,-4371 }, { 82,-4371 }, + { 83,-4371 }, { 84,-4371 }, { 85,-4371 }, { 86,-4371 }, { 87,-4371 }, + { 88,-4371 }, { 89,-4371 }, { 90,-4371 }, { 71,1287 }, { 67,1524 }, + { 0, 0 }, { 0, 0 }, { 95,-4371 }, { 0, 0 }, { 97,14753 }, + { 98,-4371 }, { 99,-4371 }, { 100,-4371 }, { 101,-4371 }, { 102,-4371 }, + { 103,-4371 }, { 104,-4371 }, { 105,-4371 }, { 106,-4371 }, { 107,-4371 }, + { 108,-4371 }, { 109,-4371 }, { 110,-4371 }, { 111,-4371 }, { 112,-4371 }, + + { 113,-4371 }, { 114,-4371 }, { 115,-4371 }, { 116,-4371 }, { 117,-4371 }, + { 118,-4371 }, { 119,-4371 }, { 120,-4371 }, { 121,-4371 }, { 122,-4371 }, + { 103,1287 }, { 99,1524 }, { 0, 0 }, { 0, 0 }, { 127,-4371 }, + { 128,-4371 }, { 129,-4371 }, { 130,-4371 }, { 131,-4371 }, { 132,-4371 }, + { 133,-4371 }, { 134,-4371 }, { 135,-4371 }, { 136,-4371 }, { 137,-4371 }, + { 138,-4371 }, { 139,-4371 }, { 140,-4371 }, { 141,-4371 }, { 142,-4371 }, + { 143,-4371 }, { 144,-4371 }, { 145,-4371 }, { 146,-4371 }, { 147,-4371 }, + { 148,-4371 }, { 149,-4371 }, { 150,-4371 }, { 151,-4371 }, { 152,-4371 }, + { 153,-4371 }, { 154,-4371 }, { 155,-4371 }, { 156,-4371 }, { 157,-4371 }, + { 158,-4371 }, { 159,-4371 }, { 160,-4371 }, { 161,-4371 }, { 162,-4371 }, + + { 163,-4371 }, { 164,-4371 }, { 165,-4371 }, { 166,-4371 }, { 167,-4371 }, + { 168,-4371 }, { 169,-4371 }, { 170,-4371 }, { 171,-4371 }, { 172,-4371 }, + { 173,-4371 }, { 174,-4371 }, { 175,-4371 }, { 176,-4371 }, { 177,-4371 }, + { 178,-4371 }, { 179,-4371 }, { 180,-4371 }, { 181,-4371 }, { 182,-4371 }, + { 183,-4371 }, { 184,-4371 }, { 185,-4371 }, { 186,-4371 }, { 187,-4371 }, + { 188,-4371 }, { 189,-4371 }, { 190,-4371 }, { 191,-4371 }, { 192,-4371 }, + { 193,-4371 }, { 194,-4371 }, { 195,-4371 }, { 196,-4371 }, { 197,-4371 }, + { 198,-4371 }, { 199,-4371 }, { 200,-4371 }, { 201,-4371 }, { 202,-4371 }, + { 203,-4371 }, { 204,-4371 }, { 205,-4371 }, { 206,-4371 }, { 207,-4371 }, + { 208,-4371 }, { 209,-4371 }, { 210,-4371 }, { 211,-4371 }, { 212,-4371 }, + + { 213,-4371 }, { 214,-4371 }, { 215,-4371 }, { 216,-4371 }, { 217,-4371 }, + { 218,-4371 }, { 219,-4371 }, { 220,-4371 }, { 221,-4371 }, { 222,-4371 }, + { 223,-4371 }, { 224,-4371 }, { 225,-4371 }, { 226,-4371 }, { 227,-4371 }, + { 228,-4371 }, { 229,-4371 }, { 230,-4371 }, { 231,-4371 }, { 232,-4371 }, + { 233,-4371 }, { 234,-4371 }, { 235,-4371 }, { 236,-4371 }, { 237,-4371 }, + { 238,-4371 }, { 239,-4371 }, { 240,-4371 }, { 241,-4371 }, { 242,-4371 }, + { 243,-4371 }, { 244,-4371 }, { 245,-4371 }, { 246,-4371 }, { 247,-4371 }, + { 248,-4371 }, { 249,-4371 }, { 250,-4371 }, { 251,-4371 }, { 252,-4371 }, + { 253,-4371 }, { 254,-4371 }, { 255,-4371 }, { 0, 131 }, { 0,87495 }, + { 0, 0 }, { 0,87493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 9,1542 }, { 0, 0 }, { 0,87482 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 32,1542 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41,1544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-4628 }, { 49,-4628 }, { 50,-4628 }, + { 51,-4628 }, { 52,-4628 }, { 53,-4628 }, { 54,-4628 }, { 55,-4628 }, + + { 56,-4628 }, { 57,-4628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-4628 }, + { 66,-4628 }, { 67,-4628 }, { 68,-4628 }, { 69,-4628 }, { 70,-4628 }, + { 71,-4628 }, { 72,-4628 }, { 73,14753 }, { 74,-4628 }, { 75,-4628 }, + { 76,-4628 }, { 77,-4628 }, { 78,-4628 }, { 79,-4628 }, { 80,-4628 }, + { 81,-4628 }, { 82,-4628 }, { 83,-4628 }, { 84,15010 }, { 85,-4628 }, + { 86,-4628 }, { 87,-4628 }, { 88,-4628 }, { 89,-4628 }, { 90,-4628 }, + { 78,1549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-4628 }, + { 0, 0 }, { 97,-4628 }, { 98,-4628 }, { 99,-4628 }, { 100,-4628 }, + { 101,-4628 }, { 102,-4628 }, { 103,-4628 }, { 104,-4628 }, { 105,14753 }, + + { 106,-4628 }, { 107,-4628 }, { 108,-4628 }, { 109,-4628 }, { 110,-4628 }, + { 111,-4628 }, { 112,-4628 }, { 113,-4628 }, { 114,-4628 }, { 115,-4628 }, + { 116,15010 }, { 117,-4628 }, { 118,-4628 }, { 119,-4628 }, { 120,-4628 }, + { 121,-4628 }, { 122,-4628 }, { 110,1549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-4628 }, { 128,-4628 }, { 129,-4628 }, { 130,-4628 }, + { 131,-4628 }, { 132,-4628 }, { 133,-4628 }, { 134,-4628 }, { 135,-4628 }, + { 136,-4628 }, { 137,-4628 }, { 138,-4628 }, { 139,-4628 }, { 140,-4628 }, + { 141,-4628 }, { 142,-4628 }, { 143,-4628 }, { 144,-4628 }, { 145,-4628 }, + { 146,-4628 }, { 147,-4628 }, { 148,-4628 }, { 149,-4628 }, { 150,-4628 }, + { 151,-4628 }, { 152,-4628 }, { 153,-4628 }, { 154,-4628 }, { 155,-4628 }, + + { 156,-4628 }, { 157,-4628 }, { 158,-4628 }, { 159,-4628 }, { 160,-4628 }, + { 161,-4628 }, { 162,-4628 }, { 163,-4628 }, { 164,-4628 }, { 165,-4628 }, + { 166,-4628 }, { 167,-4628 }, { 168,-4628 }, { 169,-4628 }, { 170,-4628 }, + { 171,-4628 }, { 172,-4628 }, { 173,-4628 }, { 174,-4628 }, { 175,-4628 }, + { 176,-4628 }, { 177,-4628 }, { 178,-4628 }, { 179,-4628 }, { 180,-4628 }, + { 181,-4628 }, { 182,-4628 }, { 183,-4628 }, { 184,-4628 }, { 185,-4628 }, + { 186,-4628 }, { 187,-4628 }, { 188,-4628 }, { 189,-4628 }, { 190,-4628 }, + { 191,-4628 }, { 192,-4628 }, { 193,-4628 }, { 194,-4628 }, { 195,-4628 }, + { 196,-4628 }, { 197,-4628 }, { 198,-4628 }, { 199,-4628 }, { 200,-4628 }, + { 201,-4628 }, { 202,-4628 }, { 203,-4628 }, { 204,-4628 }, { 205,-4628 }, + + { 206,-4628 }, { 207,-4628 }, { 208,-4628 }, { 209,-4628 }, { 210,-4628 }, + { 211,-4628 }, { 212,-4628 }, { 213,-4628 }, { 214,-4628 }, { 215,-4628 }, + { 216,-4628 }, { 217,-4628 }, { 218,-4628 }, { 219,-4628 }, { 220,-4628 }, + { 221,-4628 }, { 222,-4628 }, { 223,-4628 }, { 224,-4628 }, { 225,-4628 }, + { 226,-4628 }, { 227,-4628 }, { 228,-4628 }, { 229,-4628 }, { 230,-4628 }, + { 231,-4628 }, { 232,-4628 }, { 233,-4628 }, { 234,-4628 }, { 235,-4628 }, + { 236,-4628 }, { 237,-4628 }, { 238,-4628 }, { 239,-4628 }, { 240,-4628 }, + { 241,-4628 }, { 242,-4628 }, { 243,-4628 }, { 244,-4628 }, { 245,-4628 }, + { 246,-4628 }, { 247,-4628 }, { 248,-4628 }, { 249,-4628 }, { 250,-4628 }, + { 251,-4628 }, { 252,-4628 }, { 253,-4628 }, { 254,-4628 }, { 255,-4628 }, + + { 0, 131 }, { 0,87238 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,87231 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,87219 }, { 0, 1 }, { 0,87217 }, { 0, 1 }, { 0,87215 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 10, -2 }, + { 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 }, { 48,-4885 }, + + { 49,-4885 }, { 50,-4885 }, { 51,-4885 }, { 52,-4885 }, { 53,-4885 }, + { 54,-4885 }, { 55,-4885 }, { 56,-4885 }, { 57,-4885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-4885 }, { 66,-4885 }, { 67,-4885 }, { 68,-4885 }, + { 69,-4885 }, { 70,-4885 }, { 71,-4885 }, { 72,-4885 }, { 73,-4885 }, + { 74,-4885 }, { 75,-4885 }, { 76,-4885 }, { 77,-4885 }, { 78,15010 }, + { 79,-4885 }, { 80,-4885 }, { 81,-4885 }, { 82,-4885 }, { 83,-4885 }, + { 84,-4885 }, { 85,-4885 }, { 86,-4885 }, { 87,-4885 }, { 88,-4885 }, + { 89,-4885 }, { 90,-4885 }, { 84,1537 }, { 73,1536 }, { 0, 0 }, + { 0, 0 }, { 95,-4885 }, { 0, 0 }, { 97,-4885 }, { 98,-4885 }, + + { 99,-4885 }, { 100,-4885 }, { 101,-4885 }, { 102,-4885 }, { 103,-4885 }, + { 104,-4885 }, { 105,-4885 }, { 106,-4885 }, { 107,-4885 }, { 108,-4885 }, + { 109,-4885 }, { 110,15010 }, { 111,-4885 }, { 112,-4885 }, { 113,-4885 }, + { 114,-4885 }, { 115,-4885 }, { 116,-4885 }, { 117,-4885 }, { 118,-4885 }, + { 119,-4885 }, { 120,-4885 }, { 121,-4885 }, { 122,-4885 }, { 116,1537 }, + { 105,1536 }, { 0, 0 }, { 0, 0 }, { 127,-4885 }, { 128,-4885 }, + { 129,-4885 }, { 130,-4885 }, { 131,-4885 }, { 132,-4885 }, { 133,-4885 }, + { 134,-4885 }, { 135,-4885 }, { 136,-4885 }, { 137,-4885 }, { 138,-4885 }, + { 139,-4885 }, { 140,-4885 }, { 141,-4885 }, { 142,-4885 }, { 143,-4885 }, + { 144,-4885 }, { 145,-4885 }, { 146,-4885 }, { 147,-4885 }, { 148,-4885 }, + + { 149,-4885 }, { 150,-4885 }, { 151,-4885 }, { 152,-4885 }, { 153,-4885 }, + { 154,-4885 }, { 155,-4885 }, { 156,-4885 }, { 157,-4885 }, { 158,-4885 }, + { 159,-4885 }, { 160,-4885 }, { 161,-4885 }, { 162,-4885 }, { 163,-4885 }, + { 164,-4885 }, { 165,-4885 }, { 166,-4885 }, { 167,-4885 }, { 168,-4885 }, + { 169,-4885 }, { 170,-4885 }, { 171,-4885 }, { 172,-4885 }, { 173,-4885 }, + { 174,-4885 }, { 175,-4885 }, { 176,-4885 }, { 177,-4885 }, { 178,-4885 }, + { 179,-4885 }, { 180,-4885 }, { 181,-4885 }, { 182,-4885 }, { 183,-4885 }, + { 184,-4885 }, { 185,-4885 }, { 186,-4885 }, { 187,-4885 }, { 188,-4885 }, + { 189,-4885 }, { 190,-4885 }, { 191,-4885 }, { 192,-4885 }, { 193,-4885 }, + { 194,-4885 }, { 195,-4885 }, { 196,-4885 }, { 197,-4885 }, { 198,-4885 }, + + { 199,-4885 }, { 200,-4885 }, { 201,-4885 }, { 202,-4885 }, { 203,-4885 }, + { 204,-4885 }, { 205,-4885 }, { 206,-4885 }, { 207,-4885 }, { 208,-4885 }, + { 209,-4885 }, { 210,-4885 }, { 211,-4885 }, { 212,-4885 }, { 213,-4885 }, + { 214,-4885 }, { 215,-4885 }, { 216,-4885 }, { 217,-4885 }, { 218,-4885 }, + { 219,-4885 }, { 220,-4885 }, { 221,-4885 }, { 222,-4885 }, { 223,-4885 }, + { 224,-4885 }, { 225,-4885 }, { 226,-4885 }, { 227,-4885 }, { 228,-4885 }, + { 229,-4885 }, { 230,-4885 }, { 231,-4885 }, { 232,-4885 }, { 233,-4885 }, + { 234,-4885 }, { 235,-4885 }, { 236,-4885 }, { 237,-4885 }, { 238,-4885 }, + { 239,-4885 }, { 240,-4885 }, { 241,-4885 }, { 242,-4885 }, { 243,-4885 }, + { 244,-4885 }, { 245,-4885 }, { 246,-4885 }, { 247,-4885 }, { 248,-4885 }, + + { 249,-4885 }, { 250,-4885 }, { 251,-4885 }, { 252,-4885 }, { 253,-4885 }, + { 254,-4885 }, { 255,-4885 }, { 0, 131 }, { 0,86981 }, { 0, 0 }, + { 0,86979 }, { 0, 0 }, { 0,86977 }, { 0, 0 }, { 0,86975 }, + { 0, 127 }, { 0,86973 }, { 0, 0 }, { 0, 0 }, { 9,1542 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,86955 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 32,1542 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 41,1544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 2 }, { 48,-5142 }, { 49,-5142 }, { 50,-5142 }, { 51,-5142 }, + { 52,-5142 }, { 53,-5142 }, { 54,-5142 }, { 55,-5142 }, { 56,-5142 }, + { 57,-5142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-5142 }, { 66,-5142 }, + { 67,-5142 }, { 68,-5142 }, { 69,-5142 }, { 70,-5142 }, { 71,-5142 }, + { 72,-5142 }, { 73,-5142 }, { 74,-5142 }, { 75,-5142 }, { 76,-5142 }, + { 77,-5142 }, { 78,-5142 }, { 79,-5142 }, { 80,-5142 }, { 81,-5142 }, + { 82,15010 }, { 83,-5142 }, { 84,-5142 }, { 85,-5142 }, { 86,-5142 }, + { 87,-5142 }, { 88,-5142 }, { 89,-5142 }, { 90,-5142 }, { 65,1529 }, + + { 0, 0 }, { 89,1544 }, { 0, 0 }, { 95,-5142 }, { 0, 0 }, + { 97,-5142 }, { 98,-5142 }, { 99,-5142 }, { 100,-5142 }, { 101,-5142 }, + { 102,-5142 }, { 103,-5142 }, { 104,-5142 }, { 105,-5142 }, { 106,-5142 }, + { 107,-5142 }, { 108,-5142 }, { 109,-5142 }, { 110,-5142 }, { 111,-5142 }, + { 112,-5142 }, { 113,-5142 }, { 114,15010 }, { 115,-5142 }, { 116,-5142 }, + { 117,-5142 }, { 118,-5142 }, { 119,-5142 }, { 120,-5142 }, { 121,-5142 }, + { 122,-5142 }, { 97,1529 }, { 0, 0 }, { 121,1544 }, { 0, 0 }, + { 127,-5142 }, { 128,-5142 }, { 129,-5142 }, { 130,-5142 }, { 131,-5142 }, + { 132,-5142 }, { 133,-5142 }, { 134,-5142 }, { 135,-5142 }, { 136,-5142 }, + { 137,-5142 }, { 138,-5142 }, { 139,-5142 }, { 140,-5142 }, { 141,-5142 }, + + { 142,-5142 }, { 143,-5142 }, { 144,-5142 }, { 145,-5142 }, { 146,-5142 }, + { 147,-5142 }, { 148,-5142 }, { 149,-5142 }, { 150,-5142 }, { 151,-5142 }, + { 152,-5142 }, { 153,-5142 }, { 154,-5142 }, { 155,-5142 }, { 156,-5142 }, + { 157,-5142 }, { 158,-5142 }, { 159,-5142 }, { 160,-5142 }, { 161,-5142 }, + { 162,-5142 }, { 163,-5142 }, { 164,-5142 }, { 165,-5142 }, { 166,-5142 }, + { 167,-5142 }, { 168,-5142 }, { 169,-5142 }, { 170,-5142 }, { 171,-5142 }, + { 172,-5142 }, { 173,-5142 }, { 174,-5142 }, { 175,-5142 }, { 176,-5142 }, + { 177,-5142 }, { 178,-5142 }, { 179,-5142 }, { 180,-5142 }, { 181,-5142 }, + { 182,-5142 }, { 183,-5142 }, { 184,-5142 }, { 185,-5142 }, { 186,-5142 }, + { 187,-5142 }, { 188,-5142 }, { 189,-5142 }, { 190,-5142 }, { 191,-5142 }, + + { 192,-5142 }, { 193,-5142 }, { 194,-5142 }, { 195,-5142 }, { 196,-5142 }, + { 197,-5142 }, { 198,-5142 }, { 199,-5142 }, { 200,-5142 }, { 201,-5142 }, + { 202,-5142 }, { 203,-5142 }, { 204,-5142 }, { 205,-5142 }, { 206,-5142 }, + { 207,-5142 }, { 208,-5142 }, { 209,-5142 }, { 210,-5142 }, { 211,-5142 }, + { 212,-5142 }, { 213,-5142 }, { 214,-5142 }, { 215,-5142 }, { 216,-5142 }, + { 217,-5142 }, { 218,-5142 }, { 219,-5142 }, { 220,-5142 }, { 221,-5142 }, + { 222,-5142 }, { 223,-5142 }, { 224,-5142 }, { 225,-5142 }, { 226,-5142 }, + { 227,-5142 }, { 228,-5142 }, { 229,-5142 }, { 230,-5142 }, { 231,-5142 }, + { 232,-5142 }, { 233,-5142 }, { 234,-5142 }, { 235,-5142 }, { 236,-5142 }, + { 237,-5142 }, { 238,-5142 }, { 239,-5142 }, { 240,-5142 }, { 241,-5142 }, + + { 242,-5142 }, { 243,-5142 }, { 244,-5142 }, { 245,-5142 }, { 246,-5142 }, + { 247,-5142 }, { 248,-5142 }, { 249,-5142 }, { 250,-5142 }, { 251,-5142 }, + { 252,-5142 }, { 253,-5142 }, { 254,-5142 }, { 255,-5142 }, { 0, 131 }, + { 0,86724 }, { 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, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,86702 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-5399 }, { 49,-5399 }, + { 50,-5399 }, { 51,-5399 }, { 52,-5399 }, { 53,-5399 }, { 54,-5399 }, + { 55,-5399 }, { 56,-5399 }, { 57,-5399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-5399 }, { 66,-5399 }, { 67,-5399 }, { 68,-5399 }, { 69,-5399 }, + { 70,-5399 }, { 71,-5399 }, { 72,-5399 }, { 73,-5399 }, { 74,-5399 }, + { 75,-5399 }, { 76,-5399 }, { 77,-5399 }, { 78,15010 }, { 79,-5399 }, + { 80,-5399 }, { 81,-5399 }, { 82,-5399 }, { 83,-5399 }, { 84,-5399 }, + + { 85,-5399 }, { 86,-5399 }, { 87,-5399 }, { 88,-5399 }, { 89,-5399 }, + { 90,-5399 }, { 69,1522 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-5399 }, { 0, 0 }, { 97,-5399 }, { 98,-5399 }, { 99,-5399 }, + { 100,-5399 }, { 101,-5399 }, { 102,-5399 }, { 103,-5399 }, { 104,-5399 }, + { 105,-5399 }, { 106,-5399 }, { 107,-5399 }, { 108,-5399 }, { 109,-5399 }, + { 110,15010 }, { 111,-5399 }, { 112,-5399 }, { 113,-5399 }, { 114,-5399 }, + { 115,-5399 }, { 116,-5399 }, { 117,-5399 }, { 118,-5399 }, { 119,-5399 }, + { 120,-5399 }, { 121,-5399 }, { 122,-5399 }, { 101,1522 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-5399 }, { 128,-5399 }, { 129,-5399 }, + { 130,-5399 }, { 131,-5399 }, { 132,-5399 }, { 133,-5399 }, { 134,-5399 }, + + { 135,-5399 }, { 136,-5399 }, { 137,-5399 }, { 138,-5399 }, { 139,-5399 }, + { 140,-5399 }, { 141,-5399 }, { 142,-5399 }, { 143,-5399 }, { 144,-5399 }, + { 145,-5399 }, { 146,-5399 }, { 147,-5399 }, { 148,-5399 }, { 149,-5399 }, + { 150,-5399 }, { 151,-5399 }, { 152,-5399 }, { 153,-5399 }, { 154,-5399 }, + { 155,-5399 }, { 156,-5399 }, { 157,-5399 }, { 158,-5399 }, { 159,-5399 }, + { 160,-5399 }, { 161,-5399 }, { 162,-5399 }, { 163,-5399 }, { 164,-5399 }, + { 165,-5399 }, { 166,-5399 }, { 167,-5399 }, { 168,-5399 }, { 169,-5399 }, + { 170,-5399 }, { 171,-5399 }, { 172,-5399 }, { 173,-5399 }, { 174,-5399 }, + { 175,-5399 }, { 176,-5399 }, { 177,-5399 }, { 178,-5399 }, { 179,-5399 }, + { 180,-5399 }, { 181,-5399 }, { 182,-5399 }, { 183,-5399 }, { 184,-5399 }, + + { 185,-5399 }, { 186,-5399 }, { 187,-5399 }, { 188,-5399 }, { 189,-5399 }, + { 190,-5399 }, { 191,-5399 }, { 192,-5399 }, { 193,-5399 }, { 194,-5399 }, + { 195,-5399 }, { 196,-5399 }, { 197,-5399 }, { 198,-5399 }, { 199,-5399 }, + { 200,-5399 }, { 201,-5399 }, { 202,-5399 }, { 203,-5399 }, { 204,-5399 }, + { 205,-5399 }, { 206,-5399 }, { 207,-5399 }, { 208,-5399 }, { 209,-5399 }, + { 210,-5399 }, { 211,-5399 }, { 212,-5399 }, { 213,-5399 }, { 214,-5399 }, + { 215,-5399 }, { 216,-5399 }, { 217,-5399 }, { 218,-5399 }, { 219,-5399 }, + { 220,-5399 }, { 221,-5399 }, { 222,-5399 }, { 223,-5399 }, { 224,-5399 }, + { 225,-5399 }, { 226,-5399 }, { 227,-5399 }, { 228,-5399 }, { 229,-5399 }, + { 230,-5399 }, { 231,-5399 }, { 232,-5399 }, { 233,-5399 }, { 234,-5399 }, + + { 235,-5399 }, { 236,-5399 }, { 237,-5399 }, { 238,-5399 }, { 239,-5399 }, + { 240,-5399 }, { 241,-5399 }, { 242,-5399 }, { 243,-5399 }, { 244,-5399 }, + { 245,-5399 }, { 246,-5399 }, { 247,-5399 }, { 248,-5399 }, { 249,-5399 }, + { 250,-5399 }, { 251,-5399 }, { 252,-5399 }, { 253,-5399 }, { 254,-5399 }, + { 255,-5399 }, { 0, 131 }, { 0,86467 }, { 0, 0 }, { 0,86465 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 514 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,86445 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 514 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 516 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-5656 }, { 49,-5656 }, { 50,-5656 }, { 51,-5656 }, { 52,-5656 }, + { 53,-5656 }, { 54,-5656 }, { 55,-5656 }, { 56,-5656 }, { 57,-5656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-5656 }, { 66,-5656 }, { 67,-5656 }, + { 68,-5656 }, { 69,-5656 }, { 70,-5656 }, { 71,-5656 }, { 72,-5656 }, + { 73,-5656 }, { 74,-5656 }, { 75,-5656 }, { 76,-5656 }, { 77,-5656 }, + + { 78,-5656 }, { 79,15010 }, { 80,-5656 }, { 81,-5656 }, { 82,-5656 }, + { 83,-5656 }, { 84,-5656 }, { 85,-5656 }, { 86,-5656 }, { 87,-5656 }, + { 88,-5656 }, { 89,-5656 }, { 90,-5656 }, { 69,1272 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-5656 }, { 0, 0 }, { 97,-5656 }, + { 98,-5656 }, { 99,-5656 }, { 100,-5656 }, { 101,-5656 }, { 102,-5656 }, + { 103,-5656 }, { 104,-5656 }, { 105,-5656 }, { 106,-5656 }, { 107,-5656 }, + { 108,-5656 }, { 109,-5656 }, { 110,-5656 }, { 111,15010 }, { 112,-5656 }, + { 113,-5656 }, { 114,-5656 }, { 115,-5656 }, { 116,-5656 }, { 117,-5656 }, + { 118,-5656 }, { 119,-5656 }, { 120,-5656 }, { 121,-5656 }, { 122,-5656 }, + { 101,1272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-5656 }, + + { 128,-5656 }, { 129,-5656 }, { 130,-5656 }, { 131,-5656 }, { 132,-5656 }, + { 133,-5656 }, { 134,-5656 }, { 135,-5656 }, { 136,-5656 }, { 137,-5656 }, + { 138,-5656 }, { 139,-5656 }, { 140,-5656 }, { 141,-5656 }, { 142,-5656 }, + { 143,-5656 }, { 144,-5656 }, { 145,-5656 }, { 146,-5656 }, { 147,-5656 }, + { 148,-5656 }, { 149,-5656 }, { 150,-5656 }, { 151,-5656 }, { 152,-5656 }, + { 153,-5656 }, { 154,-5656 }, { 155,-5656 }, { 156,-5656 }, { 157,-5656 }, + { 158,-5656 }, { 159,-5656 }, { 160,-5656 }, { 161,-5656 }, { 162,-5656 }, + { 163,-5656 }, { 164,-5656 }, { 165,-5656 }, { 166,-5656 }, { 167,-5656 }, + { 168,-5656 }, { 169,-5656 }, { 170,-5656 }, { 171,-5656 }, { 172,-5656 }, + { 173,-5656 }, { 174,-5656 }, { 175,-5656 }, { 176,-5656 }, { 177,-5656 }, + + { 178,-5656 }, { 179,-5656 }, { 180,-5656 }, { 181,-5656 }, { 182,-5656 }, + { 183,-5656 }, { 184,-5656 }, { 185,-5656 }, { 186,-5656 }, { 187,-5656 }, + { 188,-5656 }, { 189,-5656 }, { 190,-5656 }, { 191,-5656 }, { 192,-5656 }, + { 193,-5656 }, { 194,-5656 }, { 195,-5656 }, { 196,-5656 }, { 197,-5656 }, + { 198,-5656 }, { 199,-5656 }, { 200,-5656 }, { 201,-5656 }, { 202,-5656 }, + { 203,-5656 }, { 204,-5656 }, { 205,-5656 }, { 206,-5656 }, { 207,-5656 }, + { 208,-5656 }, { 209,-5656 }, { 210,-5656 }, { 211,-5656 }, { 212,-5656 }, + { 213,-5656 }, { 214,-5656 }, { 215,-5656 }, { 216,-5656 }, { 217,-5656 }, + { 218,-5656 }, { 219,-5656 }, { 220,-5656 }, { 221,-5656 }, { 222,-5656 }, + { 223,-5656 }, { 224,-5656 }, { 225,-5656 }, { 226,-5656 }, { 227,-5656 }, + + { 228,-5656 }, { 229,-5656 }, { 230,-5656 }, { 231,-5656 }, { 232,-5656 }, + { 233,-5656 }, { 234,-5656 }, { 235,-5656 }, { 236,-5656 }, { 237,-5656 }, + { 238,-5656 }, { 239,-5656 }, { 240,-5656 }, { 241,-5656 }, { 242,-5656 }, + { 243,-5656 }, { 244,-5656 }, { 245,-5656 }, { 246,-5656 }, { 247,-5656 }, + { 248,-5656 }, { 249,-5656 }, { 250,-5656 }, { 251,-5656 }, { 252,-5656 }, + { 253,-5656 }, { 254,-5656 }, { 255,-5656 }, { 0, 131 }, { 0,86210 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,86203 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-5913 }, { 49,-5913 }, { 50,-5913 }, + { 51,-5913 }, { 52,-5913 }, { 53,-5913 }, { 54,-5913 }, { 55,-5913 }, + { 56,-5913 }, { 57,-5913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-5913 }, + { 66,-5913 }, { 67,-5913 }, { 68,-5913 }, { 69,-5913 }, { 70,-5913 }, + + { 71,-5913 }, { 72,-5913 }, { 73,-5913 }, { 74,-5913 }, { 75,-5913 }, + { 76,-5913 }, { 77,-5913 }, { 78,-5913 }, { 79,-5913 }, { 80,-5913 }, + { 81,-5913 }, { 82,-5913 }, { 83,-5913 }, { 84,15010 }, { 85,-5913 }, + { 86,-5913 }, { 87,-5913 }, { 88,-5913 }, { 89,-5913 }, { 90,-5913 }, + { 84,1280 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-5913 }, + { 0, 0 }, { 97,-5913 }, { 98,-5913 }, { 99,-5913 }, { 100,-5913 }, + { 101,-5913 }, { 102,-5913 }, { 103,-5913 }, { 104,-5913 }, { 105,-5913 }, + { 106,-5913 }, { 107,-5913 }, { 108,-5913 }, { 109,-5913 }, { 110,-5913 }, + { 111,-5913 }, { 112,-5913 }, { 113,-5913 }, { 114,-5913 }, { 115,-5913 }, + { 116,15010 }, { 117,-5913 }, { 118,-5913 }, { 119,-5913 }, { 120,-5913 }, + + { 121,-5913 }, { 122,-5913 }, { 116,1280 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-5913 }, { 128,-5913 }, { 129,-5913 }, { 130,-5913 }, + { 131,-5913 }, { 132,-5913 }, { 133,-5913 }, { 134,-5913 }, { 135,-5913 }, + { 136,-5913 }, { 137,-5913 }, { 138,-5913 }, { 139,-5913 }, { 140,-5913 }, + { 141,-5913 }, { 142,-5913 }, { 143,-5913 }, { 144,-5913 }, { 145,-5913 }, + { 146,-5913 }, { 147,-5913 }, { 148,-5913 }, { 149,-5913 }, { 150,-5913 }, + { 151,-5913 }, { 152,-5913 }, { 153,-5913 }, { 154,-5913 }, { 155,-5913 }, + { 156,-5913 }, { 157,-5913 }, { 158,-5913 }, { 159,-5913 }, { 160,-5913 }, + { 161,-5913 }, { 162,-5913 }, { 163,-5913 }, { 164,-5913 }, { 165,-5913 }, + { 166,-5913 }, { 167,-5913 }, { 168,-5913 }, { 169,-5913 }, { 170,-5913 }, + + { 171,-5913 }, { 172,-5913 }, { 173,-5913 }, { 174,-5913 }, { 175,-5913 }, + { 176,-5913 }, { 177,-5913 }, { 178,-5913 }, { 179,-5913 }, { 180,-5913 }, + { 181,-5913 }, { 182,-5913 }, { 183,-5913 }, { 184,-5913 }, { 185,-5913 }, + { 186,-5913 }, { 187,-5913 }, { 188,-5913 }, { 189,-5913 }, { 190,-5913 }, + { 191,-5913 }, { 192,-5913 }, { 193,-5913 }, { 194,-5913 }, { 195,-5913 }, + { 196,-5913 }, { 197,-5913 }, { 198,-5913 }, { 199,-5913 }, { 200,-5913 }, + { 201,-5913 }, { 202,-5913 }, { 203,-5913 }, { 204,-5913 }, { 205,-5913 }, + { 206,-5913 }, { 207,-5913 }, { 208,-5913 }, { 209,-5913 }, { 210,-5913 }, + { 211,-5913 }, { 212,-5913 }, { 213,-5913 }, { 214,-5913 }, { 215,-5913 }, + { 216,-5913 }, { 217,-5913 }, { 218,-5913 }, { 219,-5913 }, { 220,-5913 }, + + { 221,-5913 }, { 222,-5913 }, { 223,-5913 }, { 224,-5913 }, { 225,-5913 }, + { 226,-5913 }, { 227,-5913 }, { 228,-5913 }, { 229,-5913 }, { 230,-5913 }, + { 231,-5913 }, { 232,-5913 }, { 233,-5913 }, { 234,-5913 }, { 235,-5913 }, + { 236,-5913 }, { 237,-5913 }, { 238,-5913 }, { 239,-5913 }, { 240,-5913 }, + { 241,-5913 }, { 242,-5913 }, { 243,-5913 }, { 244,-5913 }, { 245,-5913 }, + { 246,-5913 }, { 247,-5913 }, { 248,-5913 }, { 249,-5913 }, { 250,-5913 }, + { 251,-5913 }, { 252,-5913 }, { 253,-5913 }, { 254,-5913 }, { 255,-5913 }, + { 0, 31 }, { 0,85953 }, { 0, 0 }, { 0,85951 }, { 0, 123 }, + { 0,85949 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,85933 }, { 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 }, + { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-6170 }, + { 49,-6170 }, { 50,-6170 }, { 51,-6170 }, { 52,-6170 }, { 53,-6170 }, + { 54,-6170 }, { 55,-6170 }, { 56,-6170 }, { 57,-6170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-6170 }, { 66,-6170 }, { 67,-6170 }, { 68,-6170 }, + { 69,-6170 }, { 70,-6170 }, { 71,-6170 }, { 72,-6170 }, { 73,-6170 }, + { 74,-6170 }, { 75,-6170 }, { 76,-6170 }, { 77,-6170 }, { 78,-6170 }, + { 79,-6170 }, { 80,-6170 }, { 81,-6170 }, { 82,-6170 }, { 83,-6170 }, + { 84,-6170 }, { 85,-6170 }, { 86,-6170 }, { 87,-6170 }, { 88,-6170 }, + { 89,-6170 }, { 90,-6170 }, { 71,1012 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-6170 }, { 0, 0 }, { 97,-6170 }, { 98,-6170 }, + { 99,-6170 }, { 100,-6170 }, { 101,-6170 }, { 102,-6170 }, { 103,-6170 }, + { 104,-6170 }, { 105,-6170 }, { 106,-6170 }, { 107,-6170 }, { 108,-6170 }, + { 109,-6170 }, { 110,-6170 }, { 111,-6170 }, { 112,-6170 }, { 113,-6170 }, + + { 114,-6170 }, { 115,-6170 }, { 116,-6170 }, { 117,-6170 }, { 118,-6170 }, + { 119,-6170 }, { 120,-6170 }, { 121,-6170 }, { 122,-6170 }, { 103,1012 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-6170 }, { 128,-6170 }, + { 129,-6170 }, { 130,-6170 }, { 131,-6170 }, { 132,-6170 }, { 133,-6170 }, + { 134,-6170 }, { 135,-6170 }, { 136,-6170 }, { 137,-6170 }, { 138,-6170 }, + { 139,-6170 }, { 140,-6170 }, { 141,-6170 }, { 142,-6170 }, { 143,-6170 }, + { 144,-6170 }, { 145,-6170 }, { 146,-6170 }, { 147,-6170 }, { 148,-6170 }, + { 149,-6170 }, { 150,-6170 }, { 151,-6170 }, { 152,-6170 }, { 153,-6170 }, + { 154,-6170 }, { 155,-6170 }, { 156,-6170 }, { 157,-6170 }, { 158,-6170 }, + { 159,-6170 }, { 160,-6170 }, { 161,-6170 }, { 162,-6170 }, { 163,-6170 }, + + { 164,-6170 }, { 165,-6170 }, { 166,-6170 }, { 167,-6170 }, { 168,-6170 }, + { 169,-6170 }, { 170,-6170 }, { 171,-6170 }, { 172,-6170 }, { 173,-6170 }, + { 174,-6170 }, { 175,-6170 }, { 176,-6170 }, { 177,-6170 }, { 178,-6170 }, + { 179,-6170 }, { 180,-6170 }, { 181,-6170 }, { 182,-6170 }, { 183,-6170 }, + { 184,-6170 }, { 185,-6170 }, { 186,-6170 }, { 187,-6170 }, { 188,-6170 }, + { 189,-6170 }, { 190,-6170 }, { 191,-6170 }, { 192,-6170 }, { 193,-6170 }, + { 194,-6170 }, { 195,-6170 }, { 196,-6170 }, { 197,-6170 }, { 198,-6170 }, + { 199,-6170 }, { 200,-6170 }, { 201,-6170 }, { 202,-6170 }, { 203,-6170 }, + { 204,-6170 }, { 205,-6170 }, { 206,-6170 }, { 207,-6170 }, { 208,-6170 }, + { 209,-6170 }, { 210,-6170 }, { 211,-6170 }, { 212,-6170 }, { 213,-6170 }, + + { 214,-6170 }, { 215,-6170 }, { 216,-6170 }, { 217,-6170 }, { 218,-6170 }, + { 219,-6170 }, { 220,-6170 }, { 221,-6170 }, { 222,-6170 }, { 223,-6170 }, + { 224,-6170 }, { 225,-6170 }, { 226,-6170 }, { 227,-6170 }, { 228,-6170 }, + { 229,-6170 }, { 230,-6170 }, { 231,-6170 }, { 232,-6170 }, { 233,-6170 }, + { 234,-6170 }, { 235,-6170 }, { 236,-6170 }, { 237,-6170 }, { 238,-6170 }, + { 239,-6170 }, { 240,-6170 }, { 241,-6170 }, { 242,-6170 }, { 243,-6170 }, + { 244,-6170 }, { 245,-6170 }, { 246,-6170 }, { 247,-6170 }, { 248,-6170 }, + { 249,-6170 }, { 250,-6170 }, { 251,-6170 }, { 252,-6170 }, { 253,-6170 }, + { 254,-6170 }, { 255,-6170 }, { 0, 131 }, { 0,85696 }, { 0, 0 }, + { 0,85694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 775 }, + { 0, 0 }, { 0,85683 }, { 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, 0 }, + { 0, 0 }, { 0, 0 }, { 32, 775 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 41, 777 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-6427 }, { 49,-6427 }, { 50,-6427 }, { 51,-6427 }, + { 52,-6427 }, { 53,-6427 }, { 54,-6427 }, { 55,-6427 }, { 56,-6427 }, + + { 57,-6427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-6427 }, { 66,-6427 }, + { 67,-6427 }, { 68,-6427 }, { 69,-6427 }, { 70,-6427 }, { 71,-6427 }, + { 72,-6427 }, { 73,-6427 }, { 74,-6427 }, { 75,-6427 }, { 76,-6427 }, + { 77,-6427 }, { 78,-6427 }, { 79,-6427 }, { 80,14753 }, { 81,-6427 }, + { 82,-6427 }, { 83,-6427 }, { 84,-6427 }, { 85,-6427 }, { 86,-6427 }, + { 87,-6427 }, { 88,-6427 }, { 89,-6427 }, { 90,-6427 }, { 0, 0 }, + { 0, 0 }, { 80, 768 }, { 0, 0 }, { 95,-6427 }, { 0, 0 }, + { 97,-6427 }, { 98,-6427 }, { 99,-6427 }, { 100,-6427 }, { 101,-6427 }, + { 102,-6427 }, { 103,-6427 }, { 104,-6427 }, { 105,-6427 }, { 106,-6427 }, + + { 107,-6427 }, { 108,-6427 }, { 109,-6427 }, { 110,-6427 }, { 111,-6427 }, + { 112,14753 }, { 113,-6427 }, { 114,-6427 }, { 115,-6427 }, { 116,-6427 }, + { 117,-6427 }, { 118,-6427 }, { 119,-6427 }, { 120,-6427 }, { 121,-6427 }, + { 122,-6427 }, { 0, 0 }, { 0, 0 }, { 112, 768 }, { 0, 0 }, + { 127,-6427 }, { 128,-6427 }, { 129,-6427 }, { 130,-6427 }, { 131,-6427 }, + { 132,-6427 }, { 133,-6427 }, { 134,-6427 }, { 135,-6427 }, { 136,-6427 }, + { 137,-6427 }, { 138,-6427 }, { 139,-6427 }, { 140,-6427 }, { 141,-6427 }, + { 142,-6427 }, { 143,-6427 }, { 144,-6427 }, { 145,-6427 }, { 146,-6427 }, + { 147,-6427 }, { 148,-6427 }, { 149,-6427 }, { 150,-6427 }, { 151,-6427 }, + { 152,-6427 }, { 153,-6427 }, { 154,-6427 }, { 155,-6427 }, { 156,-6427 }, + + { 157,-6427 }, { 158,-6427 }, { 159,-6427 }, { 160,-6427 }, { 161,-6427 }, + { 162,-6427 }, { 163,-6427 }, { 164,-6427 }, { 165,-6427 }, { 166,-6427 }, + { 167,-6427 }, { 168,-6427 }, { 169,-6427 }, { 170,-6427 }, { 171,-6427 }, + { 172,-6427 }, { 173,-6427 }, { 174,-6427 }, { 175,-6427 }, { 176,-6427 }, + { 177,-6427 }, { 178,-6427 }, { 179,-6427 }, { 180,-6427 }, { 181,-6427 }, + { 182,-6427 }, { 183,-6427 }, { 184,-6427 }, { 185,-6427 }, { 186,-6427 }, + { 187,-6427 }, { 188,-6427 }, { 189,-6427 }, { 190,-6427 }, { 191,-6427 }, + { 192,-6427 }, { 193,-6427 }, { 194,-6427 }, { 195,-6427 }, { 196,-6427 }, + { 197,-6427 }, { 198,-6427 }, { 199,-6427 }, { 200,-6427 }, { 201,-6427 }, + { 202,-6427 }, { 203,-6427 }, { 204,-6427 }, { 205,-6427 }, { 206,-6427 }, + + { 207,-6427 }, { 208,-6427 }, { 209,-6427 }, { 210,-6427 }, { 211,-6427 }, + { 212,-6427 }, { 213,-6427 }, { 214,-6427 }, { 215,-6427 }, { 216,-6427 }, + { 217,-6427 }, { 218,-6427 }, { 219,-6427 }, { 220,-6427 }, { 221,-6427 }, + { 222,-6427 }, { 223,-6427 }, { 224,-6427 }, { 225,-6427 }, { 226,-6427 }, + { 227,-6427 }, { 228,-6427 }, { 229,-6427 }, { 230,-6427 }, { 231,-6427 }, + { 232,-6427 }, { 233,-6427 }, { 234,-6427 }, { 235,-6427 }, { 236,-6427 }, + { 237,-6427 }, { 238,-6427 }, { 239,-6427 }, { 240,-6427 }, { 241,-6427 }, + { 242,-6427 }, { 243,-6427 }, { 244,-6427 }, { 245,-6427 }, { 246,-6427 }, + { 247,-6427 }, { 248,-6427 }, { 249,-6427 }, { 250,-6427 }, { 251,-6427 }, + { 252,-6427 }, { 253,-6427 }, { 254,-6427 }, { 255,-6427 }, { 0, 131 }, + + { 0,85439 }, { 0, 0 }, { 0,85437 }, { 0, 125 }, { 0,85435 }, + { 0, 0 }, { 0,85433 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0,85426 }, { 0, 0 }, + { 9, 767 }, { 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, 0 }, { 32, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 767 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41, 769 }, { 48,-6684 }, { 49,-6684 }, + + { 50,-6684 }, { 51,-6684 }, { 52,-6684 }, { 53,-6684 }, { 54,-6684 }, + { 55,-6684 }, { 56,-6684 }, { 57,-6684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-6684 }, { 66,-6684 }, { 67,14753 }, { 68,-6684 }, { 69,-6684 }, + { 70,-6684 }, { 71,-6684 }, { 72,-6684 }, { 73,-6684 }, { 74,-6684 }, + { 75,-6684 }, { 76,-6684 }, { 77,-6684 }, { 78,-6684 }, { 79,-6684 }, + { 80,-6684 }, { 81,-6684 }, { 82,-6684 }, { 83,15010 }, { 84,15267 }, + { 85,-6684 }, { 86,-6684 }, { 87,-6684 }, { 88,-6684 }, { 89,-6684 }, + { 90,-6684 }, { 78, 764 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-6684 }, { 0, 0 }, { 97,-6684 }, { 98,-6684 }, { 99,14753 }, + + { 100,-6684 }, { 101,-6684 }, { 102,-6684 }, { 103,-6684 }, { 104,-6684 }, + { 105,-6684 }, { 106,-6684 }, { 107,-6684 }, { 108,-6684 }, { 109,-6684 }, + { 110,-6684 }, { 111,-6684 }, { 112,-6684 }, { 113,-6684 }, { 114,-6684 }, + { 115,15010 }, { 116,15267 }, { 117,-6684 }, { 118,-6684 }, { 119,-6684 }, + { 120,-6684 }, { 121,-6684 }, { 122,-6684 }, { 110, 764 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-6684 }, { 128,-6684 }, { 129,-6684 }, + { 130,-6684 }, { 131,-6684 }, { 132,-6684 }, { 133,-6684 }, { 134,-6684 }, + { 135,-6684 }, { 136,-6684 }, { 137,-6684 }, { 138,-6684 }, { 139,-6684 }, + { 140,-6684 }, { 141,-6684 }, { 142,-6684 }, { 143,-6684 }, { 144,-6684 }, + { 145,-6684 }, { 146,-6684 }, { 147,-6684 }, { 148,-6684 }, { 149,-6684 }, + + { 150,-6684 }, { 151,-6684 }, { 152,-6684 }, { 153,-6684 }, { 154,-6684 }, + { 155,-6684 }, { 156,-6684 }, { 157,-6684 }, { 158,-6684 }, { 159,-6684 }, + { 160,-6684 }, { 161,-6684 }, { 162,-6684 }, { 163,-6684 }, { 164,-6684 }, + { 165,-6684 }, { 166,-6684 }, { 167,-6684 }, { 168,-6684 }, { 169,-6684 }, + { 170,-6684 }, { 171,-6684 }, { 172,-6684 }, { 173,-6684 }, { 174,-6684 }, + { 175,-6684 }, { 176,-6684 }, { 177,-6684 }, { 178,-6684 }, { 179,-6684 }, + { 180,-6684 }, { 181,-6684 }, { 182,-6684 }, { 183,-6684 }, { 184,-6684 }, + { 185,-6684 }, { 186,-6684 }, { 187,-6684 }, { 188,-6684 }, { 189,-6684 }, + { 190,-6684 }, { 191,-6684 }, { 192,-6684 }, { 193,-6684 }, { 194,-6684 }, + { 195,-6684 }, { 196,-6684 }, { 197,-6684 }, { 198,-6684 }, { 199,-6684 }, + + { 200,-6684 }, { 201,-6684 }, { 202,-6684 }, { 203,-6684 }, { 204,-6684 }, + { 205,-6684 }, { 206,-6684 }, { 207,-6684 }, { 208,-6684 }, { 209,-6684 }, + { 210,-6684 }, { 211,-6684 }, { 212,-6684 }, { 213,-6684 }, { 214,-6684 }, + { 215,-6684 }, { 216,-6684 }, { 217,-6684 }, { 218,-6684 }, { 219,-6684 }, + { 220,-6684 }, { 221,-6684 }, { 222,-6684 }, { 223,-6684 }, { 224,-6684 }, + { 225,-6684 }, { 226,-6684 }, { 227,-6684 }, { 228,-6684 }, { 229,-6684 }, + { 230,-6684 }, { 231,-6684 }, { 232,-6684 }, { 233,-6684 }, { 234,-6684 }, + { 235,-6684 }, { 236,-6684 }, { 237,-6684 }, { 238,-6684 }, { 239,-6684 }, + { 240,-6684 }, { 241,-6684 }, { 242,-6684 }, { 243,-6684 }, { 244,-6684 }, + { 245,-6684 }, { 246,-6684 }, { 247,-6684 }, { 248,-6684 }, { 249,-6684 }, + + { 250,-6684 }, { 251,-6684 }, { 252,-6684 }, { 253,-6684 }, { 254,-6684 }, + { 255,-6684 }, { 0, 131 }, { 0,85182 }, { 0, 0 }, { 0,85180 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,85173 }, { 0, 0 }, { 9,-771 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32,-771 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 41,-769 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-6941 }, { 49,-6941 }, { 50,-6941 }, { 51,-6941 }, { 52,-6941 }, + { 53,-6941 }, { 54,-6941 }, { 55,-6941 }, { 56,-6941 }, { 57,-6941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-6941 }, { 66,-6941 }, { 67,-6941 }, + { 68,-6941 }, { 69,-6941 }, { 70,-6941 }, { 71,-6941 }, { 72,-6941 }, + { 73,-6941 }, { 74,-6941 }, { 75,-6941 }, { 76,-6941 }, { 77,-6941 }, + { 78,-6941 }, { 79,-6941 }, { 80,-6941 }, { 81,-6941 }, { 82,-6941 }, + { 83,15267 }, { 84,-6941 }, { 85,-6941 }, { 86,-6941 }, { 87,-6941 }, + { 88,-6941 }, { 89,-6941 }, { 90,-6941 }, { 82, 764 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-6941 }, { 0, 0 }, { 97,-6941 }, + { 98,-6941 }, { 99,-6941 }, { 100,-6941 }, { 101,-6941 }, { 102,-6941 }, + { 103,-6941 }, { 104,-6941 }, { 105,-6941 }, { 106,-6941 }, { 107,-6941 }, + { 108,-6941 }, { 109,-6941 }, { 110,-6941 }, { 111,-6941 }, { 112,-6941 }, + { 113,-6941 }, { 114,-6941 }, { 115,15267 }, { 116,-6941 }, { 117,-6941 }, + { 118,-6941 }, { 119,-6941 }, { 120,-6941 }, { 121,-6941 }, { 122,-6941 }, + { 114, 764 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-6941 }, + { 128,-6941 }, { 129,-6941 }, { 130,-6941 }, { 131,-6941 }, { 132,-6941 }, + { 133,-6941 }, { 134,-6941 }, { 135,-6941 }, { 136,-6941 }, { 137,-6941 }, + { 138,-6941 }, { 139,-6941 }, { 140,-6941 }, { 141,-6941 }, { 142,-6941 }, + + { 143,-6941 }, { 144,-6941 }, { 145,-6941 }, { 146,-6941 }, { 147,-6941 }, + { 148,-6941 }, { 149,-6941 }, { 150,-6941 }, { 151,-6941 }, { 152,-6941 }, + { 153,-6941 }, { 154,-6941 }, { 155,-6941 }, { 156,-6941 }, { 157,-6941 }, + { 158,-6941 }, { 159,-6941 }, { 160,-6941 }, { 161,-6941 }, { 162,-6941 }, + { 163,-6941 }, { 164,-6941 }, { 165,-6941 }, { 166,-6941 }, { 167,-6941 }, + { 168,-6941 }, { 169,-6941 }, { 170,-6941 }, { 171,-6941 }, { 172,-6941 }, + { 173,-6941 }, { 174,-6941 }, { 175,-6941 }, { 176,-6941 }, { 177,-6941 }, + { 178,-6941 }, { 179,-6941 }, { 180,-6941 }, { 181,-6941 }, { 182,-6941 }, + { 183,-6941 }, { 184,-6941 }, { 185,-6941 }, { 186,-6941 }, { 187,-6941 }, + { 188,-6941 }, { 189,-6941 }, { 190,-6941 }, { 191,-6941 }, { 192,-6941 }, + + { 193,-6941 }, { 194,-6941 }, { 195,-6941 }, { 196,-6941 }, { 197,-6941 }, + { 198,-6941 }, { 199,-6941 }, { 200,-6941 }, { 201,-6941 }, { 202,-6941 }, + { 203,-6941 }, { 204,-6941 }, { 205,-6941 }, { 206,-6941 }, { 207,-6941 }, + { 208,-6941 }, { 209,-6941 }, { 210,-6941 }, { 211,-6941 }, { 212,-6941 }, + { 213,-6941 }, { 214,-6941 }, { 215,-6941 }, { 216,-6941 }, { 217,-6941 }, + { 218,-6941 }, { 219,-6941 }, { 220,-6941 }, { 221,-6941 }, { 222,-6941 }, + { 223,-6941 }, { 224,-6941 }, { 225,-6941 }, { 226,-6941 }, { 227,-6941 }, + { 228,-6941 }, { 229,-6941 }, { 230,-6941 }, { 231,-6941 }, { 232,-6941 }, + { 233,-6941 }, { 234,-6941 }, { 235,-6941 }, { 236,-6941 }, { 237,-6941 }, + { 238,-6941 }, { 239,-6941 }, { 240,-6941 }, { 241,-6941 }, { 242,-6941 }, + + { 243,-6941 }, { 244,-6941 }, { 245,-6941 }, { 246,-6941 }, { 247,-6941 }, + { 248,-6941 }, { 249,-6941 }, { 250,-6941 }, { 251,-6941 }, { 252,-6941 }, + { 253,-6941 }, { 254,-6941 }, { 255,-6941 }, { 0, 131 }, { 0,84925 }, + { 0, 0 }, { 0,84923 }, { 0, 0 }, { 0,84921 }, { 0, 0 }, + { 0,84919 }, { 0, 128 }, { 0,84917 }, { 0, 0 }, { 0,84915 }, + { 9, 516 }, { 0, 0 }, { 9, 255 }, { 0, 0 }, { 9, 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 }, { 0, 0 }, { 32, 516 }, { 0, 0 }, + + { 32, 255 }, { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41, 518 }, { 0, 0 }, { 41, 257 }, + { 0, 0 }, { 41, 2 }, { 48,-7198 }, { 49,-7198 }, { 50,-7198 }, + { 51,-7198 }, { 52,-7198 }, { 53,-7198 }, { 54,-7198 }, { 55,-7198 }, + { 56,-7198 }, { 57,-7198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-7198 }, + { 66,-7198 }, { 67,-7198 }, { 68,-7198 }, { 69,-7198 }, { 70,-7198 }, + { 71,-7198 }, { 72,-7198 }, { 73,-7198 }, { 74,-7198 }, { 75,-7198 }, + { 76,-7198 }, { 77,-7198 }, { 78,-7198 }, { 79,-7198 }, { 80,-7198 }, + { 81,-7198 }, { 82,-7198 }, { 83,15267 }, { 84,-7198 }, { 85,-7198 }, + + { 86,-7198 }, { 87,-7198 }, { 88,-7198 }, { 89,-7198 }, { 90,-7198 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 84,67954 }, { 95,-7198 }, + { 0, 0 }, { 97,-7198 }, { 98,-7198 }, { 99,-7198 }, { 100,-7198 }, + { 101,-7198 }, { 102,-7198 }, { 103,-7198 }, { 104,-7198 }, { 105,-7198 }, + { 106,-7198 }, { 107,-7198 }, { 108,-7198 }, { 109,-7198 }, { 110,-7198 }, + { 111,-7198 }, { 112,-7198 }, { 113,-7198 }, { 114,-7198 }, { 115,15267 }, + { 116,-7198 }, { 117,-7198 }, { 118,-7198 }, { 119,-7198 }, { 120,-7198 }, + { 121,-7198 }, { 122,-7198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 116,67954 }, { 127,-7198 }, { 128,-7198 }, { 129,-7198 }, { 130,-7198 }, + { 131,-7198 }, { 132,-7198 }, { 133,-7198 }, { 134,-7198 }, { 135,-7198 }, + + { 136,-7198 }, { 137,-7198 }, { 138,-7198 }, { 139,-7198 }, { 140,-7198 }, + { 141,-7198 }, { 142,-7198 }, { 143,-7198 }, { 144,-7198 }, { 145,-7198 }, + { 146,-7198 }, { 147,-7198 }, { 148,-7198 }, { 149,-7198 }, { 150,-7198 }, + { 151,-7198 }, { 152,-7198 }, { 153,-7198 }, { 154,-7198 }, { 155,-7198 }, + { 156,-7198 }, { 157,-7198 }, { 158,-7198 }, { 159,-7198 }, { 160,-7198 }, + { 161,-7198 }, { 162,-7198 }, { 163,-7198 }, { 164,-7198 }, { 165,-7198 }, + { 166,-7198 }, { 167,-7198 }, { 168,-7198 }, { 169,-7198 }, { 170,-7198 }, + { 171,-7198 }, { 172,-7198 }, { 173,-7198 }, { 174,-7198 }, { 175,-7198 }, + { 176,-7198 }, { 177,-7198 }, { 178,-7198 }, { 179,-7198 }, { 180,-7198 }, + { 181,-7198 }, { 182,-7198 }, { 183,-7198 }, { 184,-7198 }, { 185,-7198 }, + + { 186,-7198 }, { 187,-7198 }, { 188,-7198 }, { 189,-7198 }, { 190,-7198 }, + { 191,-7198 }, { 192,-7198 }, { 193,-7198 }, { 194,-7198 }, { 195,-7198 }, + { 196,-7198 }, { 197,-7198 }, { 198,-7198 }, { 199,-7198 }, { 200,-7198 }, + { 201,-7198 }, { 202,-7198 }, { 203,-7198 }, { 204,-7198 }, { 205,-7198 }, + { 206,-7198 }, { 207,-7198 }, { 208,-7198 }, { 209,-7198 }, { 210,-7198 }, + { 211,-7198 }, { 212,-7198 }, { 213,-7198 }, { 214,-7198 }, { 215,-7198 }, + { 216,-7198 }, { 217,-7198 }, { 218,-7198 }, { 219,-7198 }, { 220,-7198 }, + { 221,-7198 }, { 222,-7198 }, { 223,-7198 }, { 224,-7198 }, { 225,-7198 }, + { 226,-7198 }, { 227,-7198 }, { 228,-7198 }, { 229,-7198 }, { 230,-7198 }, + { 231,-7198 }, { 232,-7198 }, { 233,-7198 }, { 234,-7198 }, { 235,-7198 }, + + { 236,-7198 }, { 237,-7198 }, { 238,-7198 }, { 239,-7198 }, { 240,-7198 }, + { 241,-7198 }, { 242,-7198 }, { 243,-7198 }, { 244,-7198 }, { 245,-7198 }, + { 246,-7198 }, { 247,-7198 }, { 248,-7198 }, { 249,-7198 }, { 250,-7198 }, + { 251,-7198 }, { 252,-7198 }, { 253,-7198 }, { 254,-7198 }, { 255,-7198 }, + { 0, 131 }, { 0,84668 }, { 0, 0 }, { 0,84666 }, { 0, 124 }, + { 0,84664 }, { 0, 0 }, { 0,84662 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9,-2313 }, { 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, 0 }, + { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,-2313 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41,-2311 }, { 48,-7455 }, + { 49,-7455 }, { 50,-7455 }, { 51,-7455 }, { 52,-7455 }, { 53,-7455 }, + { 54,-7455 }, { 55,-7455 }, { 56,-7455 }, { 57,-7455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-7455 }, { 66,-7455 }, { 67,-7455 }, { 68,-7455 }, + { 69,-7455 }, { 70,-7455 }, { 71,-7455 }, { 72,-7455 }, { 73,-7455 }, + { 74,-7455 }, { 75,-7455 }, { 76,-7455 }, { 77,15267 }, { 78,-7455 }, + + { 79,-7455 }, { 80,-7455 }, { 81,-7455 }, { 82,-7455 }, { 83,-7455 }, + { 84,-7455 }, { 85,-7455 }, { 86,-7455 }, { 87,-7455 }, { 88,-7455 }, + { 89,-7455 }, { 90,-7455 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-7455 }, { 0, 0 }, { 97,-7455 }, { 98,-7455 }, + { 99,-7455 }, { 100,-7455 }, { 101,-7455 }, { 102,-7455 }, { 103,-7455 }, + { 104,-7455 }, { 105,-7455 }, { 106,-7455 }, { 107,-7455 }, { 108,-7455 }, + { 109,15267 }, { 110,-7455 }, { 111,-7455 }, { 112,-7455 }, { 113,-7455 }, + { 114,-7455 }, { 115,-7455 }, { 116,-7455 }, { 117,-7455 }, { 118,-7455 }, + { 119,-7455 }, { 120,-7455 }, { 121,-7455 }, { 122,-7455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-7455 }, { 128,-7455 }, + + { 129,-7455 }, { 130,-7455 }, { 131,-7455 }, { 132,-7455 }, { 133,-7455 }, + { 134,-7455 }, { 135,-7455 }, { 136,-7455 }, { 137,-7455 }, { 138,-7455 }, + { 139,-7455 }, { 140,-7455 }, { 141,-7455 }, { 142,-7455 }, { 143,-7455 }, + { 144,-7455 }, { 145,-7455 }, { 146,-7455 }, { 147,-7455 }, { 148,-7455 }, + { 149,-7455 }, { 150,-7455 }, { 151,-7455 }, { 152,-7455 }, { 153,-7455 }, + { 154,-7455 }, { 155,-7455 }, { 156,-7455 }, { 157,-7455 }, { 158,-7455 }, + { 159,-7455 }, { 160,-7455 }, { 161,-7455 }, { 162,-7455 }, { 163,-7455 }, + { 164,-7455 }, { 165,-7455 }, { 166,-7455 }, { 167,-7455 }, { 168,-7455 }, + { 169,-7455 }, { 170,-7455 }, { 171,-7455 }, { 172,-7455 }, { 173,-7455 }, + { 174,-7455 }, { 175,-7455 }, { 176,-7455 }, { 177,-7455 }, { 178,-7455 }, + + { 179,-7455 }, { 180,-7455 }, { 181,-7455 }, { 182,-7455 }, { 183,-7455 }, + { 184,-7455 }, { 185,-7455 }, { 186,-7455 }, { 187,-7455 }, { 188,-7455 }, + { 189,-7455 }, { 190,-7455 }, { 191,-7455 }, { 192,-7455 }, { 193,-7455 }, + { 194,-7455 }, { 195,-7455 }, { 196,-7455 }, { 197,-7455 }, { 198,-7455 }, + { 199,-7455 }, { 200,-7455 }, { 201,-7455 }, { 202,-7455 }, { 203,-7455 }, + { 204,-7455 }, { 205,-7455 }, { 206,-7455 }, { 207,-7455 }, { 208,-7455 }, + { 209,-7455 }, { 210,-7455 }, { 211,-7455 }, { 212,-7455 }, { 213,-7455 }, + { 214,-7455 }, { 215,-7455 }, { 216,-7455 }, { 217,-7455 }, { 218,-7455 }, + { 219,-7455 }, { 220,-7455 }, { 221,-7455 }, { 222,-7455 }, { 223,-7455 }, + { 224,-7455 }, { 225,-7455 }, { 226,-7455 }, { 227,-7455 }, { 228,-7455 }, + + { 229,-7455 }, { 230,-7455 }, { 231,-7455 }, { 232,-7455 }, { 233,-7455 }, + { 234,-7455 }, { 235,-7455 }, { 236,-7455 }, { 237,-7455 }, { 238,-7455 }, + { 239,-7455 }, { 240,-7455 }, { 241,-7455 }, { 242,-7455 }, { 243,-7455 }, + { 244,-7455 }, { 245,-7455 }, { 246,-7455 }, { 247,-7455 }, { 248,-7455 }, + { 249,-7455 }, { 250,-7455 }, { 251,-7455 }, { 252,-7455 }, { 253,-7455 }, + { 254,-7455 }, { 255,-7455 }, { 0, 131 }, { 0,84411 }, { 0, 0 }, + { 0,84409 }, { 0, 0 }, { 0,84407 }, { 0, 126 }, { 0,84405 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,-3341 }, + { 0, 0 }, { 9, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 32,-3341 }, { 0, 0 }, { 32, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 41,-3339 }, { 0, 0 }, { 41, 2 }, { 0, 0 }, + { 0, 0 }, { 48,-7712 }, { 49,-7712 }, { 50,-7712 }, { 51,-7712 }, + { 52,-7712 }, { 53,-7712 }, { 54,-7712 }, { 55,-7712 }, { 56,-7712 }, + { 57,-7712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-7712 }, { 66,-7712 }, + { 67,-7712 }, { 68,-7712 }, { 69,-7712 }, { 70,-7712 }, { 71,-7712 }, + + { 72,-7712 }, { 73,-7712 }, { 74,-7712 }, { 75,-7712 }, { 76,-7712 }, + { 77,-7712 }, { 78,-7712 }, { 79,-7712 }, { 80,-7712 }, { 81,-7712 }, + { 82,-7712 }, { 83,-7712 }, { 84,-7712 }, { 85,-7712 }, { 86,-7712 }, + { 87,15267 }, { 88,-7712 }, { 89,-7712 }, { 90,-7712 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-7712 }, { 0, 0 }, + { 97,-7712 }, { 98,-7712 }, { 99,-7712 }, { 100,-7712 }, { 101,-7712 }, + { 102,-7712 }, { 103,-7712 }, { 104,-7712 }, { 105,-7712 }, { 106,-7712 }, + { 107,-7712 }, { 108,-7712 }, { 109,-7712 }, { 110,-7712 }, { 111,-7712 }, + { 112,-7712 }, { 113,-7712 }, { 114,-7712 }, { 115,-7712 }, { 116,-7712 }, + { 117,-7712 }, { 118,-7712 }, { 119,15267 }, { 120,-7712 }, { 121,-7712 }, + + { 122,-7712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-7712 }, { 128,-7712 }, { 129,-7712 }, { 130,-7712 }, { 131,-7712 }, + { 132,-7712 }, { 133,-7712 }, { 134,-7712 }, { 135,-7712 }, { 136,-7712 }, + { 137,-7712 }, { 138,-7712 }, { 139,-7712 }, { 140,-7712 }, { 141,-7712 }, + { 142,-7712 }, { 143,-7712 }, { 144,-7712 }, { 145,-7712 }, { 146,-7712 }, + { 147,-7712 }, { 148,-7712 }, { 149,-7712 }, { 150,-7712 }, { 151,-7712 }, + { 152,-7712 }, { 153,-7712 }, { 154,-7712 }, { 155,-7712 }, { 156,-7712 }, + { 157,-7712 }, { 158,-7712 }, { 159,-7712 }, { 160,-7712 }, { 161,-7712 }, + { 162,-7712 }, { 163,-7712 }, { 164,-7712 }, { 165,-7712 }, { 166,-7712 }, + { 167,-7712 }, { 168,-7712 }, { 169,-7712 }, { 170,-7712 }, { 171,-7712 }, + + { 172,-7712 }, { 173,-7712 }, { 174,-7712 }, { 175,-7712 }, { 176,-7712 }, + { 177,-7712 }, { 178,-7712 }, { 179,-7712 }, { 180,-7712 }, { 181,-7712 }, + { 182,-7712 }, { 183,-7712 }, { 184,-7712 }, { 185,-7712 }, { 186,-7712 }, + { 187,-7712 }, { 188,-7712 }, { 189,-7712 }, { 190,-7712 }, { 191,-7712 }, + { 192,-7712 }, { 193,-7712 }, { 194,-7712 }, { 195,-7712 }, { 196,-7712 }, + { 197,-7712 }, { 198,-7712 }, { 199,-7712 }, { 200,-7712 }, { 201,-7712 }, + { 202,-7712 }, { 203,-7712 }, { 204,-7712 }, { 205,-7712 }, { 206,-7712 }, + { 207,-7712 }, { 208,-7712 }, { 209,-7712 }, { 210,-7712 }, { 211,-7712 }, + { 212,-7712 }, { 213,-7712 }, { 214,-7712 }, { 215,-7712 }, { 216,-7712 }, + { 217,-7712 }, { 218,-7712 }, { 219,-7712 }, { 220,-7712 }, { 221,-7712 }, + + { 222,-7712 }, { 223,-7712 }, { 224,-7712 }, { 225,-7712 }, { 226,-7712 }, + { 227,-7712 }, { 228,-7712 }, { 229,-7712 }, { 230,-7712 }, { 231,-7712 }, + { 232,-7712 }, { 233,-7712 }, { 234,-7712 }, { 235,-7712 }, { 236,-7712 }, + { 237,-7712 }, { 238,-7712 }, { 239,-7712 }, { 240,-7712 }, { 241,-7712 }, + { 242,-7712 }, { 243,-7712 }, { 244,-7712 }, { 245,-7712 }, { 246,-7712 }, + { 247,-7712 }, { 248,-7712 }, { 249,-7712 }, { 250,-7712 }, { 251,-7712 }, + { 252,-7712 }, { 253,-7712 }, { 254,-7712 }, { 255,-7712 }, { 0, 23 }, + { 0,84154 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-7969 }, { 49,-7969 }, + { 50,-7969 }, { 51,-7969 }, { 52,-7969 }, { 53,-7969 }, { 54,-7969 }, + { 55,-7969 }, { 56,-7969 }, { 57,-7969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-7969 }, { 66,-7969 }, { 67,-7969 }, { 68,-7969 }, { 69,-7969 }, + { 70,-7969 }, { 71,-7969 }, { 72,-7969 }, { 73,-7969 }, { 74,-7969 }, + { 75,-7969 }, { 76,-7969 }, { 77,-7969 }, { 78,-7969 }, { 79,-7969 }, + { 80,-7969 }, { 81,-7969 }, { 82,-7969 }, { 83,-7969 }, { 84,-7969 }, + { 85,-7969 }, { 86,-7969 }, { 87,-7969 }, { 88,-7969 }, { 89,-7969 }, + { 90,-7969 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-7969 }, { 0, 0 }, { 97,-7969 }, { 98,-7969 }, { 99,-7969 }, + { 100,-7969 }, { 101,-7969 }, { 102,-7969 }, { 103,-7969 }, { 104,-7969 }, + { 105,-7969 }, { 106,-7969 }, { 107,-7969 }, { 108,-7969 }, { 109,-7969 }, + { 110,-7969 }, { 111,-7969 }, { 112,-7969 }, { 113,-7969 }, { 114,-7969 }, + + { 115,-7969 }, { 116,-7969 }, { 117,-7969 }, { 118,-7969 }, { 119,-7969 }, + { 120,-7969 }, { 121,-7969 }, { 122,-7969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-7969 }, { 128,-7969 }, { 129,-7969 }, + { 130,-7969 }, { 131,-7969 }, { 132,-7969 }, { 133,-7969 }, { 134,-7969 }, + { 135,-7969 }, { 136,-7969 }, { 137,-7969 }, { 138,-7969 }, { 139,-7969 }, + { 140,-7969 }, { 141,-7969 }, { 142,-7969 }, { 143,-7969 }, { 144,-7969 }, + { 145,-7969 }, { 146,-7969 }, { 147,-7969 }, { 148,-7969 }, { 149,-7969 }, + { 150,-7969 }, { 151,-7969 }, { 152,-7969 }, { 153,-7969 }, { 154,-7969 }, + { 155,-7969 }, { 156,-7969 }, { 157,-7969 }, { 158,-7969 }, { 159,-7969 }, + { 160,-7969 }, { 161,-7969 }, { 162,-7969 }, { 163,-7969 }, { 164,-7969 }, + + { 165,-7969 }, { 166,-7969 }, { 167,-7969 }, { 168,-7969 }, { 169,-7969 }, + { 170,-7969 }, { 171,-7969 }, { 172,-7969 }, { 173,-7969 }, { 174,-7969 }, + { 175,-7969 }, { 176,-7969 }, { 177,-7969 }, { 178,-7969 }, { 179,-7969 }, + { 180,-7969 }, { 181,-7969 }, { 182,-7969 }, { 183,-7969 }, { 184,-7969 }, + { 185,-7969 }, { 186,-7969 }, { 187,-7969 }, { 188,-7969 }, { 189,-7969 }, + { 190,-7969 }, { 191,-7969 }, { 192,-7969 }, { 193,-7969 }, { 194,-7969 }, + { 195,-7969 }, { 196,-7969 }, { 197,-7969 }, { 198,-7969 }, { 199,-7969 }, + { 200,-7969 }, { 201,-7969 }, { 202,-7969 }, { 203,-7969 }, { 204,-7969 }, + { 205,-7969 }, { 206,-7969 }, { 207,-7969 }, { 208,-7969 }, { 209,-7969 }, + { 210,-7969 }, { 211,-7969 }, { 212,-7969 }, { 213,-7969 }, { 214,-7969 }, + + { 215,-7969 }, { 216,-7969 }, { 217,-7969 }, { 218,-7969 }, { 219,-7969 }, + { 220,-7969 }, { 221,-7969 }, { 222,-7969 }, { 223,-7969 }, { 224,-7969 }, + { 225,-7969 }, { 226,-7969 }, { 227,-7969 }, { 228,-7969 }, { 229,-7969 }, + { 230,-7969 }, { 231,-7969 }, { 232,-7969 }, { 233,-7969 }, { 234,-7969 }, + { 235,-7969 }, { 236,-7969 }, { 237,-7969 }, { 238,-7969 }, { 239,-7969 }, + { 240,-7969 }, { 241,-7969 }, { 242,-7969 }, { 243,-7969 }, { 244,-7969 }, + { 245,-7969 }, { 246,-7969 }, { 247,-7969 }, { 248,-7969 }, { 249,-7969 }, + { 250,-7969 }, { 251,-7969 }, { 252,-7969 }, { 253,-7969 }, { 254,-7969 }, + { 255,-7969 }, { 0, 131 }, { 0,83897 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-8226 }, { 49,-8226 }, { 50,-8226 }, { 51,-8226 }, { 52,-8226 }, + { 53,-8226 }, { 54,-8226 }, { 55,-8226 }, { 56,-8226 }, { 57,-8226 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-8226 }, { 66,-8226 }, { 67,-8226 }, + { 68,-8226 }, { 69,-8226 }, { 70,-8226 }, { 71,-8226 }, { 72,-8226 }, + { 73,15010 }, { 74,-8226 }, { 75,-8226 }, { 76,-8226 }, { 77,-8226 }, + { 78,-8226 }, { 79,15267 }, { 80,-8226 }, { 81,-8226 }, { 82,-8226 }, + { 83,-8226 }, { 84,-8226 }, { 85,-8226 }, { 86,-8226 }, { 87,-8226 }, + { 88,-8226 }, { 89,-8226 }, { 90,-8226 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-8226 }, { 0, 0 }, { 97,-8226 }, + { 98,-8226 }, { 99,-8226 }, { 100,-8226 }, { 101,-8226 }, { 102,-8226 }, + { 103,-8226 }, { 104,-8226 }, { 105,15010 }, { 106,-8226 }, { 107,-8226 }, + + { 108,-8226 }, { 109,-8226 }, { 110,-8226 }, { 111,15267 }, { 112,-8226 }, + { 113,-8226 }, { 114,-8226 }, { 115,-8226 }, { 116,-8226 }, { 117,-8226 }, + { 118,-8226 }, { 119,-8226 }, { 120,-8226 }, { 121,-8226 }, { 122,-8226 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-8226 }, + { 128,-8226 }, { 129,-8226 }, { 130,-8226 }, { 131,-8226 }, { 132,-8226 }, + { 133,-8226 }, { 134,-8226 }, { 135,-8226 }, { 136,-8226 }, { 137,-8226 }, + { 138,-8226 }, { 139,-8226 }, { 140,-8226 }, { 141,-8226 }, { 142,-8226 }, + { 143,-8226 }, { 144,-8226 }, { 145,-8226 }, { 146,-8226 }, { 147,-8226 }, + { 148,-8226 }, { 149,-8226 }, { 150,-8226 }, { 151,-8226 }, { 152,-8226 }, + { 153,-8226 }, { 154,-8226 }, { 155,-8226 }, { 156,-8226 }, { 157,-8226 }, + + { 158,-8226 }, { 159,-8226 }, { 160,-8226 }, { 161,-8226 }, { 162,-8226 }, + { 163,-8226 }, { 164,-8226 }, { 165,-8226 }, { 166,-8226 }, { 167,-8226 }, + { 168,-8226 }, { 169,-8226 }, { 170,-8226 }, { 171,-8226 }, { 172,-8226 }, + { 173,-8226 }, { 174,-8226 }, { 175,-8226 }, { 176,-8226 }, { 177,-8226 }, + { 178,-8226 }, { 179,-8226 }, { 180,-8226 }, { 181,-8226 }, { 182,-8226 }, + { 183,-8226 }, { 184,-8226 }, { 185,-8226 }, { 186,-8226 }, { 187,-8226 }, + { 188,-8226 }, { 189,-8226 }, { 190,-8226 }, { 191,-8226 }, { 192,-8226 }, + { 193,-8226 }, { 194,-8226 }, { 195,-8226 }, { 196,-8226 }, { 197,-8226 }, + { 198,-8226 }, { 199,-8226 }, { 200,-8226 }, { 201,-8226 }, { 202,-8226 }, + { 203,-8226 }, { 204,-8226 }, { 205,-8226 }, { 206,-8226 }, { 207,-8226 }, + + { 208,-8226 }, { 209,-8226 }, { 210,-8226 }, { 211,-8226 }, { 212,-8226 }, + { 213,-8226 }, { 214,-8226 }, { 215,-8226 }, { 216,-8226 }, { 217,-8226 }, + { 218,-8226 }, { 219,-8226 }, { 220,-8226 }, { 221,-8226 }, { 222,-8226 }, + { 223,-8226 }, { 224,-8226 }, { 225,-8226 }, { 226,-8226 }, { 227,-8226 }, + { 228,-8226 }, { 229,-8226 }, { 230,-8226 }, { 231,-8226 }, { 232,-8226 }, + { 233,-8226 }, { 234,-8226 }, { 235,-8226 }, { 236,-8226 }, { 237,-8226 }, + { 238,-8226 }, { 239,-8226 }, { 240,-8226 }, { 241,-8226 }, { 242,-8226 }, + { 243,-8226 }, { 244,-8226 }, { 245,-8226 }, { 246,-8226 }, { 247,-8226 }, + { 248,-8226 }, { 249,-8226 }, { 250,-8226 }, { 251,-8226 }, { 252,-8226 }, + { 253,-8226 }, { 254,-8226 }, { 255,-8226 }, { 0, 131 }, { 0,83640 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-8483 }, { 49,-8483 }, { 50,-8483 }, + + { 51,-8483 }, { 52,-8483 }, { 53,-8483 }, { 54,-8483 }, { 55,-8483 }, + { 56,-8483 }, { 57,-8483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-8483 }, + { 66,15267 }, { 67,-8483 }, { 68,-8483 }, { 69,-8483 }, { 70,-8483 }, + { 71,-8483 }, { 72,-8483 }, { 73,-8483 }, { 74,-8483 }, { 75,-8483 }, + { 76,-8483 }, { 77,-8483 }, { 78,-8483 }, { 79,-8483 }, { 80,-8483 }, + { 81,-8483 }, { 82,-8483 }, { 83,-8483 }, { 84,-8483 }, { 85,-8483 }, + { 86,-8483 }, { 87,-8483 }, { 88,-8483 }, { 89,-8483 }, { 90,-8483 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-8483 }, + { 0, 0 }, { 97,-8483 }, { 98,15267 }, { 99,-8483 }, { 100,-8483 }, + + { 101,-8483 }, { 102,-8483 }, { 103,-8483 }, { 104,-8483 }, { 105,-8483 }, + { 106,-8483 }, { 107,-8483 }, { 108,-8483 }, { 109,-8483 }, { 110,-8483 }, + { 111,-8483 }, { 112,-8483 }, { 113,-8483 }, { 114,-8483 }, { 115,-8483 }, + { 116,-8483 }, { 117,-8483 }, { 118,-8483 }, { 119,-8483 }, { 120,-8483 }, + { 121,-8483 }, { 122,-8483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-8483 }, { 128,-8483 }, { 129,-8483 }, { 130,-8483 }, + { 131,-8483 }, { 132,-8483 }, { 133,-8483 }, { 134,-8483 }, { 135,-8483 }, + { 136,-8483 }, { 137,-8483 }, { 138,-8483 }, { 139,-8483 }, { 140,-8483 }, + { 141,-8483 }, { 142,-8483 }, { 143,-8483 }, { 144,-8483 }, { 145,-8483 }, + { 146,-8483 }, { 147,-8483 }, { 148,-8483 }, { 149,-8483 }, { 150,-8483 }, + + { 151,-8483 }, { 152,-8483 }, { 153,-8483 }, { 154,-8483 }, { 155,-8483 }, + { 156,-8483 }, { 157,-8483 }, { 158,-8483 }, { 159,-8483 }, { 160,-8483 }, + { 161,-8483 }, { 162,-8483 }, { 163,-8483 }, { 164,-8483 }, { 165,-8483 }, + { 166,-8483 }, { 167,-8483 }, { 168,-8483 }, { 169,-8483 }, { 170,-8483 }, + { 171,-8483 }, { 172,-8483 }, { 173,-8483 }, { 174,-8483 }, { 175,-8483 }, + { 176,-8483 }, { 177,-8483 }, { 178,-8483 }, { 179,-8483 }, { 180,-8483 }, + { 181,-8483 }, { 182,-8483 }, { 183,-8483 }, { 184,-8483 }, { 185,-8483 }, + { 186,-8483 }, { 187,-8483 }, { 188,-8483 }, { 189,-8483 }, { 190,-8483 }, + { 191,-8483 }, { 192,-8483 }, { 193,-8483 }, { 194,-8483 }, { 195,-8483 }, + { 196,-8483 }, { 197,-8483 }, { 198,-8483 }, { 199,-8483 }, { 200,-8483 }, + + { 201,-8483 }, { 202,-8483 }, { 203,-8483 }, { 204,-8483 }, { 205,-8483 }, + { 206,-8483 }, { 207,-8483 }, { 208,-8483 }, { 209,-8483 }, { 210,-8483 }, + { 211,-8483 }, { 212,-8483 }, { 213,-8483 }, { 214,-8483 }, { 215,-8483 }, + { 216,-8483 }, { 217,-8483 }, { 218,-8483 }, { 219,-8483 }, { 220,-8483 }, + { 221,-8483 }, { 222,-8483 }, { 223,-8483 }, { 224,-8483 }, { 225,-8483 }, + { 226,-8483 }, { 227,-8483 }, { 228,-8483 }, { 229,-8483 }, { 230,-8483 }, + { 231,-8483 }, { 232,-8483 }, { 233,-8483 }, { 234,-8483 }, { 235,-8483 }, + { 236,-8483 }, { 237,-8483 }, { 238,-8483 }, { 239,-8483 }, { 240,-8483 }, + { 241,-8483 }, { 242,-8483 }, { 243,-8483 }, { 244,-8483 }, { 245,-8483 }, + { 246,-8483 }, { 247,-8483 }, { 248,-8483 }, { 249,-8483 }, { 250,-8483 }, + + { 251,-8483 }, { 252,-8483 }, { 253,-8483 }, { 254,-8483 }, { 255,-8483 }, + { 0, 131 }, { 0,83383 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-8740 }, + { 49,-8740 }, { 50,-8740 }, { 51,-8740 }, { 52,-8740 }, { 53,-8740 }, + { 54,-8740 }, { 55,-8740 }, { 56,-8740 }, { 57,-8740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-8740 }, { 66,-8740 }, { 67,-8740 }, { 68,-8740 }, + { 69,-8740 }, { 70,-8740 }, { 71,-8740 }, { 72,-8740 }, { 73,-8740 }, + { 74,-8740 }, { 75,-8740 }, { 76,-8740 }, { 77,-8740 }, { 78,-8740 }, + { 79,-8740 }, { 80,-8740 }, { 81,15267 }, { 82,-8740 }, { 83,-8740 }, + { 84,15524 }, { 85,-8740 }, { 86,-8740 }, { 87,-8740 }, { 88,-8740 }, + { 89,-8740 }, { 90,-8740 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-8740 }, { 0, 0 }, { 97,-8740 }, { 98,-8740 }, + { 99,-8740 }, { 100,-8740 }, { 101,-8740 }, { 102,-8740 }, { 103,-8740 }, + { 104,-8740 }, { 105,-8740 }, { 106,-8740 }, { 107,-8740 }, { 108,-8740 }, + { 109,-8740 }, { 110,-8740 }, { 111,-8740 }, { 112,-8740 }, { 113,15267 }, + { 114,-8740 }, { 115,-8740 }, { 116,15524 }, { 117,-8740 }, { 118,-8740 }, + { 119,-8740 }, { 120,-8740 }, { 121,-8740 }, { 122,-8740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-8740 }, { 128,-8740 }, + { 129,-8740 }, { 130,-8740 }, { 131,-8740 }, { 132,-8740 }, { 133,-8740 }, + { 134,-8740 }, { 135,-8740 }, { 136,-8740 }, { 137,-8740 }, { 138,-8740 }, + { 139,-8740 }, { 140,-8740 }, { 141,-8740 }, { 142,-8740 }, { 143,-8740 }, + + { 144,-8740 }, { 145,-8740 }, { 146,-8740 }, { 147,-8740 }, { 148,-8740 }, + { 149,-8740 }, { 150,-8740 }, { 151,-8740 }, { 152,-8740 }, { 153,-8740 }, + { 154,-8740 }, { 155,-8740 }, { 156,-8740 }, { 157,-8740 }, { 158,-8740 }, + { 159,-8740 }, { 160,-8740 }, { 161,-8740 }, { 162,-8740 }, { 163,-8740 }, + { 164,-8740 }, { 165,-8740 }, { 166,-8740 }, { 167,-8740 }, { 168,-8740 }, + { 169,-8740 }, { 170,-8740 }, { 171,-8740 }, { 172,-8740 }, { 173,-8740 }, + { 174,-8740 }, { 175,-8740 }, { 176,-8740 }, { 177,-8740 }, { 178,-8740 }, + { 179,-8740 }, { 180,-8740 }, { 181,-8740 }, { 182,-8740 }, { 183,-8740 }, + { 184,-8740 }, { 185,-8740 }, { 186,-8740 }, { 187,-8740 }, { 188,-8740 }, + { 189,-8740 }, { 190,-8740 }, { 191,-8740 }, { 192,-8740 }, { 193,-8740 }, + + { 194,-8740 }, { 195,-8740 }, { 196,-8740 }, { 197,-8740 }, { 198,-8740 }, + { 199,-8740 }, { 200,-8740 }, { 201,-8740 }, { 202,-8740 }, { 203,-8740 }, + { 204,-8740 }, { 205,-8740 }, { 206,-8740 }, { 207,-8740 }, { 208,-8740 }, + { 209,-8740 }, { 210,-8740 }, { 211,-8740 }, { 212,-8740 }, { 213,-8740 }, + { 214,-8740 }, { 215,-8740 }, { 216,-8740 }, { 217,-8740 }, { 218,-8740 }, + { 219,-8740 }, { 220,-8740 }, { 221,-8740 }, { 222,-8740 }, { 223,-8740 }, + { 224,-8740 }, { 225,-8740 }, { 226,-8740 }, { 227,-8740 }, { 228,-8740 }, + { 229,-8740 }, { 230,-8740 }, { 231,-8740 }, { 232,-8740 }, { 233,-8740 }, + { 234,-8740 }, { 235,-8740 }, { 236,-8740 }, { 237,-8740 }, { 238,-8740 }, + { 239,-8740 }, { 240,-8740 }, { 241,-8740 }, { 242,-8740 }, { 243,-8740 }, + + { 244,-8740 }, { 245,-8740 }, { 246,-8740 }, { 247,-8740 }, { 248,-8740 }, + { 249,-8740 }, { 250,-8740 }, { 251,-8740 }, { 252,-8740 }, { 253,-8740 }, + { 254,-8740 }, { 255,-8740 }, { 0, 131 }, { 0,83126 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-8997 }, { 49,-8997 }, { 50,-8997 }, { 51,-8997 }, + { 52,-8997 }, { 53,-8997 }, { 54,-8997 }, { 55,-8997 }, { 56,-8997 }, + { 57,-8997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,15524 }, { 66,-8997 }, + { 67,-8997 }, { 68,-8997 }, { 69,-8997 }, { 70,-8997 }, { 71,-8997 }, + { 72,-8997 }, { 73,-8997 }, { 74,-8997 }, { 75,-8997 }, { 76,-8997 }, + { 77,-8997 }, { 78,-8997 }, { 79,-8997 }, { 80,-8997 }, { 81,-8997 }, + { 82,-8997 }, { 83,-8997 }, { 84,-8997 }, { 85,-8997 }, { 86,-8997 }, + + { 87,-8997 }, { 88,-8997 }, { 89,-8997 }, { 90,-8997 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-8997 }, { 0, 0 }, + { 97,15524 }, { 98,-8997 }, { 99,-8997 }, { 100,-8997 }, { 101,-8997 }, + { 102,-8997 }, { 103,-8997 }, { 104,-8997 }, { 105,-8997 }, { 106,-8997 }, + { 107,-8997 }, { 108,-8997 }, { 109,-8997 }, { 110,-8997 }, { 111,-8997 }, + { 112,-8997 }, { 113,-8997 }, { 114,-8997 }, { 115,-8997 }, { 116,-8997 }, + { 117,-8997 }, { 118,-8997 }, { 119,-8997 }, { 120,-8997 }, { 121,-8997 }, + { 122,-8997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-8997 }, { 128,-8997 }, { 129,-8997 }, { 130,-8997 }, { 131,-8997 }, + { 132,-8997 }, { 133,-8997 }, { 134,-8997 }, { 135,-8997 }, { 136,-8997 }, + + { 137,-8997 }, { 138,-8997 }, { 139,-8997 }, { 140,-8997 }, { 141,-8997 }, + { 142,-8997 }, { 143,-8997 }, { 144,-8997 }, { 145,-8997 }, { 146,-8997 }, + { 147,-8997 }, { 148,-8997 }, { 149,-8997 }, { 150,-8997 }, { 151,-8997 }, + { 152,-8997 }, { 153,-8997 }, { 154,-8997 }, { 155,-8997 }, { 156,-8997 }, + { 157,-8997 }, { 158,-8997 }, { 159,-8997 }, { 160,-8997 }, { 161,-8997 }, + { 162,-8997 }, { 163,-8997 }, { 164,-8997 }, { 165,-8997 }, { 166,-8997 }, + { 167,-8997 }, { 168,-8997 }, { 169,-8997 }, { 170,-8997 }, { 171,-8997 }, + { 172,-8997 }, { 173,-8997 }, { 174,-8997 }, { 175,-8997 }, { 176,-8997 }, + { 177,-8997 }, { 178,-8997 }, { 179,-8997 }, { 180,-8997 }, { 181,-8997 }, + { 182,-8997 }, { 183,-8997 }, { 184,-8997 }, { 185,-8997 }, { 186,-8997 }, + + { 187,-8997 }, { 188,-8997 }, { 189,-8997 }, { 190,-8997 }, { 191,-8997 }, + { 192,-8997 }, { 193,-8997 }, { 194,-8997 }, { 195,-8997 }, { 196,-8997 }, + { 197,-8997 }, { 198,-8997 }, { 199,-8997 }, { 200,-8997 }, { 201,-8997 }, + { 202,-8997 }, { 203,-8997 }, { 204,-8997 }, { 205,-8997 }, { 206,-8997 }, + { 207,-8997 }, { 208,-8997 }, { 209,-8997 }, { 210,-8997 }, { 211,-8997 }, + { 212,-8997 }, { 213,-8997 }, { 214,-8997 }, { 215,-8997 }, { 216,-8997 }, + { 217,-8997 }, { 218,-8997 }, { 219,-8997 }, { 220,-8997 }, { 221,-8997 }, + { 222,-8997 }, { 223,-8997 }, { 224,-8997 }, { 225,-8997 }, { 226,-8997 }, + { 227,-8997 }, { 228,-8997 }, { 229,-8997 }, { 230,-8997 }, { 231,-8997 }, + { 232,-8997 }, { 233,-8997 }, { 234,-8997 }, { 235,-8997 }, { 236,-8997 }, + + { 237,-8997 }, { 238,-8997 }, { 239,-8997 }, { 240,-8997 }, { 241,-8997 }, + { 242,-8997 }, { 243,-8997 }, { 244,-8997 }, { 245,-8997 }, { 246,-8997 }, + { 247,-8997 }, { 248,-8997 }, { 249,-8997 }, { 250,-8997 }, { 251,-8997 }, + { 252,-8997 }, { 253,-8997 }, { 254,-8997 }, { 255,-8997 }, { 0, 131 }, + { 0,82869 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-9254 }, { 49,-9254 }, + { 50,-9254 }, { 51,-9254 }, { 52,-9254 }, { 53,-9254 }, { 54,-9254 }, + { 55,-9254 }, { 56,-9254 }, { 57,-9254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-9254 }, { 66,-9254 }, { 67,-9254 }, { 68,-9254 }, { 69,-9254 }, + { 70,-9254 }, { 71,-9254 }, { 72,-9254 }, { 73,15524 }, { 74,-9254 }, + { 75,-9254 }, { 76,-9254 }, { 77,-9254 }, { 78,-9254 }, { 79,-9254 }, + + { 80,-9254 }, { 81,-9254 }, { 82,-9254 }, { 83,-9254 }, { 84,-9254 }, + { 85,-9254 }, { 86,-9254 }, { 87,-9254 }, { 88,-9254 }, { 89,-9254 }, + { 90,-9254 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-9254 }, { 0, 0 }, { 97,-9254 }, { 98,-9254 }, { 99,-9254 }, + { 100,-9254 }, { 101,-9254 }, { 102,-9254 }, { 103,-9254 }, { 104,-9254 }, + { 105,15524 }, { 106,-9254 }, { 107,-9254 }, { 108,-9254 }, { 109,-9254 }, + { 110,-9254 }, { 111,-9254 }, { 112,-9254 }, { 113,-9254 }, { 114,-9254 }, + { 115,-9254 }, { 116,-9254 }, { 117,-9254 }, { 118,-9254 }, { 119,-9254 }, + { 120,-9254 }, { 121,-9254 }, { 122,-9254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-9254 }, { 128,-9254 }, { 129,-9254 }, + + { 130,-9254 }, { 131,-9254 }, { 132,-9254 }, { 133,-9254 }, { 134,-9254 }, + { 135,-9254 }, { 136,-9254 }, { 137,-9254 }, { 138,-9254 }, { 139,-9254 }, + { 140,-9254 }, { 141,-9254 }, { 142,-9254 }, { 143,-9254 }, { 144,-9254 }, + { 145,-9254 }, { 146,-9254 }, { 147,-9254 }, { 148,-9254 }, { 149,-9254 }, + { 150,-9254 }, { 151,-9254 }, { 152,-9254 }, { 153,-9254 }, { 154,-9254 }, + { 155,-9254 }, { 156,-9254 }, { 157,-9254 }, { 158,-9254 }, { 159,-9254 }, + { 160,-9254 }, { 161,-9254 }, { 162,-9254 }, { 163,-9254 }, { 164,-9254 }, + { 165,-9254 }, { 166,-9254 }, { 167,-9254 }, { 168,-9254 }, { 169,-9254 }, + { 170,-9254 }, { 171,-9254 }, { 172,-9254 }, { 173,-9254 }, { 174,-9254 }, + { 175,-9254 }, { 176,-9254 }, { 177,-9254 }, { 178,-9254 }, { 179,-9254 }, + + { 180,-9254 }, { 181,-9254 }, { 182,-9254 }, { 183,-9254 }, { 184,-9254 }, + { 185,-9254 }, { 186,-9254 }, { 187,-9254 }, { 188,-9254 }, { 189,-9254 }, + { 190,-9254 }, { 191,-9254 }, { 192,-9254 }, { 193,-9254 }, { 194,-9254 }, + { 195,-9254 }, { 196,-9254 }, { 197,-9254 }, { 198,-9254 }, { 199,-9254 }, + { 200,-9254 }, { 201,-9254 }, { 202,-9254 }, { 203,-9254 }, { 204,-9254 }, + { 205,-9254 }, { 206,-9254 }, { 207,-9254 }, { 208,-9254 }, { 209,-9254 }, + { 210,-9254 }, { 211,-9254 }, { 212,-9254 }, { 213,-9254 }, { 214,-9254 }, + { 215,-9254 }, { 216,-9254 }, { 217,-9254 }, { 218,-9254 }, { 219,-9254 }, + { 220,-9254 }, { 221,-9254 }, { 222,-9254 }, { 223,-9254 }, { 224,-9254 }, + { 225,-9254 }, { 226,-9254 }, { 227,-9254 }, { 228,-9254 }, { 229,-9254 }, + + { 230,-9254 }, { 231,-9254 }, { 232,-9254 }, { 233,-9254 }, { 234,-9254 }, + { 235,-9254 }, { 236,-9254 }, { 237,-9254 }, { 238,-9254 }, { 239,-9254 }, + { 240,-9254 }, { 241,-9254 }, { 242,-9254 }, { 243,-9254 }, { 244,-9254 }, + { 245,-9254 }, { 246,-9254 }, { 247,-9254 }, { 248,-9254 }, { 249,-9254 }, + { 250,-9254 }, { 251,-9254 }, { 252,-9254 }, { 253,-9254 }, { 254,-9254 }, + { 255,-9254 }, { 0, 131 }, { 0,82612 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-9511 }, { 49,-9511 }, { 50,-9511 }, { 51,-9511 }, { 52,-9511 }, + { 53,-9511 }, { 54,-9511 }, { 55,-9511 }, { 56,-9511 }, { 57,-9511 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-9511 }, { 66,-9511 }, { 67,-9511 }, + { 68,-9511 }, { 69,-9511 }, { 70,-9511 }, { 71,-9511 }, { 72,-9511 }, + + { 73,-9511 }, { 74,-9511 }, { 75,-9511 }, { 76,-9511 }, { 77,-9511 }, + { 78,-9511 }, { 79,-9511 }, { 80,-9511 }, { 81,-9511 }, { 82,15524 }, + { 83,-9511 }, { 84,-9511 }, { 85,-9511 }, { 86,-9511 }, { 87,-9511 }, + { 88,-9511 }, { 89,-9511 }, { 90,-9511 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-9511 }, { 0, 0 }, { 97,-9511 }, + { 98,-9511 }, { 99,-9511 }, { 100,-9511 }, { 101,-9511 }, { 102,-9511 }, + { 103,-9511 }, { 104,-9511 }, { 105,-9511 }, { 106,-9511 }, { 107,-9511 }, + { 108,-9511 }, { 109,-9511 }, { 110,-9511 }, { 111,-9511 }, { 112,-9511 }, + { 113,-9511 }, { 114,15524 }, { 115,-9511 }, { 116,-9511 }, { 117,-9511 }, + { 118,-9511 }, { 119,-9511 }, { 120,-9511 }, { 121,-9511 }, { 122,-9511 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-9511 }, + { 128,-9511 }, { 129,-9511 }, { 130,-9511 }, { 131,-9511 }, { 132,-9511 }, + { 133,-9511 }, { 134,-9511 }, { 135,-9511 }, { 136,-9511 }, { 137,-9511 }, + { 138,-9511 }, { 139,-9511 }, { 140,-9511 }, { 141,-9511 }, { 142,-9511 }, + { 143,-9511 }, { 144,-9511 }, { 145,-9511 }, { 146,-9511 }, { 147,-9511 }, + { 148,-9511 }, { 149,-9511 }, { 150,-9511 }, { 151,-9511 }, { 152,-9511 }, + { 153,-9511 }, { 154,-9511 }, { 155,-9511 }, { 156,-9511 }, { 157,-9511 }, + { 158,-9511 }, { 159,-9511 }, { 160,-9511 }, { 161,-9511 }, { 162,-9511 }, + { 163,-9511 }, { 164,-9511 }, { 165,-9511 }, { 166,-9511 }, { 167,-9511 }, + { 168,-9511 }, { 169,-9511 }, { 170,-9511 }, { 171,-9511 }, { 172,-9511 }, + + { 173,-9511 }, { 174,-9511 }, { 175,-9511 }, { 176,-9511 }, { 177,-9511 }, + { 178,-9511 }, { 179,-9511 }, { 180,-9511 }, { 181,-9511 }, { 182,-9511 }, + { 183,-9511 }, { 184,-9511 }, { 185,-9511 }, { 186,-9511 }, { 187,-9511 }, + { 188,-9511 }, { 189,-9511 }, { 190,-9511 }, { 191,-9511 }, { 192,-9511 }, + { 193,-9511 }, { 194,-9511 }, { 195,-9511 }, { 196,-9511 }, { 197,-9511 }, + { 198,-9511 }, { 199,-9511 }, { 200,-9511 }, { 201,-9511 }, { 202,-9511 }, + { 203,-9511 }, { 204,-9511 }, { 205,-9511 }, { 206,-9511 }, { 207,-9511 }, + { 208,-9511 }, { 209,-9511 }, { 210,-9511 }, { 211,-9511 }, { 212,-9511 }, + { 213,-9511 }, { 214,-9511 }, { 215,-9511 }, { 216,-9511 }, { 217,-9511 }, + { 218,-9511 }, { 219,-9511 }, { 220,-9511 }, { 221,-9511 }, { 222,-9511 }, + + { 223,-9511 }, { 224,-9511 }, { 225,-9511 }, { 226,-9511 }, { 227,-9511 }, + { 228,-9511 }, { 229,-9511 }, { 230,-9511 }, { 231,-9511 }, { 232,-9511 }, + { 233,-9511 }, { 234,-9511 }, { 235,-9511 }, { 236,-9511 }, { 237,-9511 }, + { 238,-9511 }, { 239,-9511 }, { 240,-9511 }, { 241,-9511 }, { 242,-9511 }, + { 243,-9511 }, { 244,-9511 }, { 245,-9511 }, { 246,-9511 }, { 247,-9511 }, + { 248,-9511 }, { 249,-9511 }, { 250,-9511 }, { 251,-9511 }, { 252,-9511 }, + { 253,-9511 }, { 254,-9511 }, { 255,-9511 }, { 0, 131 }, { 0,82355 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-9768 }, { 49,-9768 }, { 50,-9768 }, + { 51,-9768 }, { 52,-9768 }, { 53,-9768 }, { 54,-9768 }, { 55,-9768 }, + { 56,-9768 }, { 57,-9768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,15524 }, + + { 66,-9768 }, { 67,-9768 }, { 68,-9768 }, { 69,-9768 }, { 70,-9768 }, + { 71,-9768 }, { 72,-9768 }, { 73,-9768 }, { 74,-9768 }, { 75,-9768 }, + { 76,-9768 }, { 77,-9768 }, { 78,-9768 }, { 79,-9768 }, { 80,-9768 }, + { 81,-9768 }, { 82,-9768 }, { 83,-9768 }, { 84,-9768 }, { 85,-9768 }, + { 86,-9768 }, { 87,-9768 }, { 88,-9768 }, { 89,15781 }, { 90,-9768 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-9768 }, + { 0, 0 }, { 97,15524 }, { 98,-9768 }, { 99,-9768 }, { 100,-9768 }, + { 101,-9768 }, { 102,-9768 }, { 103,-9768 }, { 104,-9768 }, { 105,-9768 }, + { 106,-9768 }, { 107,-9768 }, { 108,-9768 }, { 109,-9768 }, { 110,-9768 }, + { 111,-9768 }, { 112,-9768 }, { 113,-9768 }, { 114,-9768 }, { 115,-9768 }, + + { 116,-9768 }, { 117,-9768 }, { 118,-9768 }, { 119,-9768 }, { 120,-9768 }, + { 121,15781 }, { 122,-9768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-9768 }, { 128,-9768 }, { 129,-9768 }, { 130,-9768 }, + { 131,-9768 }, { 132,-9768 }, { 133,-9768 }, { 134,-9768 }, { 135,-9768 }, + { 136,-9768 }, { 137,-9768 }, { 138,-9768 }, { 139,-9768 }, { 140,-9768 }, + { 141,-9768 }, { 142,-9768 }, { 143,-9768 }, { 144,-9768 }, { 145,-9768 }, + { 146,-9768 }, { 147,-9768 }, { 148,-9768 }, { 149,-9768 }, { 150,-9768 }, + { 151,-9768 }, { 152,-9768 }, { 153,-9768 }, { 154,-9768 }, { 155,-9768 }, + { 156,-9768 }, { 157,-9768 }, { 158,-9768 }, { 159,-9768 }, { 160,-9768 }, + { 161,-9768 }, { 162,-9768 }, { 163,-9768 }, { 164,-9768 }, { 165,-9768 }, + + { 166,-9768 }, { 167,-9768 }, { 168,-9768 }, { 169,-9768 }, { 170,-9768 }, + { 171,-9768 }, { 172,-9768 }, { 173,-9768 }, { 174,-9768 }, { 175,-9768 }, + { 176,-9768 }, { 177,-9768 }, { 178,-9768 }, { 179,-9768 }, { 180,-9768 }, + { 181,-9768 }, { 182,-9768 }, { 183,-9768 }, { 184,-9768 }, { 185,-9768 }, + { 186,-9768 }, { 187,-9768 }, { 188,-9768 }, { 189,-9768 }, { 190,-9768 }, + { 191,-9768 }, { 192,-9768 }, { 193,-9768 }, { 194,-9768 }, { 195,-9768 }, + { 196,-9768 }, { 197,-9768 }, { 198,-9768 }, { 199,-9768 }, { 200,-9768 }, + { 201,-9768 }, { 202,-9768 }, { 203,-9768 }, { 204,-9768 }, { 205,-9768 }, + { 206,-9768 }, { 207,-9768 }, { 208,-9768 }, { 209,-9768 }, { 210,-9768 }, + { 211,-9768 }, { 212,-9768 }, { 213,-9768 }, { 214,-9768 }, { 215,-9768 }, + + { 216,-9768 }, { 217,-9768 }, { 218,-9768 }, { 219,-9768 }, { 220,-9768 }, + { 221,-9768 }, { 222,-9768 }, { 223,-9768 }, { 224,-9768 }, { 225,-9768 }, + { 226,-9768 }, { 227,-9768 }, { 228,-9768 }, { 229,-9768 }, { 230,-9768 }, + { 231,-9768 }, { 232,-9768 }, { 233,-9768 }, { 234,-9768 }, { 235,-9768 }, + { 236,-9768 }, { 237,-9768 }, { 238,-9768 }, { 239,-9768 }, { 240,-9768 }, + { 241,-9768 }, { 242,-9768 }, { 243,-9768 }, { 244,-9768 }, { 245,-9768 }, + { 246,-9768 }, { 247,-9768 }, { 248,-9768 }, { 249,-9768 }, { 250,-9768 }, + { 251,-9768 }, { 252,-9768 }, { 253,-9768 }, { 254,-9768 }, { 255,-9768 }, + { 0, 131 }, { 0,82098 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-10025 }, + { 49,-10025 }, { 50,-10025 }, { 51,-10025 }, { 52,-10025 }, { 53,-10025 }, + { 54,-10025 }, { 55,-10025 }, { 56,-10025 }, { 57,-10025 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-10025 }, { 66,-10025 }, { 67,-10025 }, { 68,-10025 }, + { 69,-10025 }, { 70,-10025 }, { 71,-10025 }, { 72,-10025 }, { 73,-10025 }, + { 74,-10025 }, { 75,-10025 }, { 76,-10025 }, { 77,-10025 }, { 78,-10025 }, + { 79,-10025 }, { 80,-10025 }, { 81,-10025 }, { 82,-10025 }, { 83,15781 }, + { 84,-10025 }, { 85,-10025 }, { 86,-10025 }, { 87,-10025 }, { 88,-10025 }, + { 89,-10025 }, { 90,-10025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-10025 }, { 0, 0 }, { 97,-10025 }, { 98,-10025 }, + { 99,-10025 }, { 100,-10025 }, { 101,-10025 }, { 102,-10025 }, { 103,-10025 }, + { 104,-10025 }, { 105,-10025 }, { 106,-10025 }, { 107,-10025 }, { 108,-10025 }, + + { 109,-10025 }, { 110,-10025 }, { 111,-10025 }, { 112,-10025 }, { 113,-10025 }, + { 114,-10025 }, { 115,15781 }, { 116,-10025 }, { 117,-10025 }, { 118,-10025 }, + { 119,-10025 }, { 120,-10025 }, { 121,-10025 }, { 122,-10025 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-10025 }, { 128,-10025 }, + { 129,-10025 }, { 130,-10025 }, { 131,-10025 }, { 132,-10025 }, { 133,-10025 }, + { 134,-10025 }, { 135,-10025 }, { 136,-10025 }, { 137,-10025 }, { 138,-10025 }, + { 139,-10025 }, { 140,-10025 }, { 141,-10025 }, { 142,-10025 }, { 143,-10025 }, + { 144,-10025 }, { 145,-10025 }, { 146,-10025 }, { 147,-10025 }, { 148,-10025 }, + { 149,-10025 }, { 150,-10025 }, { 151,-10025 }, { 152,-10025 }, { 153,-10025 }, + { 154,-10025 }, { 155,-10025 }, { 156,-10025 }, { 157,-10025 }, { 158,-10025 }, + + { 159,-10025 }, { 160,-10025 }, { 161,-10025 }, { 162,-10025 }, { 163,-10025 }, + { 164,-10025 }, { 165,-10025 }, { 166,-10025 }, { 167,-10025 }, { 168,-10025 }, + { 169,-10025 }, { 170,-10025 }, { 171,-10025 }, { 172,-10025 }, { 173,-10025 }, + { 174,-10025 }, { 175,-10025 }, { 176,-10025 }, { 177,-10025 }, { 178,-10025 }, + { 179,-10025 }, { 180,-10025 }, { 181,-10025 }, { 182,-10025 }, { 183,-10025 }, + { 184,-10025 }, { 185,-10025 }, { 186,-10025 }, { 187,-10025 }, { 188,-10025 }, + { 189,-10025 }, { 190,-10025 }, { 191,-10025 }, { 192,-10025 }, { 193,-10025 }, + { 194,-10025 }, { 195,-10025 }, { 196,-10025 }, { 197,-10025 }, { 198,-10025 }, + { 199,-10025 }, { 200,-10025 }, { 201,-10025 }, { 202,-10025 }, { 203,-10025 }, + { 204,-10025 }, { 205,-10025 }, { 206,-10025 }, { 207,-10025 }, { 208,-10025 }, + + { 209,-10025 }, { 210,-10025 }, { 211,-10025 }, { 212,-10025 }, { 213,-10025 }, + { 214,-10025 }, { 215,-10025 }, { 216,-10025 }, { 217,-10025 }, { 218,-10025 }, + { 219,-10025 }, { 220,-10025 }, { 221,-10025 }, { 222,-10025 }, { 223,-10025 }, + { 224,-10025 }, { 225,-10025 }, { 226,-10025 }, { 227,-10025 }, { 228,-10025 }, + { 229,-10025 }, { 230,-10025 }, { 231,-10025 }, { 232,-10025 }, { 233,-10025 }, + { 234,-10025 }, { 235,-10025 }, { 236,-10025 }, { 237,-10025 }, { 238,-10025 }, + { 239,-10025 }, { 240,-10025 }, { 241,-10025 }, { 242,-10025 }, { 243,-10025 }, + { 244,-10025 }, { 245,-10025 }, { 246,-10025 }, { 247,-10025 }, { 248,-10025 }, + { 249,-10025 }, { 250,-10025 }, { 251,-10025 }, { 252,-10025 }, { 253,-10025 }, + { 254,-10025 }, { 255,-10025 }, { 0, 131 }, { 0,81841 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-10282 }, { 49,-10282 }, { 50,-10282 }, { 51,-10282 }, + + { 52,-10282 }, { 53,-10282 }, { 54,-10282 }, { 55,-10282 }, { 56,-10282 }, + { 57,-10282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-10282 }, { 66,-10282 }, + { 67,-10282 }, { 68,-10282 }, { 69,15781 }, { 70,-10282 }, { 71,-10282 }, + { 72,-10282 }, { 73,-10282 }, { 74,-10282 }, { 75,-10282 }, { 76,-10282 }, + { 77,-10282 }, { 78,-10282 }, { 79,-10282 }, { 80,-10282 }, { 81,-10282 }, + { 82,-10282 }, { 83,-10282 }, { 84,-10282 }, { 85,-10282 }, { 86,-10282 }, + { 87,-10282 }, { 88,-10282 }, { 89,-10282 }, { 90,-10282 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-10282 }, { 0, 0 }, + { 97,-10282 }, { 98,-10282 }, { 99,-10282 }, { 100,-10282 }, { 101,15781 }, + + { 102,-10282 }, { 103,-10282 }, { 104,-10282 }, { 105,-10282 }, { 106,-10282 }, + { 107,-10282 }, { 108,-10282 }, { 109,-10282 }, { 110,-10282 }, { 111,-10282 }, + { 112,-10282 }, { 113,-10282 }, { 114,-10282 }, { 115,-10282 }, { 116,-10282 }, + { 117,-10282 }, { 118,-10282 }, { 119,-10282 }, { 120,-10282 }, { 121,-10282 }, + { 122,-10282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-10282 }, { 128,-10282 }, { 129,-10282 }, { 130,-10282 }, { 131,-10282 }, + { 132,-10282 }, { 133,-10282 }, { 134,-10282 }, { 135,-10282 }, { 136,-10282 }, + { 137,-10282 }, { 138,-10282 }, { 139,-10282 }, { 140,-10282 }, { 141,-10282 }, + { 142,-10282 }, { 143,-10282 }, { 144,-10282 }, { 145,-10282 }, { 146,-10282 }, + { 147,-10282 }, { 148,-10282 }, { 149,-10282 }, { 150,-10282 }, { 151,-10282 }, + + { 152,-10282 }, { 153,-10282 }, { 154,-10282 }, { 155,-10282 }, { 156,-10282 }, + { 157,-10282 }, { 158,-10282 }, { 159,-10282 }, { 160,-10282 }, { 161,-10282 }, + { 162,-10282 }, { 163,-10282 }, { 164,-10282 }, { 165,-10282 }, { 166,-10282 }, + { 167,-10282 }, { 168,-10282 }, { 169,-10282 }, { 170,-10282 }, { 171,-10282 }, + { 172,-10282 }, { 173,-10282 }, { 174,-10282 }, { 175,-10282 }, { 176,-10282 }, + { 177,-10282 }, { 178,-10282 }, { 179,-10282 }, { 180,-10282 }, { 181,-10282 }, + { 182,-10282 }, { 183,-10282 }, { 184,-10282 }, { 185,-10282 }, { 186,-10282 }, + { 187,-10282 }, { 188,-10282 }, { 189,-10282 }, { 190,-10282 }, { 191,-10282 }, + { 192,-10282 }, { 193,-10282 }, { 194,-10282 }, { 195,-10282 }, { 196,-10282 }, + { 197,-10282 }, { 198,-10282 }, { 199,-10282 }, { 200,-10282 }, { 201,-10282 }, + + { 202,-10282 }, { 203,-10282 }, { 204,-10282 }, { 205,-10282 }, { 206,-10282 }, + { 207,-10282 }, { 208,-10282 }, { 209,-10282 }, { 210,-10282 }, { 211,-10282 }, + { 212,-10282 }, { 213,-10282 }, { 214,-10282 }, { 215,-10282 }, { 216,-10282 }, + { 217,-10282 }, { 218,-10282 }, { 219,-10282 }, { 220,-10282 }, { 221,-10282 }, + { 222,-10282 }, { 223,-10282 }, { 224,-10282 }, { 225,-10282 }, { 226,-10282 }, + { 227,-10282 }, { 228,-10282 }, { 229,-10282 }, { 230,-10282 }, { 231,-10282 }, + { 232,-10282 }, { 233,-10282 }, { 234,-10282 }, { 235,-10282 }, { 236,-10282 }, + { 237,-10282 }, { 238,-10282 }, { 239,-10282 }, { 240,-10282 }, { 241,-10282 }, + { 242,-10282 }, { 243,-10282 }, { 244,-10282 }, { 245,-10282 }, { 246,-10282 }, + { 247,-10282 }, { 248,-10282 }, { 249,-10282 }, { 250,-10282 }, { 251,-10282 }, + + { 252,-10282 }, { 253,-10282 }, { 254,-10282 }, { 255,-10282 }, { 0, 131 }, + { 0,81584 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-10539 }, { 49,-10539 }, + { 50,-10539 }, { 51,-10539 }, { 52,-10539 }, { 53,-10539 }, { 54,-10539 }, + { 55,-10539 }, { 56,-10539 }, { 57,-10539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-10539 }, { 66,-10539 }, { 67,-10539 }, { 68,-10539 }, { 69,-10539 }, + { 70,-10539 }, { 71,-10539 }, { 72,-10539 }, { 73,-10539 }, { 74,-10539 }, + { 75,-10539 }, { 76,-10539 }, { 77,-10539 }, { 78,-10539 }, { 79,-10539 }, + { 80,-10539 }, { 81,-10539 }, { 82,15781 }, { 83,-10539 }, { 84,-10539 }, + { 85,-10539 }, { 86,-10539 }, { 87,-10539 }, { 88,-10539 }, { 89,-10539 }, + { 90,-10539 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-10539 }, { 0, 0 }, { 97,-10539 }, { 98,-10539 }, { 99,-10539 }, + { 100,-10539 }, { 101,-10539 }, { 102,-10539 }, { 103,-10539 }, { 104,-10539 }, + { 105,-10539 }, { 106,-10539 }, { 107,-10539 }, { 108,-10539 }, { 109,-10539 }, + { 110,-10539 }, { 111,-10539 }, { 112,-10539 }, { 113,-10539 }, { 114,15781 }, + { 115,-10539 }, { 116,-10539 }, { 117,-10539 }, { 118,-10539 }, { 119,-10539 }, + { 120,-10539 }, { 121,-10539 }, { 122,-10539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-10539 }, { 128,-10539 }, { 129,-10539 }, + { 130,-10539 }, { 131,-10539 }, { 132,-10539 }, { 133,-10539 }, { 134,-10539 }, + { 135,-10539 }, { 136,-10539 }, { 137,-10539 }, { 138,-10539 }, { 139,-10539 }, + { 140,-10539 }, { 141,-10539 }, { 142,-10539 }, { 143,-10539 }, { 144,-10539 }, + + { 145,-10539 }, { 146,-10539 }, { 147,-10539 }, { 148,-10539 }, { 149,-10539 }, + { 150,-10539 }, { 151,-10539 }, { 152,-10539 }, { 153,-10539 }, { 154,-10539 }, + { 155,-10539 }, { 156,-10539 }, { 157,-10539 }, { 158,-10539 }, { 159,-10539 }, + { 160,-10539 }, { 161,-10539 }, { 162,-10539 }, { 163,-10539 }, { 164,-10539 }, + { 165,-10539 }, { 166,-10539 }, { 167,-10539 }, { 168,-10539 }, { 169,-10539 }, + { 170,-10539 }, { 171,-10539 }, { 172,-10539 }, { 173,-10539 }, { 174,-10539 }, + { 175,-10539 }, { 176,-10539 }, { 177,-10539 }, { 178,-10539 }, { 179,-10539 }, + { 180,-10539 }, { 181,-10539 }, { 182,-10539 }, { 183,-10539 }, { 184,-10539 }, + { 185,-10539 }, { 186,-10539 }, { 187,-10539 }, { 188,-10539 }, { 189,-10539 }, + { 190,-10539 }, { 191,-10539 }, { 192,-10539 }, { 193,-10539 }, { 194,-10539 }, + + { 195,-10539 }, { 196,-10539 }, { 197,-10539 }, { 198,-10539 }, { 199,-10539 }, + { 200,-10539 }, { 201,-10539 }, { 202,-10539 }, { 203,-10539 }, { 204,-10539 }, + { 205,-10539 }, { 206,-10539 }, { 207,-10539 }, { 208,-10539 }, { 209,-10539 }, + { 210,-10539 }, { 211,-10539 }, { 212,-10539 }, { 213,-10539 }, { 214,-10539 }, + { 215,-10539 }, { 216,-10539 }, { 217,-10539 }, { 218,-10539 }, { 219,-10539 }, + { 220,-10539 }, { 221,-10539 }, { 222,-10539 }, { 223,-10539 }, { 224,-10539 }, + { 225,-10539 }, { 226,-10539 }, { 227,-10539 }, { 228,-10539 }, { 229,-10539 }, + { 230,-10539 }, { 231,-10539 }, { 232,-10539 }, { 233,-10539 }, { 234,-10539 }, + { 235,-10539 }, { 236,-10539 }, { 237,-10539 }, { 238,-10539 }, { 239,-10539 }, + { 240,-10539 }, { 241,-10539 }, { 242,-10539 }, { 243,-10539 }, { 244,-10539 }, + + { 245,-10539 }, { 246,-10539 }, { 247,-10539 }, { 248,-10539 }, { 249,-10539 }, + { 250,-10539 }, { 251,-10539 }, { 252,-10539 }, { 253,-10539 }, { 254,-10539 }, + { 255,-10539 }, { 0, 131 }, { 0,81327 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-10796 }, { 49,-10796 }, { 50,-10796 }, { 51,-10796 }, { 52,-10796 }, + { 53,-10796 }, { 54,-10796 }, { 55,-10796 }, { 56,-10796 }, { 57,-10796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-10796 }, { 66,-10796 }, { 67,-10796 }, + { 68,-10796 }, { 69,-10796 }, { 70,-10796 }, { 71,-10796 }, { 72,-10796 }, + { 73,15781 }, { 74,-10796 }, { 75,-10796 }, { 76,-10796 }, { 77,-10796 }, + { 78,-10796 }, { 79,-10796 }, { 80,-10796 }, { 81,-10796 }, { 82,-10796 }, + { 83,-10796 }, { 84,-10796 }, { 85,-10796 }, { 86,-10796 }, { 87,-10796 }, + + { 88,-10796 }, { 89,-10796 }, { 90,-10796 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-10796 }, { 0, 0 }, { 97,-10796 }, + { 98,-10796 }, { 99,-10796 }, { 100,-10796 }, { 101,-10796 }, { 102,-10796 }, + { 103,-10796 }, { 104,-10796 }, { 105,15781 }, { 106,-10796 }, { 107,-10796 }, + { 108,-10796 }, { 109,-10796 }, { 110,-10796 }, { 111,-10796 }, { 112,-10796 }, + { 113,-10796 }, { 114,-10796 }, { 115,-10796 }, { 116,-10796 }, { 117,-10796 }, + { 118,-10796 }, { 119,-10796 }, { 120,-10796 }, { 121,-10796 }, { 122,-10796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-10796 }, + { 128,-10796 }, { 129,-10796 }, { 130,-10796 }, { 131,-10796 }, { 132,-10796 }, + { 133,-10796 }, { 134,-10796 }, { 135,-10796 }, { 136,-10796 }, { 137,-10796 }, + + { 138,-10796 }, { 139,-10796 }, { 140,-10796 }, { 141,-10796 }, { 142,-10796 }, + { 143,-10796 }, { 144,-10796 }, { 145,-10796 }, { 146,-10796 }, { 147,-10796 }, + { 148,-10796 }, { 149,-10796 }, { 150,-10796 }, { 151,-10796 }, { 152,-10796 }, + { 153,-10796 }, { 154,-10796 }, { 155,-10796 }, { 156,-10796 }, { 157,-10796 }, + { 158,-10796 }, { 159,-10796 }, { 160,-10796 }, { 161,-10796 }, { 162,-10796 }, + { 163,-10796 }, { 164,-10796 }, { 165,-10796 }, { 166,-10796 }, { 167,-10796 }, + { 168,-10796 }, { 169,-10796 }, { 170,-10796 }, { 171,-10796 }, { 172,-10796 }, + { 173,-10796 }, { 174,-10796 }, { 175,-10796 }, { 176,-10796 }, { 177,-10796 }, + { 178,-10796 }, { 179,-10796 }, { 180,-10796 }, { 181,-10796 }, { 182,-10796 }, + { 183,-10796 }, { 184,-10796 }, { 185,-10796 }, { 186,-10796 }, { 187,-10796 }, + + { 188,-10796 }, { 189,-10796 }, { 190,-10796 }, { 191,-10796 }, { 192,-10796 }, + { 193,-10796 }, { 194,-10796 }, { 195,-10796 }, { 196,-10796 }, { 197,-10796 }, + { 198,-10796 }, { 199,-10796 }, { 200,-10796 }, { 201,-10796 }, { 202,-10796 }, + { 203,-10796 }, { 204,-10796 }, { 205,-10796 }, { 206,-10796 }, { 207,-10796 }, + { 208,-10796 }, { 209,-10796 }, { 210,-10796 }, { 211,-10796 }, { 212,-10796 }, + { 213,-10796 }, { 214,-10796 }, { 215,-10796 }, { 216,-10796 }, { 217,-10796 }, + { 218,-10796 }, { 219,-10796 }, { 220,-10796 }, { 221,-10796 }, { 222,-10796 }, + { 223,-10796 }, { 224,-10796 }, { 225,-10796 }, { 226,-10796 }, { 227,-10796 }, + { 228,-10796 }, { 229,-10796 }, { 230,-10796 }, { 231,-10796 }, { 232,-10796 }, + { 233,-10796 }, { 234,-10796 }, { 235,-10796 }, { 236,-10796 }, { 237,-10796 }, + + { 238,-10796 }, { 239,-10796 }, { 240,-10796 }, { 241,-10796 }, { 242,-10796 }, + { 243,-10796 }, { 244,-10796 }, { 245,-10796 }, { 246,-10796 }, { 247,-10796 }, + { 248,-10796 }, { 249,-10796 }, { 250,-10796 }, { 251,-10796 }, { 252,-10796 }, + { 253,-10796 }, { 254,-10796 }, { 255,-10796 }, { 0, 131 }, { 0,81070 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-11053 }, { 49,-11053 }, { 50,-11053 }, + { 51,-11053 }, { 52,-11053 }, { 53,-11053 }, { 54,-11053 }, { 55,-11053 }, + { 56,-11053 }, { 57,-11053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-11053 }, + { 66,-11053 }, { 67,-11053 }, { 68,-11053 }, { 69,-11053 }, { 70,-11053 }, + { 71,-11053 }, { 72,-11053 }, { 73,-11053 }, { 74,-11053 }, { 75,-11053 }, + { 76,-11053 }, { 77,-11053 }, { 78,-11053 }, { 79,-11053 }, { 80,-11053 }, + + { 81,-11053 }, { 82,15781 }, { 83,-11053 }, { 84,-11053 }, { 85,-11053 }, + { 86,-11053 }, { 87,-11053 }, { 88,-11053 }, { 89,-11053 }, { 90,-11053 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-11053 }, + { 0, 0 }, { 97,-11053 }, { 98,-11053 }, { 99,-11053 }, { 100,-11053 }, + { 101,-11053 }, { 102,-11053 }, { 103,-11053 }, { 104,-11053 }, { 105,-11053 }, + { 106,-11053 }, { 107,-11053 }, { 108,-11053 }, { 109,-11053 }, { 110,-11053 }, + { 111,-11053 }, { 112,-11053 }, { 113,-11053 }, { 114,15781 }, { 115,-11053 }, + { 116,-11053 }, { 117,-11053 }, { 118,-11053 }, { 119,-11053 }, { 120,-11053 }, + { 121,-11053 }, { 122,-11053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-11053 }, { 128,-11053 }, { 129,-11053 }, { 130,-11053 }, + + { 131,-11053 }, { 132,-11053 }, { 133,-11053 }, { 134,-11053 }, { 135,-11053 }, + { 136,-11053 }, { 137,-11053 }, { 138,-11053 }, { 139,-11053 }, { 140,-11053 }, + { 141,-11053 }, { 142,-11053 }, { 143,-11053 }, { 144,-11053 }, { 145,-11053 }, + { 146,-11053 }, { 147,-11053 }, { 148,-11053 }, { 149,-11053 }, { 150,-11053 }, + { 151,-11053 }, { 152,-11053 }, { 153,-11053 }, { 154,-11053 }, { 155,-11053 }, + { 156,-11053 }, { 157,-11053 }, { 158,-11053 }, { 159,-11053 }, { 160,-11053 }, + { 161,-11053 }, { 162,-11053 }, { 163,-11053 }, { 164,-11053 }, { 165,-11053 }, + { 166,-11053 }, { 167,-11053 }, { 168,-11053 }, { 169,-11053 }, { 170,-11053 }, + { 171,-11053 }, { 172,-11053 }, { 173,-11053 }, { 174,-11053 }, { 175,-11053 }, + { 176,-11053 }, { 177,-11053 }, { 178,-11053 }, { 179,-11053 }, { 180,-11053 }, + + { 181,-11053 }, { 182,-11053 }, { 183,-11053 }, { 184,-11053 }, { 185,-11053 }, + { 186,-11053 }, { 187,-11053 }, { 188,-11053 }, { 189,-11053 }, { 190,-11053 }, + { 191,-11053 }, { 192,-11053 }, { 193,-11053 }, { 194,-11053 }, { 195,-11053 }, + { 196,-11053 }, { 197,-11053 }, { 198,-11053 }, { 199,-11053 }, { 200,-11053 }, + { 201,-11053 }, { 202,-11053 }, { 203,-11053 }, { 204,-11053 }, { 205,-11053 }, + { 206,-11053 }, { 207,-11053 }, { 208,-11053 }, { 209,-11053 }, { 210,-11053 }, + { 211,-11053 }, { 212,-11053 }, { 213,-11053 }, { 214,-11053 }, { 215,-11053 }, + { 216,-11053 }, { 217,-11053 }, { 218,-11053 }, { 219,-11053 }, { 220,-11053 }, + { 221,-11053 }, { 222,-11053 }, { 223,-11053 }, { 224,-11053 }, { 225,-11053 }, + { 226,-11053 }, { 227,-11053 }, { 228,-11053 }, { 229,-11053 }, { 230,-11053 }, + + { 231,-11053 }, { 232,-11053 }, { 233,-11053 }, { 234,-11053 }, { 235,-11053 }, + { 236,-11053 }, { 237,-11053 }, { 238,-11053 }, { 239,-11053 }, { 240,-11053 }, + { 241,-11053 }, { 242,-11053 }, { 243,-11053 }, { 244,-11053 }, { 245,-11053 }, + { 246,-11053 }, { 247,-11053 }, { 248,-11053 }, { 249,-11053 }, { 250,-11053 }, + { 251,-11053 }, { 252,-11053 }, { 253,-11053 }, { 254,-11053 }, { 255,-11053 }, + { 0, 131 }, { 0,80813 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-11310 }, + { 49,-11310 }, { 50,-11310 }, { 51,-11310 }, { 52,-11310 }, { 53,-11310 }, + { 54,-11310 }, { 55,-11310 }, { 56,-11310 }, { 57,-11310 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-11310 }, { 66,-11310 }, { 67,-11310 }, { 68,-11310 }, + { 69,15781 }, { 70,-11310 }, { 71,-11310 }, { 72,-11310 }, { 73,-11310 }, + + { 74,-11310 }, { 75,-11310 }, { 76,-11310 }, { 77,-11310 }, { 78,-11310 }, + { 79,-11310 }, { 80,-11310 }, { 81,-11310 }, { 82,-11310 }, { 83,-11310 }, + { 84,-11310 }, { 85,-11310 }, { 86,-11310 }, { 87,-11310 }, { 88,-11310 }, + { 89,-11310 }, { 90,-11310 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-11310 }, { 0, 0 }, { 97,-11310 }, { 98,-11310 }, + { 99,-11310 }, { 100,-11310 }, { 101,15781 }, { 102,-11310 }, { 103,-11310 }, + { 104,-11310 }, { 105,-11310 }, { 106,-11310 }, { 107,-11310 }, { 108,-11310 }, + { 109,-11310 }, { 110,-11310 }, { 111,-11310 }, { 112,-11310 }, { 113,-11310 }, + { 114,-11310 }, { 115,-11310 }, { 116,-11310 }, { 117,-11310 }, { 118,-11310 }, + { 119,-11310 }, { 120,-11310 }, { 121,-11310 }, { 122,-11310 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-11310 }, { 128,-11310 }, + { 129,-11310 }, { 130,-11310 }, { 131,-11310 }, { 132,-11310 }, { 133,-11310 }, + { 134,-11310 }, { 135,-11310 }, { 136,-11310 }, { 137,-11310 }, { 138,-11310 }, + { 139,-11310 }, { 140,-11310 }, { 141,-11310 }, { 142,-11310 }, { 143,-11310 }, + { 144,-11310 }, { 145,-11310 }, { 146,-11310 }, { 147,-11310 }, { 148,-11310 }, + { 149,-11310 }, { 150,-11310 }, { 151,-11310 }, { 152,-11310 }, { 153,-11310 }, + { 154,-11310 }, { 155,-11310 }, { 156,-11310 }, { 157,-11310 }, { 158,-11310 }, + { 159,-11310 }, { 160,-11310 }, { 161,-11310 }, { 162,-11310 }, { 163,-11310 }, + { 164,-11310 }, { 165,-11310 }, { 166,-11310 }, { 167,-11310 }, { 168,-11310 }, + { 169,-11310 }, { 170,-11310 }, { 171,-11310 }, { 172,-11310 }, { 173,-11310 }, + + { 174,-11310 }, { 175,-11310 }, { 176,-11310 }, { 177,-11310 }, { 178,-11310 }, + { 179,-11310 }, { 180,-11310 }, { 181,-11310 }, { 182,-11310 }, { 183,-11310 }, + { 184,-11310 }, { 185,-11310 }, { 186,-11310 }, { 187,-11310 }, { 188,-11310 }, + { 189,-11310 }, { 190,-11310 }, { 191,-11310 }, { 192,-11310 }, { 193,-11310 }, + { 194,-11310 }, { 195,-11310 }, { 196,-11310 }, { 197,-11310 }, { 198,-11310 }, + { 199,-11310 }, { 200,-11310 }, { 201,-11310 }, { 202,-11310 }, { 203,-11310 }, + { 204,-11310 }, { 205,-11310 }, { 206,-11310 }, { 207,-11310 }, { 208,-11310 }, + { 209,-11310 }, { 210,-11310 }, { 211,-11310 }, { 212,-11310 }, { 213,-11310 }, + { 214,-11310 }, { 215,-11310 }, { 216,-11310 }, { 217,-11310 }, { 218,-11310 }, + { 219,-11310 }, { 220,-11310 }, { 221,-11310 }, { 222,-11310 }, { 223,-11310 }, + + { 224,-11310 }, { 225,-11310 }, { 226,-11310 }, { 227,-11310 }, { 228,-11310 }, + { 229,-11310 }, { 230,-11310 }, { 231,-11310 }, { 232,-11310 }, { 233,-11310 }, + { 234,-11310 }, { 235,-11310 }, { 236,-11310 }, { 237,-11310 }, { 238,-11310 }, + { 239,-11310 }, { 240,-11310 }, { 241,-11310 }, { 242,-11310 }, { 243,-11310 }, + { 244,-11310 }, { 245,-11310 }, { 246,-11310 }, { 247,-11310 }, { 248,-11310 }, + { 249,-11310 }, { 250,-11310 }, { 251,-11310 }, { 252,-11310 }, { 253,-11310 }, + { 254,-11310 }, { 255,-11310 }, { 0, 131 }, { 0,80556 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-11567 }, { 49,-11567 }, { 50,-11567 }, { 51,-11567 }, + { 52,-11567 }, { 53,-11567 }, { 54,-11567 }, { 55,-11567 }, { 56,-11567 }, + { 57,-11567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-11567 }, { 66,-11567 }, + + { 67,15781 }, { 68,16038 }, { 69,-11567 }, { 70,16295 }, { 71,-11567 }, + { 72,16552 }, { 73,-11567 }, { 74,-11567 }, { 75,-11567 }, { 76,16809 }, + { 77,17066 }, { 78,17323 }, { 79,-11567 }, { 80,-11567 }, { 81,-11567 }, + { 82,-11567 }, { 83,-11567 }, { 84,17580 }, { 85,-11567 }, { 86,-11567 }, + { 87,-11567 }, { 88,-11567 }, { 89,-11567 }, { 90,-11567 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-11567 }, { 0, 0 }, + { 97,-11567 }, { 98,-11567 }, { 99,15781 }, { 100,16038 }, { 101,-11567 }, + { 102,16295 }, { 103,-11567 }, { 104,16552 }, { 105,-11567 }, { 106,-11567 }, + { 107,-11567 }, { 108,16809 }, { 109,17066 }, { 110,17323 }, { 111,-11567 }, + { 112,-11567 }, { 113,-11567 }, { 114,-11567 }, { 115,-11567 }, { 116,17580 }, + + { 117,-11567 }, { 118,-11567 }, { 119,-11567 }, { 120,-11567 }, { 121,-11567 }, + { 122,-11567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-11567 }, { 128,-11567 }, { 129,-11567 }, { 130,-11567 }, { 131,-11567 }, + { 132,-11567 }, { 133,-11567 }, { 134,-11567 }, { 135,-11567 }, { 136,-11567 }, + { 137,-11567 }, { 138,-11567 }, { 139,-11567 }, { 140,-11567 }, { 141,-11567 }, + { 142,-11567 }, { 143,-11567 }, { 144,-11567 }, { 145,-11567 }, { 146,-11567 }, + { 147,-11567 }, { 148,-11567 }, { 149,-11567 }, { 150,-11567 }, { 151,-11567 }, + { 152,-11567 }, { 153,-11567 }, { 154,-11567 }, { 155,-11567 }, { 156,-11567 }, + { 157,-11567 }, { 158,-11567 }, { 159,-11567 }, { 160,-11567 }, { 161,-11567 }, + { 162,-11567 }, { 163,-11567 }, { 164,-11567 }, { 165,-11567 }, { 166,-11567 }, + + { 167,-11567 }, { 168,-11567 }, { 169,-11567 }, { 170,-11567 }, { 171,-11567 }, + { 172,-11567 }, { 173,-11567 }, { 174,-11567 }, { 175,-11567 }, { 176,-11567 }, + { 177,-11567 }, { 178,-11567 }, { 179,-11567 }, { 180,-11567 }, { 181,-11567 }, + { 182,-11567 }, { 183,-11567 }, { 184,-11567 }, { 185,-11567 }, { 186,-11567 }, + { 187,-11567 }, { 188,-11567 }, { 189,-11567 }, { 190,-11567 }, { 191,-11567 }, + { 192,-11567 }, { 193,-11567 }, { 194,-11567 }, { 195,-11567 }, { 196,-11567 }, + { 197,-11567 }, { 198,-11567 }, { 199,-11567 }, { 200,-11567 }, { 201,-11567 }, + { 202,-11567 }, { 203,-11567 }, { 204,-11567 }, { 205,-11567 }, { 206,-11567 }, + { 207,-11567 }, { 208,-11567 }, { 209,-11567 }, { 210,-11567 }, { 211,-11567 }, + { 212,-11567 }, { 213,-11567 }, { 214,-11567 }, { 215,-11567 }, { 216,-11567 }, + + { 217,-11567 }, { 218,-11567 }, { 219,-11567 }, { 220,-11567 }, { 221,-11567 }, + { 222,-11567 }, { 223,-11567 }, { 224,-11567 }, { 225,-11567 }, { 226,-11567 }, + { 227,-11567 }, { 228,-11567 }, { 229,-11567 }, { 230,-11567 }, { 231,-11567 }, + { 232,-11567 }, { 233,-11567 }, { 234,-11567 }, { 235,-11567 }, { 236,-11567 }, + { 237,-11567 }, { 238,-11567 }, { 239,-11567 }, { 240,-11567 }, { 241,-11567 }, + { 242,-11567 }, { 243,-11567 }, { 244,-11567 }, { 245,-11567 }, { 246,-11567 }, + { 247,-11567 }, { 248,-11567 }, { 249,-11567 }, { 250,-11567 }, { 251,-11567 }, + { 252,-11567 }, { 253,-11567 }, { 254,-11567 }, { 255,-11567 }, { 0, 0 }, + { 0,80299 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + + { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, + { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, + { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, + { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, + + { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 95, 0 }, { 96,-11816 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, + { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 15 }, { 0,80041 }, { 1, 0 }, + + { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, + { 7, 0 }, { 8, 0 }, { 9, 0 }, { 0, 0 }, { 11, 0 }, + { 12, 0 }, { 0, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, + { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, + { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, + { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, + { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, { 36, 0 }, + { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, + { 0, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, + { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, + { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, + { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, + { 0, 11 }, { 0,79783 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, + { 9, 0 }, { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, + { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, + { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, + { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, + { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, + { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, + { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + + { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, + { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 0, 0 }, + { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, + + { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, + { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 0 }, { 0,79525 }, + { 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, 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 }, { 34,-10020 }, { 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 }, { 48,16806 }, { 49,16806 }, { 50,16806 }, + { 51,16806 }, { 52,16806 }, { 53,16806 }, { 54,16806 }, { 55,16806 }, + { 56,16806 }, { 57,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,16806 }, + { 66,16806 }, { 67,16806 }, { 68,16806 }, { 69,16806 }, { 70,16806 }, + { 71,16806 }, { 72,16806 }, { 73,16806 }, { 74,16806 }, { 75,16806 }, + { 76,16806 }, { 77,16806 }, { 78,16806 }, { 79,16806 }, { 80,16806 }, + { 81,16806 }, { 82,16806 }, { 83,16806 }, { 84,16806 }, { 85,16806 }, + + { 86,16806 }, { 87,16806 }, { 88,16806 }, { 89,16806 }, { 90,16806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16806 }, + { 0, 0 }, { 97,16806 }, { 98,16806 }, { 99,16806 }, { 100,16806 }, + { 101,16806 }, { 102,16806 }, { 103,16806 }, { 104,16806 }, { 105,16806 }, + { 106,16806 }, { 107,16806 }, { 108,16806 }, { 109,16806 }, { 110,16806 }, + { 111,16806 }, { 112,16806 }, { 113,16806 }, { 114,16806 }, { 115,16806 }, + { 116,16806 }, { 117,16806 }, { 118,16806 }, { 119,16806 }, { 120,16806 }, + { 121,16806 }, { 122,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,16806 }, { 128,16806 }, { 129,16806 }, { 130,16806 }, + { 131,16806 }, { 132,16806 }, { 133,16806 }, { 134,16806 }, { 135,16806 }, + + { 136,16806 }, { 137,16806 }, { 138,16806 }, { 139,16806 }, { 140,16806 }, + { 141,16806 }, { 142,16806 }, { 143,16806 }, { 144,16806 }, { 145,16806 }, + { 146,16806 }, { 147,16806 }, { 148,16806 }, { 149,16806 }, { 150,16806 }, + { 151,16806 }, { 152,16806 }, { 153,16806 }, { 154,16806 }, { 155,16806 }, + { 156,16806 }, { 157,16806 }, { 158,16806 }, { 159,16806 }, { 160,16806 }, + { 161,16806 }, { 162,16806 }, { 163,16806 }, { 164,16806 }, { 165,16806 }, + { 166,16806 }, { 167,16806 }, { 168,16806 }, { 169,16806 }, { 170,16806 }, + { 171,16806 }, { 172,16806 }, { 173,16806 }, { 174,16806 }, { 175,16806 }, + { 176,16806 }, { 177,16806 }, { 178,16806 }, { 179,16806 }, { 180,16806 }, + { 181,16806 }, { 182,16806 }, { 183,16806 }, { 184,16806 }, { 185,16806 }, + + { 186,16806 }, { 187,16806 }, { 188,16806 }, { 189,16806 }, { 190,16806 }, + { 191,16806 }, { 192,16806 }, { 193,16806 }, { 194,16806 }, { 195,16806 }, + { 196,16806 }, { 197,16806 }, { 198,16806 }, { 199,16806 }, { 200,16806 }, + { 201,16806 }, { 202,16806 }, { 203,16806 }, { 204,16806 }, { 205,16806 }, + { 206,16806 }, { 207,16806 }, { 208,16806 }, { 209,16806 }, { 210,16806 }, + { 211,16806 }, { 212,16806 }, { 213,16806 }, { 214,16806 }, { 215,16806 }, + { 216,16806 }, { 217,16806 }, { 218,16806 }, { 219,16806 }, { 220,16806 }, + { 221,16806 }, { 222,16806 }, { 223,16806 }, { 224,16806 }, { 225,16806 }, + { 226,16806 }, { 227,16806 }, { 228,16806 }, { 229,16806 }, { 230,16806 }, + { 231,16806 }, { 232,16806 }, { 233,16806 }, { 234,16806 }, { 235,16806 }, + + { 236,16806 }, { 237,16806 }, { 238,16806 }, { 239,16806 }, { 240,16806 }, + { 241,16806 }, { 242,16806 }, { 243,16806 }, { 244,16806 }, { 245,16806 }, + { 246,16806 }, { 247,16806 }, { 248,16806 }, { 249,16806 }, { 250,16806 }, + { 251,16806 }, { 252,16806 }, { 253,16806 }, { 254,16806 }, { 255,16806 }, + { 0, 0 }, { 0,79268 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 39,-10277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,16806 }, + { 49,16806 }, { 50,16806 }, { 51,16806 }, { 52,16806 }, { 53,16806 }, + { 54,16806 }, { 55,16806 }, { 56,16806 }, { 57,16806 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,16806 }, { 66,16806 }, { 67,16806 }, { 68,16806 }, + { 69,16806 }, { 70,16806 }, { 71,16806 }, { 72,16806 }, { 73,16806 }, + { 74,16806 }, { 75,16806 }, { 76,16806 }, { 77,16806 }, { 78,16806 }, + + { 79,16806 }, { 80,16806 }, { 81,16806 }, { 82,16806 }, { 83,16806 }, + { 84,16806 }, { 85,16806 }, { 86,16806 }, { 87,16806 }, { 88,16806 }, + { 89,16806 }, { 90,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,16806 }, { 0, 0 }, { 97,16806 }, { 98,16806 }, + { 99,16806 }, { 100,16806 }, { 101,16806 }, { 102,16806 }, { 103,16806 }, + { 104,16806 }, { 105,16806 }, { 106,16806 }, { 107,16806 }, { 108,16806 }, + { 109,16806 }, { 110,16806 }, { 111,16806 }, { 112,16806 }, { 113,16806 }, + { 114,16806 }, { 115,16806 }, { 116,16806 }, { 117,16806 }, { 118,16806 }, + { 119,16806 }, { 120,16806 }, { 121,16806 }, { 122,16806 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,16806 }, { 128,16806 }, + + { 129,16806 }, { 130,16806 }, { 131,16806 }, { 132,16806 }, { 133,16806 }, + { 134,16806 }, { 135,16806 }, { 136,16806 }, { 137,16806 }, { 138,16806 }, + { 139,16806 }, { 140,16806 }, { 141,16806 }, { 142,16806 }, { 143,16806 }, + { 144,16806 }, { 145,16806 }, { 146,16806 }, { 147,16806 }, { 148,16806 }, + { 149,16806 }, { 150,16806 }, { 151,16806 }, { 152,16806 }, { 153,16806 }, + { 154,16806 }, { 155,16806 }, { 156,16806 }, { 157,16806 }, { 158,16806 }, + { 159,16806 }, { 160,16806 }, { 161,16806 }, { 162,16806 }, { 163,16806 }, + { 164,16806 }, { 165,16806 }, { 166,16806 }, { 167,16806 }, { 168,16806 }, + { 169,16806 }, { 170,16806 }, { 171,16806 }, { 172,16806 }, { 173,16806 }, + { 174,16806 }, { 175,16806 }, { 176,16806 }, { 177,16806 }, { 178,16806 }, + + { 179,16806 }, { 180,16806 }, { 181,16806 }, { 182,16806 }, { 183,16806 }, + { 184,16806 }, { 185,16806 }, { 186,16806 }, { 187,16806 }, { 188,16806 }, + { 189,16806 }, { 190,16806 }, { 191,16806 }, { 192,16806 }, { 193,16806 }, + { 194,16806 }, { 195,16806 }, { 196,16806 }, { 197,16806 }, { 198,16806 }, + { 199,16806 }, { 200,16806 }, { 201,16806 }, { 202,16806 }, { 203,16806 }, + { 204,16806 }, { 205,16806 }, { 206,16806 }, { 207,16806 }, { 208,16806 }, + { 209,16806 }, { 210,16806 }, { 211,16806 }, { 212,16806 }, { 213,16806 }, + { 214,16806 }, { 215,16806 }, { 216,16806 }, { 217,16806 }, { 218,16806 }, + { 219,16806 }, { 220,16806 }, { 221,16806 }, { 222,16806 }, { 223,16806 }, + { 224,16806 }, { 225,16806 }, { 226,16806 }, { 227,16806 }, { 228,16806 }, + + { 229,16806 }, { 230,16806 }, { 231,16806 }, { 232,16806 }, { 233,16806 }, + { 234,16806 }, { 235,16806 }, { 236,16806 }, { 237,16806 }, { 238,16806 }, + { 239,16806 }, { 240,16806 }, { 241,16806 }, { 242,16806 }, { 243,16806 }, + { 244,16806 }, { 245,16806 }, { 246,16806 }, { 247,16806 }, { 248,16806 }, + { 249,16806 }, { 250,16806 }, { 251,16806 }, { 252,16806 }, { 253,16806 }, + { 254,16806 }, { 255,16806 }, { 0, 137 }, { 0,79011 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + + { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 140 }, + { 0,78754 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, { 14, 0 }, + + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, + { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, + { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, + { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, + { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, + + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, + { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 140 }, { 0,78496 }, { 1,-258 }, + { 2,-258 }, { 3,-258 }, { 4,-258 }, { 5,-258 }, { 6,-258 }, + + { 7,-258 }, { 8,-258 }, { 9,-258 }, { 10,-13593 }, { 11,-258 }, + { 12,-258 }, { 13,-13591 }, { 14,-258 }, { 15,-258 }, { 16,-258 }, + { 17,-258 }, { 18,-258 }, { 19,-258 }, { 20,-258 }, { 21,-258 }, + { 22,-258 }, { 23,-258 }, { 24,-258 }, { 25,-258 }, { 26,-258 }, + { 27,-258 }, { 28,-258 }, { 29,-258 }, { 30,-258 }, { 31,-258 }, + { 32,-258 }, { 33,-258 }, { 34,-258 }, { 35,-258 }, { 36,-258 }, + { 37,-258 }, { 38,-258 }, { 39,-258 }, { 40,-258 }, { 41,-258 }, + { 42,-258 }, { 43,-258 }, { 44,-258 }, { 45,-258 }, { 46,-258 }, + { 47,-258 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + + { 57, 0 }, { 58,-258 }, { 59, 258 }, { 60,-258 }, { 61,-258 }, + { 62,-258 }, { 63,-258 }, { 64,-258 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91,-258 }, + { 92,-258 }, { 93,-258 }, { 94,-258 }, { 95, 0 }, { 96,-258 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 123,-258 }, { 124,-258 }, { 125,-258 }, { 126,-258 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256,-258 }, + + { 0, 140 }, { 0,78238 }, { 1,-516 }, { 2,-516 }, { 3,-516 }, + { 4,-516 }, { 5,-516 }, { 6,-516 }, { 7,-516 }, { 8,-516 }, + { 9,-516 }, { 10,-13851 }, { 11,-516 }, { 12,-516 }, { 13,-13849 }, + { 14,-516 }, { 15,-516 }, { 16,-516 }, { 17,-516 }, { 18,-516 }, + { 19,-516 }, { 20,-516 }, { 21,-516 }, { 22,-516 }, { 23,-516 }, + { 24,-516 }, { 25,-516 }, { 26,-516 }, { 27,-516 }, { 28,-516 }, + { 29,-516 }, { 30,-516 }, { 31,-516 }, { 32,-516 }, { 33,-516 }, + { 34,-516 }, { 35,-516 }, { 36,-516 }, { 37,-516 }, { 38,-516 }, + { 39,-516 }, { 40,-516 }, { 41,-516 }, { 42,-516 }, { 43,-516 }, + { 44,-516 }, { 45,-516 }, { 46,-516 }, { 47,-516 }, { 48,-516 }, + + { 49,-516 }, { 50,-516 }, { 51,-516 }, { 52,-516 }, { 53,-516 }, + { 54,-516 }, { 55,-516 }, { 56,-516 }, { 57,-516 }, { 58,-516 }, + { 59,-516 }, { 60,-516 }, { 61,-516 }, { 62,-516 }, { 63,-516 }, + { 64,-516 }, { 65,-516 }, { 66,-516 }, { 67,-516 }, { 68,-516 }, + { 69,-516 }, { 70,-516 }, { 71,-516 }, { 72,-516 }, { 73,-516 }, + { 74,-516 }, { 75,-516 }, { 76,-516 }, { 77,-516 }, { 78,-516 }, + { 79,-516 }, { 80,-516 }, { 81,-516 }, { 82,-516 }, { 83,-516 }, + { 84,-516 }, { 85,-516 }, { 86,-516 }, { 87,-516 }, { 88,-516 }, + { 89,-516 }, { 90,-516 }, { 91,-516 }, { 92,-516 }, { 93,-516 }, + { 94,-516 }, { 95,-516 }, { 96,-516 }, { 97,-516 }, { 98,-516 }, + + { 99,-516 }, { 100,-516 }, { 101,-516 }, { 102,-516 }, { 103,-516 }, + { 104,-516 }, { 105,-516 }, { 106,-516 }, { 107,-516 }, { 108,-516 }, + { 109,-516 }, { 110,-516 }, { 111,-516 }, { 112,-516 }, { 113,-516 }, + { 114,-516 }, { 115,-516 }, { 116,-516 }, { 117,-516 }, { 118,-516 }, + { 119,-516 }, { 120,-516 }, { 121,-516 }, { 122,-516 }, { 123,-516 }, + { 124,-516 }, { 125,-516 }, { 126,-516 }, { 127,-516 }, { 128,-516 }, + { 129,-516 }, { 130,-516 }, { 131,-516 }, { 132,-516 }, { 133,-516 }, + { 134,-516 }, { 135,-516 }, { 136,-516 }, { 137,-516 }, { 138,-516 }, + { 139,-516 }, { 140,-516 }, { 141,-516 }, { 142,-516 }, { 143,-516 }, + { 144,-516 }, { 145,-516 }, { 146,-516 }, { 147,-516 }, { 148,-516 }, + + { 149,-516 }, { 150,-516 }, { 151,-516 }, { 152,-516 }, { 153,-516 }, + { 154,-516 }, { 155,-516 }, { 156,-516 }, { 157,-516 }, { 158,-516 }, + { 159,-516 }, { 160,-516 }, { 161,-516 }, { 162,-516 }, { 163,-516 }, + { 164,-516 }, { 165,-516 }, { 166,-516 }, { 167,-516 }, { 168,-516 }, + { 169,-516 }, { 170,-516 }, { 171,-516 }, { 172,-516 }, { 173,-516 }, + { 174,-516 }, { 175,-516 }, { 176,-516 }, { 177,-516 }, { 178,-516 }, + { 179,-516 }, { 180,-516 }, { 181,-516 }, { 182,-516 }, { 183,-516 }, + { 184,-516 }, { 185,-516 }, { 186,-516 }, { 187,-516 }, { 188,-516 }, + { 189,-516 }, { 190,-516 }, { 191,-516 }, { 192,-516 }, { 193,-516 }, + { 194,-516 }, { 195,-516 }, { 196,-516 }, { 197,-516 }, { 198,-516 }, + + { 199,-516 }, { 200,-516 }, { 201,-516 }, { 202,-516 }, { 203,-516 }, + { 204,-516 }, { 205,-516 }, { 206,-516 }, { 207,-516 }, { 208,-516 }, + { 209,-516 }, { 210,-516 }, { 211,-516 }, { 212,-516 }, { 213,-516 }, + { 214,-516 }, { 215,-516 }, { 216,-516 }, { 217,-516 }, { 218,-516 }, + { 219,-516 }, { 220,-516 }, { 221,-516 }, { 222,-516 }, { 223,-516 }, + { 224,-516 }, { 225,-516 }, { 226,-516 }, { 227,-516 }, { 228,-516 }, + { 229,-516 }, { 230,-516 }, { 231,-516 }, { 232,-516 }, { 233,-516 }, + { 234,-516 }, { 235,-516 }, { 236,-516 }, { 237,-516 }, { 238,-516 }, + { 239,-516 }, { 240,-516 }, { 241,-516 }, { 242,-516 }, { 243,-516 }, + { 244,-516 }, { 245,-516 }, { 246,-516 }, { 247,-516 }, { 248,-516 }, + + { 249,-516 }, { 250,-516 }, { 251,-516 }, { 252,-516 }, { 253,-516 }, + { 254,-516 }, { 255,-516 }, { 256,-516 }, { 0, 0 }, { 0,77980 }, + { 1,-15683 }, { 2,-15683 }, { 3,-15683 }, { 4,-15683 }, { 5,-15683 }, + { 6,-15683 }, { 7,-15683 }, { 8,-15683 }, { 9,-15683 }, { 10,-15683 }, + { 11,-15683 }, { 12,-15683 }, { 13,-15683 }, { 14,-15683 }, { 15,-15683 }, + { 16,-15683 }, { 17,-15683 }, { 18,-15683 }, { 19,-15683 }, { 20,-15683 }, + { 21,-15683 }, { 22,-15683 }, { 23,-15683 }, { 24,-15683 }, { 25,-15683 }, + { 26,-15683 }, { 27,-15683 }, { 28,-15683 }, { 29,-15683 }, { 30,-15683 }, + { 31,-15683 }, { 32,-15683 }, { 33,-15683 }, { 34,-15791 }, { 35,-15683 }, + { 36,-15683 }, { 37,-15683 }, { 38,-15683 }, { 39,-15683 }, { 40,-15683 }, + + { 41,-15683 }, { 42,-15683 }, { 43,-15683 }, { 44,-15683 }, { 45,-15683 }, + { 46,-15683 }, { 47,-15683 }, { 48,-15683 }, { 49,-15683 }, { 50,-15683 }, + { 51,-15683 }, { 52,-15683 }, { 53,-15683 }, { 54,-15683 }, { 55,-15683 }, + { 56,-15683 }, { 57,-15683 }, { 58,-15683 }, { 59,-15683 }, { 60,-15683 }, + { 61,-15683 }, { 62,-15683 }, { 63,-15683 }, { 64,-15683 }, { 65,-15683 }, + { 66,-15683 }, { 67,-15683 }, { 68,-15683 }, { 69,-15683 }, { 70,-15683 }, + { 71,-15683 }, { 72,-15683 }, { 73,-15683 }, { 74,-15683 }, { 75,-15683 }, + { 76,-15683 }, { 77,-15683 }, { 78,-15683 }, { 79,-15683 }, { 80,-15683 }, + { 81,-15683 }, { 82,-15683 }, { 83,-15683 }, { 84,-15683 }, { 85,-15683 }, + { 86,-15683 }, { 87,-15683 }, { 88,-15683 }, { 89,-15683 }, { 90,-15683 }, + + { 91,-15683 }, { 92,-15425 }, { 93,-15683 }, { 94,-15683 }, { 95,-15683 }, + { 96,-15683 }, { 97,-15683 }, { 98,-15683 }, { 99,-15683 }, { 100,-15683 }, + { 101,-15683 }, { 102,-15683 }, { 103,-15683 }, { 104,-15683 }, { 105,-15683 }, + { 106,-15683 }, { 107,-15683 }, { 108,-15683 }, { 109,-15683 }, { 110,-15683 }, + { 111,-15683 }, { 112,-15683 }, { 113,-15683 }, { 114,-15683 }, { 115,-15683 }, + { 116,-15683 }, { 117,-15683 }, { 118,-15683 }, { 119,-15683 }, { 120,-15683 }, + { 121,-15683 }, { 122,-15683 }, { 123,-15683 }, { 124,-15683 }, { 125,-15683 }, + { 126,-15683 }, { 127,-15683 }, { 128,-15683 }, { 129,-15683 }, { 130,-15683 }, + { 131,-15683 }, { 132,-15683 }, { 133,-15683 }, { 134,-15683 }, { 135,-15683 }, + { 136,-15683 }, { 137,-15683 }, { 138,-15683 }, { 139,-15683 }, { 140,-15683 }, + + { 141,-15683 }, { 142,-15683 }, { 143,-15683 }, { 144,-15683 }, { 145,-15683 }, + { 146,-15683 }, { 147,-15683 }, { 148,-15683 }, { 149,-15683 }, { 150,-15683 }, + { 151,-15683 }, { 152,-15683 }, { 153,-15683 }, { 154,-15683 }, { 155,-15683 }, + { 156,-15683 }, { 157,-15683 }, { 158,-15683 }, { 159,-15683 }, { 160,-15683 }, + { 161,-15683 }, { 162,-15683 }, { 163,-15683 }, { 164,-15683 }, { 165,-15683 }, + { 166,-15683 }, { 167,-15683 }, { 168,-15683 }, { 169,-15683 }, { 170,-15683 }, + { 171,-15683 }, { 172,-15683 }, { 173,-15683 }, { 174,-15683 }, { 175,-15683 }, + { 176,-15683 }, { 177,-15683 }, { 178,-15683 }, { 179,-15683 }, { 180,-15683 }, + { 181,-15683 }, { 182,-15683 }, { 183,-15683 }, { 184,-15683 }, { 185,-15683 }, + { 186,-15683 }, { 187,-15683 }, { 188,-15683 }, { 189,-15683 }, { 190,-15683 }, + + { 191,-15683 }, { 192,-15683 }, { 193,-15683 }, { 194,-15683 }, { 195,-15683 }, + { 196,-15683 }, { 197,-15683 }, { 198,-15683 }, { 199,-15683 }, { 200,-15683 }, + { 201,-15683 }, { 202,-15683 }, { 203,-15683 }, { 204,-15683 }, { 205,-15683 }, + { 206,-15683 }, { 207,-15683 }, { 208,-15683 }, { 209,-15683 }, { 210,-15683 }, + { 211,-15683 }, { 212,-15683 }, { 213,-15683 }, { 214,-15683 }, { 215,-15683 }, + { 216,-15683 }, { 217,-15683 }, { 218,-15683 }, { 219,-15683 }, { 220,-15683 }, + { 221,-15683 }, { 222,-15683 }, { 223,-15683 }, { 224,-15683 }, { 225,-15683 }, + { 226,-15683 }, { 227,-15683 }, { 228,-15683 }, { 229,-15683 }, { 230,-15683 }, + { 231,-15683 }, { 232,-15683 }, { 233,-15683 }, { 234,-15683 }, { 235,-15683 }, + { 236,-15683 }, { 237,-15683 }, { 238,-15683 }, { 239,-15683 }, { 240,-15683 }, + + { 241,-15683 }, { 242,-15683 }, { 243,-15683 }, { 244,-15683 }, { 245,-15683 }, + { 246,-15683 }, { 247,-15683 }, { 248,-15683 }, { 249,-15683 }, { 250,-15683 }, + { 251,-15683 }, { 252,-15683 }, { 253,-15683 }, { 254,-15683 }, { 255,-15683 }, + { 256,-15683 }, { 0, 132 }, { 0,77722 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, + { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, + { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, + + { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, + { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, + { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, + { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, + { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, + { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, + + { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, + { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, + { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, + { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, + { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, + { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, + { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, + { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, + + { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, + { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, + { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, + { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, + { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, + { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, + { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, + { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, + + { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, + { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, + { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, + { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 0 }, { 0,77465 }, + { 1,-15425 }, { 2,-15425 }, { 3,-15425 }, { 4,-15425 }, { 5,-15425 }, + { 6,-15425 }, { 7,-15425 }, { 8,-15425 }, { 9,-15425 }, { 10,-15425 }, + { 11,-15425 }, { 12,-15425 }, { 13,-15425 }, { 14,-15425 }, { 15,-15425 }, + { 16,-15425 }, { 17,-15425 }, { 18,-15425 }, { 19,-15425 }, { 20,-15425 }, + { 21,-15425 }, { 22,-15425 }, { 23,-15425 }, { 24,-15425 }, { 25,-15425 }, + + { 26,-15425 }, { 27,-15425 }, { 28,-15425 }, { 29,-15425 }, { 30,-15425 }, + { 31,-15425 }, { 32,-15425 }, { 33,-15425 }, { 34,-15425 }, { 35,-15425 }, + { 36,-15425 }, { 37,-15425 }, { 38,-15425 }, { 39,-16306 }, { 40,-15425 }, + { 41,-15425 }, { 42,-15425 }, { 43,-15425 }, { 44,-15425 }, { 45,-15425 }, + { 46,-15425 }, { 47,-15425 }, { 48,-15425 }, { 49,-15425 }, { 50,-15425 }, + { 51,-15425 }, { 52,-15425 }, { 53,-15425 }, { 54,-15425 }, { 55,-15425 }, + { 56,-15425 }, { 57,-15425 }, { 58,-15425 }, { 59,-15425 }, { 60,-15425 }, + { 61,-15425 }, { 62,-15425 }, { 63,-15425 }, { 64,-15425 }, { 65,-15425 }, + { 66,-15425 }, { 67,-15425 }, { 68,-15425 }, { 69,-15425 }, { 70,-15425 }, + { 71,-15425 }, { 72,-15425 }, { 73,-15425 }, { 74,-15425 }, { 75,-15425 }, + + { 76,-15425 }, { 77,-15425 }, { 78,-15425 }, { 79,-15425 }, { 80,-15425 }, + { 81,-15425 }, { 82,-15425 }, { 83,-15425 }, { 84,-15425 }, { 85,-15425 }, + { 86,-15425 }, { 87,-15425 }, { 88,-15425 }, { 89,-15425 }, { 90,-15425 }, + { 91,-15425 }, { 92,-15167 }, { 93,-15425 }, { 94,-15425 }, { 95,-15425 }, + { 96,-15425 }, { 97,-15425 }, { 98,-15425 }, { 99,-15425 }, { 100,-15425 }, + { 101,-15425 }, { 102,-15425 }, { 103,-15425 }, { 104,-15425 }, { 105,-15425 }, + { 106,-15425 }, { 107,-15425 }, { 108,-15425 }, { 109,-15425 }, { 110,-15425 }, + { 111,-15425 }, { 112,-15425 }, { 113,-15425 }, { 114,-15425 }, { 115,-15425 }, + { 116,-15425 }, { 117,-15425 }, { 118,-15425 }, { 119,-15425 }, { 120,-15425 }, + { 121,-15425 }, { 122,-15425 }, { 123,-15425 }, { 124,-15425 }, { 125,-15425 }, + + { 126,-15425 }, { 127,-15425 }, { 128,-15425 }, { 129,-15425 }, { 130,-15425 }, + { 131,-15425 }, { 132,-15425 }, { 133,-15425 }, { 134,-15425 }, { 135,-15425 }, + { 136,-15425 }, { 137,-15425 }, { 138,-15425 }, { 139,-15425 }, { 140,-15425 }, + { 141,-15425 }, { 142,-15425 }, { 143,-15425 }, { 144,-15425 }, { 145,-15425 }, + { 146,-15425 }, { 147,-15425 }, { 148,-15425 }, { 149,-15425 }, { 150,-15425 }, + { 151,-15425 }, { 152,-15425 }, { 153,-15425 }, { 154,-15425 }, { 155,-15425 }, + { 156,-15425 }, { 157,-15425 }, { 158,-15425 }, { 159,-15425 }, { 160,-15425 }, + { 161,-15425 }, { 162,-15425 }, { 163,-15425 }, { 164,-15425 }, { 165,-15425 }, + { 166,-15425 }, { 167,-15425 }, { 168,-15425 }, { 169,-15425 }, { 170,-15425 }, + { 171,-15425 }, { 172,-15425 }, { 173,-15425 }, { 174,-15425 }, { 175,-15425 }, + + { 176,-15425 }, { 177,-15425 }, { 178,-15425 }, { 179,-15425 }, { 180,-15425 }, + { 181,-15425 }, { 182,-15425 }, { 183,-15425 }, { 184,-15425 }, { 185,-15425 }, + { 186,-15425 }, { 187,-15425 }, { 188,-15425 }, { 189,-15425 }, { 190,-15425 }, + { 191,-15425 }, { 192,-15425 }, { 193,-15425 }, { 194,-15425 }, { 195,-15425 }, + { 196,-15425 }, { 197,-15425 }, { 198,-15425 }, { 199,-15425 }, { 200,-15425 }, + { 201,-15425 }, { 202,-15425 }, { 203,-15425 }, { 204,-15425 }, { 205,-15425 }, + { 206,-15425 }, { 207,-15425 }, { 208,-15425 }, { 209,-15425 }, { 210,-15425 }, + { 211,-15425 }, { 212,-15425 }, { 213,-15425 }, { 214,-15425 }, { 215,-15425 }, + { 216,-15425 }, { 217,-15425 }, { 218,-15425 }, { 219,-15425 }, { 220,-15425 }, + { 221,-15425 }, { 222,-15425 }, { 223,-15425 }, { 224,-15425 }, { 225,-15425 }, + + { 226,-15425 }, { 227,-15425 }, { 228,-15425 }, { 229,-15425 }, { 230,-15425 }, + { 231,-15425 }, { 232,-15425 }, { 233,-15425 }, { 234,-15425 }, { 235,-15425 }, + { 236,-15425 }, { 237,-15425 }, { 238,-15425 }, { 239,-15425 }, { 240,-15425 }, + { 241,-15425 }, { 242,-15425 }, { 243,-15425 }, { 244,-15425 }, { 245,-15425 }, + { 246,-15425 }, { 247,-15425 }, { 248,-15425 }, { 249,-15425 }, { 250,-15425 }, + { 251,-15425 }, { 252,-15425 }, { 253,-15425 }, { 254,-15425 }, { 255,-15425 }, + { 256,-15425 }, { 0, 130 }, { 0,77207 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,77197 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 130 }, { 0,77185 }, + { 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, 129 }, { 0,77170 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 48, 12 }, { 49, 12 }, { 50, 12 }, { 51, 12 }, { 52, 12 }, + { 53, 12 }, { 54, 12 }, { 55, 12 }, { 56, 12 }, { 57, 12 }, + + { 0, 0 }, { 69,-15003 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 0, 131 }, { 0,77111 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 101,-15003 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + { 101, 0 }, { 102, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-15012 }, { 49,-15012 }, { 50,-15012 }, { 51,-15012 }, + { 52,-15012 }, { 53,-15012 }, { 54,-15012 }, { 55,-15012 }, { 56,-15012 }, + { 57,-15012 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-15012 }, { 66,-15012 }, + { 67,-15012 }, { 68,-15012 }, { 69,-15012 }, { 70,-15012 }, { 71,-15012 }, + + { 72,-15012 }, { 73,-15012 }, { 74,-15012 }, { 75,-15012 }, { 76,-15012 }, + { 77,-15012 }, { 78,-15012 }, { 79,-15012 }, { 80,-15012 }, { 81,-15012 }, + { 82,-15012 }, { 83,-15012 }, { 84,14911 }, { 85,-15012 }, { 86,-15012 }, + { 87,-15012 }, { 88,-15012 }, { 89,-15012 }, { 90,-15012 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-15012 }, { 0, 0 }, + { 97,-15012 }, { 98,-15012 }, { 99,-15012 }, { 100,-15012 }, { 101,-15012 }, + { 102,-15012 }, { 103,-15012 }, { 104,-15012 }, { 105,-15012 }, { 106,-15012 }, + { 107,-15012 }, { 108,-15012 }, { 109,-15012 }, { 110,-15012 }, { 111,-15012 }, + { 112,-15012 }, { 113,-15012 }, { 114,-15012 }, { 115,-15012 }, { 116,14911 }, + { 117,-15012 }, { 118,-15012 }, { 119,-15012 }, { 120,-15012 }, { 121,-15012 }, + + { 122,-15012 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-15012 }, { 128,-15012 }, { 129,-15012 }, { 130,-15012 }, { 131,-15012 }, + { 132,-15012 }, { 133,-15012 }, { 134,-15012 }, { 135,-15012 }, { 136,-15012 }, + { 137,-15012 }, { 138,-15012 }, { 139,-15012 }, { 140,-15012 }, { 141,-15012 }, + { 142,-15012 }, { 143,-15012 }, { 144,-15012 }, { 145,-15012 }, { 146,-15012 }, + { 147,-15012 }, { 148,-15012 }, { 149,-15012 }, { 150,-15012 }, { 151,-15012 }, + { 152,-15012 }, { 153,-15012 }, { 154,-15012 }, { 155,-15012 }, { 156,-15012 }, + { 157,-15012 }, { 158,-15012 }, { 159,-15012 }, { 160,-15012 }, { 161,-15012 }, + { 162,-15012 }, { 163,-15012 }, { 164,-15012 }, { 165,-15012 }, { 166,-15012 }, + { 167,-15012 }, { 168,-15012 }, { 169,-15012 }, { 170,-15012 }, { 171,-15012 }, + + { 172,-15012 }, { 173,-15012 }, { 174,-15012 }, { 175,-15012 }, { 176,-15012 }, + { 177,-15012 }, { 178,-15012 }, { 179,-15012 }, { 180,-15012 }, { 181,-15012 }, + { 182,-15012 }, { 183,-15012 }, { 184,-15012 }, { 185,-15012 }, { 186,-15012 }, + { 187,-15012 }, { 188,-15012 }, { 189,-15012 }, { 190,-15012 }, { 191,-15012 }, + { 192,-15012 }, { 193,-15012 }, { 194,-15012 }, { 195,-15012 }, { 196,-15012 }, + { 197,-15012 }, { 198,-15012 }, { 199,-15012 }, { 200,-15012 }, { 201,-15012 }, + { 202,-15012 }, { 203,-15012 }, { 204,-15012 }, { 205,-15012 }, { 206,-15012 }, + { 207,-15012 }, { 208,-15012 }, { 209,-15012 }, { 210,-15012 }, { 211,-15012 }, + { 212,-15012 }, { 213,-15012 }, { 214,-15012 }, { 215,-15012 }, { 216,-15012 }, + { 217,-15012 }, { 218,-15012 }, { 219,-15012 }, { 220,-15012 }, { 221,-15012 }, + + { 222,-15012 }, { 223,-15012 }, { 224,-15012 }, { 225,-15012 }, { 226,-15012 }, + { 227,-15012 }, { 228,-15012 }, { 229,-15012 }, { 230,-15012 }, { 231,-15012 }, + { 232,-15012 }, { 233,-15012 }, { 234,-15012 }, { 235,-15012 }, { 236,-15012 }, + { 237,-15012 }, { 238,-15012 }, { 239,-15012 }, { 240,-15012 }, { 241,-15012 }, + { 242,-15012 }, { 243,-15012 }, { 244,-15012 }, { 245,-15012 }, { 246,-15012 }, + { 247,-15012 }, { 248,-15012 }, { 249,-15012 }, { 250,-15012 }, { 251,-15012 }, + { 252,-15012 }, { 253,-15012 }, { 254,-15012 }, { 255,-15012 }, { 0, 25 }, + { 0,76854 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-15269 }, { 49,-15269 }, + { 50,-15269 }, { 51,-15269 }, { 52,-15269 }, { 53,-15269 }, { 54,-15269 }, + { 55,-15269 }, { 56,-15269 }, { 57,-15269 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-15269 }, { 66,-15269 }, { 67,-15269 }, { 68,-15269 }, { 69,-15269 }, + { 70,-15269 }, { 71,-15269 }, { 72,-15269 }, { 73,-15269 }, { 74,-15269 }, + { 75,-15269 }, { 76,-15269 }, { 77,-15269 }, { 78,-15269 }, { 79,-15269 }, + { 80,-15269 }, { 81,-15269 }, { 82,-15269 }, { 83,-15269 }, { 84,-15269 }, + { 85,-15269 }, { 86,-15269 }, { 87,-15269 }, { 88,-15269 }, { 89,-15269 }, + { 90,-15269 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-15269 }, { 0, 0 }, { 97,-15269 }, { 98,-15269 }, { 99,-15269 }, + { 100,-15269 }, { 101,-15269 }, { 102,-15269 }, { 103,-15269 }, { 104,-15269 }, + { 105,-15269 }, { 106,-15269 }, { 107,-15269 }, { 108,-15269 }, { 109,-15269 }, + { 110,-15269 }, { 111,-15269 }, { 112,-15269 }, { 113,-15269 }, { 114,-15269 }, + + { 115,-15269 }, { 116,-15269 }, { 117,-15269 }, { 118,-15269 }, { 119,-15269 }, + { 120,-15269 }, { 121,-15269 }, { 122,-15269 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-15269 }, { 128,-15269 }, { 129,-15269 }, + { 130,-15269 }, { 131,-15269 }, { 132,-15269 }, { 133,-15269 }, { 134,-15269 }, + { 135,-15269 }, { 136,-15269 }, { 137,-15269 }, { 138,-15269 }, { 139,-15269 }, + { 140,-15269 }, { 141,-15269 }, { 142,-15269 }, { 143,-15269 }, { 144,-15269 }, + { 145,-15269 }, { 146,-15269 }, { 147,-15269 }, { 148,-15269 }, { 149,-15269 }, + { 150,-15269 }, { 151,-15269 }, { 152,-15269 }, { 153,-15269 }, { 154,-15269 }, + { 155,-15269 }, { 156,-15269 }, { 157,-15269 }, { 158,-15269 }, { 159,-15269 }, + { 160,-15269 }, { 161,-15269 }, { 162,-15269 }, { 163,-15269 }, { 164,-15269 }, + + { 165,-15269 }, { 166,-15269 }, { 167,-15269 }, { 168,-15269 }, { 169,-15269 }, + { 170,-15269 }, { 171,-15269 }, { 172,-15269 }, { 173,-15269 }, { 174,-15269 }, + { 175,-15269 }, { 176,-15269 }, { 177,-15269 }, { 178,-15269 }, { 179,-15269 }, + { 180,-15269 }, { 181,-15269 }, { 182,-15269 }, { 183,-15269 }, { 184,-15269 }, + { 185,-15269 }, { 186,-15269 }, { 187,-15269 }, { 188,-15269 }, { 189,-15269 }, + { 190,-15269 }, { 191,-15269 }, { 192,-15269 }, { 193,-15269 }, { 194,-15269 }, + { 195,-15269 }, { 196,-15269 }, { 197,-15269 }, { 198,-15269 }, { 199,-15269 }, + { 200,-15269 }, { 201,-15269 }, { 202,-15269 }, { 203,-15269 }, { 204,-15269 }, + { 205,-15269 }, { 206,-15269 }, { 207,-15269 }, { 208,-15269 }, { 209,-15269 }, + { 210,-15269 }, { 211,-15269 }, { 212,-15269 }, { 213,-15269 }, { 214,-15269 }, + + { 215,-15269 }, { 216,-15269 }, { 217,-15269 }, { 218,-15269 }, { 219,-15269 }, + { 220,-15269 }, { 221,-15269 }, { 222,-15269 }, { 223,-15269 }, { 224,-15269 }, + { 225,-15269 }, { 226,-15269 }, { 227,-15269 }, { 228,-15269 }, { 229,-15269 }, + { 230,-15269 }, { 231,-15269 }, { 232,-15269 }, { 233,-15269 }, { 234,-15269 }, + { 235,-15269 }, { 236,-15269 }, { 237,-15269 }, { 238,-15269 }, { 239,-15269 }, + { 240,-15269 }, { 241,-15269 }, { 242,-15269 }, { 243,-15269 }, { 244,-15269 }, + { 245,-15269 }, { 246,-15269 }, { 247,-15269 }, { 248,-15269 }, { 249,-15269 }, + { 250,-15269 }, { 251,-15269 }, { 252,-15269 }, { 253,-15269 }, { 254,-15269 }, + { 255,-15269 }, { 0, 131 }, { 0,76597 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-15526 }, { 49,-15526 }, { 50,-15526 }, { 51,-15526 }, { 52,-15526 }, + { 53,-15526 }, { 54,-15526 }, { 55,-15526 }, { 56,-15526 }, { 57,-15526 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,14654 }, { 66,-15526 }, { 67,-15526 }, + { 68,-15526 }, { 69,-15526 }, { 70,-15526 }, { 71,-15526 }, { 72,-15526 }, + { 73,-15526 }, { 74,-15526 }, { 75,-15526 }, { 76,-15526 }, { 77,-15526 }, + { 78,-15526 }, { 79,-15526 }, { 80,-15526 }, { 81,-15526 }, { 82,-15526 }, + { 83,-15526 }, { 84,-15526 }, { 85,-15526 }, { 86,-15526 }, { 87,-15526 }, + { 88,-15526 }, { 89,-15526 }, { 90,-15526 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-15526 }, { 0, 0 }, { 97,14654 }, + { 98,-15526 }, { 99,-15526 }, { 100,-15526 }, { 101,-15526 }, { 102,-15526 }, + { 103,-15526 }, { 104,-15526 }, { 105,-15526 }, { 106,-15526 }, { 107,-15526 }, + + { 108,-15526 }, { 109,-15526 }, { 110,-15526 }, { 111,-15526 }, { 112,-15526 }, + { 113,-15526 }, { 114,-15526 }, { 115,-15526 }, { 116,-15526 }, { 117,-15526 }, + { 118,-15526 }, { 119,-15526 }, { 120,-15526 }, { 121,-15526 }, { 122,-15526 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-15526 }, + { 128,-15526 }, { 129,-15526 }, { 130,-15526 }, { 131,-15526 }, { 132,-15526 }, + { 133,-15526 }, { 134,-15526 }, { 135,-15526 }, { 136,-15526 }, { 137,-15526 }, + { 138,-15526 }, { 139,-15526 }, { 140,-15526 }, { 141,-15526 }, { 142,-15526 }, + { 143,-15526 }, { 144,-15526 }, { 145,-15526 }, { 146,-15526 }, { 147,-15526 }, + { 148,-15526 }, { 149,-15526 }, { 150,-15526 }, { 151,-15526 }, { 152,-15526 }, + { 153,-15526 }, { 154,-15526 }, { 155,-15526 }, { 156,-15526 }, { 157,-15526 }, + + { 158,-15526 }, { 159,-15526 }, { 160,-15526 }, { 161,-15526 }, { 162,-15526 }, + { 163,-15526 }, { 164,-15526 }, { 165,-15526 }, { 166,-15526 }, { 167,-15526 }, + { 168,-15526 }, { 169,-15526 }, { 170,-15526 }, { 171,-15526 }, { 172,-15526 }, + { 173,-15526 }, { 174,-15526 }, { 175,-15526 }, { 176,-15526 }, { 177,-15526 }, + { 178,-15526 }, { 179,-15526 }, { 180,-15526 }, { 181,-15526 }, { 182,-15526 }, + { 183,-15526 }, { 184,-15526 }, { 185,-15526 }, { 186,-15526 }, { 187,-15526 }, + { 188,-15526 }, { 189,-15526 }, { 190,-15526 }, { 191,-15526 }, { 192,-15526 }, + { 193,-15526 }, { 194,-15526 }, { 195,-15526 }, { 196,-15526 }, { 197,-15526 }, + { 198,-15526 }, { 199,-15526 }, { 200,-15526 }, { 201,-15526 }, { 202,-15526 }, + { 203,-15526 }, { 204,-15526 }, { 205,-15526 }, { 206,-15526 }, { 207,-15526 }, + + { 208,-15526 }, { 209,-15526 }, { 210,-15526 }, { 211,-15526 }, { 212,-15526 }, + { 213,-15526 }, { 214,-15526 }, { 215,-15526 }, { 216,-15526 }, { 217,-15526 }, + { 218,-15526 }, { 219,-15526 }, { 220,-15526 }, { 221,-15526 }, { 222,-15526 }, + { 223,-15526 }, { 224,-15526 }, { 225,-15526 }, { 226,-15526 }, { 227,-15526 }, + { 228,-15526 }, { 229,-15526 }, { 230,-15526 }, { 231,-15526 }, { 232,-15526 }, + { 233,-15526 }, { 234,-15526 }, { 235,-15526 }, { 236,-15526 }, { 237,-15526 }, + { 238,-15526 }, { 239,-15526 }, { 240,-15526 }, { 241,-15526 }, { 242,-15526 }, + { 243,-15526 }, { 244,-15526 }, { 245,-15526 }, { 246,-15526 }, { 247,-15526 }, + { 248,-15526 }, { 249,-15526 }, { 250,-15526 }, { 251,-15526 }, { 252,-15526 }, + { 253,-15526 }, { 254,-15526 }, { 255,-15526 }, { 0, 131 }, { 0,76340 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-15783 }, { 49,-15783 }, { 50,-15783 }, + + { 51,-15783 }, { 52,-15783 }, { 53,-15783 }, { 54,-15783 }, { 55,-15783 }, + { 56,-15783 }, { 57,-15783 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,14654 }, + { 66,-15783 }, { 67,-15783 }, { 68,-15783 }, { 69,-15783 }, { 70,-15783 }, + { 71,-15783 }, { 72,-15783 }, { 73,-15783 }, { 74,-15783 }, { 75,-15783 }, + { 76,-15783 }, { 77,-15783 }, { 78,-15783 }, { 79,-15783 }, { 80,-15783 }, + { 81,-15783 }, { 82,-15783 }, { 83,-15783 }, { 84,-15783 }, { 85,-15783 }, + { 86,-15783 }, { 87,-15783 }, { 88,-15783 }, { 89,-15783 }, { 90,-15783 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-15783 }, + { 0, 0 }, { 97,14654 }, { 98,-15783 }, { 99,-15783 }, { 100,-15783 }, + + { 101,-15783 }, { 102,-15783 }, { 103,-15783 }, { 104,-15783 }, { 105,-15783 }, + { 106,-15783 }, { 107,-15783 }, { 108,-15783 }, { 109,-15783 }, { 110,-15783 }, + { 111,-15783 }, { 112,-15783 }, { 113,-15783 }, { 114,-15783 }, { 115,-15783 }, + { 116,-15783 }, { 117,-15783 }, { 118,-15783 }, { 119,-15783 }, { 120,-15783 }, + { 121,-15783 }, { 122,-15783 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-15783 }, { 128,-15783 }, { 129,-15783 }, { 130,-15783 }, + { 131,-15783 }, { 132,-15783 }, { 133,-15783 }, { 134,-15783 }, { 135,-15783 }, + { 136,-15783 }, { 137,-15783 }, { 138,-15783 }, { 139,-15783 }, { 140,-15783 }, + { 141,-15783 }, { 142,-15783 }, { 143,-15783 }, { 144,-15783 }, { 145,-15783 }, + { 146,-15783 }, { 147,-15783 }, { 148,-15783 }, { 149,-15783 }, { 150,-15783 }, + + { 151,-15783 }, { 152,-15783 }, { 153,-15783 }, { 154,-15783 }, { 155,-15783 }, + { 156,-15783 }, { 157,-15783 }, { 158,-15783 }, { 159,-15783 }, { 160,-15783 }, + { 161,-15783 }, { 162,-15783 }, { 163,-15783 }, { 164,-15783 }, { 165,-15783 }, + { 166,-15783 }, { 167,-15783 }, { 168,-15783 }, { 169,-15783 }, { 170,-15783 }, + { 171,-15783 }, { 172,-15783 }, { 173,-15783 }, { 174,-15783 }, { 175,-15783 }, + { 176,-15783 }, { 177,-15783 }, { 178,-15783 }, { 179,-15783 }, { 180,-15783 }, + { 181,-15783 }, { 182,-15783 }, { 183,-15783 }, { 184,-15783 }, { 185,-15783 }, + { 186,-15783 }, { 187,-15783 }, { 188,-15783 }, { 189,-15783 }, { 190,-15783 }, + { 191,-15783 }, { 192,-15783 }, { 193,-15783 }, { 194,-15783 }, { 195,-15783 }, + { 196,-15783 }, { 197,-15783 }, { 198,-15783 }, { 199,-15783 }, { 200,-15783 }, + + { 201,-15783 }, { 202,-15783 }, { 203,-15783 }, { 204,-15783 }, { 205,-15783 }, + { 206,-15783 }, { 207,-15783 }, { 208,-15783 }, { 209,-15783 }, { 210,-15783 }, + { 211,-15783 }, { 212,-15783 }, { 213,-15783 }, { 214,-15783 }, { 215,-15783 }, + { 216,-15783 }, { 217,-15783 }, { 218,-15783 }, { 219,-15783 }, { 220,-15783 }, + { 221,-15783 }, { 222,-15783 }, { 223,-15783 }, { 224,-15783 }, { 225,-15783 }, + { 226,-15783 }, { 227,-15783 }, { 228,-15783 }, { 229,-15783 }, { 230,-15783 }, + { 231,-15783 }, { 232,-15783 }, { 233,-15783 }, { 234,-15783 }, { 235,-15783 }, + { 236,-15783 }, { 237,-15783 }, { 238,-15783 }, { 239,-15783 }, { 240,-15783 }, + { 241,-15783 }, { 242,-15783 }, { 243,-15783 }, { 244,-15783 }, { 245,-15783 }, + { 246,-15783 }, { 247,-15783 }, { 248,-15783 }, { 249,-15783 }, { 250,-15783 }, + + { 251,-15783 }, { 252,-15783 }, { 253,-15783 }, { 254,-15783 }, { 255,-15783 }, + { 0, 131 }, { 0,76083 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-16040 }, + { 49,-16040 }, { 50,-16040 }, { 51,-16040 }, { 52,-16040 }, { 53,-16040 }, + { 54,-16040 }, { 55,-16040 }, { 56,-16040 }, { 57,-16040 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-16040 }, { 66,-16040 }, { 67,-16040 }, { 68,-16040 }, + { 69,-16040 }, { 70,-16040 }, { 71,-16040 }, { 72,-16040 }, { 73,-16040 }, + { 74,-16040 }, { 75,-16040 }, { 76,14654 }, { 77,-16040 }, { 78,-16040 }, + { 79,-16040 }, { 80,-16040 }, { 81,-16040 }, { 82,-16040 }, { 83,-16040 }, + { 84,-16040 }, { 85,-16040 }, { 86,-16040 }, { 87,-16040 }, { 88,-16040 }, + { 89,-16040 }, { 90,-16040 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-16040 }, { 0, 0 }, { 97,-16040 }, { 98,-16040 }, + { 99,-16040 }, { 100,-16040 }, { 101,-16040 }, { 102,-16040 }, { 103,-16040 }, + { 104,-16040 }, { 105,-16040 }, { 106,-16040 }, { 107,-16040 }, { 108,14654 }, + { 109,-16040 }, { 110,-16040 }, { 111,-16040 }, { 112,-16040 }, { 113,-16040 }, + { 114,-16040 }, { 115,-16040 }, { 116,-16040 }, { 117,-16040 }, { 118,-16040 }, + { 119,-16040 }, { 120,-16040 }, { 121,-16040 }, { 122,-16040 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-16040 }, { 128,-16040 }, + { 129,-16040 }, { 130,-16040 }, { 131,-16040 }, { 132,-16040 }, { 133,-16040 }, + { 134,-16040 }, { 135,-16040 }, { 136,-16040 }, { 137,-16040 }, { 138,-16040 }, + { 139,-16040 }, { 140,-16040 }, { 141,-16040 }, { 142,-16040 }, { 143,-16040 }, + + { 144,-16040 }, { 145,-16040 }, { 146,-16040 }, { 147,-16040 }, { 148,-16040 }, + { 149,-16040 }, { 150,-16040 }, { 151,-16040 }, { 152,-16040 }, { 153,-16040 }, + { 154,-16040 }, { 155,-16040 }, { 156,-16040 }, { 157,-16040 }, { 158,-16040 }, + { 159,-16040 }, { 160,-16040 }, { 161,-16040 }, { 162,-16040 }, { 163,-16040 }, + { 164,-16040 }, { 165,-16040 }, { 166,-16040 }, { 167,-16040 }, { 168,-16040 }, + { 169,-16040 }, { 170,-16040 }, { 171,-16040 }, { 172,-16040 }, { 173,-16040 }, + { 174,-16040 }, { 175,-16040 }, { 176,-16040 }, { 177,-16040 }, { 178,-16040 }, + { 179,-16040 }, { 180,-16040 }, { 181,-16040 }, { 182,-16040 }, { 183,-16040 }, + { 184,-16040 }, { 185,-16040 }, { 186,-16040 }, { 187,-16040 }, { 188,-16040 }, + { 189,-16040 }, { 190,-16040 }, { 191,-16040 }, { 192,-16040 }, { 193,-16040 }, + + { 194,-16040 }, { 195,-16040 }, { 196,-16040 }, { 197,-16040 }, { 198,-16040 }, + { 199,-16040 }, { 200,-16040 }, { 201,-16040 }, { 202,-16040 }, { 203,-16040 }, + { 204,-16040 }, { 205,-16040 }, { 206,-16040 }, { 207,-16040 }, { 208,-16040 }, + { 209,-16040 }, { 210,-16040 }, { 211,-16040 }, { 212,-16040 }, { 213,-16040 }, + { 214,-16040 }, { 215,-16040 }, { 216,-16040 }, { 217,-16040 }, { 218,-16040 }, + { 219,-16040 }, { 220,-16040 }, { 221,-16040 }, { 222,-16040 }, { 223,-16040 }, + { 224,-16040 }, { 225,-16040 }, { 226,-16040 }, { 227,-16040 }, { 228,-16040 }, + { 229,-16040 }, { 230,-16040 }, { 231,-16040 }, { 232,-16040 }, { 233,-16040 }, + { 234,-16040 }, { 235,-16040 }, { 236,-16040 }, { 237,-16040 }, { 238,-16040 }, + { 239,-16040 }, { 240,-16040 }, { 241,-16040 }, { 242,-16040 }, { 243,-16040 }, + + { 244,-16040 }, { 245,-16040 }, { 246,-16040 }, { 247,-16040 }, { 248,-16040 }, + { 249,-16040 }, { 250,-16040 }, { 251,-16040 }, { 252,-16040 }, { 253,-16040 }, + { 254,-16040 }, { 255,-16040 }, { 0, 131 }, { 0,75826 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-16297 }, { 49,-16297 }, { 50,-16297 }, { 51,-16297 }, + { 52,-16297 }, { 53,-16297 }, { 54,-16297 }, { 55,-16297 }, { 56,-16297 }, + { 57,-16297 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-16297 }, { 66,-16297 }, + { 67,-16297 }, { 68,-16297 }, { 69,14654 }, { 70,-16297 }, { 71,-16297 }, + { 72,-16297 }, { 73,-16297 }, { 74,-16297 }, { 75,-16297 }, { 76,-16297 }, + { 77,-16297 }, { 78,-16297 }, { 79,-16297 }, { 80,-16297 }, { 81,-16297 }, + { 82,-16297 }, { 83,-16297 }, { 84,-16297 }, { 85,-16297 }, { 86,-16297 }, + + { 87,-16297 }, { 88,-16297 }, { 89,-16297 }, { 90,-16297 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-16297 }, { 0, 0 }, + { 97,-16297 }, { 98,-16297 }, { 99,-16297 }, { 100,-16297 }, { 101,14654 }, + { 102,-16297 }, { 103,-16297 }, { 104,-16297 }, { 105,-16297 }, { 106,-16297 }, + { 107,-16297 }, { 108,-16297 }, { 109,-16297 }, { 110,-16297 }, { 111,-16297 }, + { 112,-16297 }, { 113,-16297 }, { 114,-16297 }, { 115,-16297 }, { 116,-16297 }, + { 117,-16297 }, { 118,-16297 }, { 119,-16297 }, { 120,-16297 }, { 121,-16297 }, + { 122,-16297 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-16297 }, { 128,-16297 }, { 129,-16297 }, { 130,-16297 }, { 131,-16297 }, + { 132,-16297 }, { 133,-16297 }, { 134,-16297 }, { 135,-16297 }, { 136,-16297 }, + + { 137,-16297 }, { 138,-16297 }, { 139,-16297 }, { 140,-16297 }, { 141,-16297 }, + { 142,-16297 }, { 143,-16297 }, { 144,-16297 }, { 145,-16297 }, { 146,-16297 }, + { 147,-16297 }, { 148,-16297 }, { 149,-16297 }, { 150,-16297 }, { 151,-16297 }, + { 152,-16297 }, { 153,-16297 }, { 154,-16297 }, { 155,-16297 }, { 156,-16297 }, + { 157,-16297 }, { 158,-16297 }, { 159,-16297 }, { 160,-16297 }, { 161,-16297 }, + { 162,-16297 }, { 163,-16297 }, { 164,-16297 }, { 165,-16297 }, { 166,-16297 }, + { 167,-16297 }, { 168,-16297 }, { 169,-16297 }, { 170,-16297 }, { 171,-16297 }, + { 172,-16297 }, { 173,-16297 }, { 174,-16297 }, { 175,-16297 }, { 176,-16297 }, + { 177,-16297 }, { 178,-16297 }, { 179,-16297 }, { 180,-16297 }, { 181,-16297 }, + { 182,-16297 }, { 183,-16297 }, { 184,-16297 }, { 185,-16297 }, { 186,-16297 }, + + { 187,-16297 }, { 188,-16297 }, { 189,-16297 }, { 190,-16297 }, { 191,-16297 }, + { 192,-16297 }, { 193,-16297 }, { 194,-16297 }, { 195,-16297 }, { 196,-16297 }, + { 197,-16297 }, { 198,-16297 }, { 199,-16297 }, { 200,-16297 }, { 201,-16297 }, + { 202,-16297 }, { 203,-16297 }, { 204,-16297 }, { 205,-16297 }, { 206,-16297 }, + { 207,-16297 }, { 208,-16297 }, { 209,-16297 }, { 210,-16297 }, { 211,-16297 }, + { 212,-16297 }, { 213,-16297 }, { 214,-16297 }, { 215,-16297 }, { 216,-16297 }, + { 217,-16297 }, { 218,-16297 }, { 219,-16297 }, { 220,-16297 }, { 221,-16297 }, + { 222,-16297 }, { 223,-16297 }, { 224,-16297 }, { 225,-16297 }, { 226,-16297 }, + { 227,-16297 }, { 228,-16297 }, { 229,-16297 }, { 230,-16297 }, { 231,-16297 }, + { 232,-16297 }, { 233,-16297 }, { 234,-16297 }, { 235,-16297 }, { 236,-16297 }, + + { 237,-16297 }, { 238,-16297 }, { 239,-16297 }, { 240,-16297 }, { 241,-16297 }, + { 242,-16297 }, { 243,-16297 }, { 244,-16297 }, { 245,-16297 }, { 246,-16297 }, + { 247,-16297 }, { 248,-16297 }, { 249,-16297 }, { 250,-16297 }, { 251,-16297 }, + { 252,-16297 }, { 253,-16297 }, { 254,-16297 }, { 255,-16297 }, { 0, 131 }, + { 0,75569 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-16554 }, { 49,-16554 }, + { 50,-16554 }, { 51,-16554 }, { 52,-16554 }, { 53,-16554 }, { 54,-16554 }, + { 55,-16554 }, { 56,-16554 }, { 57,-16554 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-16554 }, { 66,-16554 }, { 67,14654 }, { 68,-16554 }, { 69,-16554 }, + { 70,-16554 }, { 71,-16554 }, { 72,-16554 }, { 73,-16554 }, { 74,-16554 }, + { 75,-16554 }, { 76,-16554 }, { 77,-16554 }, { 78,-16554 }, { 79,-16554 }, + + { 80,-16554 }, { 81,-16554 }, { 82,-16554 }, { 83,-16554 }, { 84,-16554 }, + { 85,-16554 }, { 86,-16554 }, { 87,-16554 }, { 88,-16554 }, { 89,-16554 }, + { 90,-16554 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-16554 }, { 0, 0 }, { 97,-16554 }, { 98,-16554 }, { 99,14654 }, + { 100,-16554 }, { 101,-16554 }, { 102,-16554 }, { 103,-16554 }, { 104,-16554 }, + { 105,-16554 }, { 106,-16554 }, { 107,-16554 }, { 108,-16554 }, { 109,-16554 }, + { 110,-16554 }, { 111,-16554 }, { 112,-16554 }, { 113,-16554 }, { 114,-16554 }, + { 115,-16554 }, { 116,-16554 }, { 117,-16554 }, { 118,-16554 }, { 119,-16554 }, + { 120,-16554 }, { 121,-16554 }, { 122,-16554 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-16554 }, { 128,-16554 }, { 129,-16554 }, + + { 130,-16554 }, { 131,-16554 }, { 132,-16554 }, { 133,-16554 }, { 134,-16554 }, + { 135,-16554 }, { 136,-16554 }, { 137,-16554 }, { 138,-16554 }, { 139,-16554 }, + { 140,-16554 }, { 141,-16554 }, { 142,-16554 }, { 143,-16554 }, { 144,-16554 }, + { 145,-16554 }, { 146,-16554 }, { 147,-16554 }, { 148,-16554 }, { 149,-16554 }, + { 150,-16554 }, { 151,-16554 }, { 152,-16554 }, { 153,-16554 }, { 154,-16554 }, + { 155,-16554 }, { 156,-16554 }, { 157,-16554 }, { 158,-16554 }, { 159,-16554 }, + { 160,-16554 }, { 161,-16554 }, { 162,-16554 }, { 163,-16554 }, { 164,-16554 }, + { 165,-16554 }, { 166,-16554 }, { 167,-16554 }, { 168,-16554 }, { 169,-16554 }, + { 170,-16554 }, { 171,-16554 }, { 172,-16554 }, { 173,-16554 }, { 174,-16554 }, + { 175,-16554 }, { 176,-16554 }, { 177,-16554 }, { 178,-16554 }, { 179,-16554 }, + + { 180,-16554 }, { 181,-16554 }, { 182,-16554 }, { 183,-16554 }, { 184,-16554 }, + { 185,-16554 }, { 186,-16554 }, { 187,-16554 }, { 188,-16554 }, { 189,-16554 }, + { 190,-16554 }, { 191,-16554 }, { 192,-16554 }, { 193,-16554 }, { 194,-16554 }, + { 195,-16554 }, { 196,-16554 }, { 197,-16554 }, { 198,-16554 }, { 199,-16554 }, + { 200,-16554 }, { 201,-16554 }, { 202,-16554 }, { 203,-16554 }, { 204,-16554 }, + { 205,-16554 }, { 206,-16554 }, { 207,-16554 }, { 208,-16554 }, { 209,-16554 }, + { 210,-16554 }, { 211,-16554 }, { 212,-16554 }, { 213,-16554 }, { 214,-16554 }, + { 215,-16554 }, { 216,-16554 }, { 217,-16554 }, { 218,-16554 }, { 219,-16554 }, + { 220,-16554 }, { 221,-16554 }, { 222,-16554 }, { 223,-16554 }, { 224,-16554 }, + { 225,-16554 }, { 226,-16554 }, { 227,-16554 }, { 228,-16554 }, { 229,-16554 }, + + { 230,-16554 }, { 231,-16554 }, { 232,-16554 }, { 233,-16554 }, { 234,-16554 }, + { 235,-16554 }, { 236,-16554 }, { 237,-16554 }, { 238,-16554 }, { 239,-16554 }, + { 240,-16554 }, { 241,-16554 }, { 242,-16554 }, { 243,-16554 }, { 244,-16554 }, + { 245,-16554 }, { 246,-16554 }, { 247,-16554 }, { 248,-16554 }, { 249,-16554 }, + { 250,-16554 }, { 251,-16554 }, { 252,-16554 }, { 253,-16554 }, { 254,-16554 }, + { 255,-16554 }, { 0, 131 }, { 0,75312 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-16811 }, { 49,-16811 }, { 50,-16811 }, { 51,-16811 }, { 52,-16811 }, + { 53,-16811 }, { 54,-16811 }, { 55,-16811 }, { 56,-16811 }, { 57,-16811 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-16811 }, { 66,-16811 }, { 67,-16811 }, + { 68,-16811 }, { 69,-16811 }, { 70,-16811 }, { 71,-16811 }, { 72,-16811 }, + + { 73,-16811 }, { 74,-16811 }, { 75,-16811 }, { 76,-16811 }, { 77,-16811 }, + { 78,-16811 }, { 79,-16811 }, { 80,-16811 }, { 81,-16811 }, { 82,-16811 }, + { 83,14654 }, { 84,-16811 }, { 85,-16811 }, { 86,-16811 }, { 87,-16811 }, + { 88,-16811 }, { 89,-16811 }, { 90,-16811 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-16811 }, { 0, 0 }, { 97,-16811 }, + { 98,-16811 }, { 99,-16811 }, { 100,-16811 }, { 101,-16811 }, { 102,-16811 }, + { 103,-16811 }, { 104,-16811 }, { 105,-16811 }, { 106,-16811 }, { 107,-16811 }, + { 108,-16811 }, { 109,-16811 }, { 110,-16811 }, { 111,-16811 }, { 112,-16811 }, + { 113,-16811 }, { 114,-16811 }, { 115,14654 }, { 116,-16811 }, { 117,-16811 }, + { 118,-16811 }, { 119,-16811 }, { 120,-16811 }, { 121,-16811 }, { 122,-16811 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-16811 }, + { 128,-16811 }, { 129,-16811 }, { 130,-16811 }, { 131,-16811 }, { 132,-16811 }, + { 133,-16811 }, { 134,-16811 }, { 135,-16811 }, { 136,-16811 }, { 137,-16811 }, + { 138,-16811 }, { 139,-16811 }, { 140,-16811 }, { 141,-16811 }, { 142,-16811 }, + { 143,-16811 }, { 144,-16811 }, { 145,-16811 }, { 146,-16811 }, { 147,-16811 }, + { 148,-16811 }, { 149,-16811 }, { 150,-16811 }, { 151,-16811 }, { 152,-16811 }, + { 153,-16811 }, { 154,-16811 }, { 155,-16811 }, { 156,-16811 }, { 157,-16811 }, + { 158,-16811 }, { 159,-16811 }, { 160,-16811 }, { 161,-16811 }, { 162,-16811 }, + { 163,-16811 }, { 164,-16811 }, { 165,-16811 }, { 166,-16811 }, { 167,-16811 }, + { 168,-16811 }, { 169,-16811 }, { 170,-16811 }, { 171,-16811 }, { 172,-16811 }, + + { 173,-16811 }, { 174,-16811 }, { 175,-16811 }, { 176,-16811 }, { 177,-16811 }, + { 178,-16811 }, { 179,-16811 }, { 180,-16811 }, { 181,-16811 }, { 182,-16811 }, + { 183,-16811 }, { 184,-16811 }, { 185,-16811 }, { 186,-16811 }, { 187,-16811 }, + { 188,-16811 }, { 189,-16811 }, { 190,-16811 }, { 191,-16811 }, { 192,-16811 }, + { 193,-16811 }, { 194,-16811 }, { 195,-16811 }, { 196,-16811 }, { 197,-16811 }, + { 198,-16811 }, { 199,-16811 }, { 200,-16811 }, { 201,-16811 }, { 202,-16811 }, + { 203,-16811 }, { 204,-16811 }, { 205,-16811 }, { 206,-16811 }, { 207,-16811 }, + { 208,-16811 }, { 209,-16811 }, { 210,-16811 }, { 211,-16811 }, { 212,-16811 }, + { 213,-16811 }, { 214,-16811 }, { 215,-16811 }, { 216,-16811 }, { 217,-16811 }, + { 218,-16811 }, { 219,-16811 }, { 220,-16811 }, { 221,-16811 }, { 222,-16811 }, + + { 223,-16811 }, { 224,-16811 }, { 225,-16811 }, { 226,-16811 }, { 227,-16811 }, + { 228,-16811 }, { 229,-16811 }, { 230,-16811 }, { 231,-16811 }, { 232,-16811 }, + { 233,-16811 }, { 234,-16811 }, { 235,-16811 }, { 236,-16811 }, { 237,-16811 }, + { 238,-16811 }, { 239,-16811 }, { 240,-16811 }, { 241,-16811 }, { 242,-16811 }, + { 243,-16811 }, { 244,-16811 }, { 245,-16811 }, { 246,-16811 }, { 247,-16811 }, + { 248,-16811 }, { 249,-16811 }, { 250,-16811 }, { 251,-16811 }, { 252,-16811 }, + { 253,-16811 }, { 254,-16811 }, { 255,-16811 }, { 0, 131 }, { 0,75055 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-17068 }, { 49,-17068 }, { 50,-17068 }, + { 51,-17068 }, { 52,-17068 }, { 53,-17068 }, { 54,-17068 }, { 55,-17068 }, + { 56,-17068 }, { 57,-17068 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-17068 }, + + { 66,-17068 }, { 67,-17068 }, { 68,-17068 }, { 69,-17068 }, { 70,-17068 }, + { 71,-17068 }, { 72,-17068 }, { 73,-17068 }, { 74,-17068 }, { 75,-17068 }, + { 76,-17068 }, { 77,-17068 }, { 78,14654 }, { 79,-17068 }, { 80,-17068 }, + { 81,-17068 }, { 82,-17068 }, { 83,-17068 }, { 84,-17068 }, { 85,-17068 }, + { 86,-17068 }, { 87,-17068 }, { 88,-17068 }, { 89,-17068 }, { 90,-17068 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-17068 }, + { 0, 0 }, { 97,-17068 }, { 98,-17068 }, { 99,-17068 }, { 100,-17068 }, + { 101,-17068 }, { 102,-17068 }, { 103,-17068 }, { 104,-17068 }, { 105,-17068 }, + { 106,-17068 }, { 107,-17068 }, { 108,-17068 }, { 109,-17068 }, { 110,14654 }, + { 111,-17068 }, { 112,-17068 }, { 113,-17068 }, { 114,-17068 }, { 115,-17068 }, + + { 116,-17068 }, { 117,-17068 }, { 118,-17068 }, { 119,-17068 }, { 120,-17068 }, + { 121,-17068 }, { 122,-17068 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-17068 }, { 128,-17068 }, { 129,-17068 }, { 130,-17068 }, + { 131,-17068 }, { 132,-17068 }, { 133,-17068 }, { 134,-17068 }, { 135,-17068 }, + { 136,-17068 }, { 137,-17068 }, { 138,-17068 }, { 139,-17068 }, { 140,-17068 }, + { 141,-17068 }, { 142,-17068 }, { 143,-17068 }, { 144,-17068 }, { 145,-17068 }, + { 146,-17068 }, { 147,-17068 }, { 148,-17068 }, { 149,-17068 }, { 150,-17068 }, + { 151,-17068 }, { 152,-17068 }, { 153,-17068 }, { 154,-17068 }, { 155,-17068 }, + { 156,-17068 }, { 157,-17068 }, { 158,-17068 }, { 159,-17068 }, { 160,-17068 }, + { 161,-17068 }, { 162,-17068 }, { 163,-17068 }, { 164,-17068 }, { 165,-17068 }, + + { 166,-17068 }, { 167,-17068 }, { 168,-17068 }, { 169,-17068 }, { 170,-17068 }, + { 171,-17068 }, { 172,-17068 }, { 173,-17068 }, { 174,-17068 }, { 175,-17068 }, + { 176,-17068 }, { 177,-17068 }, { 178,-17068 }, { 179,-17068 }, { 180,-17068 }, + { 181,-17068 }, { 182,-17068 }, { 183,-17068 }, { 184,-17068 }, { 185,-17068 }, + { 186,-17068 }, { 187,-17068 }, { 188,-17068 }, { 189,-17068 }, { 190,-17068 }, + { 191,-17068 }, { 192,-17068 }, { 193,-17068 }, { 194,-17068 }, { 195,-17068 }, + { 196,-17068 }, { 197,-17068 }, { 198,-17068 }, { 199,-17068 }, { 200,-17068 }, + { 201,-17068 }, { 202,-17068 }, { 203,-17068 }, { 204,-17068 }, { 205,-17068 }, + { 206,-17068 }, { 207,-17068 }, { 208,-17068 }, { 209,-17068 }, { 210,-17068 }, + { 211,-17068 }, { 212,-17068 }, { 213,-17068 }, { 214,-17068 }, { 215,-17068 }, + + { 216,-17068 }, { 217,-17068 }, { 218,-17068 }, { 219,-17068 }, { 220,-17068 }, + { 221,-17068 }, { 222,-17068 }, { 223,-17068 }, { 224,-17068 }, { 225,-17068 }, + { 226,-17068 }, { 227,-17068 }, { 228,-17068 }, { 229,-17068 }, { 230,-17068 }, + { 231,-17068 }, { 232,-17068 }, { 233,-17068 }, { 234,-17068 }, { 235,-17068 }, + { 236,-17068 }, { 237,-17068 }, { 238,-17068 }, { 239,-17068 }, { 240,-17068 }, + { 241,-17068 }, { 242,-17068 }, { 243,-17068 }, { 244,-17068 }, { 245,-17068 }, + { 246,-17068 }, { 247,-17068 }, { 248,-17068 }, { 249,-17068 }, { 250,-17068 }, + { 251,-17068 }, { 252,-17068 }, { 253,-17068 }, { 254,-17068 }, { 255,-17068 }, + { 0, 131 }, { 0,74798 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-17325 }, + { 49,-17325 }, { 50,-17325 }, { 51,-17325 }, { 52,-17325 }, { 53,-17325 }, + { 54,-17325 }, { 55,-17325 }, { 56,-17325 }, { 57,-17325 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-17325 }, { 66,-17325 }, { 67,-17325 }, { 68,-17325 }, + { 69,-17325 }, { 70,-17325 }, { 71,-17325 }, { 72,-17325 }, { 73,-17325 }, + { 74,-17325 }, { 75,-17325 }, { 76,-17325 }, { 77,-17325 }, { 78,-17325 }, + { 79,-17325 }, { 80,-17325 }, { 81,-17325 }, { 82,-17325 }, { 83,14654 }, + { 84,14911 }, { 85,-17325 }, { 86,-17325 }, { 87,-17325 }, { 88,-17325 }, + { 89,-17325 }, { 90,-17325 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-17325 }, { 0, 0 }, { 97,-17325 }, { 98,-17325 }, + { 99,-17325 }, { 100,-17325 }, { 101,-17325 }, { 102,-17325 }, { 103,-17325 }, + { 104,-17325 }, { 105,-17325 }, { 106,-17325 }, { 107,-17325 }, { 108,-17325 }, + + { 109,-17325 }, { 110,-17325 }, { 111,-17325 }, { 112,-17325 }, { 113,-17325 }, + { 114,-17325 }, { 115,14654 }, { 116,14911 }, { 117,-17325 }, { 118,-17325 }, + { 119,-17325 }, { 120,-17325 }, { 121,-17325 }, { 122,-17325 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-17325 }, { 128,-17325 }, + { 129,-17325 }, { 130,-17325 }, { 131,-17325 }, { 132,-17325 }, { 133,-17325 }, + { 134,-17325 }, { 135,-17325 }, { 136,-17325 }, { 137,-17325 }, { 138,-17325 }, + { 139,-17325 }, { 140,-17325 }, { 141,-17325 }, { 142,-17325 }, { 143,-17325 }, + { 144,-17325 }, { 145,-17325 }, { 146,-17325 }, { 147,-17325 }, { 148,-17325 }, + { 149,-17325 }, { 150,-17325 }, { 151,-17325 }, { 152,-17325 }, { 153,-17325 }, + { 154,-17325 }, { 155,-17325 }, { 156,-17325 }, { 157,-17325 }, { 158,-17325 }, + + { 159,-17325 }, { 160,-17325 }, { 161,-17325 }, { 162,-17325 }, { 163,-17325 }, + { 164,-17325 }, { 165,-17325 }, { 166,-17325 }, { 167,-17325 }, { 168,-17325 }, + { 169,-17325 }, { 170,-17325 }, { 171,-17325 }, { 172,-17325 }, { 173,-17325 }, + { 174,-17325 }, { 175,-17325 }, { 176,-17325 }, { 177,-17325 }, { 178,-17325 }, + { 179,-17325 }, { 180,-17325 }, { 181,-17325 }, { 182,-17325 }, { 183,-17325 }, + { 184,-17325 }, { 185,-17325 }, { 186,-17325 }, { 187,-17325 }, { 188,-17325 }, + { 189,-17325 }, { 190,-17325 }, { 191,-17325 }, { 192,-17325 }, { 193,-17325 }, + { 194,-17325 }, { 195,-17325 }, { 196,-17325 }, { 197,-17325 }, { 198,-17325 }, + { 199,-17325 }, { 200,-17325 }, { 201,-17325 }, { 202,-17325 }, { 203,-17325 }, + { 204,-17325 }, { 205,-17325 }, { 206,-17325 }, { 207,-17325 }, { 208,-17325 }, + + { 209,-17325 }, { 210,-17325 }, { 211,-17325 }, { 212,-17325 }, { 213,-17325 }, + { 214,-17325 }, { 215,-17325 }, { 216,-17325 }, { 217,-17325 }, { 218,-17325 }, + { 219,-17325 }, { 220,-17325 }, { 221,-17325 }, { 222,-17325 }, { 223,-17325 }, + { 224,-17325 }, { 225,-17325 }, { 226,-17325 }, { 227,-17325 }, { 228,-17325 }, + { 229,-17325 }, { 230,-17325 }, { 231,-17325 }, { 232,-17325 }, { 233,-17325 }, + { 234,-17325 }, { 235,-17325 }, { 236,-17325 }, { 237,-17325 }, { 238,-17325 }, + { 239,-17325 }, { 240,-17325 }, { 241,-17325 }, { 242,-17325 }, { 243,-17325 }, + { 244,-17325 }, { 245,-17325 }, { 246,-17325 }, { 247,-17325 }, { 248,-17325 }, + { 249,-17325 }, { 250,-17325 }, { 251,-17325 }, { 252,-17325 }, { 253,-17325 }, + { 254,-17325 }, { 255,-17325 }, { 0, 131 }, { 0,74541 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-17582 }, { 49,-17582 }, { 50,-17582 }, { 51,-17582 }, + + { 52,-17582 }, { 53,-17582 }, { 54,-17582 }, { 55,-17582 }, { 56,-17582 }, + { 57,-17582 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-17582 }, { 66,-17582 }, + { 67,-17582 }, { 68,-17582 }, { 69,-17582 }, { 70,-17582 }, { 71,-17582 }, + { 72,-17582 }, { 73,-17582 }, { 74,-17582 }, { 75,-17582 }, { 76,14911 }, + { 77,-17582 }, { 78,-17582 }, { 79,-17582 }, { 80,-17582 }, { 81,-17582 }, + { 82,-17582 }, { 83,-17582 }, { 84,-17582 }, { 85,-17582 }, { 86,-17582 }, + { 87,-17582 }, { 88,-17582 }, { 89,-17582 }, { 90,-17582 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-17582 }, { 0, 0 }, + { 97,-17582 }, { 98,-17582 }, { 99,-17582 }, { 100,-17582 }, { 101,-17582 }, + + { 102,-17582 }, { 103,-17582 }, { 104,-17582 }, { 105,-17582 }, { 106,-17582 }, + { 107,-17582 }, { 108,14911 }, { 109,-17582 }, { 110,-17582 }, { 111,-17582 }, + { 112,-17582 }, { 113,-17582 }, { 114,-17582 }, { 115,-17582 }, { 116,-17582 }, + { 117,-17582 }, { 118,-17582 }, { 119,-17582 }, { 120,-17582 }, { 121,-17582 }, + { 122,-17582 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-17582 }, { 128,-17582 }, { 129,-17582 }, { 130,-17582 }, { 131,-17582 }, + { 132,-17582 }, { 133,-17582 }, { 134,-17582 }, { 135,-17582 }, { 136,-17582 }, + { 137,-17582 }, { 138,-17582 }, { 139,-17582 }, { 140,-17582 }, { 141,-17582 }, + { 142,-17582 }, { 143,-17582 }, { 144,-17582 }, { 145,-17582 }, { 146,-17582 }, + { 147,-17582 }, { 148,-17582 }, { 149,-17582 }, { 150,-17582 }, { 151,-17582 }, + + { 152,-17582 }, { 153,-17582 }, { 154,-17582 }, { 155,-17582 }, { 156,-17582 }, + { 157,-17582 }, { 158,-17582 }, { 159,-17582 }, { 160,-17582 }, { 161,-17582 }, + { 162,-17582 }, { 163,-17582 }, { 164,-17582 }, { 165,-17582 }, { 166,-17582 }, + { 167,-17582 }, { 168,-17582 }, { 169,-17582 }, { 170,-17582 }, { 171,-17582 }, + { 172,-17582 }, { 173,-17582 }, { 174,-17582 }, { 175,-17582 }, { 176,-17582 }, + { 177,-17582 }, { 178,-17582 }, { 179,-17582 }, { 180,-17582 }, { 181,-17582 }, + { 182,-17582 }, { 183,-17582 }, { 184,-17582 }, { 185,-17582 }, { 186,-17582 }, + { 187,-17582 }, { 188,-17582 }, { 189,-17582 }, { 190,-17582 }, { 191,-17582 }, + { 192,-17582 }, { 193,-17582 }, { 194,-17582 }, { 195,-17582 }, { 196,-17582 }, + { 197,-17582 }, { 198,-17582 }, { 199,-17582 }, { 200,-17582 }, { 201,-17582 }, + + { 202,-17582 }, { 203,-17582 }, { 204,-17582 }, { 205,-17582 }, { 206,-17582 }, + { 207,-17582 }, { 208,-17582 }, { 209,-17582 }, { 210,-17582 }, { 211,-17582 }, + { 212,-17582 }, { 213,-17582 }, { 214,-17582 }, { 215,-17582 }, { 216,-17582 }, + { 217,-17582 }, { 218,-17582 }, { 219,-17582 }, { 220,-17582 }, { 221,-17582 }, + { 222,-17582 }, { 223,-17582 }, { 224,-17582 }, { 225,-17582 }, { 226,-17582 }, + { 227,-17582 }, { 228,-17582 }, { 229,-17582 }, { 230,-17582 }, { 231,-17582 }, + { 232,-17582 }, { 233,-17582 }, { 234,-17582 }, { 235,-17582 }, { 236,-17582 }, + { 237,-17582 }, { 238,-17582 }, { 239,-17582 }, { 240,-17582 }, { 241,-17582 }, + { 242,-17582 }, { 243,-17582 }, { 244,-17582 }, { 245,-17582 }, { 246,-17582 }, + { 247,-17582 }, { 248,-17582 }, { 249,-17582 }, { 250,-17582 }, { 251,-17582 }, + + { 252,-17582 }, { 253,-17582 }, { 254,-17582 }, { 255,-17582 }, { 0, 131 }, + { 0,74284 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-17839 }, { 49,-17839 }, + { 50,-17839 }, { 51,-17839 }, { 52,-17839 }, { 53,-17839 }, { 54,-17839 }, + { 55,-17839 }, { 56,-17839 }, { 57,-17839 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,14911 }, { 66,-17839 }, { 67,-17839 }, { 68,-17839 }, { 69,-17839 }, + { 70,-17839 }, { 71,-17839 }, { 72,-17839 }, { 73,-17839 }, { 74,-17839 }, + { 75,-17839 }, { 76,-17839 }, { 77,-17839 }, { 78,-17839 }, { 79,-17839 }, + { 80,-17839 }, { 81,-17839 }, { 82,-17839 }, { 83,-17839 }, { 84,-17839 }, + { 85,-17839 }, { 86,-17839 }, { 87,-17839 }, { 88,-17839 }, { 89,-17839 }, + { 90,-17839 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-17839 }, { 0, 0 }, { 97,14911 }, { 98,-17839 }, { 99,-17839 }, + { 100,-17839 }, { 101,-17839 }, { 102,-17839 }, { 103,-17839 }, { 104,-17839 }, + { 105,-17839 }, { 106,-17839 }, { 107,-17839 }, { 108,-17839 }, { 109,-17839 }, + { 110,-17839 }, { 111,-17839 }, { 112,-17839 }, { 113,-17839 }, { 114,-17839 }, + { 115,-17839 }, { 116,-17839 }, { 117,-17839 }, { 118,-17839 }, { 119,-17839 }, + { 120,-17839 }, { 121,-17839 }, { 122,-17839 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-17839 }, { 128,-17839 }, { 129,-17839 }, + { 130,-17839 }, { 131,-17839 }, { 132,-17839 }, { 133,-17839 }, { 134,-17839 }, + { 135,-17839 }, { 136,-17839 }, { 137,-17839 }, { 138,-17839 }, { 139,-17839 }, + { 140,-17839 }, { 141,-17839 }, { 142,-17839 }, { 143,-17839 }, { 144,-17839 }, + + { 145,-17839 }, { 146,-17839 }, { 147,-17839 }, { 148,-17839 }, { 149,-17839 }, + { 150,-17839 }, { 151,-17839 }, { 152,-17839 }, { 153,-17839 }, { 154,-17839 }, + { 155,-17839 }, { 156,-17839 }, { 157,-17839 }, { 158,-17839 }, { 159,-17839 }, + { 160,-17839 }, { 161,-17839 }, { 162,-17839 }, { 163,-17839 }, { 164,-17839 }, + { 165,-17839 }, { 166,-17839 }, { 167,-17839 }, { 168,-17839 }, { 169,-17839 }, + { 170,-17839 }, { 171,-17839 }, { 172,-17839 }, { 173,-17839 }, { 174,-17839 }, + { 175,-17839 }, { 176,-17839 }, { 177,-17839 }, { 178,-17839 }, { 179,-17839 }, + { 180,-17839 }, { 181,-17839 }, { 182,-17839 }, { 183,-17839 }, { 184,-17839 }, + { 185,-17839 }, { 186,-17839 }, { 187,-17839 }, { 188,-17839 }, { 189,-17839 }, + { 190,-17839 }, { 191,-17839 }, { 192,-17839 }, { 193,-17839 }, { 194,-17839 }, + + { 195,-17839 }, { 196,-17839 }, { 197,-17839 }, { 198,-17839 }, { 199,-17839 }, + { 200,-17839 }, { 201,-17839 }, { 202,-17839 }, { 203,-17839 }, { 204,-17839 }, + { 205,-17839 }, { 206,-17839 }, { 207,-17839 }, { 208,-17839 }, { 209,-17839 }, + { 210,-17839 }, { 211,-17839 }, { 212,-17839 }, { 213,-17839 }, { 214,-17839 }, + { 215,-17839 }, { 216,-17839 }, { 217,-17839 }, { 218,-17839 }, { 219,-17839 }, + { 220,-17839 }, { 221,-17839 }, { 222,-17839 }, { 223,-17839 }, { 224,-17839 }, + { 225,-17839 }, { 226,-17839 }, { 227,-17839 }, { 228,-17839 }, { 229,-17839 }, + { 230,-17839 }, { 231,-17839 }, { 232,-17839 }, { 233,-17839 }, { 234,-17839 }, + { 235,-17839 }, { 236,-17839 }, { 237,-17839 }, { 238,-17839 }, { 239,-17839 }, + { 240,-17839 }, { 241,-17839 }, { 242,-17839 }, { 243,-17839 }, { 244,-17839 }, + + { 245,-17839 }, { 246,-17839 }, { 247,-17839 }, { 248,-17839 }, { 249,-17839 }, + { 250,-17839 }, { 251,-17839 }, { 252,-17839 }, { 253,-17839 }, { 254,-17839 }, + { 255,-17839 }, { 0, 131 }, { 0,74027 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-18096 }, { 49,-18096 }, { 50,-18096 }, { 51,-18096 }, { 52,-18096 }, + { 53,-18096 }, { 54,-18096 }, { 55,-18096 }, { 56,-18096 }, { 57,-18096 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-18096 }, { 66,-18096 }, { 67,-18096 }, + { 68,-18096 }, { 69,-18096 }, { 70,-18096 }, { 71,-18096 }, { 72,-18096 }, + { 73,-18096 }, { 74,-18096 }, { 75,-18096 }, { 76,-18096 }, { 77,-18096 }, + { 78,-18096 }, { 79,14911 }, { 80,-18096 }, { 81,-18096 }, { 82,-18096 }, + { 83,-18096 }, { 84,-18096 }, { 85,-18096 }, { 86,-18096 }, { 87,-18096 }, + + { 88,-18096 }, { 89,-18096 }, { 90,-18096 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-18096 }, { 0, 0 }, { 97,-18096 }, + { 98,-18096 }, { 99,-18096 }, { 100,-18096 }, { 101,-18096 }, { 102,-18096 }, + { 103,-18096 }, { 104,-18096 }, { 105,-18096 }, { 106,-18096 }, { 107,-18096 }, + { 108,-18096 }, { 109,-18096 }, { 110,-18096 }, { 111,14911 }, { 112,-18096 }, + { 113,-18096 }, { 114,-18096 }, { 115,-18096 }, { 116,-18096 }, { 117,-18096 }, + { 118,-18096 }, { 119,-18096 }, { 120,-18096 }, { 121,-18096 }, { 122,-18096 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-18096 }, + { 128,-18096 }, { 129,-18096 }, { 130,-18096 }, { 131,-18096 }, { 132,-18096 }, + { 133,-18096 }, { 134,-18096 }, { 135,-18096 }, { 136,-18096 }, { 137,-18096 }, + + { 138,-18096 }, { 139,-18096 }, { 140,-18096 }, { 141,-18096 }, { 142,-18096 }, + { 143,-18096 }, { 144,-18096 }, { 145,-18096 }, { 146,-18096 }, { 147,-18096 }, + { 148,-18096 }, { 149,-18096 }, { 150,-18096 }, { 151,-18096 }, { 152,-18096 }, + { 153,-18096 }, { 154,-18096 }, { 155,-18096 }, { 156,-18096 }, { 157,-18096 }, + { 158,-18096 }, { 159,-18096 }, { 160,-18096 }, { 161,-18096 }, { 162,-18096 }, + { 163,-18096 }, { 164,-18096 }, { 165,-18096 }, { 166,-18096 }, { 167,-18096 }, + { 168,-18096 }, { 169,-18096 }, { 170,-18096 }, { 171,-18096 }, { 172,-18096 }, + { 173,-18096 }, { 174,-18096 }, { 175,-18096 }, { 176,-18096 }, { 177,-18096 }, + { 178,-18096 }, { 179,-18096 }, { 180,-18096 }, { 181,-18096 }, { 182,-18096 }, + { 183,-18096 }, { 184,-18096 }, { 185,-18096 }, { 186,-18096 }, { 187,-18096 }, + + { 188,-18096 }, { 189,-18096 }, { 190,-18096 }, { 191,-18096 }, { 192,-18096 }, + { 193,-18096 }, { 194,-18096 }, { 195,-18096 }, { 196,-18096 }, { 197,-18096 }, + { 198,-18096 }, { 199,-18096 }, { 200,-18096 }, { 201,-18096 }, { 202,-18096 }, + { 203,-18096 }, { 204,-18096 }, { 205,-18096 }, { 206,-18096 }, { 207,-18096 }, + { 208,-18096 }, { 209,-18096 }, { 210,-18096 }, { 211,-18096 }, { 212,-18096 }, + { 213,-18096 }, { 214,-18096 }, { 215,-18096 }, { 216,-18096 }, { 217,-18096 }, + { 218,-18096 }, { 219,-18096 }, { 220,-18096 }, { 221,-18096 }, { 222,-18096 }, + { 223,-18096 }, { 224,-18096 }, { 225,-18096 }, { 226,-18096 }, { 227,-18096 }, + { 228,-18096 }, { 229,-18096 }, { 230,-18096 }, { 231,-18096 }, { 232,-18096 }, + { 233,-18096 }, { 234,-18096 }, { 235,-18096 }, { 236,-18096 }, { 237,-18096 }, + + { 238,-18096 }, { 239,-18096 }, { 240,-18096 }, { 241,-18096 }, { 242,-18096 }, + { 243,-18096 }, { 244,-18096 }, { 245,-18096 }, { 246,-18096 }, { 247,-18096 }, + { 248,-18096 }, { 249,-18096 }, { 250,-18096 }, { 251,-18096 }, { 252,-18096 }, + { 253,-18096 }, { 254,-18096 }, { 255,-18096 }, { 0, 131 }, { 0,73770 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-18353 }, { 49,-18353 }, { 50,-18353 }, + { 51,-18353 }, { 52,-18353 }, { 53,-18353 }, { 54,-18353 }, { 55,-18353 }, + { 56,-18353 }, { 57,-18353 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-18353 }, + { 66,-18353 }, { 67,-18353 }, { 68,-18353 }, { 69,14911 }, { 70,-18353 }, + { 71,-18353 }, { 72,-18353 }, { 73,-18353 }, { 74,-18353 }, { 75,-18353 }, + { 76,-18353 }, { 77,-18353 }, { 78,-18353 }, { 79,-18353 }, { 80,-18353 }, + + { 81,-18353 }, { 82,-18353 }, { 83,-18353 }, { 84,-18353 }, { 85,-18353 }, + { 86,-18353 }, { 87,-18353 }, { 88,-18353 }, { 89,-18353 }, { 90,-18353 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-18353 }, + { 0, 0 }, { 97,-18353 }, { 98,-18353 }, { 99,-18353 }, { 100,-18353 }, + { 101,14911 }, { 102,-18353 }, { 103,-18353 }, { 104,-18353 }, { 105,-18353 }, + { 106,-18353 }, { 107,-18353 }, { 108,-18353 }, { 109,-18353 }, { 110,-18353 }, + { 111,-18353 }, { 112,-18353 }, { 113,-18353 }, { 114,-18353 }, { 115,-18353 }, + { 116,-18353 }, { 117,-18353 }, { 118,-18353 }, { 119,-18353 }, { 120,-18353 }, + { 121,-18353 }, { 122,-18353 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-18353 }, { 128,-18353 }, { 129,-18353 }, { 130,-18353 }, + + { 131,-18353 }, { 132,-18353 }, { 133,-18353 }, { 134,-18353 }, { 135,-18353 }, + { 136,-18353 }, { 137,-18353 }, { 138,-18353 }, { 139,-18353 }, { 140,-18353 }, + { 141,-18353 }, { 142,-18353 }, { 143,-18353 }, { 144,-18353 }, { 145,-18353 }, + { 146,-18353 }, { 147,-18353 }, { 148,-18353 }, { 149,-18353 }, { 150,-18353 }, + { 151,-18353 }, { 152,-18353 }, { 153,-18353 }, { 154,-18353 }, { 155,-18353 }, + { 156,-18353 }, { 157,-18353 }, { 158,-18353 }, { 159,-18353 }, { 160,-18353 }, + { 161,-18353 }, { 162,-18353 }, { 163,-18353 }, { 164,-18353 }, { 165,-18353 }, + { 166,-18353 }, { 167,-18353 }, { 168,-18353 }, { 169,-18353 }, { 170,-18353 }, + { 171,-18353 }, { 172,-18353 }, { 173,-18353 }, { 174,-18353 }, { 175,-18353 }, + { 176,-18353 }, { 177,-18353 }, { 178,-18353 }, { 179,-18353 }, { 180,-18353 }, + + { 181,-18353 }, { 182,-18353 }, { 183,-18353 }, { 184,-18353 }, { 185,-18353 }, + { 186,-18353 }, { 187,-18353 }, { 188,-18353 }, { 189,-18353 }, { 190,-18353 }, + { 191,-18353 }, { 192,-18353 }, { 193,-18353 }, { 194,-18353 }, { 195,-18353 }, + { 196,-18353 }, { 197,-18353 }, { 198,-18353 }, { 199,-18353 }, { 200,-18353 }, + { 201,-18353 }, { 202,-18353 }, { 203,-18353 }, { 204,-18353 }, { 205,-18353 }, + { 206,-18353 }, { 207,-18353 }, { 208,-18353 }, { 209,-18353 }, { 210,-18353 }, + { 211,-18353 }, { 212,-18353 }, { 213,-18353 }, { 214,-18353 }, { 215,-18353 }, + { 216,-18353 }, { 217,-18353 }, { 218,-18353 }, { 219,-18353 }, { 220,-18353 }, + { 221,-18353 }, { 222,-18353 }, { 223,-18353 }, { 224,-18353 }, { 225,-18353 }, + { 226,-18353 }, { 227,-18353 }, { 228,-18353 }, { 229,-18353 }, { 230,-18353 }, + + { 231,-18353 }, { 232,-18353 }, { 233,-18353 }, { 234,-18353 }, { 235,-18353 }, + { 236,-18353 }, { 237,-18353 }, { 238,-18353 }, { 239,-18353 }, { 240,-18353 }, + { 241,-18353 }, { 242,-18353 }, { 243,-18353 }, { 244,-18353 }, { 245,-18353 }, + { 246,-18353 }, { 247,-18353 }, { 248,-18353 }, { 249,-18353 }, { 250,-18353 }, + { 251,-18353 }, { 252,-18353 }, { 253,-18353 }, { 254,-18353 }, { 255,-18353 }, + { 0, 131 }, { 0,73513 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-18610 }, + { 49,-18610 }, { 50,-18610 }, { 51,-18610 }, { 52,-18610 }, { 53,-18610 }, + { 54,-18610 }, { 55,-18610 }, { 56,-18610 }, { 57,-18610 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-18610 }, { 66,-18610 }, { 67,-18610 }, { 68,-18610 }, + { 69,-18610 }, { 70,-18610 }, { 71,-18610 }, { 72,-18610 }, { 73,-18610 }, + + { 74,-18610 }, { 75,-18610 }, { 76,-18610 }, { 77,-18610 }, { 78,-18610 }, + { 79,-18610 }, { 80,-18610 }, { 81,-18610 }, { 82,-18610 }, { 83,-18610 }, + { 84,14911 }, { 85,-18610 }, { 86,-18610 }, { 87,-18610 }, { 88,-18610 }, + { 89,-18610 }, { 90,-18610 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-18610 }, { 0, 0 }, { 97,-18610 }, { 98,-18610 }, + { 99,-18610 }, { 100,-18610 }, { 101,-18610 }, { 102,-18610 }, { 103,-18610 }, + { 104,-18610 }, { 105,-18610 }, { 106,-18610 }, { 107,-18610 }, { 108,-18610 }, + { 109,-18610 }, { 110,-18610 }, { 111,-18610 }, { 112,-18610 }, { 113,-18610 }, + { 114,-18610 }, { 115,-18610 }, { 116,14911 }, { 117,-18610 }, { 118,-18610 }, + { 119,-18610 }, { 120,-18610 }, { 121,-18610 }, { 122,-18610 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-18610 }, { 128,-18610 }, + { 129,-18610 }, { 130,-18610 }, { 131,-18610 }, { 132,-18610 }, { 133,-18610 }, + { 134,-18610 }, { 135,-18610 }, { 136,-18610 }, { 137,-18610 }, { 138,-18610 }, + { 139,-18610 }, { 140,-18610 }, { 141,-18610 }, { 142,-18610 }, { 143,-18610 }, + { 144,-18610 }, { 145,-18610 }, { 146,-18610 }, { 147,-18610 }, { 148,-18610 }, + { 149,-18610 }, { 150,-18610 }, { 151,-18610 }, { 152,-18610 }, { 153,-18610 }, + { 154,-18610 }, { 155,-18610 }, { 156,-18610 }, { 157,-18610 }, { 158,-18610 }, + { 159,-18610 }, { 160,-18610 }, { 161,-18610 }, { 162,-18610 }, { 163,-18610 }, + { 164,-18610 }, { 165,-18610 }, { 166,-18610 }, { 167,-18610 }, { 168,-18610 }, + { 169,-18610 }, { 170,-18610 }, { 171,-18610 }, { 172,-18610 }, { 173,-18610 }, + + { 174,-18610 }, { 175,-18610 }, { 176,-18610 }, { 177,-18610 }, { 178,-18610 }, + { 179,-18610 }, { 180,-18610 }, { 181,-18610 }, { 182,-18610 }, { 183,-18610 }, + { 184,-18610 }, { 185,-18610 }, { 186,-18610 }, { 187,-18610 }, { 188,-18610 }, + { 189,-18610 }, { 190,-18610 }, { 191,-18610 }, { 192,-18610 }, { 193,-18610 }, + { 194,-18610 }, { 195,-18610 }, { 196,-18610 }, { 197,-18610 }, { 198,-18610 }, + { 199,-18610 }, { 200,-18610 }, { 201,-18610 }, { 202,-18610 }, { 203,-18610 }, + { 204,-18610 }, { 205,-18610 }, { 206,-18610 }, { 207,-18610 }, { 208,-18610 }, + { 209,-18610 }, { 210,-18610 }, { 211,-18610 }, { 212,-18610 }, { 213,-18610 }, + { 214,-18610 }, { 215,-18610 }, { 216,-18610 }, { 217,-18610 }, { 218,-18610 }, + { 219,-18610 }, { 220,-18610 }, { 221,-18610 }, { 222,-18610 }, { 223,-18610 }, + + { 224,-18610 }, { 225,-18610 }, { 226,-18610 }, { 227,-18610 }, { 228,-18610 }, + { 229,-18610 }, { 230,-18610 }, { 231,-18610 }, { 232,-18610 }, { 233,-18610 }, + { 234,-18610 }, { 235,-18610 }, { 236,-18610 }, { 237,-18610 }, { 238,-18610 }, + { 239,-18610 }, { 240,-18610 }, { 241,-18610 }, { 242,-18610 }, { 243,-18610 }, + { 244,-18610 }, { 245,-18610 }, { 246,-18610 }, { 247,-18610 }, { 248,-18610 }, + { 249,-18610 }, { 250,-18610 }, { 251,-18610 }, { 252,-18610 }, { 253,-18610 }, + { 254,-18610 }, { 255,-18610 }, { 0, 131 }, { 0,73256 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-18867 }, { 49,-18867 }, { 50,-18867 }, { 51,-18867 }, + { 52,-18867 }, { 53,-18867 }, { 54,-18867 }, { 55,-18867 }, { 56,-18867 }, + { 57,-18867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-18867 }, { 66,-18867 }, + + { 67,-18867 }, { 68,14911 }, { 69,-18867 }, { 70,15168 }, { 71,-18867 }, + { 72,-18867 }, { 73,15425 }, { 74,-18867 }, { 75,-18867 }, { 76,-18867 }, + { 77,-18867 }, { 78,-18867 }, { 79,-18867 }, { 80,-18867 }, { 81,-18867 }, + { 82,-18867 }, { 83,15682 }, { 84,-18867 }, { 85,-18867 }, { 86,-18867 }, + { 87,15939 }, { 88,-18867 }, { 89,-18867 }, { 90,-18867 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-18867 }, { 0, 0 }, + { 97,-18867 }, { 98,-18867 }, { 99,-18867 }, { 100,14911 }, { 101,-18867 }, + { 102,15168 }, { 103,-18867 }, { 104,-18867 }, { 105,15425 }, { 106,-18867 }, + { 107,-18867 }, { 108,-18867 }, { 109,-18867 }, { 110,-18867 }, { 111,-18867 }, + { 112,-18867 }, { 113,-18867 }, { 114,-18867 }, { 115,15682 }, { 116,-18867 }, + + { 117,-18867 }, { 118,-18867 }, { 119,15939 }, { 120,-18867 }, { 121,-18867 }, + { 122,-18867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-18867 }, { 128,-18867 }, { 129,-18867 }, { 130,-18867 }, { 131,-18867 }, + { 132,-18867 }, { 133,-18867 }, { 134,-18867 }, { 135,-18867 }, { 136,-18867 }, + { 137,-18867 }, { 138,-18867 }, { 139,-18867 }, { 140,-18867 }, { 141,-18867 }, + { 142,-18867 }, { 143,-18867 }, { 144,-18867 }, { 145,-18867 }, { 146,-18867 }, + { 147,-18867 }, { 148,-18867 }, { 149,-18867 }, { 150,-18867 }, { 151,-18867 }, + { 152,-18867 }, { 153,-18867 }, { 154,-18867 }, { 155,-18867 }, { 156,-18867 }, + { 157,-18867 }, { 158,-18867 }, { 159,-18867 }, { 160,-18867 }, { 161,-18867 }, + { 162,-18867 }, { 163,-18867 }, { 164,-18867 }, { 165,-18867 }, { 166,-18867 }, + + { 167,-18867 }, { 168,-18867 }, { 169,-18867 }, { 170,-18867 }, { 171,-18867 }, + { 172,-18867 }, { 173,-18867 }, { 174,-18867 }, { 175,-18867 }, { 176,-18867 }, + { 177,-18867 }, { 178,-18867 }, { 179,-18867 }, { 180,-18867 }, { 181,-18867 }, + { 182,-18867 }, { 183,-18867 }, { 184,-18867 }, { 185,-18867 }, { 186,-18867 }, + { 187,-18867 }, { 188,-18867 }, { 189,-18867 }, { 190,-18867 }, { 191,-18867 }, + { 192,-18867 }, { 193,-18867 }, { 194,-18867 }, { 195,-18867 }, { 196,-18867 }, + { 197,-18867 }, { 198,-18867 }, { 199,-18867 }, { 200,-18867 }, { 201,-18867 }, + { 202,-18867 }, { 203,-18867 }, { 204,-18867 }, { 205,-18867 }, { 206,-18867 }, + { 207,-18867 }, { 208,-18867 }, { 209,-18867 }, { 210,-18867 }, { 211,-18867 }, + { 212,-18867 }, { 213,-18867 }, { 214,-18867 }, { 215,-18867 }, { 216,-18867 }, + + { 217,-18867 }, { 218,-18867 }, { 219,-18867 }, { 220,-18867 }, { 221,-18867 }, + { 222,-18867 }, { 223,-18867 }, { 224,-18867 }, { 225,-18867 }, { 226,-18867 }, + { 227,-18867 }, { 228,-18867 }, { 229,-18867 }, { 230,-18867 }, { 231,-18867 }, + { 232,-18867 }, { 233,-18867 }, { 234,-18867 }, { 235,-18867 }, { 236,-18867 }, + { 237,-18867 }, { 238,-18867 }, { 239,-18867 }, { 240,-18867 }, { 241,-18867 }, + { 242,-18867 }, { 243,-18867 }, { 244,-18867 }, { 245,-18867 }, { 246,-18867 }, + { 247,-18867 }, { 248,-18867 }, { 249,-18867 }, { 250,-18867 }, { 251,-18867 }, + { 252,-18867 }, { 253,-18867 }, { 254,-18867 }, { 255,-18867 }, { 0, 131 }, + { 0,72999 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-19124 }, { 49,-19124 }, + { 50,-19124 }, { 51,-19124 }, { 52,-19124 }, { 53,-19124 }, { 54,-19124 }, + { 55,-19124 }, { 56,-19124 }, { 57,-19124 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-19124 }, { 66,-19124 }, { 67,-19124 }, { 68,-19124 }, { 69,-19124 }, + { 70,-19124 }, { 71,-19124 }, { 72,-19124 }, { 73,-19124 }, { 74,-19124 }, + { 75,-19124 }, { 76,15939 }, { 77,-19124 }, { 78,-19124 }, { 79,-19124 }, + { 80,-19124 }, { 81,-19124 }, { 82,-19124 }, { 83,-19124 }, { 84,-19124 }, + { 85,-19124 }, { 86,-19124 }, { 87,-19124 }, { 88,-19124 }, { 89,-19124 }, + { 90,-19124 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-19124 }, { 0, 0 }, { 97,-19124 }, { 98,-19124 }, { 99,-19124 }, + { 100,-19124 }, { 101,-19124 }, { 102,-19124 }, { 103,-19124 }, { 104,-19124 }, + { 105,-19124 }, { 106,-19124 }, { 107,-19124 }, { 108,15939 }, { 109,-19124 }, + + { 110,-19124 }, { 111,-19124 }, { 112,-19124 }, { 113,-19124 }, { 114,-19124 }, + { 115,-19124 }, { 116,-19124 }, { 117,-19124 }, { 118,-19124 }, { 119,-19124 }, + { 120,-19124 }, { 121,-19124 }, { 122,-19124 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-19124 }, { 128,-19124 }, { 129,-19124 }, + { 130,-19124 }, { 131,-19124 }, { 132,-19124 }, { 133,-19124 }, { 134,-19124 }, + { 135,-19124 }, { 136,-19124 }, { 137,-19124 }, { 138,-19124 }, { 139,-19124 }, + { 140,-19124 }, { 141,-19124 }, { 142,-19124 }, { 143,-19124 }, { 144,-19124 }, + { 145,-19124 }, { 146,-19124 }, { 147,-19124 }, { 148,-19124 }, { 149,-19124 }, + { 150,-19124 }, { 151,-19124 }, { 152,-19124 }, { 153,-19124 }, { 154,-19124 }, + { 155,-19124 }, { 156,-19124 }, { 157,-19124 }, { 158,-19124 }, { 159,-19124 }, + + { 160,-19124 }, { 161,-19124 }, { 162,-19124 }, { 163,-19124 }, { 164,-19124 }, + { 165,-19124 }, { 166,-19124 }, { 167,-19124 }, { 168,-19124 }, { 169,-19124 }, + { 170,-19124 }, { 171,-19124 }, { 172,-19124 }, { 173,-19124 }, { 174,-19124 }, + { 175,-19124 }, { 176,-19124 }, { 177,-19124 }, { 178,-19124 }, { 179,-19124 }, + { 180,-19124 }, { 181,-19124 }, { 182,-19124 }, { 183,-19124 }, { 184,-19124 }, + { 185,-19124 }, { 186,-19124 }, { 187,-19124 }, { 188,-19124 }, { 189,-19124 }, + { 190,-19124 }, { 191,-19124 }, { 192,-19124 }, { 193,-19124 }, { 194,-19124 }, + { 195,-19124 }, { 196,-19124 }, { 197,-19124 }, { 198,-19124 }, { 199,-19124 }, + { 200,-19124 }, { 201,-19124 }, { 202,-19124 }, { 203,-19124 }, { 204,-19124 }, + { 205,-19124 }, { 206,-19124 }, { 207,-19124 }, { 208,-19124 }, { 209,-19124 }, + + { 210,-19124 }, { 211,-19124 }, { 212,-19124 }, { 213,-19124 }, { 214,-19124 }, + { 215,-19124 }, { 216,-19124 }, { 217,-19124 }, { 218,-19124 }, { 219,-19124 }, + { 220,-19124 }, { 221,-19124 }, { 222,-19124 }, { 223,-19124 }, { 224,-19124 }, + { 225,-19124 }, { 226,-19124 }, { 227,-19124 }, { 228,-19124 }, { 229,-19124 }, + { 230,-19124 }, { 231,-19124 }, { 232,-19124 }, { 233,-19124 }, { 234,-19124 }, + { 235,-19124 }, { 236,-19124 }, { 237,-19124 }, { 238,-19124 }, { 239,-19124 }, + { 240,-19124 }, { 241,-19124 }, { 242,-19124 }, { 243,-19124 }, { 244,-19124 }, + { 245,-19124 }, { 246,-19124 }, { 247,-19124 }, { 248,-19124 }, { 249,-19124 }, + { 250,-19124 }, { 251,-19124 }, { 252,-19124 }, { 253,-19124 }, { 254,-19124 }, + { 255,-19124 }, { 0, 131 }, { 0,72742 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-19381 }, { 49,-19381 }, { 50,-19381 }, { 51,-19381 }, { 52,-19381 }, + + { 53,-19381 }, { 54,-19381 }, { 55,-19381 }, { 56,-19381 }, { 57,-19381 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-19381 }, { 66,-19381 }, { 67,-19381 }, + { 68,-19381 }, { 69,-19381 }, { 70,-19381 }, { 71,-19381 }, { 72,-19381 }, + { 73,-19381 }, { 74,-19381 }, { 75,-19381 }, { 76,-19381 }, { 77,-19381 }, + { 78,-19381 }, { 79,-19381 }, { 80,-19381 }, { 81,-19381 }, { 82,-19381 }, + { 83,-19381 }, { 84,15939 }, { 85,-19381 }, { 86,-19381 }, { 87,-19381 }, + { 88,-19381 }, { 89,-19381 }, { 90,-19381 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-19381 }, { 0, 0 }, { 97,-19381 }, + { 98,-19381 }, { 99,-19381 }, { 100,-19381 }, { 101,-19381 }, { 102,-19381 }, + + { 103,-19381 }, { 104,-19381 }, { 105,-19381 }, { 106,-19381 }, { 107,-19381 }, + { 108,-19381 }, { 109,-19381 }, { 110,-19381 }, { 111,-19381 }, { 112,-19381 }, + { 113,-19381 }, { 114,-19381 }, { 115,-19381 }, { 116,15939 }, { 117,-19381 }, + { 118,-19381 }, { 119,-19381 }, { 120,-19381 }, { 121,-19381 }, { 122,-19381 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-19381 }, + { 128,-19381 }, { 129,-19381 }, { 130,-19381 }, { 131,-19381 }, { 132,-19381 }, + { 133,-19381 }, { 134,-19381 }, { 135,-19381 }, { 136,-19381 }, { 137,-19381 }, + { 138,-19381 }, { 139,-19381 }, { 140,-19381 }, { 141,-19381 }, { 142,-19381 }, + { 143,-19381 }, { 144,-19381 }, { 145,-19381 }, { 146,-19381 }, { 147,-19381 }, + { 148,-19381 }, { 149,-19381 }, { 150,-19381 }, { 151,-19381 }, { 152,-19381 }, + + { 153,-19381 }, { 154,-19381 }, { 155,-19381 }, { 156,-19381 }, { 157,-19381 }, + { 158,-19381 }, { 159,-19381 }, { 160,-19381 }, { 161,-19381 }, { 162,-19381 }, + { 163,-19381 }, { 164,-19381 }, { 165,-19381 }, { 166,-19381 }, { 167,-19381 }, + { 168,-19381 }, { 169,-19381 }, { 170,-19381 }, { 171,-19381 }, { 172,-19381 }, + { 173,-19381 }, { 174,-19381 }, { 175,-19381 }, { 176,-19381 }, { 177,-19381 }, + { 178,-19381 }, { 179,-19381 }, { 180,-19381 }, { 181,-19381 }, { 182,-19381 }, + { 183,-19381 }, { 184,-19381 }, { 185,-19381 }, { 186,-19381 }, { 187,-19381 }, + { 188,-19381 }, { 189,-19381 }, { 190,-19381 }, { 191,-19381 }, { 192,-19381 }, + { 193,-19381 }, { 194,-19381 }, { 195,-19381 }, { 196,-19381 }, { 197,-19381 }, + { 198,-19381 }, { 199,-19381 }, { 200,-19381 }, { 201,-19381 }, { 202,-19381 }, + + { 203,-19381 }, { 204,-19381 }, { 205,-19381 }, { 206,-19381 }, { 207,-19381 }, + { 208,-19381 }, { 209,-19381 }, { 210,-19381 }, { 211,-19381 }, { 212,-19381 }, + { 213,-19381 }, { 214,-19381 }, { 215,-19381 }, { 216,-19381 }, { 217,-19381 }, + { 218,-19381 }, { 219,-19381 }, { 220,-19381 }, { 221,-19381 }, { 222,-19381 }, + { 223,-19381 }, { 224,-19381 }, { 225,-19381 }, { 226,-19381 }, { 227,-19381 }, + { 228,-19381 }, { 229,-19381 }, { 230,-19381 }, { 231,-19381 }, { 232,-19381 }, + { 233,-19381 }, { 234,-19381 }, { 235,-19381 }, { 236,-19381 }, { 237,-19381 }, + { 238,-19381 }, { 239,-19381 }, { 240,-19381 }, { 241,-19381 }, { 242,-19381 }, + { 243,-19381 }, { 244,-19381 }, { 245,-19381 }, { 246,-19381 }, { 247,-19381 }, + { 248,-19381 }, { 249,-19381 }, { 250,-19381 }, { 251,-19381 }, { 252,-19381 }, + + { 253,-19381 }, { 254,-19381 }, { 255,-19381 }, { 0, 131 }, { 0,72485 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-19638 }, { 49,-19638 }, { 50,-19638 }, + { 51,-19638 }, { 52,-19638 }, { 53,-19638 }, { 54,-19638 }, { 55,-19638 }, + { 56,-19638 }, { 57,-19638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-19638 }, + { 66,-19638 }, { 67,-19638 }, { 68,-19638 }, { 69,15939 }, { 70,-19638 }, + { 71,-19638 }, { 72,-19638 }, { 73,-19638 }, { 74,-19638 }, { 75,-19638 }, + { 76,-19638 }, { 77,-19638 }, { 78,-19638 }, { 79,-19638 }, { 80,-19638 }, + { 81,-19638 }, { 82,-19638 }, { 83,-19638 }, { 84,-19638 }, { 85,-19638 }, + { 86,-19638 }, { 87,-19638 }, { 88,-19638 }, { 89,-19638 }, { 90,-19638 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-19638 }, + + { 0, 0 }, { 97,-19638 }, { 98,-19638 }, { 99,-19638 }, { 100,-19638 }, + { 101,15939 }, { 102,-19638 }, { 103,-19638 }, { 104,-19638 }, { 105,-19638 }, + { 106,-19638 }, { 107,-19638 }, { 108,-19638 }, { 109,-19638 }, { 110,-19638 }, + { 111,-19638 }, { 112,-19638 }, { 113,-19638 }, { 114,-19638 }, { 115,-19638 }, + { 116,-19638 }, { 117,-19638 }, { 118,-19638 }, { 119,-19638 }, { 120,-19638 }, + { 121,-19638 }, { 122,-19638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-19638 }, { 128,-19638 }, { 129,-19638 }, { 130,-19638 }, + { 131,-19638 }, { 132,-19638 }, { 133,-19638 }, { 134,-19638 }, { 135,-19638 }, + { 136,-19638 }, { 137,-19638 }, { 138,-19638 }, { 139,-19638 }, { 140,-19638 }, + { 141,-19638 }, { 142,-19638 }, { 143,-19638 }, { 144,-19638 }, { 145,-19638 }, + + { 146,-19638 }, { 147,-19638 }, { 148,-19638 }, { 149,-19638 }, { 150,-19638 }, + { 151,-19638 }, { 152,-19638 }, { 153,-19638 }, { 154,-19638 }, { 155,-19638 }, + { 156,-19638 }, { 157,-19638 }, { 158,-19638 }, { 159,-19638 }, { 160,-19638 }, + { 161,-19638 }, { 162,-19638 }, { 163,-19638 }, { 164,-19638 }, { 165,-19638 }, + { 166,-19638 }, { 167,-19638 }, { 168,-19638 }, { 169,-19638 }, { 170,-19638 }, + { 171,-19638 }, { 172,-19638 }, { 173,-19638 }, { 174,-19638 }, { 175,-19638 }, + { 176,-19638 }, { 177,-19638 }, { 178,-19638 }, { 179,-19638 }, { 180,-19638 }, + { 181,-19638 }, { 182,-19638 }, { 183,-19638 }, { 184,-19638 }, { 185,-19638 }, + { 186,-19638 }, { 187,-19638 }, { 188,-19638 }, { 189,-19638 }, { 190,-19638 }, + { 191,-19638 }, { 192,-19638 }, { 193,-19638 }, { 194,-19638 }, { 195,-19638 }, + + { 196,-19638 }, { 197,-19638 }, { 198,-19638 }, { 199,-19638 }, { 200,-19638 }, + { 201,-19638 }, { 202,-19638 }, { 203,-19638 }, { 204,-19638 }, { 205,-19638 }, + { 206,-19638 }, { 207,-19638 }, { 208,-19638 }, { 209,-19638 }, { 210,-19638 }, + { 211,-19638 }, { 212,-19638 }, { 213,-19638 }, { 214,-19638 }, { 215,-19638 }, + { 216,-19638 }, { 217,-19638 }, { 218,-19638 }, { 219,-19638 }, { 220,-19638 }, + { 221,-19638 }, { 222,-19638 }, { 223,-19638 }, { 224,-19638 }, { 225,-19638 }, + { 226,-19638 }, { 227,-19638 }, { 228,-19638 }, { 229,-19638 }, { 230,-19638 }, + { 231,-19638 }, { 232,-19638 }, { 233,-19638 }, { 234,-19638 }, { 235,-19638 }, + { 236,-19638 }, { 237,-19638 }, { 238,-19638 }, { 239,-19638 }, { 240,-19638 }, + { 241,-19638 }, { 242,-19638 }, { 243,-19638 }, { 244,-19638 }, { 245,-19638 }, + + { 246,-19638 }, { 247,-19638 }, { 248,-19638 }, { 249,-19638 }, { 250,-19638 }, + { 251,-19638 }, { 252,-19638 }, { 253,-19638 }, { 254,-19638 }, { 255,-19638 }, + { 0, 131 }, { 0,72228 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-19895 }, + { 49,-19895 }, { 50,-19895 }, { 51,-19895 }, { 52,-19895 }, { 53,-19895 }, + { 54,-19895 }, { 55,-19895 }, { 56,-19895 }, { 57,-19895 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,15939 }, { 66,-19895 }, { 67,-19895 }, { 68,-19895 }, + { 69,-19895 }, { 70,-19895 }, { 71,-19895 }, { 72,-19895 }, { 73,-19895 }, + { 74,-19895 }, { 75,-19895 }, { 76,-19895 }, { 77,-19895 }, { 78,-19895 }, + { 79,-19895 }, { 80,-19895 }, { 81,-19895 }, { 82,-19895 }, { 83,-19895 }, + { 84,-19895 }, { 85,-19895 }, { 86,-19895 }, { 87,-19895 }, { 88,-19895 }, + + { 89,-19895 }, { 90,-19895 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-19895 }, { 0, 0 }, { 97,15939 }, { 98,-19895 }, + { 99,-19895 }, { 100,-19895 }, { 101,-19895 }, { 102,-19895 }, { 103,-19895 }, + { 104,-19895 }, { 105,-19895 }, { 106,-19895 }, { 107,-19895 }, { 108,-19895 }, + { 109,-19895 }, { 110,-19895 }, { 111,-19895 }, { 112,-19895 }, { 113,-19895 }, + { 114,-19895 }, { 115,-19895 }, { 116,-19895 }, { 117,-19895 }, { 118,-19895 }, + { 119,-19895 }, { 120,-19895 }, { 121,-19895 }, { 122,-19895 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-19895 }, { 128,-19895 }, + { 129,-19895 }, { 130,-19895 }, { 131,-19895 }, { 132,-19895 }, { 133,-19895 }, + { 134,-19895 }, { 135,-19895 }, { 136,-19895 }, { 137,-19895 }, { 138,-19895 }, + + { 139,-19895 }, { 140,-19895 }, { 141,-19895 }, { 142,-19895 }, { 143,-19895 }, + { 144,-19895 }, { 145,-19895 }, { 146,-19895 }, { 147,-19895 }, { 148,-19895 }, + { 149,-19895 }, { 150,-19895 }, { 151,-19895 }, { 152,-19895 }, { 153,-19895 }, + { 154,-19895 }, { 155,-19895 }, { 156,-19895 }, { 157,-19895 }, { 158,-19895 }, + { 159,-19895 }, { 160,-19895 }, { 161,-19895 }, { 162,-19895 }, { 163,-19895 }, + { 164,-19895 }, { 165,-19895 }, { 166,-19895 }, { 167,-19895 }, { 168,-19895 }, + { 169,-19895 }, { 170,-19895 }, { 171,-19895 }, { 172,-19895 }, { 173,-19895 }, + { 174,-19895 }, { 175,-19895 }, { 176,-19895 }, { 177,-19895 }, { 178,-19895 }, + { 179,-19895 }, { 180,-19895 }, { 181,-19895 }, { 182,-19895 }, { 183,-19895 }, + { 184,-19895 }, { 185,-19895 }, { 186,-19895 }, { 187,-19895 }, { 188,-19895 }, + + { 189,-19895 }, { 190,-19895 }, { 191,-19895 }, { 192,-19895 }, { 193,-19895 }, + { 194,-19895 }, { 195,-19895 }, { 196,-19895 }, { 197,-19895 }, { 198,-19895 }, + { 199,-19895 }, { 200,-19895 }, { 201,-19895 }, { 202,-19895 }, { 203,-19895 }, + { 204,-19895 }, { 205,-19895 }, { 206,-19895 }, { 207,-19895 }, { 208,-19895 }, + { 209,-19895 }, { 210,-19895 }, { 211,-19895 }, { 212,-19895 }, { 213,-19895 }, + { 214,-19895 }, { 215,-19895 }, { 216,-19895 }, { 217,-19895 }, { 218,-19895 }, + { 219,-19895 }, { 220,-19895 }, { 221,-19895 }, { 222,-19895 }, { 223,-19895 }, + { 224,-19895 }, { 225,-19895 }, { 226,-19895 }, { 227,-19895 }, { 228,-19895 }, + { 229,-19895 }, { 230,-19895 }, { 231,-19895 }, { 232,-19895 }, { 233,-19895 }, + { 234,-19895 }, { 235,-19895 }, { 236,-19895 }, { 237,-19895 }, { 238,-19895 }, + + { 239,-19895 }, { 240,-19895 }, { 241,-19895 }, { 242,-19895 }, { 243,-19895 }, + { 244,-19895 }, { 245,-19895 }, { 246,-19895 }, { 247,-19895 }, { 248,-19895 }, + { 249,-19895 }, { 250,-19895 }, { 251,-19895 }, { 252,-19895 }, { 253,-19895 }, + { 254,-19895 }, { 255,-19895 }, { 0, 39 }, { 0,71971 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-20152 }, { 49,-20152 }, { 50,-20152 }, { 51,-20152 }, + { 52,-20152 }, { 53,-20152 }, { 54,-20152 }, { 55,-20152 }, { 56,-20152 }, + { 57,-20152 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-20152 }, { 66,-20152 }, + { 67,-20152 }, { 68,-20152 }, { 69,15939 }, { 70,-20152 }, { 71,-20152 }, + { 72,-20152 }, { 73,-20152 }, { 74,-20152 }, { 75,-20152 }, { 76,-20152 }, + { 77,-20152 }, { 78,-20152 }, { 79,-20152 }, { 80,-20152 }, { 81,-20152 }, + + { 82,-20152 }, { 83,-20152 }, { 84,-20152 }, { 85,-20152 }, { 86,-20152 }, + { 87,-20152 }, { 88,-20152 }, { 89,-20152 }, { 90,-20152 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-20152 }, { 0, 0 }, + { 97,-20152 }, { 98,-20152 }, { 99,-20152 }, { 100,-20152 }, { 101,15939 }, + { 102,-20152 }, { 103,-20152 }, { 104,-20152 }, { 105,-20152 }, { 106,-20152 }, + { 107,-20152 }, { 108,-20152 }, { 109,-20152 }, { 110,-20152 }, { 111,-20152 }, + { 112,-20152 }, { 113,-20152 }, { 114,-20152 }, { 115,-20152 }, { 116,-20152 }, + { 117,-20152 }, { 118,-20152 }, { 119,-20152 }, { 120,-20152 }, { 121,-20152 }, + { 122,-20152 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-20152 }, { 128,-20152 }, { 129,-20152 }, { 130,-20152 }, { 131,-20152 }, + + { 132,-20152 }, { 133,-20152 }, { 134,-20152 }, { 135,-20152 }, { 136,-20152 }, + { 137,-20152 }, { 138,-20152 }, { 139,-20152 }, { 140,-20152 }, { 141,-20152 }, + { 142,-20152 }, { 143,-20152 }, { 144,-20152 }, { 145,-20152 }, { 146,-20152 }, + { 147,-20152 }, { 148,-20152 }, { 149,-20152 }, { 150,-20152 }, { 151,-20152 }, + { 152,-20152 }, { 153,-20152 }, { 154,-20152 }, { 155,-20152 }, { 156,-20152 }, + { 157,-20152 }, { 158,-20152 }, { 159,-20152 }, { 160,-20152 }, { 161,-20152 }, + { 162,-20152 }, { 163,-20152 }, { 164,-20152 }, { 165,-20152 }, { 166,-20152 }, + { 167,-20152 }, { 168,-20152 }, { 169,-20152 }, { 170,-20152 }, { 171,-20152 }, + { 172,-20152 }, { 173,-20152 }, { 174,-20152 }, { 175,-20152 }, { 176,-20152 }, + { 177,-20152 }, { 178,-20152 }, { 179,-20152 }, { 180,-20152 }, { 181,-20152 }, + + { 182,-20152 }, { 183,-20152 }, { 184,-20152 }, { 185,-20152 }, { 186,-20152 }, + { 187,-20152 }, { 188,-20152 }, { 189,-20152 }, { 190,-20152 }, { 191,-20152 }, + { 192,-20152 }, { 193,-20152 }, { 194,-20152 }, { 195,-20152 }, { 196,-20152 }, + { 197,-20152 }, { 198,-20152 }, { 199,-20152 }, { 200,-20152 }, { 201,-20152 }, + { 202,-20152 }, { 203,-20152 }, { 204,-20152 }, { 205,-20152 }, { 206,-20152 }, + { 207,-20152 }, { 208,-20152 }, { 209,-20152 }, { 210,-20152 }, { 211,-20152 }, + { 212,-20152 }, { 213,-20152 }, { 214,-20152 }, { 215,-20152 }, { 216,-20152 }, + { 217,-20152 }, { 218,-20152 }, { 219,-20152 }, { 220,-20152 }, { 221,-20152 }, + { 222,-20152 }, { 223,-20152 }, { 224,-20152 }, { 225,-20152 }, { 226,-20152 }, + { 227,-20152 }, { 228,-20152 }, { 229,-20152 }, { 230,-20152 }, { 231,-20152 }, + + { 232,-20152 }, { 233,-20152 }, { 234,-20152 }, { 235,-20152 }, { 236,-20152 }, + { 237,-20152 }, { 238,-20152 }, { 239,-20152 }, { 240,-20152 }, { 241,-20152 }, + { 242,-20152 }, { 243,-20152 }, { 244,-20152 }, { 245,-20152 }, { 246,-20152 }, + { 247,-20152 }, { 248,-20152 }, { 249,-20152 }, { 250,-20152 }, { 251,-20152 }, + { 252,-20152 }, { 253,-20152 }, { 254,-20152 }, { 255,-20152 }, { 0, 131 }, + { 0,71714 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-20409 }, { 49,-20409 }, + { 50,-20409 }, { 51,-20409 }, { 52,-20409 }, { 53,-20409 }, { 54,-20409 }, + { 55,-20409 }, { 56,-20409 }, { 57,-20409 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-20409 }, { 66,-20409 }, { 67,15939 }, { 68,-20409 }, { 69,-20409 }, + { 70,-20409 }, { 71,-20409 }, { 72,-20409 }, { 73,-20409 }, { 74,-20409 }, + + { 75,-20409 }, { 76,-20409 }, { 77,-20409 }, { 78,-20409 }, { 79,-20409 }, + { 80,-20409 }, { 81,-20409 }, { 82,-20409 }, { 83,-20409 }, { 84,-20409 }, + { 85,-20409 }, { 86,-20409 }, { 87,-20409 }, { 88,-20409 }, { 89,-20409 }, + { 90,-20409 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-20409 }, { 0, 0 }, { 97,-20409 }, { 98,-20409 }, { 99,15939 }, + { 100,-20409 }, { 101,-20409 }, { 102,-20409 }, { 103,-20409 }, { 104,-20409 }, + { 105,-20409 }, { 106,-20409 }, { 107,-20409 }, { 108,-20409 }, { 109,-20409 }, + { 110,-20409 }, { 111,-20409 }, { 112,-20409 }, { 113,-20409 }, { 114,-20409 }, + { 115,-20409 }, { 116,-20409 }, { 117,-20409 }, { 118,-20409 }, { 119,-20409 }, + { 120,-20409 }, { 121,-20409 }, { 122,-20409 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-20409 }, { 128,-20409 }, { 129,-20409 }, + { 130,-20409 }, { 131,-20409 }, { 132,-20409 }, { 133,-20409 }, { 134,-20409 }, + { 135,-20409 }, { 136,-20409 }, { 137,-20409 }, { 138,-20409 }, { 139,-20409 }, + { 140,-20409 }, { 141,-20409 }, { 142,-20409 }, { 143,-20409 }, { 144,-20409 }, + { 145,-20409 }, { 146,-20409 }, { 147,-20409 }, { 148,-20409 }, { 149,-20409 }, + { 150,-20409 }, { 151,-20409 }, { 152,-20409 }, { 153,-20409 }, { 154,-20409 }, + { 155,-20409 }, { 156,-20409 }, { 157,-20409 }, { 158,-20409 }, { 159,-20409 }, + { 160,-20409 }, { 161,-20409 }, { 162,-20409 }, { 163,-20409 }, { 164,-20409 }, + { 165,-20409 }, { 166,-20409 }, { 167,-20409 }, { 168,-20409 }, { 169,-20409 }, + { 170,-20409 }, { 171,-20409 }, { 172,-20409 }, { 173,-20409 }, { 174,-20409 }, + + { 175,-20409 }, { 176,-20409 }, { 177,-20409 }, { 178,-20409 }, { 179,-20409 }, + { 180,-20409 }, { 181,-20409 }, { 182,-20409 }, { 183,-20409 }, { 184,-20409 }, + { 185,-20409 }, { 186,-20409 }, { 187,-20409 }, { 188,-20409 }, { 189,-20409 }, + { 190,-20409 }, { 191,-20409 }, { 192,-20409 }, { 193,-20409 }, { 194,-20409 }, + { 195,-20409 }, { 196,-20409 }, { 197,-20409 }, { 198,-20409 }, { 199,-20409 }, + { 200,-20409 }, { 201,-20409 }, { 202,-20409 }, { 203,-20409 }, { 204,-20409 }, + { 205,-20409 }, { 206,-20409 }, { 207,-20409 }, { 208,-20409 }, { 209,-20409 }, + { 210,-20409 }, { 211,-20409 }, { 212,-20409 }, { 213,-20409 }, { 214,-20409 }, + { 215,-20409 }, { 216,-20409 }, { 217,-20409 }, { 218,-20409 }, { 219,-20409 }, + { 220,-20409 }, { 221,-20409 }, { 222,-20409 }, { 223,-20409 }, { 224,-20409 }, + + { 225,-20409 }, { 226,-20409 }, { 227,-20409 }, { 228,-20409 }, { 229,-20409 }, + { 230,-20409 }, { 231,-20409 }, { 232,-20409 }, { 233,-20409 }, { 234,-20409 }, + { 235,-20409 }, { 236,-20409 }, { 237,-20409 }, { 238,-20409 }, { 239,-20409 }, + { 240,-20409 }, { 241,-20409 }, { 242,-20409 }, { 243,-20409 }, { 244,-20409 }, + { 245,-20409 }, { 246,-20409 }, { 247,-20409 }, { 248,-20409 }, { 249,-20409 }, + { 250,-20409 }, { 251,-20409 }, { 252,-20409 }, { 253,-20409 }, { 254,-20409 }, + { 255,-20409 }, { 0, 131 }, { 0,71457 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-20666 }, { 49,-20666 }, { 50,-20666 }, { 51,-20666 }, { 52,-20666 }, + { 53,-20666 }, { 54,-20666 }, { 55,-20666 }, { 56,-20666 }, { 57,-20666 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-20666 }, { 66,15939 }, { 67,-20666 }, + + { 68,-20666 }, { 69,-20666 }, { 70,-20666 }, { 71,-20666 }, { 72,-20666 }, + { 73,-20666 }, { 74,-20666 }, { 75,-20666 }, { 76,-20666 }, { 77,-20666 }, + { 78,-20666 }, { 79,-20666 }, { 80,-20666 }, { 81,-20666 }, { 82,-20666 }, + { 83,-20666 }, { 84,-20666 }, { 85,-20666 }, { 86,-20666 }, { 87,-20666 }, + { 88,-20666 }, { 89,-20666 }, { 90,-20666 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-20666 }, { 0, 0 }, { 97,-20666 }, + { 98,15939 }, { 99,-20666 }, { 100,-20666 }, { 101,-20666 }, { 102,-20666 }, + { 103,-20666 }, { 104,-20666 }, { 105,-20666 }, { 106,-20666 }, { 107,-20666 }, + { 108,-20666 }, { 109,-20666 }, { 110,-20666 }, { 111,-20666 }, { 112,-20666 }, + { 113,-20666 }, { 114,-20666 }, { 115,-20666 }, { 116,-20666 }, { 117,-20666 }, + + { 118,-20666 }, { 119,-20666 }, { 120,-20666 }, { 121,-20666 }, { 122,-20666 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-20666 }, + { 128,-20666 }, { 129,-20666 }, { 130,-20666 }, { 131,-20666 }, { 132,-20666 }, + { 133,-20666 }, { 134,-20666 }, { 135,-20666 }, { 136,-20666 }, { 137,-20666 }, + { 138,-20666 }, { 139,-20666 }, { 140,-20666 }, { 141,-20666 }, { 142,-20666 }, + { 143,-20666 }, { 144,-20666 }, { 145,-20666 }, { 146,-20666 }, { 147,-20666 }, + { 148,-20666 }, { 149,-20666 }, { 150,-20666 }, { 151,-20666 }, { 152,-20666 }, + { 153,-20666 }, { 154,-20666 }, { 155,-20666 }, { 156,-20666 }, { 157,-20666 }, + { 158,-20666 }, { 159,-20666 }, { 160,-20666 }, { 161,-20666 }, { 162,-20666 }, + { 163,-20666 }, { 164,-20666 }, { 165,-20666 }, { 166,-20666 }, { 167,-20666 }, + + { 168,-20666 }, { 169,-20666 }, { 170,-20666 }, { 171,-20666 }, { 172,-20666 }, + { 173,-20666 }, { 174,-20666 }, { 175,-20666 }, { 176,-20666 }, { 177,-20666 }, + { 178,-20666 }, { 179,-20666 }, { 180,-20666 }, { 181,-20666 }, { 182,-20666 }, + { 183,-20666 }, { 184,-20666 }, { 185,-20666 }, { 186,-20666 }, { 187,-20666 }, + { 188,-20666 }, { 189,-20666 }, { 190,-20666 }, { 191,-20666 }, { 192,-20666 }, + { 193,-20666 }, { 194,-20666 }, { 195,-20666 }, { 196,-20666 }, { 197,-20666 }, + { 198,-20666 }, { 199,-20666 }, { 200,-20666 }, { 201,-20666 }, { 202,-20666 }, + { 203,-20666 }, { 204,-20666 }, { 205,-20666 }, { 206,-20666 }, { 207,-20666 }, + { 208,-20666 }, { 209,-20666 }, { 210,-20666 }, { 211,-20666 }, { 212,-20666 }, + { 213,-20666 }, { 214,-20666 }, { 215,-20666 }, { 216,-20666 }, { 217,-20666 }, + + { 218,-20666 }, { 219,-20666 }, { 220,-20666 }, { 221,-20666 }, { 222,-20666 }, + { 223,-20666 }, { 224,-20666 }, { 225,-20666 }, { 226,-20666 }, { 227,-20666 }, + { 228,-20666 }, { 229,-20666 }, { 230,-20666 }, { 231,-20666 }, { 232,-20666 }, + { 233,-20666 }, { 234,-20666 }, { 235,-20666 }, { 236,-20666 }, { 237,-20666 }, + { 238,-20666 }, { 239,-20666 }, { 240,-20666 }, { 241,-20666 }, { 242,-20666 }, + { 243,-20666 }, { 244,-20666 }, { 245,-20666 }, { 246,-20666 }, { 247,-20666 }, + { 248,-20666 }, { 249,-20666 }, { 250,-20666 }, { 251,-20666 }, { 252,-20666 }, + { 253,-20666 }, { 254,-20666 }, { 255,-20666 }, { 0, 131 }, { 0,71200 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-20923 }, { 49,-20923 }, { 50,-20923 }, + { 51,-20923 }, { 52,-20923 }, { 53,-20923 }, { 54,-20923 }, { 55,-20923 }, + { 56,-20923 }, { 57,-20923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-20923 }, + { 66,-20923 }, { 67,-20923 }, { 68,-20923 }, { 69,-20923 }, { 70,-20923 }, + { 71,-20923 }, { 72,-20923 }, { 73,-20923 }, { 74,-20923 }, { 75,-20923 }, + { 76,-20923 }, { 77,-20923 }, { 78,-20923 }, { 79,15939 }, { 80,-20923 }, + { 81,-20923 }, { 82,-20923 }, { 83,-20923 }, { 84,-20923 }, { 85,-20923 }, + { 86,-20923 }, { 87,-20923 }, { 88,-20923 }, { 89,-20923 }, { 90,-20923 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-20923 }, + { 0, 0 }, { 97,-20923 }, { 98,-20923 }, { 99,-20923 }, { 100,-20923 }, + { 101,-20923 }, { 102,-20923 }, { 103,-20923 }, { 104,-20923 }, { 105,-20923 }, + { 106,-20923 }, { 107,-20923 }, { 108,-20923 }, { 109,-20923 }, { 110,-20923 }, + + { 111,15939 }, { 112,-20923 }, { 113,-20923 }, { 114,-20923 }, { 115,-20923 }, + { 116,-20923 }, { 117,-20923 }, { 118,-20923 }, { 119,-20923 }, { 120,-20923 }, + { 121,-20923 }, { 122,-20923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-20923 }, { 128,-20923 }, { 129,-20923 }, { 130,-20923 }, + { 131,-20923 }, { 132,-20923 }, { 133,-20923 }, { 134,-20923 }, { 135,-20923 }, + { 136,-20923 }, { 137,-20923 }, { 138,-20923 }, { 139,-20923 }, { 140,-20923 }, + { 141,-20923 }, { 142,-20923 }, { 143,-20923 }, { 144,-20923 }, { 145,-20923 }, + { 146,-20923 }, { 147,-20923 }, { 148,-20923 }, { 149,-20923 }, { 150,-20923 }, + { 151,-20923 }, { 152,-20923 }, { 153,-20923 }, { 154,-20923 }, { 155,-20923 }, + { 156,-20923 }, { 157,-20923 }, { 158,-20923 }, { 159,-20923 }, { 160,-20923 }, + + { 161,-20923 }, { 162,-20923 }, { 163,-20923 }, { 164,-20923 }, { 165,-20923 }, + { 166,-20923 }, { 167,-20923 }, { 168,-20923 }, { 169,-20923 }, { 170,-20923 }, + { 171,-20923 }, { 172,-20923 }, { 173,-20923 }, { 174,-20923 }, { 175,-20923 }, + { 176,-20923 }, { 177,-20923 }, { 178,-20923 }, { 179,-20923 }, { 180,-20923 }, + { 181,-20923 }, { 182,-20923 }, { 183,-20923 }, { 184,-20923 }, { 185,-20923 }, + { 186,-20923 }, { 187,-20923 }, { 188,-20923 }, { 189,-20923 }, { 190,-20923 }, + { 191,-20923 }, { 192,-20923 }, { 193,-20923 }, { 194,-20923 }, { 195,-20923 }, + { 196,-20923 }, { 197,-20923 }, { 198,-20923 }, { 199,-20923 }, { 200,-20923 }, + { 201,-20923 }, { 202,-20923 }, { 203,-20923 }, { 204,-20923 }, { 205,-20923 }, + { 206,-20923 }, { 207,-20923 }, { 208,-20923 }, { 209,-20923 }, { 210,-20923 }, + + { 211,-20923 }, { 212,-20923 }, { 213,-20923 }, { 214,-20923 }, { 215,-20923 }, + { 216,-20923 }, { 217,-20923 }, { 218,-20923 }, { 219,-20923 }, { 220,-20923 }, + { 221,-20923 }, { 222,-20923 }, { 223,-20923 }, { 224,-20923 }, { 225,-20923 }, + { 226,-20923 }, { 227,-20923 }, { 228,-20923 }, { 229,-20923 }, { 230,-20923 }, + { 231,-20923 }, { 232,-20923 }, { 233,-20923 }, { 234,-20923 }, { 235,-20923 }, + { 236,-20923 }, { 237,-20923 }, { 238,-20923 }, { 239,-20923 }, { 240,-20923 }, + { 241,-20923 }, { 242,-20923 }, { 243,-20923 }, { 244,-20923 }, { 245,-20923 }, + { 246,-20923 }, { 247,-20923 }, { 248,-20923 }, { 249,-20923 }, { 250,-20923 }, + { 251,-20923 }, { 252,-20923 }, { 253,-20923 }, { 254,-20923 }, { 255,-20923 }, + { 0, 131 }, { 0,70943 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-21180 }, + { 49,-21180 }, { 50,-21180 }, { 51,-21180 }, { 52,-21180 }, { 53,-21180 }, + + { 54,-21180 }, { 55,-21180 }, { 56,-21180 }, { 57,-21180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-21180 }, { 66,-21180 }, { 67,-21180 }, { 68,-21180 }, + { 69,-21180 }, { 70,-21180 }, { 71,-21180 }, { 72,-21180 }, { 73,-21180 }, + { 74,-21180 }, { 75,-21180 }, { 76,15939 }, { 77,-21180 }, { 78,-21180 }, + { 79,-21180 }, { 80,-21180 }, { 81,-21180 }, { 82,-21180 }, { 83,-21180 }, + { 84,-21180 }, { 85,-21180 }, { 86,-21180 }, { 87,-21180 }, { 88,-21180 }, + { 89,-21180 }, { 90,-21180 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-21180 }, { 0, 0 }, { 97,-21180 }, { 98,-21180 }, + { 99,-21180 }, { 100,-21180 }, { 101,-21180 }, { 102,-21180 }, { 103,-21180 }, + + { 104,-21180 }, { 105,-21180 }, { 106,-21180 }, { 107,-21180 }, { 108,15939 }, + { 109,-21180 }, { 110,-21180 }, { 111,-21180 }, { 112,-21180 }, { 113,-21180 }, + { 114,-21180 }, { 115,-21180 }, { 116,-21180 }, { 117,-21180 }, { 118,-21180 }, + { 119,-21180 }, { 120,-21180 }, { 121,-21180 }, { 122,-21180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-21180 }, { 128,-21180 }, + { 129,-21180 }, { 130,-21180 }, { 131,-21180 }, { 132,-21180 }, { 133,-21180 }, + { 134,-21180 }, { 135,-21180 }, { 136,-21180 }, { 137,-21180 }, { 138,-21180 }, + { 139,-21180 }, { 140,-21180 }, { 141,-21180 }, { 142,-21180 }, { 143,-21180 }, + { 144,-21180 }, { 145,-21180 }, { 146,-21180 }, { 147,-21180 }, { 148,-21180 }, + { 149,-21180 }, { 150,-21180 }, { 151,-21180 }, { 152,-21180 }, { 153,-21180 }, + + { 154,-21180 }, { 155,-21180 }, { 156,-21180 }, { 157,-21180 }, { 158,-21180 }, + { 159,-21180 }, { 160,-21180 }, { 161,-21180 }, { 162,-21180 }, { 163,-21180 }, + { 164,-21180 }, { 165,-21180 }, { 166,-21180 }, { 167,-21180 }, { 168,-21180 }, + { 169,-21180 }, { 170,-21180 }, { 171,-21180 }, { 172,-21180 }, { 173,-21180 }, + { 174,-21180 }, { 175,-21180 }, { 176,-21180 }, { 177,-21180 }, { 178,-21180 }, + { 179,-21180 }, { 180,-21180 }, { 181,-21180 }, { 182,-21180 }, { 183,-21180 }, + { 184,-21180 }, { 185,-21180 }, { 186,-21180 }, { 187,-21180 }, { 188,-21180 }, + { 189,-21180 }, { 190,-21180 }, { 191,-21180 }, { 192,-21180 }, { 193,-21180 }, + { 194,-21180 }, { 195,-21180 }, { 196,-21180 }, { 197,-21180 }, { 198,-21180 }, + { 199,-21180 }, { 200,-21180 }, { 201,-21180 }, { 202,-21180 }, { 203,-21180 }, + + { 204,-21180 }, { 205,-21180 }, { 206,-21180 }, { 207,-21180 }, { 208,-21180 }, + { 209,-21180 }, { 210,-21180 }, { 211,-21180 }, { 212,-21180 }, { 213,-21180 }, + { 214,-21180 }, { 215,-21180 }, { 216,-21180 }, { 217,-21180 }, { 218,-21180 }, + { 219,-21180 }, { 220,-21180 }, { 221,-21180 }, { 222,-21180 }, { 223,-21180 }, + { 224,-21180 }, { 225,-21180 }, { 226,-21180 }, { 227,-21180 }, { 228,-21180 }, + { 229,-21180 }, { 230,-21180 }, { 231,-21180 }, { 232,-21180 }, { 233,-21180 }, + { 234,-21180 }, { 235,-21180 }, { 236,-21180 }, { 237,-21180 }, { 238,-21180 }, + { 239,-21180 }, { 240,-21180 }, { 241,-21180 }, { 242,-21180 }, { 243,-21180 }, + { 244,-21180 }, { 245,-21180 }, { 246,-21180 }, { 247,-21180 }, { 248,-21180 }, + { 249,-21180 }, { 250,-21180 }, { 251,-21180 }, { 252,-21180 }, { 253,-21180 }, + + { 254,-21180 }, { 255,-21180 }, { 0, 131 }, { 0,70686 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-21437 }, { 49,-21437 }, { 50,-21437 }, { 51,-21437 }, + { 52,-21437 }, { 53,-21437 }, { 54,-21437 }, { 55,-21437 }, { 56,-21437 }, + { 57,-21437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-21437 }, { 66,-21437 }, + { 67,-21437 }, { 68,-21437 }, { 69,-21437 }, { 70,-21437 }, { 71,-21437 }, + { 72,-21437 }, { 73,-21437 }, { 74,-21437 }, { 75,-21437 }, { 76,15939 }, + { 77,-21437 }, { 78,-21437 }, { 79,-21437 }, { 80,-21437 }, { 81,-21437 }, + { 82,-21437 }, { 83,-21437 }, { 84,-21437 }, { 85,-21437 }, { 86,-21437 }, + { 87,-21437 }, { 88,-21437 }, { 89,-21437 }, { 90,-21437 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-21437 }, { 0, 0 }, + + { 97,-21437 }, { 98,-21437 }, { 99,-21437 }, { 100,-21437 }, { 101,-21437 }, + { 102,-21437 }, { 103,-21437 }, { 104,-21437 }, { 105,-21437 }, { 106,-21437 }, + { 107,-21437 }, { 108,15939 }, { 109,-21437 }, { 110,-21437 }, { 111,-21437 }, + { 112,-21437 }, { 113,-21437 }, { 114,-21437 }, { 115,-21437 }, { 116,-21437 }, + { 117,-21437 }, { 118,-21437 }, { 119,-21437 }, { 120,-21437 }, { 121,-21437 }, + { 122,-21437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-21437 }, { 128,-21437 }, { 129,-21437 }, { 130,-21437 }, { 131,-21437 }, + { 132,-21437 }, { 133,-21437 }, { 134,-21437 }, { 135,-21437 }, { 136,-21437 }, + { 137,-21437 }, { 138,-21437 }, { 139,-21437 }, { 140,-21437 }, { 141,-21437 }, + { 142,-21437 }, { 143,-21437 }, { 144,-21437 }, { 145,-21437 }, { 146,-21437 }, + + { 147,-21437 }, { 148,-21437 }, { 149,-21437 }, { 150,-21437 }, { 151,-21437 }, + { 152,-21437 }, { 153,-21437 }, { 154,-21437 }, { 155,-21437 }, { 156,-21437 }, + { 157,-21437 }, { 158,-21437 }, { 159,-21437 }, { 160,-21437 }, { 161,-21437 }, + { 162,-21437 }, { 163,-21437 }, { 164,-21437 }, { 165,-21437 }, { 166,-21437 }, + { 167,-21437 }, { 168,-21437 }, { 169,-21437 }, { 170,-21437 }, { 171,-21437 }, + { 172,-21437 }, { 173,-21437 }, { 174,-21437 }, { 175,-21437 }, { 176,-21437 }, + { 177,-21437 }, { 178,-21437 }, { 179,-21437 }, { 180,-21437 }, { 181,-21437 }, + { 182,-21437 }, { 183,-21437 }, { 184,-21437 }, { 185,-21437 }, { 186,-21437 }, + { 187,-21437 }, { 188,-21437 }, { 189,-21437 }, { 190,-21437 }, { 191,-21437 }, + { 192,-21437 }, { 193,-21437 }, { 194,-21437 }, { 195,-21437 }, { 196,-21437 }, + + { 197,-21437 }, { 198,-21437 }, { 199,-21437 }, { 200,-21437 }, { 201,-21437 }, + { 202,-21437 }, { 203,-21437 }, { 204,-21437 }, { 205,-21437 }, { 206,-21437 }, + { 207,-21437 }, { 208,-21437 }, { 209,-21437 }, { 210,-21437 }, { 211,-21437 }, + { 212,-21437 }, { 213,-21437 }, { 214,-21437 }, { 215,-21437 }, { 216,-21437 }, + { 217,-21437 }, { 218,-21437 }, { 219,-21437 }, { 220,-21437 }, { 221,-21437 }, + { 222,-21437 }, { 223,-21437 }, { 224,-21437 }, { 225,-21437 }, { 226,-21437 }, + { 227,-21437 }, { 228,-21437 }, { 229,-21437 }, { 230,-21437 }, { 231,-21437 }, + { 232,-21437 }, { 233,-21437 }, { 234,-21437 }, { 235,-21437 }, { 236,-21437 }, + { 237,-21437 }, { 238,-21437 }, { 239,-21437 }, { 240,-21437 }, { 241,-21437 }, + { 242,-21437 }, { 243,-21437 }, { 244,-21437 }, { 245,-21437 }, { 246,-21437 }, + + { 247,-21437 }, { 248,-21437 }, { 249,-21437 }, { 250,-21437 }, { 251,-21437 }, + { 252,-21437 }, { 253,-21437 }, { 254,-21437 }, { 255,-21437 }, { 0, 131 }, + { 0,70429 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-21694 }, { 49,-21694 }, + { 50,-21694 }, { 51,-21694 }, { 52,-21694 }, { 53,-21694 }, { 54,-21694 }, + { 55,-21694 }, { 56,-21694 }, { 57,-21694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-21694 }, { 66,-21694 }, { 67,-21694 }, { 68,-21694 }, { 69,-21694 }, + { 70,-21694 }, { 71,-21694 }, { 72,-21694 }, { 73,-21694 }, { 74,-21694 }, + { 75,-21694 }, { 76,-21694 }, { 77,-21694 }, { 78,-21694 }, { 79,-21694 }, + { 80,-21694 }, { 81,-21694 }, { 82,-21694 }, { 83,-21694 }, { 84,15939 }, + { 85,-21694 }, { 86,-21694 }, { 87,-21694 }, { 88,-21694 }, { 89,-21694 }, + + { 90,-21694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-21694 }, { 0, 0 }, { 97,-21694 }, { 98,-21694 }, { 99,-21694 }, + { 100,-21694 }, { 101,-21694 }, { 102,-21694 }, { 103,-21694 }, { 104,-21694 }, + { 105,-21694 }, { 106,-21694 }, { 107,-21694 }, { 108,-21694 }, { 109,-21694 }, + { 110,-21694 }, { 111,-21694 }, { 112,-21694 }, { 113,-21694 }, { 114,-21694 }, + { 115,-21694 }, { 116,15939 }, { 117,-21694 }, { 118,-21694 }, { 119,-21694 }, + { 120,-21694 }, { 121,-21694 }, { 122,-21694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-21694 }, { 128,-21694 }, { 129,-21694 }, + { 130,-21694 }, { 131,-21694 }, { 132,-21694 }, { 133,-21694 }, { 134,-21694 }, + { 135,-21694 }, { 136,-21694 }, { 137,-21694 }, { 138,-21694 }, { 139,-21694 }, + + { 140,-21694 }, { 141,-21694 }, { 142,-21694 }, { 143,-21694 }, { 144,-21694 }, + { 145,-21694 }, { 146,-21694 }, { 147,-21694 }, { 148,-21694 }, { 149,-21694 }, + { 150,-21694 }, { 151,-21694 }, { 152,-21694 }, { 153,-21694 }, { 154,-21694 }, + { 155,-21694 }, { 156,-21694 }, { 157,-21694 }, { 158,-21694 }, { 159,-21694 }, + { 160,-21694 }, { 161,-21694 }, { 162,-21694 }, { 163,-21694 }, { 164,-21694 }, + { 165,-21694 }, { 166,-21694 }, { 167,-21694 }, { 168,-21694 }, { 169,-21694 }, + { 170,-21694 }, { 171,-21694 }, { 172,-21694 }, { 173,-21694 }, { 174,-21694 }, + { 175,-21694 }, { 176,-21694 }, { 177,-21694 }, { 178,-21694 }, { 179,-21694 }, + { 180,-21694 }, { 181,-21694 }, { 182,-21694 }, { 183,-21694 }, { 184,-21694 }, + { 185,-21694 }, { 186,-21694 }, { 187,-21694 }, { 188,-21694 }, { 189,-21694 }, + + { 190,-21694 }, { 191,-21694 }, { 192,-21694 }, { 193,-21694 }, { 194,-21694 }, + { 195,-21694 }, { 196,-21694 }, { 197,-21694 }, { 198,-21694 }, { 199,-21694 }, + { 200,-21694 }, { 201,-21694 }, { 202,-21694 }, { 203,-21694 }, { 204,-21694 }, + { 205,-21694 }, { 206,-21694 }, { 207,-21694 }, { 208,-21694 }, { 209,-21694 }, + { 210,-21694 }, { 211,-21694 }, { 212,-21694 }, { 213,-21694 }, { 214,-21694 }, + { 215,-21694 }, { 216,-21694 }, { 217,-21694 }, { 218,-21694 }, { 219,-21694 }, + { 220,-21694 }, { 221,-21694 }, { 222,-21694 }, { 223,-21694 }, { 224,-21694 }, + { 225,-21694 }, { 226,-21694 }, { 227,-21694 }, { 228,-21694 }, { 229,-21694 }, + { 230,-21694 }, { 231,-21694 }, { 232,-21694 }, { 233,-21694 }, { 234,-21694 }, + { 235,-21694 }, { 236,-21694 }, { 237,-21694 }, { 238,-21694 }, { 239,-21694 }, + + { 240,-21694 }, { 241,-21694 }, { 242,-21694 }, { 243,-21694 }, { 244,-21694 }, + { 245,-21694 }, { 246,-21694 }, { 247,-21694 }, { 248,-21694 }, { 249,-21694 }, + { 250,-21694 }, { 251,-21694 }, { 252,-21694 }, { 253,-21694 }, { 254,-21694 }, + { 255,-21694 }, { 0, 131 }, { 0,70172 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-21951 }, { 49,-21951 }, { 50,-21951 }, { 51,-21951 }, { 52,-21951 }, + { 53,-21951 }, { 54,-21951 }, { 55,-21951 }, { 56,-21951 }, { 57,-21951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-21951 }, { 66,-21951 }, { 67,-21951 }, + { 68,-21951 }, { 69,15939 }, { 70,-21951 }, { 71,-21951 }, { 72,-21951 }, + { 73,-21951 }, { 74,-21951 }, { 75,-21951 }, { 76,-21951 }, { 77,-21951 }, + { 78,-21951 }, { 79,-21951 }, { 80,-21951 }, { 81,-21951 }, { 82,-21951 }, + + { 83,-21951 }, { 84,-21951 }, { 85,-21951 }, { 86,-21951 }, { 87,-21951 }, + { 88,-21951 }, { 89,-21951 }, { 90,-21951 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-21951 }, { 0, 0 }, { 97,-21951 }, + { 98,-21951 }, { 99,-21951 }, { 100,-21951 }, { 101,15939 }, { 102,-21951 }, + { 103,-21951 }, { 104,-21951 }, { 105,-21951 }, { 106,-21951 }, { 107,-21951 }, + { 108,-21951 }, { 109,-21951 }, { 110,-21951 }, { 111,-21951 }, { 112,-21951 }, + { 113,-21951 }, { 114,-21951 }, { 115,-21951 }, { 116,-21951 }, { 117,-21951 }, + { 118,-21951 }, { 119,-21951 }, { 120,-21951 }, { 121,-21951 }, { 122,-21951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-21951 }, + { 128,-21951 }, { 129,-21951 }, { 130,-21951 }, { 131,-21951 }, { 132,-21951 }, + + { 133,-21951 }, { 134,-21951 }, { 135,-21951 }, { 136,-21951 }, { 137,-21951 }, + { 138,-21951 }, { 139,-21951 }, { 140,-21951 }, { 141,-21951 }, { 142,-21951 }, + { 143,-21951 }, { 144,-21951 }, { 145,-21951 }, { 146,-21951 }, { 147,-21951 }, + { 148,-21951 }, { 149,-21951 }, { 150,-21951 }, { 151,-21951 }, { 152,-21951 }, + { 153,-21951 }, { 154,-21951 }, { 155,-21951 }, { 156,-21951 }, { 157,-21951 }, + { 158,-21951 }, { 159,-21951 }, { 160,-21951 }, { 161,-21951 }, { 162,-21951 }, + { 163,-21951 }, { 164,-21951 }, { 165,-21951 }, { 166,-21951 }, { 167,-21951 }, + { 168,-21951 }, { 169,-21951 }, { 170,-21951 }, { 171,-21951 }, { 172,-21951 }, + { 173,-21951 }, { 174,-21951 }, { 175,-21951 }, { 176,-21951 }, { 177,-21951 }, + { 178,-21951 }, { 179,-21951 }, { 180,-21951 }, { 181,-21951 }, { 182,-21951 }, + + { 183,-21951 }, { 184,-21951 }, { 185,-21951 }, { 186,-21951 }, { 187,-21951 }, + { 188,-21951 }, { 189,-21951 }, { 190,-21951 }, { 191,-21951 }, { 192,-21951 }, + { 193,-21951 }, { 194,-21951 }, { 195,-21951 }, { 196,-21951 }, { 197,-21951 }, + { 198,-21951 }, { 199,-21951 }, { 200,-21951 }, { 201,-21951 }, { 202,-21951 }, + { 203,-21951 }, { 204,-21951 }, { 205,-21951 }, { 206,-21951 }, { 207,-21951 }, + { 208,-21951 }, { 209,-21951 }, { 210,-21951 }, { 211,-21951 }, { 212,-21951 }, + { 213,-21951 }, { 214,-21951 }, { 215,-21951 }, { 216,-21951 }, { 217,-21951 }, + { 218,-21951 }, { 219,-21951 }, { 220,-21951 }, { 221,-21951 }, { 222,-21951 }, + { 223,-21951 }, { 224,-21951 }, { 225,-21951 }, { 226,-21951 }, { 227,-21951 }, + { 228,-21951 }, { 229,-21951 }, { 230,-21951 }, { 231,-21951 }, { 232,-21951 }, + + { 233,-21951 }, { 234,-21951 }, { 235,-21951 }, { 236,-21951 }, { 237,-21951 }, + { 238,-21951 }, { 239,-21951 }, { 240,-21951 }, { 241,-21951 }, { 242,-21951 }, + { 243,-21951 }, { 244,-21951 }, { 245,-21951 }, { 246,-21951 }, { 247,-21951 }, + { 248,-21951 }, { 249,-21951 }, { 250,-21951 }, { 251,-21951 }, { 252,-21951 }, + { 253,-21951 }, { 254,-21951 }, { 255,-21951 }, { 0, 131 }, { 0,69915 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-22208 }, { 49,-22208 }, { 50,-22208 }, + { 51,-22208 }, { 52,-22208 }, { 53,-22208 }, { 54,-22208 }, { 55,-22208 }, + { 56,-22208 }, { 57,-22208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-22208 }, + { 66,-22208 }, { 67,-22208 }, { 68,-22208 }, { 69,15939 }, { 70,-22208 }, + { 71,-22208 }, { 72,-22208 }, { 73,-22208 }, { 74,-22208 }, { 75,-22208 }, + + { 76,-22208 }, { 77,-22208 }, { 78,-22208 }, { 79,-22208 }, { 80,-22208 }, + { 81,-22208 }, { 82,-22208 }, { 83,-22208 }, { 84,-22208 }, { 85,-22208 }, + { 86,-22208 }, { 87,-22208 }, { 88,-22208 }, { 89,-22208 }, { 90,-22208 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-22208 }, + { 0, 0 }, { 97,-22208 }, { 98,-22208 }, { 99,-22208 }, { 100,-22208 }, + { 101,15939 }, { 102,-22208 }, { 103,-22208 }, { 104,-22208 }, { 105,-22208 }, + { 106,-22208 }, { 107,-22208 }, { 108,-22208 }, { 109,-22208 }, { 110,-22208 }, + { 111,-22208 }, { 112,-22208 }, { 113,-22208 }, { 114,-22208 }, { 115,-22208 }, + { 116,-22208 }, { 117,-22208 }, { 118,-22208 }, { 119,-22208 }, { 120,-22208 }, + { 121,-22208 }, { 122,-22208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-22208 }, { 128,-22208 }, { 129,-22208 }, { 130,-22208 }, + { 131,-22208 }, { 132,-22208 }, { 133,-22208 }, { 134,-22208 }, { 135,-22208 }, + { 136,-22208 }, { 137,-22208 }, { 138,-22208 }, { 139,-22208 }, { 140,-22208 }, + { 141,-22208 }, { 142,-22208 }, { 143,-22208 }, { 144,-22208 }, { 145,-22208 }, + { 146,-22208 }, { 147,-22208 }, { 148,-22208 }, { 149,-22208 }, { 150,-22208 }, + { 151,-22208 }, { 152,-22208 }, { 153,-22208 }, { 154,-22208 }, { 155,-22208 }, + { 156,-22208 }, { 157,-22208 }, { 158,-22208 }, { 159,-22208 }, { 160,-22208 }, + { 161,-22208 }, { 162,-22208 }, { 163,-22208 }, { 164,-22208 }, { 165,-22208 }, + { 166,-22208 }, { 167,-22208 }, { 168,-22208 }, { 169,-22208 }, { 170,-22208 }, + { 171,-22208 }, { 172,-22208 }, { 173,-22208 }, { 174,-22208 }, { 175,-22208 }, + + { 176,-22208 }, { 177,-22208 }, { 178,-22208 }, { 179,-22208 }, { 180,-22208 }, + { 181,-22208 }, { 182,-22208 }, { 183,-22208 }, { 184,-22208 }, { 185,-22208 }, + { 186,-22208 }, { 187,-22208 }, { 188,-22208 }, { 189,-22208 }, { 190,-22208 }, + { 191,-22208 }, { 192,-22208 }, { 193,-22208 }, { 194,-22208 }, { 195,-22208 }, + { 196,-22208 }, { 197,-22208 }, { 198,-22208 }, { 199,-22208 }, { 200,-22208 }, + { 201,-22208 }, { 202,-22208 }, { 203,-22208 }, { 204,-22208 }, { 205,-22208 }, + { 206,-22208 }, { 207,-22208 }, { 208,-22208 }, { 209,-22208 }, { 210,-22208 }, + { 211,-22208 }, { 212,-22208 }, { 213,-22208 }, { 214,-22208 }, { 215,-22208 }, + { 216,-22208 }, { 217,-22208 }, { 218,-22208 }, { 219,-22208 }, { 220,-22208 }, + { 221,-22208 }, { 222,-22208 }, { 223,-22208 }, { 224,-22208 }, { 225,-22208 }, + + { 226,-22208 }, { 227,-22208 }, { 228,-22208 }, { 229,-22208 }, { 230,-22208 }, + { 231,-22208 }, { 232,-22208 }, { 233,-22208 }, { 234,-22208 }, { 235,-22208 }, + { 236,-22208 }, { 237,-22208 }, { 238,-22208 }, { 239,-22208 }, { 240,-22208 }, + { 241,-22208 }, { 242,-22208 }, { 243,-22208 }, { 244,-22208 }, { 245,-22208 }, + { 246,-22208 }, { 247,-22208 }, { 248,-22208 }, { 249,-22208 }, { 250,-22208 }, + { 251,-22208 }, { 252,-22208 }, { 253,-22208 }, { 254,-22208 }, { 255,-22208 }, + { 0, 131 }, { 0,69658 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-22465 }, + { 49,-22465 }, { 50,-22465 }, { 51,-22465 }, { 52,-22465 }, { 53,-22465 }, + { 54,-22465 }, { 55,-22465 }, { 56,-22465 }, { 57,-22465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-22465 }, { 66,-22465 }, { 67,-22465 }, { 68,-22465 }, + + { 69,-22465 }, { 70,-22465 }, { 71,-22465 }, { 72,-22465 }, { 73,-22465 }, + { 74,-22465 }, { 75,-22465 }, { 76,-22465 }, { 77,-22465 }, { 78,-22465 }, + { 79,-22465 }, { 80,-22465 }, { 81,-22465 }, { 82,-22465 }, { 83,-22465 }, + { 84,15939 }, { 85,-22465 }, { 86,-22465 }, { 87,-22465 }, { 88,-22465 }, + { 89,-22465 }, { 90,-22465 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-22465 }, { 0, 0 }, { 97,-22465 }, { 98,-22465 }, + { 99,-22465 }, { 100,-22465 }, { 101,-22465 }, { 102,-22465 }, { 103,-22465 }, + { 104,-22465 }, { 105,-22465 }, { 106,-22465 }, { 107,-22465 }, { 108,-22465 }, + { 109,-22465 }, { 110,-22465 }, { 111,-22465 }, { 112,-22465 }, { 113,-22465 }, + { 114,-22465 }, { 115,-22465 }, { 116,15939 }, { 117,-22465 }, { 118,-22465 }, + + { 119,-22465 }, { 120,-22465 }, { 121,-22465 }, { 122,-22465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-22465 }, { 128,-22465 }, + { 129,-22465 }, { 130,-22465 }, { 131,-22465 }, { 132,-22465 }, { 133,-22465 }, + { 134,-22465 }, { 135,-22465 }, { 136,-22465 }, { 137,-22465 }, { 138,-22465 }, + { 139,-22465 }, { 140,-22465 }, { 141,-22465 }, { 142,-22465 }, { 143,-22465 }, + { 144,-22465 }, { 145,-22465 }, { 146,-22465 }, { 147,-22465 }, { 148,-22465 }, + { 149,-22465 }, { 150,-22465 }, { 151,-22465 }, { 152,-22465 }, { 153,-22465 }, + { 154,-22465 }, { 155,-22465 }, { 156,-22465 }, { 157,-22465 }, { 158,-22465 }, + { 159,-22465 }, { 160,-22465 }, { 161,-22465 }, { 162,-22465 }, { 163,-22465 }, + { 164,-22465 }, { 165,-22465 }, { 166,-22465 }, { 167,-22465 }, { 168,-22465 }, + + { 169,-22465 }, { 170,-22465 }, { 171,-22465 }, { 172,-22465 }, { 173,-22465 }, + { 174,-22465 }, { 175,-22465 }, { 176,-22465 }, { 177,-22465 }, { 178,-22465 }, + { 179,-22465 }, { 180,-22465 }, { 181,-22465 }, { 182,-22465 }, { 183,-22465 }, + { 184,-22465 }, { 185,-22465 }, { 186,-22465 }, { 187,-22465 }, { 188,-22465 }, + { 189,-22465 }, { 190,-22465 }, { 191,-22465 }, { 192,-22465 }, { 193,-22465 }, + { 194,-22465 }, { 195,-22465 }, { 196,-22465 }, { 197,-22465 }, { 198,-22465 }, + { 199,-22465 }, { 200,-22465 }, { 201,-22465 }, { 202,-22465 }, { 203,-22465 }, + { 204,-22465 }, { 205,-22465 }, { 206,-22465 }, { 207,-22465 }, { 208,-22465 }, + { 209,-22465 }, { 210,-22465 }, { 211,-22465 }, { 212,-22465 }, { 213,-22465 }, + { 214,-22465 }, { 215,-22465 }, { 216,-22465 }, { 217,-22465 }, { 218,-22465 }, + + { 219,-22465 }, { 220,-22465 }, { 221,-22465 }, { 222,-22465 }, { 223,-22465 }, + { 224,-22465 }, { 225,-22465 }, { 226,-22465 }, { 227,-22465 }, { 228,-22465 }, + { 229,-22465 }, { 230,-22465 }, { 231,-22465 }, { 232,-22465 }, { 233,-22465 }, + { 234,-22465 }, { 235,-22465 }, { 236,-22465 }, { 237,-22465 }, { 238,-22465 }, + { 239,-22465 }, { 240,-22465 }, { 241,-22465 }, { 242,-22465 }, { 243,-22465 }, + { 244,-22465 }, { 245,-22465 }, { 246,-22465 }, { 247,-22465 }, { 248,-22465 }, + { 249,-22465 }, { 250,-22465 }, { 251,-22465 }, { 252,-22465 }, { 253,-22465 }, + { 254,-22465 }, { 255,-22465 }, { 0, 131 }, { 0,69401 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-22722 }, { 49,-22722 }, { 50,-22722 }, { 51,-22722 }, + { 52,-22722 }, { 53,-22722 }, { 54,-22722 }, { 55,-22722 }, { 56,-22722 }, + { 57,-22722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-22722 }, { 66,-22722 }, + { 67,-22722 }, { 68,-22722 }, { 69,15939 }, { 70,-22722 }, { 71,-22722 }, + { 72,-22722 }, { 73,-22722 }, { 74,-22722 }, { 75,-22722 }, { 76,-22722 }, + { 77,-22722 }, { 78,-22722 }, { 79,-22722 }, { 80,-22722 }, { 81,-22722 }, + { 82,-22722 }, { 83,-22722 }, { 84,-22722 }, { 85,-22722 }, { 86,-22722 }, + { 87,-22722 }, { 88,-22722 }, { 89,-22722 }, { 90,-22722 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-22722 }, { 0, 0 }, + { 97,-22722 }, { 98,-22722 }, { 99,-22722 }, { 100,-22722 }, { 101,15939 }, + { 102,-22722 }, { 103,-22722 }, { 104,-22722 }, { 105,-22722 }, { 106,-22722 }, + { 107,-22722 }, { 108,-22722 }, { 109,-22722 }, { 110,-22722 }, { 111,-22722 }, + + { 112,-22722 }, { 113,-22722 }, { 114,-22722 }, { 115,-22722 }, { 116,-22722 }, + { 117,-22722 }, { 118,-22722 }, { 119,-22722 }, { 120,-22722 }, { 121,-22722 }, + { 122,-22722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-22722 }, { 128,-22722 }, { 129,-22722 }, { 130,-22722 }, { 131,-22722 }, + { 132,-22722 }, { 133,-22722 }, { 134,-22722 }, { 135,-22722 }, { 136,-22722 }, + { 137,-22722 }, { 138,-22722 }, { 139,-22722 }, { 140,-22722 }, { 141,-22722 }, + { 142,-22722 }, { 143,-22722 }, { 144,-22722 }, { 145,-22722 }, { 146,-22722 }, + { 147,-22722 }, { 148,-22722 }, { 149,-22722 }, { 150,-22722 }, { 151,-22722 }, + { 152,-22722 }, { 153,-22722 }, { 154,-22722 }, { 155,-22722 }, { 156,-22722 }, + { 157,-22722 }, { 158,-22722 }, { 159,-22722 }, { 160,-22722 }, { 161,-22722 }, + + { 162,-22722 }, { 163,-22722 }, { 164,-22722 }, { 165,-22722 }, { 166,-22722 }, + { 167,-22722 }, { 168,-22722 }, { 169,-22722 }, { 170,-22722 }, { 171,-22722 }, + { 172,-22722 }, { 173,-22722 }, { 174,-22722 }, { 175,-22722 }, { 176,-22722 }, + { 177,-22722 }, { 178,-22722 }, { 179,-22722 }, { 180,-22722 }, { 181,-22722 }, + { 182,-22722 }, { 183,-22722 }, { 184,-22722 }, { 185,-22722 }, { 186,-22722 }, + { 187,-22722 }, { 188,-22722 }, { 189,-22722 }, { 190,-22722 }, { 191,-22722 }, + { 192,-22722 }, { 193,-22722 }, { 194,-22722 }, { 195,-22722 }, { 196,-22722 }, + { 197,-22722 }, { 198,-22722 }, { 199,-22722 }, { 200,-22722 }, { 201,-22722 }, + { 202,-22722 }, { 203,-22722 }, { 204,-22722 }, { 205,-22722 }, { 206,-22722 }, + { 207,-22722 }, { 208,-22722 }, { 209,-22722 }, { 210,-22722 }, { 211,-22722 }, + + { 212,-22722 }, { 213,-22722 }, { 214,-22722 }, { 215,-22722 }, { 216,-22722 }, + { 217,-22722 }, { 218,-22722 }, { 219,-22722 }, { 220,-22722 }, { 221,-22722 }, + { 222,-22722 }, { 223,-22722 }, { 224,-22722 }, { 225,-22722 }, { 226,-22722 }, + { 227,-22722 }, { 228,-22722 }, { 229,-22722 }, { 230,-22722 }, { 231,-22722 }, + { 232,-22722 }, { 233,-22722 }, { 234,-22722 }, { 235,-22722 }, { 236,-22722 }, + { 237,-22722 }, { 238,-22722 }, { 239,-22722 }, { 240,-22722 }, { 241,-22722 }, + { 242,-22722 }, { 243,-22722 }, { 244,-22722 }, { 245,-22722 }, { 246,-22722 }, + { 247,-22722 }, { 248,-22722 }, { 249,-22722 }, { 250,-22722 }, { 251,-22722 }, + { 252,-22722 }, { 253,-22722 }, { 254,-22722 }, { 255,-22722 }, { 0, 28 }, + { 0,69144 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-22979 }, { 49,-22979 }, + { 50,-22979 }, { 51,-22979 }, { 52,-22979 }, { 53,-22979 }, { 54,-22979 }, + + { 55,-22979 }, { 56,-22979 }, { 57,-22979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-22979 }, { 66,-22979 }, { 67,-22979 }, { 68,-22979 }, { 69,-22979 }, + { 70,-22979 }, { 71,-22979 }, { 72,-22979 }, { 73,-22979 }, { 74,-22979 }, + { 75,-22979 }, { 76,-22979 }, { 77,-22979 }, { 78,-22979 }, { 79,-22979 }, + { 80,-22979 }, { 81,-22979 }, { 82,-22979 }, { 83,-22979 }, { 84,-22979 }, + { 85,-22979 }, { 86,-22979 }, { 87,-22979 }, { 88,-22979 }, { 89,-22979 }, + { 90,-22979 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-22979 }, { 0, 0 }, { 97,-22979 }, { 98,-22979 }, { 99,-22979 }, + { 100,-22979 }, { 101,-22979 }, { 102,-22979 }, { 103,-22979 }, { 104,-22979 }, + + { 105,-22979 }, { 106,-22979 }, { 107,-22979 }, { 108,-22979 }, { 109,-22979 }, + { 110,-22979 }, { 111,-22979 }, { 112,-22979 }, { 113,-22979 }, { 114,-22979 }, + { 115,-22979 }, { 116,-22979 }, { 117,-22979 }, { 118,-22979 }, { 119,-22979 }, + { 120,-22979 }, { 121,-22979 }, { 122,-22979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-22979 }, { 128,-22979 }, { 129,-22979 }, + { 130,-22979 }, { 131,-22979 }, { 132,-22979 }, { 133,-22979 }, { 134,-22979 }, + { 135,-22979 }, { 136,-22979 }, { 137,-22979 }, { 138,-22979 }, { 139,-22979 }, + { 140,-22979 }, { 141,-22979 }, { 142,-22979 }, { 143,-22979 }, { 144,-22979 }, + { 145,-22979 }, { 146,-22979 }, { 147,-22979 }, { 148,-22979 }, { 149,-22979 }, + { 150,-22979 }, { 151,-22979 }, { 152,-22979 }, { 153,-22979 }, { 154,-22979 }, + + { 155,-22979 }, { 156,-22979 }, { 157,-22979 }, { 158,-22979 }, { 159,-22979 }, + { 160,-22979 }, { 161,-22979 }, { 162,-22979 }, { 163,-22979 }, { 164,-22979 }, + { 165,-22979 }, { 166,-22979 }, { 167,-22979 }, { 168,-22979 }, { 169,-22979 }, + { 170,-22979 }, { 171,-22979 }, { 172,-22979 }, { 173,-22979 }, { 174,-22979 }, + { 175,-22979 }, { 176,-22979 }, { 177,-22979 }, { 178,-22979 }, { 179,-22979 }, + { 180,-22979 }, { 181,-22979 }, { 182,-22979 }, { 183,-22979 }, { 184,-22979 }, + { 185,-22979 }, { 186,-22979 }, { 187,-22979 }, { 188,-22979 }, { 189,-22979 }, + { 190,-22979 }, { 191,-22979 }, { 192,-22979 }, { 193,-22979 }, { 194,-22979 }, + { 195,-22979 }, { 196,-22979 }, { 197,-22979 }, { 198,-22979 }, { 199,-22979 }, + { 200,-22979 }, { 201,-22979 }, { 202,-22979 }, { 203,-22979 }, { 204,-22979 }, + + { 205,-22979 }, { 206,-22979 }, { 207,-22979 }, { 208,-22979 }, { 209,-22979 }, + { 210,-22979 }, { 211,-22979 }, { 212,-22979 }, { 213,-22979 }, { 214,-22979 }, + { 215,-22979 }, { 216,-22979 }, { 217,-22979 }, { 218,-22979 }, { 219,-22979 }, + { 220,-22979 }, { 221,-22979 }, { 222,-22979 }, { 223,-22979 }, { 224,-22979 }, + { 225,-22979 }, { 226,-22979 }, { 227,-22979 }, { 228,-22979 }, { 229,-22979 }, + { 230,-22979 }, { 231,-22979 }, { 232,-22979 }, { 233,-22979 }, { 234,-22979 }, + { 235,-22979 }, { 236,-22979 }, { 237,-22979 }, { 238,-22979 }, { 239,-22979 }, + { 240,-22979 }, { 241,-22979 }, { 242,-22979 }, { 243,-22979 }, { 244,-22979 }, + { 245,-22979 }, { 246,-22979 }, { 247,-22979 }, { 248,-22979 }, { 249,-22979 }, + { 250,-22979 }, { 251,-22979 }, { 252,-22979 }, { 253,-22979 }, { 254,-22979 }, + + { 255,-22979 }, { 0, 131 }, { 0,68887 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-23236 }, { 49,-23236 }, { 50,-23236 }, { 51,-23236 }, { 52,-23236 }, + { 53,-23236 }, { 54,-23236 }, { 55,-23236 }, { 56,-23236 }, { 57,-23236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-23236 }, { 66,-23236 }, { 67,-23236 }, + { 68,-23236 }, { 69,-23236 }, { 70,-23236 }, { 71,-23236 }, { 72,-23236 }, + { 73,-23236 }, { 74,-23236 }, { 75,-23236 }, { 76,-23236 }, { 77,-23236 }, + { 78,15682 }, { 79,-23236 }, { 80,-23236 }, { 81,-23236 }, { 82,-23236 }, + { 83,-23236 }, { 84,-23236 }, { 85,-23236 }, { 86,15939 }, { 87,-23236 }, + { 88,-23236 }, { 89,-23236 }, { 90,-23236 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-23236 }, { 0, 0 }, { 97,-23236 }, + + { 98,-23236 }, { 99,-23236 }, { 100,-23236 }, { 101,-23236 }, { 102,-23236 }, + { 103,-23236 }, { 104,-23236 }, { 105,-23236 }, { 106,-23236 }, { 107,-23236 }, + { 108,-23236 }, { 109,-23236 }, { 110,15682 }, { 111,-23236 }, { 112,-23236 }, + { 113,-23236 }, { 114,-23236 }, { 115,-23236 }, { 116,-23236 }, { 117,-23236 }, + { 118,15939 }, { 119,-23236 }, { 120,-23236 }, { 121,-23236 }, { 122,-23236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-23236 }, + { 128,-23236 }, { 129,-23236 }, { 130,-23236 }, { 131,-23236 }, { 132,-23236 }, + { 133,-23236 }, { 134,-23236 }, { 135,-23236 }, { 136,-23236 }, { 137,-23236 }, + { 138,-23236 }, { 139,-23236 }, { 140,-23236 }, { 141,-23236 }, { 142,-23236 }, + { 143,-23236 }, { 144,-23236 }, { 145,-23236 }, { 146,-23236 }, { 147,-23236 }, + + { 148,-23236 }, { 149,-23236 }, { 150,-23236 }, { 151,-23236 }, { 152,-23236 }, + { 153,-23236 }, { 154,-23236 }, { 155,-23236 }, { 156,-23236 }, { 157,-23236 }, + { 158,-23236 }, { 159,-23236 }, { 160,-23236 }, { 161,-23236 }, { 162,-23236 }, + { 163,-23236 }, { 164,-23236 }, { 165,-23236 }, { 166,-23236 }, { 167,-23236 }, + { 168,-23236 }, { 169,-23236 }, { 170,-23236 }, { 171,-23236 }, { 172,-23236 }, + { 173,-23236 }, { 174,-23236 }, { 175,-23236 }, { 176,-23236 }, { 177,-23236 }, + { 178,-23236 }, { 179,-23236 }, { 180,-23236 }, { 181,-23236 }, { 182,-23236 }, + { 183,-23236 }, { 184,-23236 }, { 185,-23236 }, { 186,-23236 }, { 187,-23236 }, + { 188,-23236 }, { 189,-23236 }, { 190,-23236 }, { 191,-23236 }, { 192,-23236 }, + { 193,-23236 }, { 194,-23236 }, { 195,-23236 }, { 196,-23236 }, { 197,-23236 }, + + { 198,-23236 }, { 199,-23236 }, { 200,-23236 }, { 201,-23236 }, { 202,-23236 }, + { 203,-23236 }, { 204,-23236 }, { 205,-23236 }, { 206,-23236 }, { 207,-23236 }, + { 208,-23236 }, { 209,-23236 }, { 210,-23236 }, { 211,-23236 }, { 212,-23236 }, + { 213,-23236 }, { 214,-23236 }, { 215,-23236 }, { 216,-23236 }, { 217,-23236 }, + { 218,-23236 }, { 219,-23236 }, { 220,-23236 }, { 221,-23236 }, { 222,-23236 }, + { 223,-23236 }, { 224,-23236 }, { 225,-23236 }, { 226,-23236 }, { 227,-23236 }, + { 228,-23236 }, { 229,-23236 }, { 230,-23236 }, { 231,-23236 }, { 232,-23236 }, + { 233,-23236 }, { 234,-23236 }, { 235,-23236 }, { 236,-23236 }, { 237,-23236 }, + { 238,-23236 }, { 239,-23236 }, { 240,-23236 }, { 241,-23236 }, { 242,-23236 }, + { 243,-23236 }, { 244,-23236 }, { 245,-23236 }, { 246,-23236 }, { 247,-23236 }, + + { 248,-23236 }, { 249,-23236 }, { 250,-23236 }, { 251,-23236 }, { 252,-23236 }, + { 253,-23236 }, { 254,-23236 }, { 255,-23236 }, { 0, 131 }, { 0,68630 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-23493 }, { 49,-23493 }, { 50,-23493 }, + { 51,-23493 }, { 52,-23493 }, { 53,-23493 }, { 54,-23493 }, { 55,-23493 }, + { 56,-23493 }, { 57,-23493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-23493 }, + { 66,-23493 }, { 67,-23493 }, { 68,-23493 }, { 69,-23493 }, { 70,-23493 }, + { 71,-23493 }, { 72,-23493 }, { 73,-23493 }, { 74,-23493 }, { 75,-23493 }, + { 76,-23493 }, { 77,-23493 }, { 78,-23493 }, { 79,-23493 }, { 80,-23493 }, + { 81,-23493 }, { 82,-23493 }, { 83,-23493 }, { 84,15939 }, { 85,-23493 }, + { 86,-23493 }, { 87,-23493 }, { 88,-23493 }, { 89,-23493 }, { 90,-23493 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-23493 }, + { 0, 0 }, { 97,-23493 }, { 98,-23493 }, { 99,-23493 }, { 100,-23493 }, + { 101,-23493 }, { 102,-23493 }, { 103,-23493 }, { 104,-23493 }, { 105,-23493 }, + { 106,-23493 }, { 107,-23493 }, { 108,-23493 }, { 109,-23493 }, { 110,-23493 }, + { 111,-23493 }, { 112,-23493 }, { 113,-23493 }, { 114,-23493 }, { 115,-23493 }, + { 116,15939 }, { 117,-23493 }, { 118,-23493 }, { 119,-23493 }, { 120,-23493 }, + { 121,-23493 }, { 122,-23493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-23493 }, { 128,-23493 }, { 129,-23493 }, { 130,-23493 }, + { 131,-23493 }, { 132,-23493 }, { 133,-23493 }, { 134,-23493 }, { 135,-23493 }, + { 136,-23493 }, { 137,-23493 }, { 138,-23493 }, { 139,-23493 }, { 140,-23493 }, + + { 141,-23493 }, { 142,-23493 }, { 143,-23493 }, { 144,-23493 }, { 145,-23493 }, + { 146,-23493 }, { 147,-23493 }, { 148,-23493 }, { 149,-23493 }, { 150,-23493 }, + { 151,-23493 }, { 152,-23493 }, { 153,-23493 }, { 154,-23493 }, { 155,-23493 }, + { 156,-23493 }, { 157,-23493 }, { 158,-23493 }, { 159,-23493 }, { 160,-23493 }, + { 161,-23493 }, { 162,-23493 }, { 163,-23493 }, { 164,-23493 }, { 165,-23493 }, + { 166,-23493 }, { 167,-23493 }, { 168,-23493 }, { 169,-23493 }, { 170,-23493 }, + { 171,-23493 }, { 172,-23493 }, { 173,-23493 }, { 174,-23493 }, { 175,-23493 }, + { 176,-23493 }, { 177,-23493 }, { 178,-23493 }, { 179,-23493 }, { 180,-23493 }, + { 181,-23493 }, { 182,-23493 }, { 183,-23493 }, { 184,-23493 }, { 185,-23493 }, + { 186,-23493 }, { 187,-23493 }, { 188,-23493 }, { 189,-23493 }, { 190,-23493 }, + + { 191,-23493 }, { 192,-23493 }, { 193,-23493 }, { 194,-23493 }, { 195,-23493 }, + { 196,-23493 }, { 197,-23493 }, { 198,-23493 }, { 199,-23493 }, { 200,-23493 }, + { 201,-23493 }, { 202,-23493 }, { 203,-23493 }, { 204,-23493 }, { 205,-23493 }, + { 206,-23493 }, { 207,-23493 }, { 208,-23493 }, { 209,-23493 }, { 210,-23493 }, + { 211,-23493 }, { 212,-23493 }, { 213,-23493 }, { 214,-23493 }, { 215,-23493 }, + { 216,-23493 }, { 217,-23493 }, { 218,-23493 }, { 219,-23493 }, { 220,-23493 }, + { 221,-23493 }, { 222,-23493 }, { 223,-23493 }, { 224,-23493 }, { 225,-23493 }, + { 226,-23493 }, { 227,-23493 }, { 228,-23493 }, { 229,-23493 }, { 230,-23493 }, + { 231,-23493 }, { 232,-23493 }, { 233,-23493 }, { 234,-23493 }, { 235,-23493 }, + { 236,-23493 }, { 237,-23493 }, { 238,-23493 }, { 239,-23493 }, { 240,-23493 }, + + { 241,-23493 }, { 242,-23493 }, { 243,-23493 }, { 244,-23493 }, { 245,-23493 }, + { 246,-23493 }, { 247,-23493 }, { 248,-23493 }, { 249,-23493 }, { 250,-23493 }, + { 251,-23493 }, { 252,-23493 }, { 253,-23493 }, { 254,-23493 }, { 255,-23493 }, + { 0, 131 }, { 0,68373 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-23750 }, + { 49,-23750 }, { 50,-23750 }, { 51,-23750 }, { 52,-23750 }, { 53,-23750 }, + { 54,-23750 }, { 55,-23750 }, { 56,-23750 }, { 57,-23750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-23750 }, { 66,-23750 }, { 67,-23750 }, { 68,-23750 }, + { 69,-23750 }, { 70,-23750 }, { 71,-23750 }, { 72,-23750 }, { 73,-23750 }, + { 74,-23750 }, { 75,-23750 }, { 76,15939 }, { 77,-23750 }, { 78,-23750 }, + { 79,-23750 }, { 80,-23750 }, { 81,-23750 }, { 82,-23750 }, { 83,-23750 }, + + { 84,-23750 }, { 85,-23750 }, { 86,-23750 }, { 87,-23750 }, { 88,-23750 }, + { 89,-23750 }, { 90,-23750 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-23750 }, { 0, 0 }, { 97,-23750 }, { 98,-23750 }, + { 99,-23750 }, { 100,-23750 }, { 101,-23750 }, { 102,-23750 }, { 103,-23750 }, + { 104,-23750 }, { 105,-23750 }, { 106,-23750 }, { 107,-23750 }, { 108,15939 }, + { 109,-23750 }, { 110,-23750 }, { 111,-23750 }, { 112,-23750 }, { 113,-23750 }, + { 114,-23750 }, { 115,-23750 }, { 116,-23750 }, { 117,-23750 }, { 118,-23750 }, + { 119,-23750 }, { 120,-23750 }, { 121,-23750 }, { 122,-23750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-23750 }, { 128,-23750 }, + { 129,-23750 }, { 130,-23750 }, { 131,-23750 }, { 132,-23750 }, { 133,-23750 }, + + { 134,-23750 }, { 135,-23750 }, { 136,-23750 }, { 137,-23750 }, { 138,-23750 }, + { 139,-23750 }, { 140,-23750 }, { 141,-23750 }, { 142,-23750 }, { 143,-23750 }, + { 144,-23750 }, { 145,-23750 }, { 146,-23750 }, { 147,-23750 }, { 148,-23750 }, + { 149,-23750 }, { 150,-23750 }, { 151,-23750 }, { 152,-23750 }, { 153,-23750 }, + { 154,-23750 }, { 155,-23750 }, { 156,-23750 }, { 157,-23750 }, { 158,-23750 }, + { 159,-23750 }, { 160,-23750 }, { 161,-23750 }, { 162,-23750 }, { 163,-23750 }, + { 164,-23750 }, { 165,-23750 }, { 166,-23750 }, { 167,-23750 }, { 168,-23750 }, + { 169,-23750 }, { 170,-23750 }, { 171,-23750 }, { 172,-23750 }, { 173,-23750 }, + { 174,-23750 }, { 175,-23750 }, { 176,-23750 }, { 177,-23750 }, { 178,-23750 }, + { 179,-23750 }, { 180,-23750 }, { 181,-23750 }, { 182,-23750 }, { 183,-23750 }, + + { 184,-23750 }, { 185,-23750 }, { 186,-23750 }, { 187,-23750 }, { 188,-23750 }, + { 189,-23750 }, { 190,-23750 }, { 191,-23750 }, { 192,-23750 }, { 193,-23750 }, + { 194,-23750 }, { 195,-23750 }, { 196,-23750 }, { 197,-23750 }, { 198,-23750 }, + { 199,-23750 }, { 200,-23750 }, { 201,-23750 }, { 202,-23750 }, { 203,-23750 }, + { 204,-23750 }, { 205,-23750 }, { 206,-23750 }, { 207,-23750 }, { 208,-23750 }, + { 209,-23750 }, { 210,-23750 }, { 211,-23750 }, { 212,-23750 }, { 213,-23750 }, + { 214,-23750 }, { 215,-23750 }, { 216,-23750 }, { 217,-23750 }, { 218,-23750 }, + { 219,-23750 }, { 220,-23750 }, { 221,-23750 }, { 222,-23750 }, { 223,-23750 }, + { 224,-23750 }, { 225,-23750 }, { 226,-23750 }, { 227,-23750 }, { 228,-23750 }, + { 229,-23750 }, { 230,-23750 }, { 231,-23750 }, { 232,-23750 }, { 233,-23750 }, + + { 234,-23750 }, { 235,-23750 }, { 236,-23750 }, { 237,-23750 }, { 238,-23750 }, + { 239,-23750 }, { 240,-23750 }, { 241,-23750 }, { 242,-23750 }, { 243,-23750 }, + { 244,-23750 }, { 245,-23750 }, { 246,-23750 }, { 247,-23750 }, { 248,-23750 }, + { 249,-23750 }, { 250,-23750 }, { 251,-23750 }, { 252,-23750 }, { 253,-23750 }, + { 254,-23750 }, { 255,-23750 }, { 0, 131 }, { 0,68116 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-24007 }, { 49,-24007 }, { 50,-24007 }, { 51,-24007 }, + { 52,-24007 }, { 53,-24007 }, { 54,-24007 }, { 55,-24007 }, { 56,-24007 }, + { 57,-24007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-24007 }, { 66,-24007 }, + { 67,-24007 }, { 68,-24007 }, { 69,-24007 }, { 70,-24007 }, { 71,-24007 }, + { 72,-24007 }, { 73,-24007 }, { 74,-24007 }, { 75,-24007 }, { 76,-24007 }, + + { 77,-24007 }, { 78,-24007 }, { 79,-24007 }, { 80,-24007 }, { 81,-24007 }, + { 82,-24007 }, { 83,-24007 }, { 84,-24007 }, { 85,15939 }, { 86,-24007 }, + { 87,-24007 }, { 88,-24007 }, { 89,-24007 }, { 90,-24007 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-24007 }, { 0, 0 }, + { 97,-24007 }, { 98,-24007 }, { 99,-24007 }, { 100,-24007 }, { 101,-24007 }, + { 102,-24007 }, { 103,-24007 }, { 104,-24007 }, { 105,-24007 }, { 106,-24007 }, + { 107,-24007 }, { 108,-24007 }, { 109,-24007 }, { 110,-24007 }, { 111,-24007 }, + { 112,-24007 }, { 113,-24007 }, { 114,-24007 }, { 115,-24007 }, { 116,-24007 }, + { 117,15939 }, { 118,-24007 }, { 119,-24007 }, { 120,-24007 }, { 121,-24007 }, + { 122,-24007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-24007 }, { 128,-24007 }, { 129,-24007 }, { 130,-24007 }, { 131,-24007 }, + { 132,-24007 }, { 133,-24007 }, { 134,-24007 }, { 135,-24007 }, { 136,-24007 }, + { 137,-24007 }, { 138,-24007 }, { 139,-24007 }, { 140,-24007 }, { 141,-24007 }, + { 142,-24007 }, { 143,-24007 }, { 144,-24007 }, { 145,-24007 }, { 146,-24007 }, + { 147,-24007 }, { 148,-24007 }, { 149,-24007 }, { 150,-24007 }, { 151,-24007 }, + { 152,-24007 }, { 153,-24007 }, { 154,-24007 }, { 155,-24007 }, { 156,-24007 }, + { 157,-24007 }, { 158,-24007 }, { 159,-24007 }, { 160,-24007 }, { 161,-24007 }, + { 162,-24007 }, { 163,-24007 }, { 164,-24007 }, { 165,-24007 }, { 166,-24007 }, + { 167,-24007 }, { 168,-24007 }, { 169,-24007 }, { 170,-24007 }, { 171,-24007 }, + { 172,-24007 }, { 173,-24007 }, { 174,-24007 }, { 175,-24007 }, { 176,-24007 }, + + { 177,-24007 }, { 178,-24007 }, { 179,-24007 }, { 180,-24007 }, { 181,-24007 }, + { 182,-24007 }, { 183,-24007 }, { 184,-24007 }, { 185,-24007 }, { 186,-24007 }, + { 187,-24007 }, { 188,-24007 }, { 189,-24007 }, { 190,-24007 }, { 191,-24007 }, + { 192,-24007 }, { 193,-24007 }, { 194,-24007 }, { 195,-24007 }, { 196,-24007 }, + { 197,-24007 }, { 198,-24007 }, { 199,-24007 }, { 200,-24007 }, { 201,-24007 }, + { 202,-24007 }, { 203,-24007 }, { 204,-24007 }, { 205,-24007 }, { 206,-24007 }, + { 207,-24007 }, { 208,-24007 }, { 209,-24007 }, { 210,-24007 }, { 211,-24007 }, + { 212,-24007 }, { 213,-24007 }, { 214,-24007 }, { 215,-24007 }, { 216,-24007 }, + { 217,-24007 }, { 218,-24007 }, { 219,-24007 }, { 220,-24007 }, { 221,-24007 }, + { 222,-24007 }, { 223,-24007 }, { 224,-24007 }, { 225,-24007 }, { 226,-24007 }, + + { 227,-24007 }, { 228,-24007 }, { 229,-24007 }, { 230,-24007 }, { 231,-24007 }, + { 232,-24007 }, { 233,-24007 }, { 234,-24007 }, { 235,-24007 }, { 236,-24007 }, + { 237,-24007 }, { 238,-24007 }, { 239,-24007 }, { 240,-24007 }, { 241,-24007 }, + { 242,-24007 }, { 243,-24007 }, { 244,-24007 }, { 245,-24007 }, { 246,-24007 }, + { 247,-24007 }, { 248,-24007 }, { 249,-24007 }, { 250,-24007 }, { 251,-24007 }, + { 252,-24007 }, { 253,-24007 }, { 254,-24007 }, { 255,-24007 }, { 0, 131 }, + { 0,67859 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-24264 }, { 49,-24264 }, + { 50,-24264 }, { 51,-24264 }, { 52,-24264 }, { 53,-24264 }, { 54,-24264 }, + { 55,-24264 }, { 56,-24264 }, { 57,-24264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-24264 }, { 66,-24264 }, { 67,-24264 }, { 68,-24264 }, { 69,-24264 }, + + { 70,-24264 }, { 71,-24264 }, { 72,-24264 }, { 73,-24264 }, { 74,-24264 }, + { 75,-24264 }, { 76,-24264 }, { 77,-24264 }, { 78,-24264 }, { 79,-24264 }, + { 80,-24264 }, { 81,-24264 }, { 82,-24264 }, { 83,-24264 }, { 84,-24264 }, + { 85,15939 }, { 86,-24264 }, { 87,-24264 }, { 88,-24264 }, { 89,-24264 }, + { 90,-24264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-24264 }, { 0, 0 }, { 97,-24264 }, { 98,-24264 }, { 99,-24264 }, + { 100,-24264 }, { 101,-24264 }, { 102,-24264 }, { 103,-24264 }, { 104,-24264 }, + { 105,-24264 }, { 106,-24264 }, { 107,-24264 }, { 108,-24264 }, { 109,-24264 }, + { 110,-24264 }, { 111,-24264 }, { 112,-24264 }, { 113,-24264 }, { 114,-24264 }, + { 115,-24264 }, { 116,-24264 }, { 117,15939 }, { 118,-24264 }, { 119,-24264 }, + + { 120,-24264 }, { 121,-24264 }, { 122,-24264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-24264 }, { 128,-24264 }, { 129,-24264 }, + { 130,-24264 }, { 131,-24264 }, { 132,-24264 }, { 133,-24264 }, { 134,-24264 }, + { 135,-24264 }, { 136,-24264 }, { 137,-24264 }, { 138,-24264 }, { 139,-24264 }, + { 140,-24264 }, { 141,-24264 }, { 142,-24264 }, { 143,-24264 }, { 144,-24264 }, + { 145,-24264 }, { 146,-24264 }, { 147,-24264 }, { 148,-24264 }, { 149,-24264 }, + { 150,-24264 }, { 151,-24264 }, { 152,-24264 }, { 153,-24264 }, { 154,-24264 }, + { 155,-24264 }, { 156,-24264 }, { 157,-24264 }, { 158,-24264 }, { 159,-24264 }, + { 160,-24264 }, { 161,-24264 }, { 162,-24264 }, { 163,-24264 }, { 164,-24264 }, + { 165,-24264 }, { 166,-24264 }, { 167,-24264 }, { 168,-24264 }, { 169,-24264 }, + + { 170,-24264 }, { 171,-24264 }, { 172,-24264 }, { 173,-24264 }, { 174,-24264 }, + { 175,-24264 }, { 176,-24264 }, { 177,-24264 }, { 178,-24264 }, { 179,-24264 }, + { 180,-24264 }, { 181,-24264 }, { 182,-24264 }, { 183,-24264 }, { 184,-24264 }, + { 185,-24264 }, { 186,-24264 }, { 187,-24264 }, { 188,-24264 }, { 189,-24264 }, + { 190,-24264 }, { 191,-24264 }, { 192,-24264 }, { 193,-24264 }, { 194,-24264 }, + { 195,-24264 }, { 196,-24264 }, { 197,-24264 }, { 198,-24264 }, { 199,-24264 }, + { 200,-24264 }, { 201,-24264 }, { 202,-24264 }, { 203,-24264 }, { 204,-24264 }, + { 205,-24264 }, { 206,-24264 }, { 207,-24264 }, { 208,-24264 }, { 209,-24264 }, + { 210,-24264 }, { 211,-24264 }, { 212,-24264 }, { 213,-24264 }, { 214,-24264 }, + { 215,-24264 }, { 216,-24264 }, { 217,-24264 }, { 218,-24264 }, { 219,-24264 }, + + { 220,-24264 }, { 221,-24264 }, { 222,-24264 }, { 223,-24264 }, { 224,-24264 }, + { 225,-24264 }, { 226,-24264 }, { 227,-24264 }, { 228,-24264 }, { 229,-24264 }, + { 230,-24264 }, { 231,-24264 }, { 232,-24264 }, { 233,-24264 }, { 234,-24264 }, + { 235,-24264 }, { 236,-24264 }, { 237,-24264 }, { 238,-24264 }, { 239,-24264 }, + { 240,-24264 }, { 241,-24264 }, { 242,-24264 }, { 243,-24264 }, { 244,-24264 }, + { 245,-24264 }, { 246,-24264 }, { 247,-24264 }, { 248,-24264 }, { 249,-24264 }, + { 250,-24264 }, { 251,-24264 }, { 252,-24264 }, { 253,-24264 }, { 254,-24264 }, + { 255,-24264 }, { 0, 131 }, { 0,67602 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-24521 }, { 49,-24521 }, { 50,-24521 }, { 51,-24521 }, { 52,-24521 }, + { 53,-24521 }, { 54,-24521 }, { 55,-24521 }, { 56,-24521 }, { 57,-24521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-24521 }, { 66,-24521 }, { 67,-24521 }, + { 68,-24521 }, { 69,-24521 }, { 70,-24521 }, { 71,-24521 }, { 72,-24521 }, + { 73,-24521 }, { 74,-24521 }, { 75,-24521 }, { 76,-24521 }, { 77,-24521 }, + { 78,-24521 }, { 79,-24521 }, { 80,-24521 }, { 81,-24521 }, { 82,-24521 }, + { 83,-24521 }, { 84,15939 }, { 85,-24521 }, { 86,-24521 }, { 87,-24521 }, + { 88,-24521 }, { 89,-24521 }, { 90,-24521 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-24521 }, { 0, 0 }, { 97,-24521 }, + { 98,-24521 }, { 99,-24521 }, { 100,-24521 }, { 101,-24521 }, { 102,-24521 }, + { 103,-24521 }, { 104,-24521 }, { 105,-24521 }, { 106,-24521 }, { 107,-24521 }, + { 108,-24521 }, { 109,-24521 }, { 110,-24521 }, { 111,-24521 }, { 112,-24521 }, + + { 113,-24521 }, { 114,-24521 }, { 115,-24521 }, { 116,15939 }, { 117,-24521 }, + { 118,-24521 }, { 119,-24521 }, { 120,-24521 }, { 121,-24521 }, { 122,-24521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-24521 }, + { 128,-24521 }, { 129,-24521 }, { 130,-24521 }, { 131,-24521 }, { 132,-24521 }, + { 133,-24521 }, { 134,-24521 }, { 135,-24521 }, { 136,-24521 }, { 137,-24521 }, + { 138,-24521 }, { 139,-24521 }, { 140,-24521 }, { 141,-24521 }, { 142,-24521 }, + { 143,-24521 }, { 144,-24521 }, { 145,-24521 }, { 146,-24521 }, { 147,-24521 }, + { 148,-24521 }, { 149,-24521 }, { 150,-24521 }, { 151,-24521 }, { 152,-24521 }, + { 153,-24521 }, { 154,-24521 }, { 155,-24521 }, { 156,-24521 }, { 157,-24521 }, + { 158,-24521 }, { 159,-24521 }, { 160,-24521 }, { 161,-24521 }, { 162,-24521 }, + + { 163,-24521 }, { 164,-24521 }, { 165,-24521 }, { 166,-24521 }, { 167,-24521 }, + { 168,-24521 }, { 169,-24521 }, { 170,-24521 }, { 171,-24521 }, { 172,-24521 }, + { 173,-24521 }, { 174,-24521 }, { 175,-24521 }, { 176,-24521 }, { 177,-24521 }, + { 178,-24521 }, { 179,-24521 }, { 180,-24521 }, { 181,-24521 }, { 182,-24521 }, + { 183,-24521 }, { 184,-24521 }, { 185,-24521 }, { 186,-24521 }, { 187,-24521 }, + { 188,-24521 }, { 189,-24521 }, { 190,-24521 }, { 191,-24521 }, { 192,-24521 }, + { 193,-24521 }, { 194,-24521 }, { 195,-24521 }, { 196,-24521 }, { 197,-24521 }, + { 198,-24521 }, { 199,-24521 }, { 200,-24521 }, { 201,-24521 }, { 202,-24521 }, + { 203,-24521 }, { 204,-24521 }, { 205,-24521 }, { 206,-24521 }, { 207,-24521 }, + { 208,-24521 }, { 209,-24521 }, { 210,-24521 }, { 211,-24521 }, { 212,-24521 }, + + { 213,-24521 }, { 214,-24521 }, { 215,-24521 }, { 216,-24521 }, { 217,-24521 }, + { 218,-24521 }, { 219,-24521 }, { 220,-24521 }, { 221,-24521 }, { 222,-24521 }, + { 223,-24521 }, { 224,-24521 }, { 225,-24521 }, { 226,-24521 }, { 227,-24521 }, + { 228,-24521 }, { 229,-24521 }, { 230,-24521 }, { 231,-24521 }, { 232,-24521 }, + { 233,-24521 }, { 234,-24521 }, { 235,-24521 }, { 236,-24521 }, { 237,-24521 }, + { 238,-24521 }, { 239,-24521 }, { 240,-24521 }, { 241,-24521 }, { 242,-24521 }, + { 243,-24521 }, { 244,-24521 }, { 245,-24521 }, { 246,-24521 }, { 247,-24521 }, + { 248,-24521 }, { 249,-24521 }, { 250,-24521 }, { 251,-24521 }, { 252,-24521 }, + { 253,-24521 }, { 254,-24521 }, { 255,-24521 }, { 0, 131 }, { 0,67345 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-24778 }, { 49,-24778 }, { 50,-24778 }, + { 51,-24778 }, { 52,-24778 }, { 53,-24778 }, { 54,-24778 }, { 55,-24778 }, + + { 56,-24778 }, { 57,-24778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-24778 }, + { 66,-24778 }, { 67,-24778 }, { 68,-24778 }, { 69,-24778 }, { 70,-24778 }, + { 71,-24778 }, { 72,-24778 }, { 73,-24778 }, { 74,-24778 }, { 75,-24778 }, + { 76,-24778 }, { 77,-24778 }, { 78,-24778 }, { 79,-24778 }, { 80,-24778 }, + { 81,-24778 }, { 82,-24778 }, { 83,-24778 }, { 84,15939 }, { 85,-24778 }, + { 86,-24778 }, { 87,-24778 }, { 88,-24778 }, { 89,-24778 }, { 90,-24778 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-24778 }, + { 0, 0 }, { 97,-24778 }, { 98,-24778 }, { 99,-24778 }, { 100,-24778 }, + { 101,-24778 }, { 102,-24778 }, { 103,-24778 }, { 104,-24778 }, { 105,-24778 }, + + { 106,-24778 }, { 107,-24778 }, { 108,-24778 }, { 109,-24778 }, { 110,-24778 }, + { 111,-24778 }, { 112,-24778 }, { 113,-24778 }, { 114,-24778 }, { 115,-24778 }, + { 116,15939 }, { 117,-24778 }, { 118,-24778 }, { 119,-24778 }, { 120,-24778 }, + { 121,-24778 }, { 122,-24778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-24778 }, { 128,-24778 }, { 129,-24778 }, { 130,-24778 }, + { 131,-24778 }, { 132,-24778 }, { 133,-24778 }, { 134,-24778 }, { 135,-24778 }, + { 136,-24778 }, { 137,-24778 }, { 138,-24778 }, { 139,-24778 }, { 140,-24778 }, + { 141,-24778 }, { 142,-24778 }, { 143,-24778 }, { 144,-24778 }, { 145,-24778 }, + { 146,-24778 }, { 147,-24778 }, { 148,-24778 }, { 149,-24778 }, { 150,-24778 }, + { 151,-24778 }, { 152,-24778 }, { 153,-24778 }, { 154,-24778 }, { 155,-24778 }, + + { 156,-24778 }, { 157,-24778 }, { 158,-24778 }, { 159,-24778 }, { 160,-24778 }, + { 161,-24778 }, { 162,-24778 }, { 163,-24778 }, { 164,-24778 }, { 165,-24778 }, + { 166,-24778 }, { 167,-24778 }, { 168,-24778 }, { 169,-24778 }, { 170,-24778 }, + { 171,-24778 }, { 172,-24778 }, { 173,-24778 }, { 174,-24778 }, { 175,-24778 }, + { 176,-24778 }, { 177,-24778 }, { 178,-24778 }, { 179,-24778 }, { 180,-24778 }, + { 181,-24778 }, { 182,-24778 }, { 183,-24778 }, { 184,-24778 }, { 185,-24778 }, + { 186,-24778 }, { 187,-24778 }, { 188,-24778 }, { 189,-24778 }, { 190,-24778 }, + { 191,-24778 }, { 192,-24778 }, { 193,-24778 }, { 194,-24778 }, { 195,-24778 }, + { 196,-24778 }, { 197,-24778 }, { 198,-24778 }, { 199,-24778 }, { 200,-24778 }, + { 201,-24778 }, { 202,-24778 }, { 203,-24778 }, { 204,-24778 }, { 205,-24778 }, + + { 206,-24778 }, { 207,-24778 }, { 208,-24778 }, { 209,-24778 }, { 210,-24778 }, + { 211,-24778 }, { 212,-24778 }, { 213,-24778 }, { 214,-24778 }, { 215,-24778 }, + { 216,-24778 }, { 217,-24778 }, { 218,-24778 }, { 219,-24778 }, { 220,-24778 }, + { 221,-24778 }, { 222,-24778 }, { 223,-24778 }, { 224,-24778 }, { 225,-24778 }, + { 226,-24778 }, { 227,-24778 }, { 228,-24778 }, { 229,-24778 }, { 230,-24778 }, + { 231,-24778 }, { 232,-24778 }, { 233,-24778 }, { 234,-24778 }, { 235,-24778 }, + { 236,-24778 }, { 237,-24778 }, { 238,-24778 }, { 239,-24778 }, { 240,-24778 }, + { 241,-24778 }, { 242,-24778 }, { 243,-24778 }, { 244,-24778 }, { 245,-24778 }, + { 246,-24778 }, { 247,-24778 }, { 248,-24778 }, { 249,-24778 }, { 250,-24778 }, + { 251,-24778 }, { 252,-24778 }, { 253,-24778 }, { 254,-24778 }, { 255,-24778 }, + + { 0, 131 }, { 0,67088 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-25035 }, + + { 49,-25035 }, { 50,-25035 }, { 51,-25035 }, { 52,-25035 }, { 53,-25035 }, + { 54,-25035 }, { 55,-25035 }, { 56,-25035 }, { 57,-25035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-25035 }, { 66,-25035 }, { 67,-25035 }, { 68,-25035 }, + { 69,-25035 }, { 70,-25035 }, { 71,-25035 }, { 72,-25035 }, { 73,-25035 }, + { 74,-25035 }, { 75,-25035 }, { 76,-25035 }, { 77,-25035 }, { 78,-25035 }, + { 79,15939 }, { 80,-25035 }, { 81,-25035 }, { 82,-25035 }, { 83,-25035 }, + { 84,-25035 }, { 85,-25035 }, { 86,-25035 }, { 87,-25035 }, { 88,-25035 }, + { 89,-25035 }, { 90,-25035 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-25035 }, { 0, 0 }, { 97,-25035 }, { 98,-25035 }, + + { 99,-25035 }, { 100,-25035 }, { 101,-25035 }, { 102,-25035 }, { 103,-25035 }, + { 104,-25035 }, { 105,-25035 }, { 106,-25035 }, { 107,-25035 }, { 108,-25035 }, + { 109,-25035 }, { 110,-25035 }, { 111,15939 }, { 112,-25035 }, { 113,-25035 }, + { 114,-25035 }, { 115,-25035 }, { 116,-25035 }, { 117,-25035 }, { 118,-25035 }, + { 119,-25035 }, { 120,-25035 }, { 121,-25035 }, { 122,-25035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-25035 }, { 128,-25035 }, + { 129,-25035 }, { 130,-25035 }, { 131,-25035 }, { 132,-25035 }, { 133,-25035 }, + { 134,-25035 }, { 135,-25035 }, { 136,-25035 }, { 137,-25035 }, { 138,-25035 }, + { 139,-25035 }, { 140,-25035 }, { 141,-25035 }, { 142,-25035 }, { 143,-25035 }, + { 144,-25035 }, { 145,-25035 }, { 146,-25035 }, { 147,-25035 }, { 148,-25035 }, + + { 149,-25035 }, { 150,-25035 }, { 151,-25035 }, { 152,-25035 }, { 153,-25035 }, + { 154,-25035 }, { 155,-25035 }, { 156,-25035 }, { 157,-25035 }, { 158,-25035 }, + { 159,-25035 }, { 160,-25035 }, { 161,-25035 }, { 162,-25035 }, { 163,-25035 }, + { 164,-25035 }, { 165,-25035 }, { 166,-25035 }, { 167,-25035 }, { 168,-25035 }, + { 169,-25035 }, { 170,-25035 }, { 171,-25035 }, { 172,-25035 }, { 173,-25035 }, + { 174,-25035 }, { 175,-25035 }, { 176,-25035 }, { 177,-25035 }, { 178,-25035 }, + { 179,-25035 }, { 180,-25035 }, { 181,-25035 }, { 182,-25035 }, { 183,-25035 }, + { 184,-25035 }, { 185,-25035 }, { 186,-25035 }, { 187,-25035 }, { 188,-25035 }, + { 189,-25035 }, { 190,-25035 }, { 191,-25035 }, { 192,-25035 }, { 193,-25035 }, + { 194,-25035 }, { 195,-25035 }, { 196,-25035 }, { 197,-25035 }, { 198,-25035 }, + + { 199,-25035 }, { 200,-25035 }, { 201,-25035 }, { 202,-25035 }, { 203,-25035 }, + { 204,-25035 }, { 205,-25035 }, { 206,-25035 }, { 207,-25035 }, { 208,-25035 }, + { 209,-25035 }, { 210,-25035 }, { 211,-25035 }, { 212,-25035 }, { 213,-25035 }, + { 214,-25035 }, { 215,-25035 }, { 216,-25035 }, { 217,-25035 }, { 218,-25035 }, + { 219,-25035 }, { 220,-25035 }, { 221,-25035 }, { 222,-25035 }, { 223,-25035 }, + { 224,-25035 }, { 225,-25035 }, { 226,-25035 }, { 227,-25035 }, { 228,-25035 }, + { 229,-25035 }, { 230,-25035 }, { 231,-25035 }, { 232,-25035 }, { 233,-25035 }, + { 234,-25035 }, { 235,-25035 }, { 236,-25035 }, { 237,-25035 }, { 238,-25035 }, + { 239,-25035 }, { 240,-25035 }, { 241,-25035 }, { 242,-25035 }, { 243,-25035 }, + { 244,-25035 }, { 245,-25035 }, { 246,-25035 }, { 247,-25035 }, { 248,-25035 }, + + { 249,-25035 }, { 250,-25035 }, { 251,-25035 }, { 252,-25035 }, { 253,-25035 }, + { 254,-25035 }, { 255,-25035 }, { 0, 131 }, { 0,66831 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-25292 }, { 49,-25292 }, { 50,-25292 }, { 51,-25292 }, + { 52,-25292 }, { 53,-25292 }, { 54,-25292 }, { 55,-25292 }, { 56,-25292 }, + { 57,-25292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-25292 }, { 66,-25292 }, + { 67,-25292 }, { 68,-25292 }, { 69,-25292 }, { 70,-25292 }, { 71,-25292 }, + { 72,-25292 }, { 73,15939 }, { 74,-25292 }, { 75,-25292 }, { 76,-25292 }, + { 77,-25292 }, { 78,-25292 }, { 79,-25292 }, { 80,-25292 }, { 81,-25292 }, + { 82,-25292 }, { 83,-25292 }, { 84,-25292 }, { 85,-25292 }, { 86,-25292 }, + { 87,-25292 }, { 88,-25292 }, { 89,-25292 }, { 90,-25292 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-25292 }, { 0, 0 }, + { 97,-25292 }, { 98,-25292 }, { 99,-25292 }, { 100,-25292 }, { 101,-25292 }, + { 102,-25292 }, { 103,-25292 }, { 104,-25292 }, { 105,15939 }, { 106,-25292 }, + { 107,-25292 }, { 108,-25292 }, { 109,-25292 }, { 110,-25292 }, { 111,-25292 }, + { 112,-25292 }, { 113,-25292 }, { 114,-25292 }, { 115,-25292 }, { 116,-25292 }, + { 117,-25292 }, { 118,-25292 }, { 119,-25292 }, { 120,-25292 }, { 121,-25292 }, + { 122,-25292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-25292 }, { 128,-25292 }, { 129,-25292 }, { 130,-25292 }, { 131,-25292 }, + { 132,-25292 }, { 133,-25292 }, { 134,-25292 }, { 135,-25292 }, { 136,-25292 }, + { 137,-25292 }, { 138,-25292 }, { 139,-25292 }, { 140,-25292 }, { 141,-25292 }, + + { 142,-25292 }, { 143,-25292 }, { 144,-25292 }, { 145,-25292 }, { 146,-25292 }, + { 147,-25292 }, { 148,-25292 }, { 149,-25292 }, { 150,-25292 }, { 151,-25292 }, + { 152,-25292 }, { 153,-25292 }, { 154,-25292 }, { 155,-25292 }, { 156,-25292 }, + { 157,-25292 }, { 158,-25292 }, { 159,-25292 }, { 160,-25292 }, { 161,-25292 }, + { 162,-25292 }, { 163,-25292 }, { 164,-25292 }, { 165,-25292 }, { 166,-25292 }, + { 167,-25292 }, { 168,-25292 }, { 169,-25292 }, { 170,-25292 }, { 171,-25292 }, + { 172,-25292 }, { 173,-25292 }, { 174,-25292 }, { 175,-25292 }, { 176,-25292 }, + { 177,-25292 }, { 178,-25292 }, { 179,-25292 }, { 180,-25292 }, { 181,-25292 }, + { 182,-25292 }, { 183,-25292 }, { 184,-25292 }, { 185,-25292 }, { 186,-25292 }, + { 187,-25292 }, { 188,-25292 }, { 189,-25292 }, { 190,-25292 }, { 191,-25292 }, + + { 192,-25292 }, { 193,-25292 }, { 194,-25292 }, { 195,-25292 }, { 196,-25292 }, + { 197,-25292 }, { 198,-25292 }, { 199,-25292 }, { 200,-25292 }, { 201,-25292 }, + { 202,-25292 }, { 203,-25292 }, { 204,-25292 }, { 205,-25292 }, { 206,-25292 }, + { 207,-25292 }, { 208,-25292 }, { 209,-25292 }, { 210,-25292 }, { 211,-25292 }, + { 212,-25292 }, { 213,-25292 }, { 214,-25292 }, { 215,-25292 }, { 216,-25292 }, + { 217,-25292 }, { 218,-25292 }, { 219,-25292 }, { 220,-25292 }, { 221,-25292 }, + { 222,-25292 }, { 223,-25292 }, { 224,-25292 }, { 225,-25292 }, { 226,-25292 }, + { 227,-25292 }, { 228,-25292 }, { 229,-25292 }, { 230,-25292 }, { 231,-25292 }, + { 232,-25292 }, { 233,-25292 }, { 234,-25292 }, { 235,-25292 }, { 236,-25292 }, + { 237,-25292 }, { 238,-25292 }, { 239,-25292 }, { 240,-25292 }, { 241,-25292 }, + + { 242,-25292 }, { 243,-25292 }, { 244,-25292 }, { 245,-25292 }, { 246,-25292 }, + { 247,-25292 }, { 248,-25292 }, { 249,-25292 }, { 250,-25292 }, { 251,-25292 }, + { 252,-25292 }, { 253,-25292 }, { 254,-25292 }, { 255,-25292 }, { 0, 56 }, + { 0,66574 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-25549 }, { 49,-25549 }, + { 50,-25549 }, { 51,-25549 }, { 52,-25549 }, { 53,-25549 }, { 54,-25549 }, + { 55,-25549 }, { 56,-25549 }, { 57,-25549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-25549 }, { 66,-25549 }, { 67,-25549 }, { 68,-25549 }, { 69,-25549 }, + { 70,-25549 }, { 71,-25549 }, { 72,-25549 }, { 73,-25549 }, { 74,-25549 }, + { 75,-25549 }, { 76,-25549 }, { 77,-25549 }, { 78,-25549 }, { 79,-25549 }, + { 80,-25549 }, { 81,-25549 }, { 82,-25549 }, { 83,-25549 }, { 84,-25549 }, + + { 85,-25549 }, { 86,-25549 }, { 87,-25549 }, { 88,-25549 }, { 89,-25549 }, + { 90,-25549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-25549 }, { 0, 0 }, { 97,-25549 }, { 98,-25549 }, { 99,-25549 }, + { 100,-25549 }, { 101,-25549 }, { 102,-25549 }, { 103,-25549 }, { 104,-25549 }, + { 105,-25549 }, { 106,-25549 }, { 107,-25549 }, { 108,-25549 }, { 109,-25549 }, + { 110,-25549 }, { 111,-25549 }, { 112,-25549 }, { 113,-25549 }, { 114,-25549 }, + { 115,-25549 }, { 116,-25549 }, { 117,-25549 }, { 118,-25549 }, { 119,-25549 }, + { 120,-25549 }, { 121,-25549 }, { 122,-25549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-25549 }, { 128,-25549 }, { 129,-25549 }, + { 130,-25549 }, { 131,-25549 }, { 132,-25549 }, { 133,-25549 }, { 134,-25549 }, + + { 135,-25549 }, { 136,-25549 }, { 137,-25549 }, { 138,-25549 }, { 139,-25549 }, + { 140,-25549 }, { 141,-25549 }, { 142,-25549 }, { 143,-25549 }, { 144,-25549 }, + { 145,-25549 }, { 146,-25549 }, { 147,-25549 }, { 148,-25549 }, { 149,-25549 }, + { 150,-25549 }, { 151,-25549 }, { 152,-25549 }, { 153,-25549 }, { 154,-25549 }, + { 155,-25549 }, { 156,-25549 }, { 157,-25549 }, { 158,-25549 }, { 159,-25549 }, + { 160,-25549 }, { 161,-25549 }, { 162,-25549 }, { 163,-25549 }, { 164,-25549 }, + { 165,-25549 }, { 166,-25549 }, { 167,-25549 }, { 168,-25549 }, { 169,-25549 }, + { 170,-25549 }, { 171,-25549 }, { 172,-25549 }, { 173,-25549 }, { 174,-25549 }, + { 175,-25549 }, { 176,-25549 }, { 177,-25549 }, { 178,-25549 }, { 179,-25549 }, + { 180,-25549 }, { 181,-25549 }, { 182,-25549 }, { 183,-25549 }, { 184,-25549 }, + + { 185,-25549 }, { 186,-25549 }, { 187,-25549 }, { 188,-25549 }, { 189,-25549 }, + { 190,-25549 }, { 191,-25549 }, { 192,-25549 }, { 193,-25549 }, { 194,-25549 }, + { 195,-25549 }, { 196,-25549 }, { 197,-25549 }, { 198,-25549 }, { 199,-25549 }, + { 200,-25549 }, { 201,-25549 }, { 202,-25549 }, { 203,-25549 }, { 204,-25549 }, + { 205,-25549 }, { 206,-25549 }, { 207,-25549 }, { 208,-25549 }, { 209,-25549 }, + { 210,-25549 }, { 211,-25549 }, { 212,-25549 }, { 213,-25549 }, { 214,-25549 }, + { 215,-25549 }, { 216,-25549 }, { 217,-25549 }, { 218,-25549 }, { 219,-25549 }, + { 220,-25549 }, { 221,-25549 }, { 222,-25549 }, { 223,-25549 }, { 224,-25549 }, + { 225,-25549 }, { 226,-25549 }, { 227,-25549 }, { 228,-25549 }, { 229,-25549 }, + { 230,-25549 }, { 231,-25549 }, { 232,-25549 }, { 233,-25549 }, { 234,-25549 }, + + { 235,-25549 }, { 236,-25549 }, { 237,-25549 }, { 238,-25549 }, { 239,-25549 }, + { 240,-25549 }, { 241,-25549 }, { 242,-25549 }, { 243,-25549 }, { 244,-25549 }, + { 245,-25549 }, { 246,-25549 }, { 247,-25549 }, { 248,-25549 }, { 249,-25549 }, + { 250,-25549 }, { 251,-25549 }, { 252,-25549 }, { 253,-25549 }, { 254,-25549 }, + { 255,-25549 }, { 0, 131 }, { 0,66317 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-25806 }, { 49,-25806 }, { 50,-25806 }, { 51,-25806 }, { 52,-25806 }, + { 53,-25806 }, { 54,-25806 }, { 55,-25806 }, { 56,-25806 }, { 57,-25806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-25806 }, { 66,-25806 }, { 67,-25806 }, + { 68,-25806 }, { 69,15682 }, { 70,-25806 }, { 71,-25806 }, { 72,-25806 }, + { 73,-25806 }, { 74,-25806 }, { 75,-25806 }, { 76,-25806 }, { 77,-25806 }, + + { 78,-25806 }, { 79,-25806 }, { 80,-25806 }, { 81,-25806 }, { 82,-25806 }, + { 83,-25806 }, { 84,-25806 }, { 85,-25806 }, { 86,-25806 }, { 87,-25806 }, + { 88,-25806 }, { 89,-25806 }, { 90,-25806 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-25806 }, { 0, 0 }, { 97,-25806 }, + { 98,-25806 }, { 99,-25806 }, { 100,-25806 }, { 101,15682 }, { 102,-25806 }, + { 103,-25806 }, { 104,-25806 }, { 105,-25806 }, { 106,-25806 }, { 107,-25806 }, + { 108,-25806 }, { 109,-25806 }, { 110,-25806 }, { 111,-25806 }, { 112,-25806 }, + { 113,-25806 }, { 114,-25806 }, { 115,-25806 }, { 116,-25806 }, { 117,-25806 }, + { 118,-25806 }, { 119,-25806 }, { 120,-25806 }, { 121,-25806 }, { 122,-25806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-25806 }, + + { 128,-25806 }, { 129,-25806 }, { 130,-25806 }, { 131,-25806 }, { 132,-25806 }, + { 133,-25806 }, { 134,-25806 }, { 135,-25806 }, { 136,-25806 }, { 137,-25806 }, + { 138,-25806 }, { 139,-25806 }, { 140,-25806 }, { 141,-25806 }, { 142,-25806 }, + { 143,-25806 }, { 144,-25806 }, { 145,-25806 }, { 146,-25806 }, { 147,-25806 }, + { 148,-25806 }, { 149,-25806 }, { 150,-25806 }, { 151,-25806 }, { 152,-25806 }, + { 153,-25806 }, { 154,-25806 }, { 155,-25806 }, { 156,-25806 }, { 157,-25806 }, + { 158,-25806 }, { 159,-25806 }, { 160,-25806 }, { 161,-25806 }, { 162,-25806 }, + { 163,-25806 }, { 164,-25806 }, { 165,-25806 }, { 166,-25806 }, { 167,-25806 }, + { 168,-25806 }, { 169,-25806 }, { 170,-25806 }, { 171,-25806 }, { 172,-25806 }, + { 173,-25806 }, { 174,-25806 }, { 175,-25806 }, { 176,-25806 }, { 177,-25806 }, + + { 178,-25806 }, { 179,-25806 }, { 180,-25806 }, { 181,-25806 }, { 182,-25806 }, + { 183,-25806 }, { 184,-25806 }, { 185,-25806 }, { 186,-25806 }, { 187,-25806 }, + { 188,-25806 }, { 189,-25806 }, { 190,-25806 }, { 191,-25806 }, { 192,-25806 }, + { 193,-25806 }, { 194,-25806 }, { 195,-25806 }, { 196,-25806 }, { 197,-25806 }, + { 198,-25806 }, { 199,-25806 }, { 200,-25806 }, { 201,-25806 }, { 202,-25806 }, + { 203,-25806 }, { 204,-25806 }, { 205,-25806 }, { 206,-25806 }, { 207,-25806 }, + { 208,-25806 }, { 209,-25806 }, { 210,-25806 }, { 211,-25806 }, { 212,-25806 }, + { 213,-25806 }, { 214,-25806 }, { 215,-25806 }, { 216,-25806 }, { 217,-25806 }, + { 218,-25806 }, { 219,-25806 }, { 220,-25806 }, { 221,-25806 }, { 222,-25806 }, + { 223,-25806 }, { 224,-25806 }, { 225,-25806 }, { 226,-25806 }, { 227,-25806 }, + + { 228,-25806 }, { 229,-25806 }, { 230,-25806 }, { 231,-25806 }, { 232,-25806 }, + { 233,-25806 }, { 234,-25806 }, { 235,-25806 }, { 236,-25806 }, { 237,-25806 }, + { 238,-25806 }, { 239,-25806 }, { 240,-25806 }, { 241,-25806 }, { 242,-25806 }, + { 243,-25806 }, { 244,-25806 }, { 245,-25806 }, { 246,-25806 }, { 247,-25806 }, + { 248,-25806 }, { 249,-25806 }, { 250,-25806 }, { 251,-25806 }, { 252,-25806 }, + { 253,-25806 }, { 254,-25806 }, { 255,-25806 }, { 0, 59 }, { 0,66060 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-26063 }, { 49,-26063 }, { 50,-26063 }, + { 51,-26063 }, { 52,-26063 }, { 53,-26063 }, { 54,-26063 }, { 55,-26063 }, + { 56,-26063 }, { 57,-26063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-26063 }, + { 66,-26063 }, { 67,-26063 }, { 68,-26063 }, { 69,-26063 }, { 70,-26063 }, + + { 71,-26063 }, { 72,-26063 }, { 73,-26063 }, { 74,-26063 }, { 75,-26063 }, + { 76,-26063 }, { 77,-26063 }, { 78,-26063 }, { 79,-26063 }, { 80,-26063 }, + { 81,-26063 }, { 82,-26063 }, { 83,-26063 }, { 84,-26063 }, { 85,-26063 }, + { 86,-26063 }, { 87,-26063 }, { 88,-26063 }, { 89,-26063 }, { 90,-26063 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-26063 }, + { 0, 0 }, { 97,-26063 }, { 98,-26063 }, { 99,-26063 }, { 100,-26063 }, + { 101,-26063 }, { 102,-26063 }, { 103,-26063 }, { 104,-26063 }, { 105,-26063 }, + { 106,-26063 }, { 107,-26063 }, { 108,-26063 }, { 109,-26063 }, { 110,-26063 }, + { 111,-26063 }, { 112,-26063 }, { 113,-26063 }, { 114,-26063 }, { 115,-26063 }, + { 116,-26063 }, { 117,-26063 }, { 118,-26063 }, { 119,-26063 }, { 120,-26063 }, + + { 121,-26063 }, { 122,-26063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-26063 }, { 128,-26063 }, { 129,-26063 }, { 130,-26063 }, + { 131,-26063 }, { 132,-26063 }, { 133,-26063 }, { 134,-26063 }, { 135,-26063 }, + { 136,-26063 }, { 137,-26063 }, { 138,-26063 }, { 139,-26063 }, { 140,-26063 }, + { 141,-26063 }, { 142,-26063 }, { 143,-26063 }, { 144,-26063 }, { 145,-26063 }, + { 146,-26063 }, { 147,-26063 }, { 148,-26063 }, { 149,-26063 }, { 150,-26063 }, + { 151,-26063 }, { 152,-26063 }, { 153,-26063 }, { 154,-26063 }, { 155,-26063 }, + { 156,-26063 }, { 157,-26063 }, { 158,-26063 }, { 159,-26063 }, { 160,-26063 }, + { 161,-26063 }, { 162,-26063 }, { 163,-26063 }, { 164,-26063 }, { 165,-26063 }, + { 166,-26063 }, { 167,-26063 }, { 168,-26063 }, { 169,-26063 }, { 170,-26063 }, + + { 171,-26063 }, { 172,-26063 }, { 173,-26063 }, { 174,-26063 }, { 175,-26063 }, + { 176,-26063 }, { 177,-26063 }, { 178,-26063 }, { 179,-26063 }, { 180,-26063 }, + { 181,-26063 }, { 182,-26063 }, { 183,-26063 }, { 184,-26063 }, { 185,-26063 }, + { 186,-26063 }, { 187,-26063 }, { 188,-26063 }, { 189,-26063 }, { 190,-26063 }, + { 191,-26063 }, { 192,-26063 }, { 193,-26063 }, { 194,-26063 }, { 195,-26063 }, + { 196,-26063 }, { 197,-26063 }, { 198,-26063 }, { 199,-26063 }, { 200,-26063 }, + { 201,-26063 }, { 202,-26063 }, { 203,-26063 }, { 204,-26063 }, { 205,-26063 }, + { 206,-26063 }, { 207,-26063 }, { 208,-26063 }, { 209,-26063 }, { 210,-26063 }, + { 211,-26063 }, { 212,-26063 }, { 213,-26063 }, { 214,-26063 }, { 215,-26063 }, + { 216,-26063 }, { 217,-26063 }, { 218,-26063 }, { 219,-26063 }, { 220,-26063 }, + + { 221,-26063 }, { 222,-26063 }, { 223,-26063 }, { 224,-26063 }, { 225,-26063 }, + { 226,-26063 }, { 227,-26063 }, { 228,-26063 }, { 229,-26063 }, { 230,-26063 }, + { 231,-26063 }, { 232,-26063 }, { 233,-26063 }, { 234,-26063 }, { 235,-26063 }, + { 236,-26063 }, { 237,-26063 }, { 238,-26063 }, { 239,-26063 }, { 240,-26063 }, + { 241,-26063 }, { 242,-26063 }, { 243,-26063 }, { 244,-26063 }, { 245,-26063 }, + { 246,-26063 }, { 247,-26063 }, { 248,-26063 }, { 249,-26063 }, { 250,-26063 }, + { 251,-26063 }, { 252,-26063 }, { 253,-26063 }, { 254,-26063 }, { 255,-26063 }, + { 0, 67 }, { 0,65803 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-26320 }, + { 49,-26320 }, { 50,-26320 }, { 51,-26320 }, { 52,-26320 }, { 53,-26320 }, + { 54,-26320 }, { 55,-26320 }, { 56,-26320 }, { 57,-26320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-26320 }, { 66,-26320 }, { 67,-26320 }, { 68,-26320 }, + { 69,-26320 }, { 70,-26320 }, { 71,-26320 }, { 72,-26320 }, { 73,-26320 }, + { 74,-26320 }, { 75,-26320 }, { 76,-26320 }, { 77,-26320 }, { 78,-26320 }, + { 79,-26320 }, { 80,-26320 }, { 81,-26320 }, { 82,-26320 }, { 83,-26320 }, + { 84,-26320 }, { 85,-26320 }, { 86,-26320 }, { 87,-26320 }, { 88,-26320 }, + { 89,-26320 }, { 90,-26320 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-26320 }, { 0, 0 }, { 97,-26320 }, { 98,-26320 }, + { 99,-26320 }, { 100,-26320 }, { 101,-26320 }, { 102,-26320 }, { 103,-26320 }, + { 104,-26320 }, { 105,-26320 }, { 106,-26320 }, { 107,-26320 }, { 108,-26320 }, + { 109,-26320 }, { 110,-26320 }, { 111,-26320 }, { 112,-26320 }, { 113,-26320 }, + + { 114,-26320 }, { 115,-26320 }, { 116,-26320 }, { 117,-26320 }, { 118,-26320 }, + { 119,-26320 }, { 120,-26320 }, { 121,-26320 }, { 122,-26320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-26320 }, { 128,-26320 }, + { 129,-26320 }, { 130,-26320 }, { 131,-26320 }, { 132,-26320 }, { 133,-26320 }, + { 134,-26320 }, { 135,-26320 }, { 136,-26320 }, { 137,-26320 }, { 138,-26320 }, + { 139,-26320 }, { 140,-26320 }, { 141,-26320 }, { 142,-26320 }, { 143,-26320 }, + { 144,-26320 }, { 145,-26320 }, { 146,-26320 }, { 147,-26320 }, { 148,-26320 }, + { 149,-26320 }, { 150,-26320 }, { 151,-26320 }, { 152,-26320 }, { 153,-26320 }, + { 154,-26320 }, { 155,-26320 }, { 156,-26320 }, { 157,-26320 }, { 158,-26320 }, + { 159,-26320 }, { 160,-26320 }, { 161,-26320 }, { 162,-26320 }, { 163,-26320 }, + + { 164,-26320 }, { 165,-26320 }, { 166,-26320 }, { 167,-26320 }, { 168,-26320 }, + { 169,-26320 }, { 170,-26320 }, { 171,-26320 }, { 172,-26320 }, { 173,-26320 }, + { 174,-26320 }, { 175,-26320 }, { 176,-26320 }, { 177,-26320 }, { 178,-26320 }, + { 179,-26320 }, { 180,-26320 }, { 181,-26320 }, { 182,-26320 }, { 183,-26320 }, + { 184,-26320 }, { 185,-26320 }, { 186,-26320 }, { 187,-26320 }, { 188,-26320 }, + { 189,-26320 }, { 190,-26320 }, { 191,-26320 }, { 192,-26320 }, { 193,-26320 }, + { 194,-26320 }, { 195,-26320 }, { 196,-26320 }, { 197,-26320 }, { 198,-26320 }, + { 199,-26320 }, { 200,-26320 }, { 201,-26320 }, { 202,-26320 }, { 203,-26320 }, + { 204,-26320 }, { 205,-26320 }, { 206,-26320 }, { 207,-26320 }, { 208,-26320 }, + { 209,-26320 }, { 210,-26320 }, { 211,-26320 }, { 212,-26320 }, { 213,-26320 }, + + { 214,-26320 }, { 215,-26320 }, { 216,-26320 }, { 217,-26320 }, { 218,-26320 }, + { 219,-26320 }, { 220,-26320 }, { 221,-26320 }, { 222,-26320 }, { 223,-26320 }, + { 224,-26320 }, { 225,-26320 }, { 226,-26320 }, { 227,-26320 }, { 228,-26320 }, + { 229,-26320 }, { 230,-26320 }, { 231,-26320 }, { 232,-26320 }, { 233,-26320 }, + { 234,-26320 }, { 235,-26320 }, { 236,-26320 }, { 237,-26320 }, { 238,-26320 }, + { 239,-26320 }, { 240,-26320 }, { 241,-26320 }, { 242,-26320 }, { 243,-26320 }, + { 244,-26320 }, { 245,-26320 }, { 246,-26320 }, { 247,-26320 }, { 248,-26320 }, + { 249,-26320 }, { 250,-26320 }, { 251,-26320 }, { 252,-26320 }, { 253,-26320 }, + { 254,-26320 }, { 255,-26320 }, { 0, 131 }, { 0,65546 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-26577 }, { 49,-26577 }, { 50,-26577 }, { 51,-26577 }, + { 52,-26577 }, { 53,-26577 }, { 54,-26577 }, { 55,-26577 }, { 56,-26577 }, + + { 57,-26577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-26577 }, { 66,-26577 }, + { 67,-26577 }, { 68,-26577 }, { 69,-26577 }, { 70,-26577 }, { 71,-26577 }, + { 72,-26577 }, { 73,-26577 }, { 74,-26577 }, { 75,-26577 }, { 76,15168 }, + { 77,-26577 }, { 78,-26577 }, { 79,-26577 }, { 80,-26577 }, { 81,-26577 }, + { 82,-26577 }, { 83,-26577 }, { 84,-26577 }, { 85,-26577 }, { 86,-26577 }, + { 87,-26577 }, { 88,-26577 }, { 89,-26577 }, { 90,-26577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-26577 }, { 0, 0 }, + { 97,-26577 }, { 98,-26577 }, { 99,-26577 }, { 100,-26577 }, { 101,-26577 }, + { 102,-26577 }, { 103,-26577 }, { 104,-26577 }, { 105,-26577 }, { 106,-26577 }, + + { 107,-26577 }, { 108,15168 }, { 109,-26577 }, { 110,-26577 }, { 111,-26577 }, + { 112,-26577 }, { 113,-26577 }, { 114,-26577 }, { 115,-26577 }, { 116,-26577 }, + { 117,-26577 }, { 118,-26577 }, { 119,-26577 }, { 120,-26577 }, { 121,-26577 }, + { 122,-26577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-26577 }, { 128,-26577 }, { 129,-26577 }, { 130,-26577 }, { 131,-26577 }, + { 132,-26577 }, { 133,-26577 }, { 134,-26577 }, { 135,-26577 }, { 136,-26577 }, + { 137,-26577 }, { 138,-26577 }, { 139,-26577 }, { 140,-26577 }, { 141,-26577 }, + { 142,-26577 }, { 143,-26577 }, { 144,-26577 }, { 145,-26577 }, { 146,-26577 }, + { 147,-26577 }, { 148,-26577 }, { 149,-26577 }, { 150,-26577 }, { 151,-26577 }, + { 152,-26577 }, { 153,-26577 }, { 154,-26577 }, { 155,-26577 }, { 156,-26577 }, + + { 157,-26577 }, { 158,-26577 }, { 159,-26577 }, { 160,-26577 }, { 161,-26577 }, + { 162,-26577 }, { 163,-26577 }, { 164,-26577 }, { 165,-26577 }, { 166,-26577 }, + { 167,-26577 }, { 168,-26577 }, { 169,-26577 }, { 170,-26577 }, { 171,-26577 }, + { 172,-26577 }, { 173,-26577 }, { 174,-26577 }, { 175,-26577 }, { 176,-26577 }, + { 177,-26577 }, { 178,-26577 }, { 179,-26577 }, { 180,-26577 }, { 181,-26577 }, + { 182,-26577 }, { 183,-26577 }, { 184,-26577 }, { 185,-26577 }, { 186,-26577 }, + { 187,-26577 }, { 188,-26577 }, { 189,-26577 }, { 190,-26577 }, { 191,-26577 }, + { 192,-26577 }, { 193,-26577 }, { 194,-26577 }, { 195,-26577 }, { 196,-26577 }, + { 197,-26577 }, { 198,-26577 }, { 199,-26577 }, { 200,-26577 }, { 201,-26577 }, + { 202,-26577 }, { 203,-26577 }, { 204,-26577 }, { 205,-26577 }, { 206,-26577 }, + + { 207,-26577 }, { 208,-26577 }, { 209,-26577 }, { 210,-26577 }, { 211,-26577 }, + { 212,-26577 }, { 213,-26577 }, { 214,-26577 }, { 215,-26577 }, { 216,-26577 }, + { 217,-26577 }, { 218,-26577 }, { 219,-26577 }, { 220,-26577 }, { 221,-26577 }, + { 222,-26577 }, { 223,-26577 }, { 224,-26577 }, { 225,-26577 }, { 226,-26577 }, + { 227,-26577 }, { 228,-26577 }, { 229,-26577 }, { 230,-26577 }, { 231,-26577 }, + { 232,-26577 }, { 233,-26577 }, { 234,-26577 }, { 235,-26577 }, { 236,-26577 }, + { 237,-26577 }, { 238,-26577 }, { 239,-26577 }, { 240,-26577 }, { 241,-26577 }, + { 242,-26577 }, { 243,-26577 }, { 244,-26577 }, { 245,-26577 }, { 246,-26577 }, + { 247,-26577 }, { 248,-26577 }, { 249,-26577 }, { 250,-26577 }, { 251,-26577 }, + { 252,-26577 }, { 253,-26577 }, { 254,-26577 }, { 255,-26577 }, { 0, 24 }, + + { 0,65289 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-26834 }, { 49,-26834 }, + + { 50,-26834 }, { 51,-26834 }, { 52,-26834 }, { 53,-26834 }, { 54,-26834 }, + { 55,-26834 }, { 56,-26834 }, { 57,-26834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-26834 }, { 66,-26834 }, { 67,-26834 }, { 68,-26834 }, { 69,-26834 }, + { 70,-26834 }, { 71,-26834 }, { 72,-26834 }, { 73,-26834 }, { 74,-26834 }, + { 75,-26834 }, { 76,-26834 }, { 77,-26834 }, { 78,-26834 }, { 79,-26834 }, + { 80,-26834 }, { 81,-26834 }, { 82,-26834 }, { 83,-26834 }, { 84,-26834 }, + { 85,-26834 }, { 86,-26834 }, { 87,-26834 }, { 88,-26834 }, { 89,-26834 }, + { 90,-26834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-26834 }, { 0, 0 }, { 97,-26834 }, { 98,-26834 }, { 99,-26834 }, + + { 100,-26834 }, { 101,-26834 }, { 102,-26834 }, { 103,-26834 }, { 104,-26834 }, + { 105,-26834 }, { 106,-26834 }, { 107,-26834 }, { 108,-26834 }, { 109,-26834 }, + { 110,-26834 }, { 111,-26834 }, { 112,-26834 }, { 113,-26834 }, { 114,-26834 }, + { 115,-26834 }, { 116,-26834 }, { 117,-26834 }, { 118,-26834 }, { 119,-26834 }, + { 120,-26834 }, { 121,-26834 }, { 122,-26834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-26834 }, { 128,-26834 }, { 129,-26834 }, + { 130,-26834 }, { 131,-26834 }, { 132,-26834 }, { 133,-26834 }, { 134,-26834 }, + { 135,-26834 }, { 136,-26834 }, { 137,-26834 }, { 138,-26834 }, { 139,-26834 }, + { 140,-26834 }, { 141,-26834 }, { 142,-26834 }, { 143,-26834 }, { 144,-26834 }, + { 145,-26834 }, { 146,-26834 }, { 147,-26834 }, { 148,-26834 }, { 149,-26834 }, + + { 150,-26834 }, { 151,-26834 }, { 152,-26834 }, { 153,-26834 }, { 154,-26834 }, + { 155,-26834 }, { 156,-26834 }, { 157,-26834 }, { 158,-26834 }, { 159,-26834 }, + { 160,-26834 }, { 161,-26834 }, { 162,-26834 }, { 163,-26834 }, { 164,-26834 }, + { 165,-26834 }, { 166,-26834 }, { 167,-26834 }, { 168,-26834 }, { 169,-26834 }, + { 170,-26834 }, { 171,-26834 }, { 172,-26834 }, { 173,-26834 }, { 174,-26834 }, + { 175,-26834 }, { 176,-26834 }, { 177,-26834 }, { 178,-26834 }, { 179,-26834 }, + { 180,-26834 }, { 181,-26834 }, { 182,-26834 }, { 183,-26834 }, { 184,-26834 }, + { 185,-26834 }, { 186,-26834 }, { 187,-26834 }, { 188,-26834 }, { 189,-26834 }, + { 190,-26834 }, { 191,-26834 }, { 192,-26834 }, { 193,-26834 }, { 194,-26834 }, + { 195,-26834 }, { 196,-26834 }, { 197,-26834 }, { 198,-26834 }, { 199,-26834 }, + + { 200,-26834 }, { 201,-26834 }, { 202,-26834 }, { 203,-26834 }, { 204,-26834 }, + { 205,-26834 }, { 206,-26834 }, { 207,-26834 }, { 208,-26834 }, { 209,-26834 }, + { 210,-26834 }, { 211,-26834 }, { 212,-26834 }, { 213,-26834 }, { 214,-26834 }, + { 215,-26834 }, { 216,-26834 }, { 217,-26834 }, { 218,-26834 }, { 219,-26834 }, + { 220,-26834 }, { 221,-26834 }, { 222,-26834 }, { 223,-26834 }, { 224,-26834 }, + { 225,-26834 }, { 226,-26834 }, { 227,-26834 }, { 228,-26834 }, { 229,-26834 }, + { 230,-26834 }, { 231,-26834 }, { 232,-26834 }, { 233,-26834 }, { 234,-26834 }, + { 235,-26834 }, { 236,-26834 }, { 237,-26834 }, { 238,-26834 }, { 239,-26834 }, + { 240,-26834 }, { 241,-26834 }, { 242,-26834 }, { 243,-26834 }, { 244,-26834 }, + { 245,-26834 }, { 246,-26834 }, { 247,-26834 }, { 248,-26834 }, { 249,-26834 }, + + { 250,-26834 }, { 251,-26834 }, { 252,-26834 }, { 253,-26834 }, { 254,-26834 }, + { 255,-26834 }, { 0, 131 }, { 0,65032 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-27091 }, { 49,-27091 }, { 50,-27091 }, { 51,-27091 }, { 52,-27091 }, + { 53,-27091 }, { 54,-27091 }, { 55,-27091 }, { 56,-27091 }, { 57,-27091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-27091 }, { 66,-27091 }, { 67,-27091 }, + { 68,-27091 }, { 69,-27091 }, { 70,-27091 }, { 71,-27091 }, { 72,-27091 }, + { 73,-27091 }, { 74,-27091 }, { 75,-27091 }, { 76,14911 }, { 77,-27091 }, + { 78,-27091 }, { 79,-27091 }, { 80,-27091 }, { 81,-27091 }, { 82,-27091 }, + { 83,-27091 }, { 84,-27091 }, { 85,-27091 }, { 86,-27091 }, { 87,-27091 }, + { 88,-27091 }, { 89,-27091 }, { 90,-27091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-27091 }, { 0, 0 }, { 97,-27091 }, + { 98,-27091 }, { 99,-27091 }, { 100,-27091 }, { 101,-27091 }, { 102,-27091 }, + { 103,-27091 }, { 104,-27091 }, { 105,-27091 }, { 106,-27091 }, { 107,-27091 }, + { 108,14911 }, { 109,-27091 }, { 110,-27091 }, { 111,-27091 }, { 112,-27091 }, + { 113,-27091 }, { 114,-27091 }, { 115,-27091 }, { 116,-27091 }, { 117,-27091 }, + { 118,-27091 }, { 119,-27091 }, { 120,-27091 }, { 121,-27091 }, { 122,-27091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-27091 }, + { 128,-27091 }, { 129,-27091 }, { 130,-27091 }, { 131,-27091 }, { 132,-27091 }, + { 133,-27091 }, { 134,-27091 }, { 135,-27091 }, { 136,-27091 }, { 137,-27091 }, + { 138,-27091 }, { 139,-27091 }, { 140,-27091 }, { 141,-27091 }, { 142,-27091 }, + + { 143,-27091 }, { 144,-27091 }, { 145,-27091 }, { 146,-27091 }, { 147,-27091 }, + { 148,-27091 }, { 149,-27091 }, { 150,-27091 }, { 151,-27091 }, { 152,-27091 }, + { 153,-27091 }, { 154,-27091 }, { 155,-27091 }, { 156,-27091 }, { 157,-27091 }, + { 158,-27091 }, { 159,-27091 }, { 160,-27091 }, { 161,-27091 }, { 162,-27091 }, + { 163,-27091 }, { 164,-27091 }, { 165,-27091 }, { 166,-27091 }, { 167,-27091 }, + { 168,-27091 }, { 169,-27091 }, { 170,-27091 }, { 171,-27091 }, { 172,-27091 }, + { 173,-27091 }, { 174,-27091 }, { 175,-27091 }, { 176,-27091 }, { 177,-27091 }, + { 178,-27091 }, { 179,-27091 }, { 180,-27091 }, { 181,-27091 }, { 182,-27091 }, + { 183,-27091 }, { 184,-27091 }, { 185,-27091 }, { 186,-27091 }, { 187,-27091 }, + { 188,-27091 }, { 189,-27091 }, { 190,-27091 }, { 191,-27091 }, { 192,-27091 }, + + { 193,-27091 }, { 194,-27091 }, { 195,-27091 }, { 196,-27091 }, { 197,-27091 }, + { 198,-27091 }, { 199,-27091 }, { 200,-27091 }, { 201,-27091 }, { 202,-27091 }, + { 203,-27091 }, { 204,-27091 }, { 205,-27091 }, { 206,-27091 }, { 207,-27091 }, + { 208,-27091 }, { 209,-27091 }, { 210,-27091 }, { 211,-27091 }, { 212,-27091 }, + { 213,-27091 }, { 214,-27091 }, { 215,-27091 }, { 216,-27091 }, { 217,-27091 }, + { 218,-27091 }, { 219,-27091 }, { 220,-27091 }, { 221,-27091 }, { 222,-27091 }, + { 223,-27091 }, { 224,-27091 }, { 225,-27091 }, { 226,-27091 }, { 227,-27091 }, + { 228,-27091 }, { 229,-27091 }, { 230,-27091 }, { 231,-27091 }, { 232,-27091 }, + { 233,-27091 }, { 234,-27091 }, { 235,-27091 }, { 236,-27091 }, { 237,-27091 }, + { 238,-27091 }, { 239,-27091 }, { 240,-27091 }, { 241,-27091 }, { 242,-27091 }, + + { 243,-27091 }, { 244,-27091 }, { 245,-27091 }, { 246,-27091 }, { 247,-27091 }, + { 248,-27091 }, { 249,-27091 }, { 250,-27091 }, { 251,-27091 }, { 252,-27091 }, + { 253,-27091 }, { 254,-27091 }, { 255,-27091 }, { 0, 131 }, { 0,64775 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-27348 }, { 49,-27348 }, { 50,-27348 }, + { 51,-27348 }, { 52,-27348 }, { 53,-27348 }, { 54,-27348 }, { 55,-27348 }, + { 56,-27348 }, { 57,-27348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-27348 }, + { 66,-27348 }, { 67,-27348 }, { 68,-27348 }, { 69,-27348 }, { 70,-27348 }, + { 71,-27348 }, { 72,-27348 }, { 73,-27348 }, { 74,-27348 }, { 75,-27348 }, + { 76,14911 }, { 77,-27348 }, { 78,-27348 }, { 79,-27348 }, { 80,-27348 }, + { 81,-27348 }, { 82,-27348 }, { 83,-27348 }, { 84,-27348 }, { 85,-27348 }, + + { 86,-27348 }, { 87,-27348 }, { 88,-27348 }, { 89,-27348 }, { 90,-27348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-27348 }, + { 0, 0 }, { 97,-27348 }, { 98,-27348 }, { 99,-27348 }, { 100,-27348 }, + { 101,-27348 }, { 102,-27348 }, { 103,-27348 }, { 104,-27348 }, { 105,-27348 }, + { 106,-27348 }, { 107,-27348 }, { 108,14911 }, { 109,-27348 }, { 110,-27348 }, + { 111,-27348 }, { 112,-27348 }, { 113,-27348 }, { 114,-27348 }, { 115,-27348 }, + { 116,-27348 }, { 117,-27348 }, { 118,-27348 }, { 119,-27348 }, { 120,-27348 }, + { 121,-27348 }, { 122,-27348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-27348 }, { 128,-27348 }, { 129,-27348 }, { 130,-27348 }, + { 131,-27348 }, { 132,-27348 }, { 133,-27348 }, { 134,-27348 }, { 135,-27348 }, + + { 136,-27348 }, { 137,-27348 }, { 138,-27348 }, { 139,-27348 }, { 140,-27348 }, + { 141,-27348 }, { 142,-27348 }, { 143,-27348 }, { 144,-27348 }, { 145,-27348 }, + { 146,-27348 }, { 147,-27348 }, { 148,-27348 }, { 149,-27348 }, { 150,-27348 }, + { 151,-27348 }, { 152,-27348 }, { 153,-27348 }, { 154,-27348 }, { 155,-27348 }, + { 156,-27348 }, { 157,-27348 }, { 158,-27348 }, { 159,-27348 }, { 160,-27348 }, + { 161,-27348 }, { 162,-27348 }, { 163,-27348 }, { 164,-27348 }, { 165,-27348 }, + { 166,-27348 }, { 167,-27348 }, { 168,-27348 }, { 169,-27348 }, { 170,-27348 }, + { 171,-27348 }, { 172,-27348 }, { 173,-27348 }, { 174,-27348 }, { 175,-27348 }, + { 176,-27348 }, { 177,-27348 }, { 178,-27348 }, { 179,-27348 }, { 180,-27348 }, + { 181,-27348 }, { 182,-27348 }, { 183,-27348 }, { 184,-27348 }, { 185,-27348 }, + + { 186,-27348 }, { 187,-27348 }, { 188,-27348 }, { 189,-27348 }, { 190,-27348 }, + { 191,-27348 }, { 192,-27348 }, { 193,-27348 }, { 194,-27348 }, { 195,-27348 }, + { 196,-27348 }, { 197,-27348 }, { 198,-27348 }, { 199,-27348 }, { 200,-27348 }, + { 201,-27348 }, { 202,-27348 }, { 203,-27348 }, { 204,-27348 }, { 205,-27348 }, + { 206,-27348 }, { 207,-27348 }, { 208,-27348 }, { 209,-27348 }, { 210,-27348 }, + { 211,-27348 }, { 212,-27348 }, { 213,-27348 }, { 214,-27348 }, { 215,-27348 }, + { 216,-27348 }, { 217,-27348 }, { 218,-27348 }, { 219,-27348 }, { 220,-27348 }, + { 221,-27348 }, { 222,-27348 }, { 223,-27348 }, { 224,-27348 }, { 225,-27348 }, + { 226,-27348 }, { 227,-27348 }, { 228,-27348 }, { 229,-27348 }, { 230,-27348 }, + { 231,-27348 }, { 232,-27348 }, { 233,-27348 }, { 234,-27348 }, { 235,-27348 }, + + { 236,-27348 }, { 237,-27348 }, { 238,-27348 }, { 239,-27348 }, { 240,-27348 }, + { 241,-27348 }, { 242,-27348 }, { 243,-27348 }, { 244,-27348 }, { 245,-27348 }, + { 246,-27348 }, { 247,-27348 }, { 248,-27348 }, { 249,-27348 }, { 250,-27348 }, + { 251,-27348 }, { 252,-27348 }, { 253,-27348 }, { 254,-27348 }, { 255,-27348 }, + { 0, 131 }, { 0,64518 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-27605 }, + { 49,-27605 }, { 50,-27605 }, { 51,-27605 }, { 52,-27605 }, { 53,-27605 }, + { 54,-27605 }, { 55,-27605 }, { 56,-27605 }, { 57,-27605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-27605 }, { 66,-27605 }, { 67,-27605 }, { 68,-27605 }, + { 69,-27605 }, { 70,-27605 }, { 71,-27605 }, { 72,-27605 }, { 73,14911 }, + { 74,-27605 }, { 75,-27605 }, { 76,-27605 }, { 77,-27605 }, { 78,-27605 }, + + { 79,-27605 }, { 80,-27605 }, { 81,-27605 }, { 82,-27605 }, { 83,-27605 }, + { 84,-27605 }, { 85,-27605 }, { 86,-27605 }, { 87,-27605 }, { 88,-27605 }, + { 89,-27605 }, { 90,-27605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-27605 }, { 0, 0 }, { 97,-27605 }, { 98,-27605 }, + { 99,-27605 }, { 100,-27605 }, { 101,-27605 }, { 102,-27605 }, { 103,-27605 }, + { 104,-27605 }, { 105,14911 }, { 106,-27605 }, { 107,-27605 }, { 108,-27605 }, + { 109,-27605 }, { 110,-27605 }, { 111,-27605 }, { 112,-27605 }, { 113,-27605 }, + { 114,-27605 }, { 115,-27605 }, { 116,-27605 }, { 117,-27605 }, { 118,-27605 }, + { 119,-27605 }, { 120,-27605 }, { 121,-27605 }, { 122,-27605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-27605 }, { 128,-27605 }, + + { 129,-27605 }, { 130,-27605 }, { 131,-27605 }, { 132,-27605 }, { 133,-27605 }, + { 134,-27605 }, { 135,-27605 }, { 136,-27605 }, { 137,-27605 }, { 138,-27605 }, + { 139,-27605 }, { 140,-27605 }, { 141,-27605 }, { 142,-27605 }, { 143,-27605 }, + { 144,-27605 }, { 145,-27605 }, { 146,-27605 }, { 147,-27605 }, { 148,-27605 }, + { 149,-27605 }, { 150,-27605 }, { 151,-27605 }, { 152,-27605 }, { 153,-27605 }, + { 154,-27605 }, { 155,-27605 }, { 156,-27605 }, { 157,-27605 }, { 158,-27605 }, + { 159,-27605 }, { 160,-27605 }, { 161,-27605 }, { 162,-27605 }, { 163,-27605 }, + { 164,-27605 }, { 165,-27605 }, { 166,-27605 }, { 167,-27605 }, { 168,-27605 }, + { 169,-27605 }, { 170,-27605 }, { 171,-27605 }, { 172,-27605 }, { 173,-27605 }, + { 174,-27605 }, { 175,-27605 }, { 176,-27605 }, { 177,-27605 }, { 178,-27605 }, + + { 179,-27605 }, { 180,-27605 }, { 181,-27605 }, { 182,-27605 }, { 183,-27605 }, + { 184,-27605 }, { 185,-27605 }, { 186,-27605 }, { 187,-27605 }, { 188,-27605 }, + { 189,-27605 }, { 190,-27605 }, { 191,-27605 }, { 192,-27605 }, { 193,-27605 }, + { 194,-27605 }, { 195,-27605 }, { 196,-27605 }, { 197,-27605 }, { 198,-27605 }, + { 199,-27605 }, { 200,-27605 }, { 201,-27605 }, { 202,-27605 }, { 203,-27605 }, + { 204,-27605 }, { 205,-27605 }, { 206,-27605 }, { 207,-27605 }, { 208,-27605 }, + { 209,-27605 }, { 210,-27605 }, { 211,-27605 }, { 212,-27605 }, { 213,-27605 }, + { 214,-27605 }, { 215,-27605 }, { 216,-27605 }, { 217,-27605 }, { 218,-27605 }, + { 219,-27605 }, { 220,-27605 }, { 221,-27605 }, { 222,-27605 }, { 223,-27605 }, + { 224,-27605 }, { 225,-27605 }, { 226,-27605 }, { 227,-27605 }, { 228,-27605 }, + + { 229,-27605 }, { 230,-27605 }, { 231,-27605 }, { 232,-27605 }, { 233,-27605 }, + { 234,-27605 }, { 235,-27605 }, { 236,-27605 }, { 237,-27605 }, { 238,-27605 }, + { 239,-27605 }, { 240,-27605 }, { 241,-27605 }, { 242,-27605 }, { 243,-27605 }, + { 244,-27605 }, { 245,-27605 }, { 246,-27605 }, { 247,-27605 }, { 248,-27605 }, + { 249,-27605 }, { 250,-27605 }, { 251,-27605 }, { 252,-27605 }, { 253,-27605 }, + { 254,-27605 }, { 255,-27605 }, { 0, 131 }, { 0,64261 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-27862 }, { 49,-27862 }, { 50,-27862 }, { 51,-27862 }, + { 52,-27862 }, { 53,-27862 }, { 54,-27862 }, { 55,-27862 }, { 56,-27862 }, + { 57,-27862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-27862 }, { 66,-27862 }, + { 67,-27862 }, { 68,-27862 }, { 69,-27862 }, { 70,-27862 }, { 71,-27862 }, + + { 72,-27862 }, { 73,14911 }, { 74,-27862 }, { 75,-27862 }, { 76,-27862 }, + { 77,-27862 }, { 78,-27862 }, { 79,-27862 }, { 80,-27862 }, { 81,-27862 }, + { 82,-27862 }, { 83,-27862 }, { 84,-27862 }, { 85,15168 }, { 86,-27862 }, + { 87,-27862 }, { 88,-27862 }, { 89,-27862 }, { 90,-27862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-27862 }, { 0, 0 }, + { 97,-27862 }, { 98,-27862 }, { 99,-27862 }, { 100,-27862 }, { 101,-27862 }, + { 102,-27862 }, { 103,-27862 }, { 104,-27862 }, { 105,14911 }, { 106,-27862 }, + { 107,-27862 }, { 108,-27862 }, { 109,-27862 }, { 110,-27862 }, { 111,-27862 }, + { 112,-27862 }, { 113,-27862 }, { 114,-27862 }, { 115,-27862 }, { 116,-27862 }, + { 117,15168 }, { 118,-27862 }, { 119,-27862 }, { 120,-27862 }, { 121,-27862 }, + + { 122,-27862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-27862 }, { 128,-27862 }, { 129,-27862 }, { 130,-27862 }, { 131,-27862 }, + { 132,-27862 }, { 133,-27862 }, { 134,-27862 }, { 135,-27862 }, { 136,-27862 }, + { 137,-27862 }, { 138,-27862 }, { 139,-27862 }, { 140,-27862 }, { 141,-27862 }, + { 142,-27862 }, { 143,-27862 }, { 144,-27862 }, { 145,-27862 }, { 146,-27862 }, + { 147,-27862 }, { 148,-27862 }, { 149,-27862 }, { 150,-27862 }, { 151,-27862 }, + { 152,-27862 }, { 153,-27862 }, { 154,-27862 }, { 155,-27862 }, { 156,-27862 }, + { 157,-27862 }, { 158,-27862 }, { 159,-27862 }, { 160,-27862 }, { 161,-27862 }, + { 162,-27862 }, { 163,-27862 }, { 164,-27862 }, { 165,-27862 }, { 166,-27862 }, + { 167,-27862 }, { 168,-27862 }, { 169,-27862 }, { 170,-27862 }, { 171,-27862 }, + + { 172,-27862 }, { 173,-27862 }, { 174,-27862 }, { 175,-27862 }, { 176,-27862 }, + { 177,-27862 }, { 178,-27862 }, { 179,-27862 }, { 180,-27862 }, { 181,-27862 }, + { 182,-27862 }, { 183,-27862 }, { 184,-27862 }, { 185,-27862 }, { 186,-27862 }, + { 187,-27862 }, { 188,-27862 }, { 189,-27862 }, { 190,-27862 }, { 191,-27862 }, + { 192,-27862 }, { 193,-27862 }, { 194,-27862 }, { 195,-27862 }, { 196,-27862 }, + { 197,-27862 }, { 198,-27862 }, { 199,-27862 }, { 200,-27862 }, { 201,-27862 }, + { 202,-27862 }, { 203,-27862 }, { 204,-27862 }, { 205,-27862 }, { 206,-27862 }, + { 207,-27862 }, { 208,-27862 }, { 209,-27862 }, { 210,-27862 }, { 211,-27862 }, + { 212,-27862 }, { 213,-27862 }, { 214,-27862 }, { 215,-27862 }, { 216,-27862 }, + { 217,-27862 }, { 218,-27862 }, { 219,-27862 }, { 220,-27862 }, { 221,-27862 }, + + { 222,-27862 }, { 223,-27862 }, { 224,-27862 }, { 225,-27862 }, { 226,-27862 }, + { 227,-27862 }, { 228,-27862 }, { 229,-27862 }, { 230,-27862 }, { 231,-27862 }, + { 232,-27862 }, { 233,-27862 }, { 234,-27862 }, { 235,-27862 }, { 236,-27862 }, + { 237,-27862 }, { 238,-27862 }, { 239,-27862 }, { 240,-27862 }, { 241,-27862 }, + { 242,-27862 }, { 243,-27862 }, { 244,-27862 }, { 245,-27862 }, { 246,-27862 }, + { 247,-27862 }, { 248,-27862 }, { 249,-27862 }, { 250,-27862 }, { 251,-27862 }, + { 252,-27862 }, { 253,-27862 }, { 254,-27862 }, { 255,-27862 }, { 0, 131 }, + { 0,64004 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-28119 }, { 49,-28119 }, + { 50,-28119 }, { 51,-28119 }, { 52,-28119 }, { 53,-28119 }, { 54,-28119 }, + { 55,-28119 }, { 56,-28119 }, { 57,-28119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,15168 }, { 66,-28119 }, { 67,-28119 }, { 68,-28119 }, { 69,-28119 }, + { 70,-28119 }, { 71,-28119 }, { 72,-28119 }, { 73,-28119 }, { 74,-28119 }, + { 75,-28119 }, { 76,-28119 }, { 77,-28119 }, { 78,-28119 }, { 79,-28119 }, + { 80,-28119 }, { 81,-28119 }, { 82,-28119 }, { 83,-28119 }, { 84,-28119 }, + { 85,-28119 }, { 86,-28119 }, { 87,-28119 }, { 88,-28119 }, { 89,-28119 }, + { 90,-28119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-28119 }, { 0, 0 }, { 97,15168 }, { 98,-28119 }, { 99,-28119 }, + { 100,-28119 }, { 101,-28119 }, { 102,-28119 }, { 103,-28119 }, { 104,-28119 }, + { 105,-28119 }, { 106,-28119 }, { 107,-28119 }, { 108,-28119 }, { 109,-28119 }, + { 110,-28119 }, { 111,-28119 }, { 112,-28119 }, { 113,-28119 }, { 114,-28119 }, + + { 115,-28119 }, { 116,-28119 }, { 117,-28119 }, { 118,-28119 }, { 119,-28119 }, + { 120,-28119 }, { 121,-28119 }, { 122,-28119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-28119 }, { 128,-28119 }, { 129,-28119 }, + { 130,-28119 }, { 131,-28119 }, { 132,-28119 }, { 133,-28119 }, { 134,-28119 }, + { 135,-28119 }, { 136,-28119 }, { 137,-28119 }, { 138,-28119 }, { 139,-28119 }, + { 140,-28119 }, { 141,-28119 }, { 142,-28119 }, { 143,-28119 }, { 144,-28119 }, + { 145,-28119 }, { 146,-28119 }, { 147,-28119 }, { 148,-28119 }, { 149,-28119 }, + { 150,-28119 }, { 151,-28119 }, { 152,-28119 }, { 153,-28119 }, { 154,-28119 }, + { 155,-28119 }, { 156,-28119 }, { 157,-28119 }, { 158,-28119 }, { 159,-28119 }, + { 160,-28119 }, { 161,-28119 }, { 162,-28119 }, { 163,-28119 }, { 164,-28119 }, + + { 165,-28119 }, { 166,-28119 }, { 167,-28119 }, { 168,-28119 }, { 169,-28119 }, + { 170,-28119 }, { 171,-28119 }, { 172,-28119 }, { 173,-28119 }, { 174,-28119 }, + { 175,-28119 }, { 176,-28119 }, { 177,-28119 }, { 178,-28119 }, { 179,-28119 }, + { 180,-28119 }, { 181,-28119 }, { 182,-28119 }, { 183,-28119 }, { 184,-28119 }, + { 185,-28119 }, { 186,-28119 }, { 187,-28119 }, { 188,-28119 }, { 189,-28119 }, + { 190,-28119 }, { 191,-28119 }, { 192,-28119 }, { 193,-28119 }, { 194,-28119 }, + { 195,-28119 }, { 196,-28119 }, { 197,-28119 }, { 198,-28119 }, { 199,-28119 }, + { 200,-28119 }, { 201,-28119 }, { 202,-28119 }, { 203,-28119 }, { 204,-28119 }, + { 205,-28119 }, { 206,-28119 }, { 207,-28119 }, { 208,-28119 }, { 209,-28119 }, + { 210,-28119 }, { 211,-28119 }, { 212,-28119 }, { 213,-28119 }, { 214,-28119 }, + + { 215,-28119 }, { 216,-28119 }, { 217,-28119 }, { 218,-28119 }, { 219,-28119 }, + { 220,-28119 }, { 221,-28119 }, { 222,-28119 }, { 223,-28119 }, { 224,-28119 }, + { 225,-28119 }, { 226,-28119 }, { 227,-28119 }, { 228,-28119 }, { 229,-28119 }, + { 230,-28119 }, { 231,-28119 }, { 232,-28119 }, { 233,-28119 }, { 234,-28119 }, + { 235,-28119 }, { 236,-28119 }, { 237,-28119 }, { 238,-28119 }, { 239,-28119 }, + { 240,-28119 }, { 241,-28119 }, { 242,-28119 }, { 243,-28119 }, { 244,-28119 }, + { 245,-28119 }, { 246,-28119 }, { 247,-28119 }, { 248,-28119 }, { 249,-28119 }, + { 250,-28119 }, { 251,-28119 }, { 252,-28119 }, { 253,-28119 }, { 254,-28119 }, + { 255,-28119 }, { 0, 131 }, { 0,63747 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-28376 }, { 49,-28376 }, { 50,-28376 }, { 51,-28376 }, { 52,-28376 }, + { 53,-28376 }, { 54,-28376 }, { 55,-28376 }, { 56,-28376 }, { 57,-28376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-28376 }, { 66,-28376 }, { 67,-28376 }, + { 68,-28376 }, { 69,-28376 }, { 70,-28376 }, { 71,-28376 }, { 72,-28376 }, + { 73,15168 }, { 74,-28376 }, { 75,-28376 }, { 76,-28376 }, { 77,-28376 }, + { 78,-28376 }, { 79,-28376 }, { 80,-28376 }, { 81,-28376 }, { 82,-28376 }, + { 83,-28376 }, { 84,-28376 }, { 85,-28376 }, { 86,-28376 }, { 87,-28376 }, + { 88,-28376 }, { 89,-28376 }, { 90,-28376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-28376 }, { 0, 0 }, { 97,-28376 }, + { 98,-28376 }, { 99,-28376 }, { 100,-28376 }, { 101,-28376 }, { 102,-28376 }, + { 103,-28376 }, { 104,-28376 }, { 105,15168 }, { 106,-28376 }, { 107,-28376 }, + + { 108,-28376 }, { 109,-28376 }, { 110,-28376 }, { 111,-28376 }, { 112,-28376 }, + { 113,-28376 }, { 114,-28376 }, { 115,-28376 }, { 116,-28376 }, { 117,-28376 }, + { 118,-28376 }, { 119,-28376 }, { 120,-28376 }, { 121,-28376 }, { 122,-28376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-28376 }, + { 128,-28376 }, { 129,-28376 }, { 130,-28376 }, { 131,-28376 }, { 132,-28376 }, + { 133,-28376 }, { 134,-28376 }, { 135,-28376 }, { 136,-28376 }, { 137,-28376 }, + { 138,-28376 }, { 139,-28376 }, { 140,-28376 }, { 141,-28376 }, { 142,-28376 }, + { 143,-28376 }, { 144,-28376 }, { 145,-28376 }, { 146,-28376 }, { 147,-28376 }, + { 148,-28376 }, { 149,-28376 }, { 150,-28376 }, { 151,-28376 }, { 152,-28376 }, + { 153,-28376 }, { 154,-28376 }, { 155,-28376 }, { 156,-28376 }, { 157,-28376 }, + + { 158,-28376 }, { 159,-28376 }, { 160,-28376 }, { 161,-28376 }, { 162,-28376 }, + { 163,-28376 }, { 164,-28376 }, { 165,-28376 }, { 166,-28376 }, { 167,-28376 }, + { 168,-28376 }, { 169,-28376 }, { 170,-28376 }, { 171,-28376 }, { 172,-28376 }, + { 173,-28376 }, { 174,-28376 }, { 175,-28376 }, { 176,-28376 }, { 177,-28376 }, + { 178,-28376 }, { 179,-28376 }, { 180,-28376 }, { 181,-28376 }, { 182,-28376 }, + { 183,-28376 }, { 184,-28376 }, { 185,-28376 }, { 186,-28376 }, { 187,-28376 }, + { 188,-28376 }, { 189,-28376 }, { 190,-28376 }, { 191,-28376 }, { 192,-28376 }, + { 193,-28376 }, { 194,-28376 }, { 195,-28376 }, { 196,-28376 }, { 197,-28376 }, + { 198,-28376 }, { 199,-28376 }, { 200,-28376 }, { 201,-28376 }, { 202,-28376 }, + { 203,-28376 }, { 204,-28376 }, { 205,-28376 }, { 206,-28376 }, { 207,-28376 }, + + { 208,-28376 }, { 209,-28376 }, { 210,-28376 }, { 211,-28376 }, { 212,-28376 }, + { 213,-28376 }, { 214,-28376 }, { 215,-28376 }, { 216,-28376 }, { 217,-28376 }, + { 218,-28376 }, { 219,-28376 }, { 220,-28376 }, { 221,-28376 }, { 222,-28376 }, + { 223,-28376 }, { 224,-28376 }, { 225,-28376 }, { 226,-28376 }, { 227,-28376 }, + { 228,-28376 }, { 229,-28376 }, { 230,-28376 }, { 231,-28376 }, { 232,-28376 }, + { 233,-28376 }, { 234,-28376 }, { 235,-28376 }, { 236,-28376 }, { 237,-28376 }, + { 238,-28376 }, { 239,-28376 }, { 240,-28376 }, { 241,-28376 }, { 242,-28376 }, + { 243,-28376 }, { 244,-28376 }, { 245,-28376 }, { 246,-28376 }, { 247,-28376 }, + { 248,-28376 }, { 249,-28376 }, { 250,-28376 }, { 251,-28376 }, { 252,-28376 }, + { 253,-28376 }, { 254,-28376 }, { 255,-28376 }, { 0, 131 }, { 0,63490 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-28633 }, { 49,-28633 }, { 50,-28633 }, + + { 51,-28633 }, { 52,-28633 }, { 53,-28633 }, { 54,-28633 }, { 55,-28633 }, + { 56,-28633 }, { 57,-28633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-28633 }, + { 66,-28633 }, { 67,-28633 }, { 68,-28633 }, { 69,15168 }, { 70,-28633 }, + { 71,-28633 }, { 72,-28633 }, { 73,-28633 }, { 74,-28633 }, { 75,-28633 }, + { 76,-28633 }, { 77,-28633 }, { 78,-28633 }, { 79,-28633 }, { 80,-28633 }, + { 81,-28633 }, { 82,-28633 }, { 83,-28633 }, { 84,-28633 }, { 85,-28633 }, + { 86,-28633 }, { 87,-28633 }, { 88,-28633 }, { 89,-28633 }, { 90,-28633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-28633 }, + { 0, 0 }, { 97,-28633 }, { 98,-28633 }, { 99,-28633 }, { 100,-28633 }, + + { 101,15168 }, { 102,-28633 }, { 103,-28633 }, { 104,-28633 }, { 105,-28633 }, + { 106,-28633 }, { 107,-28633 }, { 108,-28633 }, { 109,-28633 }, { 110,-28633 }, + { 111,-28633 }, { 112,-28633 }, { 113,-28633 }, { 114,-28633 }, { 115,-28633 }, + { 116,-28633 }, { 117,-28633 }, { 118,-28633 }, { 119,-28633 }, { 120,-28633 }, + { 121,-28633 }, { 122,-28633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-28633 }, { 128,-28633 }, { 129,-28633 }, { 130,-28633 }, + { 131,-28633 }, { 132,-28633 }, { 133,-28633 }, { 134,-28633 }, { 135,-28633 }, + { 136,-28633 }, { 137,-28633 }, { 138,-28633 }, { 139,-28633 }, { 140,-28633 }, + { 141,-28633 }, { 142,-28633 }, { 143,-28633 }, { 144,-28633 }, { 145,-28633 }, + { 146,-28633 }, { 147,-28633 }, { 148,-28633 }, { 149,-28633 }, { 150,-28633 }, + + { 151,-28633 }, { 152,-28633 }, { 153,-28633 }, { 154,-28633 }, { 155,-28633 }, + { 156,-28633 }, { 157,-28633 }, { 158,-28633 }, { 159,-28633 }, { 160,-28633 }, + { 161,-28633 }, { 162,-28633 }, { 163,-28633 }, { 164,-28633 }, { 165,-28633 }, + { 166,-28633 }, { 167,-28633 }, { 168,-28633 }, { 169,-28633 }, { 170,-28633 }, + { 171,-28633 }, { 172,-28633 }, { 173,-28633 }, { 174,-28633 }, { 175,-28633 }, + { 176,-28633 }, { 177,-28633 }, { 178,-28633 }, { 179,-28633 }, { 180,-28633 }, + { 181,-28633 }, { 182,-28633 }, { 183,-28633 }, { 184,-28633 }, { 185,-28633 }, + { 186,-28633 }, { 187,-28633 }, { 188,-28633 }, { 189,-28633 }, { 190,-28633 }, + { 191,-28633 }, { 192,-28633 }, { 193,-28633 }, { 194,-28633 }, { 195,-28633 }, + { 196,-28633 }, { 197,-28633 }, { 198,-28633 }, { 199,-28633 }, { 200,-28633 }, + + { 201,-28633 }, { 202,-28633 }, { 203,-28633 }, { 204,-28633 }, { 205,-28633 }, + { 206,-28633 }, { 207,-28633 }, { 208,-28633 }, { 209,-28633 }, { 210,-28633 }, + { 211,-28633 }, { 212,-28633 }, { 213,-28633 }, { 214,-28633 }, { 215,-28633 }, + { 216,-28633 }, { 217,-28633 }, { 218,-28633 }, { 219,-28633 }, { 220,-28633 }, + { 221,-28633 }, { 222,-28633 }, { 223,-28633 }, { 224,-28633 }, { 225,-28633 }, + { 226,-28633 }, { 227,-28633 }, { 228,-28633 }, { 229,-28633 }, { 230,-28633 }, + { 231,-28633 }, { 232,-28633 }, { 233,-28633 }, { 234,-28633 }, { 235,-28633 }, + { 236,-28633 }, { 237,-28633 }, { 238,-28633 }, { 239,-28633 }, { 240,-28633 }, + { 241,-28633 }, { 242,-28633 }, { 243,-28633 }, { 244,-28633 }, { 245,-28633 }, + { 246,-28633 }, { 247,-28633 }, { 248,-28633 }, { 249,-28633 }, { 250,-28633 }, + + { 251,-28633 }, { 252,-28633 }, { 253,-28633 }, { 254,-28633 }, { 255,-28633 }, + { 0, 131 }, { 0,63233 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-28890 }, + { 49,-28890 }, { 50,-28890 }, { 51,-28890 }, { 52,-28890 }, { 53,-28890 }, + { 54,-28890 }, { 55,-28890 }, { 56,-28890 }, { 57,-28890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,15168 }, { 66,-28890 }, { 67,-28890 }, { 68,-28890 }, + { 69,-28890 }, { 70,-28890 }, { 71,-28890 }, { 72,-28890 }, { 73,-28890 }, + { 74,-28890 }, { 75,-28890 }, { 76,-28890 }, { 77,-28890 }, { 78,-28890 }, + { 79,-28890 }, { 80,-28890 }, { 81,-28890 }, { 82,-28890 }, { 83,-28890 }, + { 84,-28890 }, { 85,-28890 }, { 86,-28890 }, { 87,-28890 }, { 88,-28890 }, + { 89,-28890 }, { 90,-28890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-28890 }, { 0, 0 }, { 97,15168 }, { 98,-28890 }, + { 99,-28890 }, { 100,-28890 }, { 101,-28890 }, { 102,-28890 }, { 103,-28890 }, + { 104,-28890 }, { 105,-28890 }, { 106,-28890 }, { 107,-28890 }, { 108,-28890 }, + { 109,-28890 }, { 110,-28890 }, { 111,-28890 }, { 112,-28890 }, { 113,-28890 }, + { 114,-28890 }, { 115,-28890 }, { 116,-28890 }, { 117,-28890 }, { 118,-28890 }, + { 119,-28890 }, { 120,-28890 }, { 121,-28890 }, { 122,-28890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-28890 }, { 128,-28890 }, + { 129,-28890 }, { 130,-28890 }, { 131,-28890 }, { 132,-28890 }, { 133,-28890 }, + { 134,-28890 }, { 135,-28890 }, { 136,-28890 }, { 137,-28890 }, { 138,-28890 }, + { 139,-28890 }, { 140,-28890 }, { 141,-28890 }, { 142,-28890 }, { 143,-28890 }, + + { 144,-28890 }, { 145,-28890 }, { 146,-28890 }, { 147,-28890 }, { 148,-28890 }, + { 149,-28890 }, { 150,-28890 }, { 151,-28890 }, { 152,-28890 }, { 153,-28890 }, + { 154,-28890 }, { 155,-28890 }, { 156,-28890 }, { 157,-28890 }, { 158,-28890 }, + { 159,-28890 }, { 160,-28890 }, { 161,-28890 }, { 162,-28890 }, { 163,-28890 }, + { 164,-28890 }, { 165,-28890 }, { 166,-28890 }, { 167,-28890 }, { 168,-28890 }, + { 169,-28890 }, { 170,-28890 }, { 171,-28890 }, { 172,-28890 }, { 173,-28890 }, + { 174,-28890 }, { 175,-28890 }, { 176,-28890 }, { 177,-28890 }, { 178,-28890 }, + { 179,-28890 }, { 180,-28890 }, { 181,-28890 }, { 182,-28890 }, { 183,-28890 }, + { 184,-28890 }, { 185,-28890 }, { 186,-28890 }, { 187,-28890 }, { 188,-28890 }, + { 189,-28890 }, { 190,-28890 }, { 191,-28890 }, { 192,-28890 }, { 193,-28890 }, + + { 194,-28890 }, { 195,-28890 }, { 196,-28890 }, { 197,-28890 }, { 198,-28890 }, + { 199,-28890 }, { 200,-28890 }, { 201,-28890 }, { 202,-28890 }, { 203,-28890 }, + { 204,-28890 }, { 205,-28890 }, { 206,-28890 }, { 207,-28890 }, { 208,-28890 }, + { 209,-28890 }, { 210,-28890 }, { 211,-28890 }, { 212,-28890 }, { 213,-28890 }, + { 214,-28890 }, { 215,-28890 }, { 216,-28890 }, { 217,-28890 }, { 218,-28890 }, + { 219,-28890 }, { 220,-28890 }, { 221,-28890 }, { 222,-28890 }, { 223,-28890 }, + { 224,-28890 }, { 225,-28890 }, { 226,-28890 }, { 227,-28890 }, { 228,-28890 }, + { 229,-28890 }, { 230,-28890 }, { 231,-28890 }, { 232,-28890 }, { 233,-28890 }, + { 234,-28890 }, { 235,-28890 }, { 236,-28890 }, { 237,-28890 }, { 238,-28890 }, + { 239,-28890 }, { 240,-28890 }, { 241,-28890 }, { 242,-28890 }, { 243,-28890 }, + + { 244,-28890 }, { 245,-28890 }, { 246,-28890 }, { 247,-28890 }, { 248,-28890 }, + { 249,-28890 }, { 250,-28890 }, { 251,-28890 }, { 252,-28890 }, { 253,-28890 }, + { 254,-28890 }, { 255,-28890 }, { 0, 131 }, { 0,62976 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-29147 }, { 49,-29147 }, { 50,-29147 }, { 51,-29147 }, + { 52,-29147 }, { 53,-29147 }, { 54,-29147 }, { 55,-29147 }, { 56,-29147 }, + { 57,-29147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-29147 }, { 66,-29147 }, + { 67,-29147 }, { 68,-29147 }, { 69,-29147 }, { 70,-29147 }, { 71,-29147 }, + { 72,-29147 }, { 73,-29147 }, { 74,-29147 }, { 75,-29147 }, { 76,-29147 }, + { 77,-29147 }, { 78,-29147 }, { 79,-29147 }, { 80,-29147 }, { 81,-29147 }, + { 82,15168 }, { 83,-29147 }, { 84,-29147 }, { 85,-29147 }, { 86,-29147 }, + + { 87,-29147 }, { 88,-29147 }, { 89,-29147 }, { 90,-29147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-29147 }, { 0, 0 }, + { 97,-29147 }, { 98,-29147 }, { 99,-29147 }, { 100,-29147 }, { 101,-29147 }, + { 102,-29147 }, { 103,-29147 }, { 104,-29147 }, { 105,-29147 }, { 106,-29147 }, + { 107,-29147 }, { 108,-29147 }, { 109,-29147 }, { 110,-29147 }, { 111,-29147 }, + { 112,-29147 }, { 113,-29147 }, { 114,15168 }, { 115,-29147 }, { 116,-29147 }, + { 117,-29147 }, { 118,-29147 }, { 119,-29147 }, { 120,-29147 }, { 121,-29147 }, + { 122,-29147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-29147 }, { 128,-29147 }, { 129,-29147 }, { 130,-29147 }, { 131,-29147 }, + { 132,-29147 }, { 133,-29147 }, { 134,-29147 }, { 135,-29147 }, { 136,-29147 }, + + { 137,-29147 }, { 138,-29147 }, { 139,-29147 }, { 140,-29147 }, { 141,-29147 }, + { 142,-29147 }, { 143,-29147 }, { 144,-29147 }, { 145,-29147 }, { 146,-29147 }, + { 147,-29147 }, { 148,-29147 }, { 149,-29147 }, { 150,-29147 }, { 151,-29147 }, + { 152,-29147 }, { 153,-29147 }, { 154,-29147 }, { 155,-29147 }, { 156,-29147 }, + { 157,-29147 }, { 158,-29147 }, { 159,-29147 }, { 160,-29147 }, { 161,-29147 }, + { 162,-29147 }, { 163,-29147 }, { 164,-29147 }, { 165,-29147 }, { 166,-29147 }, + { 167,-29147 }, { 168,-29147 }, { 169,-29147 }, { 170,-29147 }, { 171,-29147 }, + { 172,-29147 }, { 173,-29147 }, { 174,-29147 }, { 175,-29147 }, { 176,-29147 }, + { 177,-29147 }, { 178,-29147 }, { 179,-29147 }, { 180,-29147 }, { 181,-29147 }, + { 182,-29147 }, { 183,-29147 }, { 184,-29147 }, { 185,-29147 }, { 186,-29147 }, + + { 187,-29147 }, { 188,-29147 }, { 189,-29147 }, { 190,-29147 }, { 191,-29147 }, + { 192,-29147 }, { 193,-29147 }, { 194,-29147 }, { 195,-29147 }, { 196,-29147 }, + { 197,-29147 }, { 198,-29147 }, { 199,-29147 }, { 200,-29147 }, { 201,-29147 }, + { 202,-29147 }, { 203,-29147 }, { 204,-29147 }, { 205,-29147 }, { 206,-29147 }, + { 207,-29147 }, { 208,-29147 }, { 209,-29147 }, { 210,-29147 }, { 211,-29147 }, + { 212,-29147 }, { 213,-29147 }, { 214,-29147 }, { 215,-29147 }, { 216,-29147 }, + { 217,-29147 }, { 218,-29147 }, { 219,-29147 }, { 220,-29147 }, { 221,-29147 }, + { 222,-29147 }, { 223,-29147 }, { 224,-29147 }, { 225,-29147 }, { 226,-29147 }, + { 227,-29147 }, { 228,-29147 }, { 229,-29147 }, { 230,-29147 }, { 231,-29147 }, + { 232,-29147 }, { 233,-29147 }, { 234,-29147 }, { 235,-29147 }, { 236,-29147 }, + + { 237,-29147 }, { 238,-29147 }, { 239,-29147 }, { 240,-29147 }, { 241,-29147 }, + { 242,-29147 }, { 243,-29147 }, { 244,-29147 }, { 245,-29147 }, { 246,-29147 }, + { 247,-29147 }, { 248,-29147 }, { 249,-29147 }, { 250,-29147 }, { 251,-29147 }, + { 252,-29147 }, { 253,-29147 }, { 254,-29147 }, { 255,-29147 }, { 0, 0 }, + { 0,62719 }, { 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, 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 }, { 34,-26826 }, + { 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 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95, 0 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 0, 0 }, { 0,62462 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 39,-27083 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, + + { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, + { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, + { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, + { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, + { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, + { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, + { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, + { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, + { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, + { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, + { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, + { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, + { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, + { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, + + { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, + { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, + { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, + { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, + { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, + { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, + { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, + { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, + + { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, + { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, + { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, + { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, + { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, + { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 0 }, { 0,62205 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 131 }, { 0,62200 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,-25545 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32,-25545 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41,-25543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-29923 }, { 49,-29923 }, { 50,-29923 }, + { 51,-29923 }, { 52,-29923 }, { 53,-29923 }, { 54,-29923 }, { 55,-29923 }, + { 56,-29923 }, { 57,-29923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 69,-25527 }, { 65,-29923 }, + { 66,-29923 }, { 67,-29923 }, { 68,-29923 }, { 69,-29923 }, { 70,-29923 }, + { 71,-29923 }, { 72,-29923 }, { 73,-29923 }, { 74,-29923 }, { 75,-29923 }, + { 76,-29923 }, { 77,-29923 }, { 78,-29923 }, { 79,-29923 }, { 80,-29923 }, + { 81,-29923 }, { 82,14654 }, { 83,-29923 }, { 84,-29923 }, { 85,-29923 }, + { 86,-29923 }, { 87,-29923 }, { 88,-29923 }, { 89,-29923 }, { 90,-29923 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-29923 }, + { 101,-25527 }, { 97,-29923 }, { 98,-29923 }, { 99,-29923 }, { 100,-29923 }, + { 101,-29923 }, { 102,-29923 }, { 103,-29923 }, { 104,-29923 }, { 105,-29923 }, + { 106,-29923 }, { 107,-29923 }, { 108,-29923 }, { 109,-29923 }, { 110,-29923 }, + + { 111,-29923 }, { 112,-29923 }, { 113,-29923 }, { 114,14654 }, { 115,-29923 }, + { 116,-29923 }, { 117,-29923 }, { 118,-29923 }, { 119,-29923 }, { 120,-29923 }, + { 121,-29923 }, { 122,-29923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-29923 }, { 128,-29923 }, { 129,-29923 }, { 130,-29923 }, + { 131,-29923 }, { 132,-29923 }, { 133,-29923 }, { 134,-29923 }, { 135,-29923 }, + { 136,-29923 }, { 137,-29923 }, { 138,-29923 }, { 139,-29923 }, { 140,-29923 }, + { 141,-29923 }, { 142,-29923 }, { 143,-29923 }, { 144,-29923 }, { 145,-29923 }, + { 146,-29923 }, { 147,-29923 }, { 148,-29923 }, { 149,-29923 }, { 150,-29923 }, + { 151,-29923 }, { 152,-29923 }, { 153,-29923 }, { 154,-29923 }, { 155,-29923 }, + { 156,-29923 }, { 157,-29923 }, { 158,-29923 }, { 159,-29923 }, { 160,-29923 }, + + { 161,-29923 }, { 162,-29923 }, { 163,-29923 }, { 164,-29923 }, { 165,-29923 }, + { 166,-29923 }, { 167,-29923 }, { 168,-29923 }, { 169,-29923 }, { 170,-29923 }, + { 171,-29923 }, { 172,-29923 }, { 173,-29923 }, { 174,-29923 }, { 175,-29923 }, + { 176,-29923 }, { 177,-29923 }, { 178,-29923 }, { 179,-29923 }, { 180,-29923 }, + { 181,-29923 }, { 182,-29923 }, { 183,-29923 }, { 184,-29923 }, { 185,-29923 }, + { 186,-29923 }, { 187,-29923 }, { 188,-29923 }, { 189,-29923 }, { 190,-29923 }, + { 191,-29923 }, { 192,-29923 }, { 193,-29923 }, { 194,-29923 }, { 195,-29923 }, + { 196,-29923 }, { 197,-29923 }, { 198,-29923 }, { 199,-29923 }, { 200,-29923 }, + { 201,-29923 }, { 202,-29923 }, { 203,-29923 }, { 204,-29923 }, { 205,-29923 }, + { 206,-29923 }, { 207,-29923 }, { 208,-29923 }, { 209,-29923 }, { 210,-29923 }, + + { 211,-29923 }, { 212,-29923 }, { 213,-29923 }, { 214,-29923 }, { 215,-29923 }, + { 216,-29923 }, { 217,-29923 }, { 218,-29923 }, { 219,-29923 }, { 220,-29923 }, + { 221,-29923 }, { 222,-29923 }, { 223,-29923 }, { 224,-29923 }, { 225,-29923 }, + { 226,-29923 }, { 227,-29923 }, { 228,-29923 }, { 229,-29923 }, { 230,-29923 }, + { 231,-29923 }, { 232,-29923 }, { 233,-29923 }, { 234,-29923 }, { 235,-29923 }, + { 236,-29923 }, { 237,-29923 }, { 238,-29923 }, { 239,-29923 }, { 240,-29923 }, + { 241,-29923 }, { 242,-29923 }, { 243,-29923 }, { 244,-29923 }, { 245,-29923 }, + { 246,-29923 }, { 247,-29923 }, { 248,-29923 }, { 249,-29923 }, { 250,-29923 }, + { 251,-29923 }, { 252,-29923 }, { 253,-29923 }, { 254,-29923 }, { 255,-29923 }, + { 0, 131 }, { 0,61943 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-30180 }, + { 49,-30180 }, { 50,-30180 }, { 51,-30180 }, { 52,-30180 }, { 53,-30180 }, + + { 54,-30180 }, { 55,-30180 }, { 56,-30180 }, { 57,-30180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-30180 }, { 66,-30180 }, { 67,-30180 }, { 68,-30180 }, + { 69,-30180 }, { 70,-30180 }, { 71,-30180 }, { 72,-30180 }, { 73,-30180 }, + { 74,-30180 }, { 75,-30180 }, { 76,-30180 }, { 77,-30180 }, { 78,-30180 }, + { 79,-30180 }, { 80,-30180 }, { 81,-30180 }, { 82,-30180 }, { 83,-30180 }, + { 84,-30180 }, { 85,-30180 }, { 86,-30180 }, { 87,-30180 }, { 88,-30180 }, + { 89,14654 }, { 90,-30180 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-30180 }, { 0, 0 }, { 97,-30180 }, { 98,-30180 }, + { 99,-30180 }, { 100,-30180 }, { 101,-30180 }, { 102,-30180 }, { 103,-30180 }, + + { 104,-30180 }, { 105,-30180 }, { 106,-30180 }, { 107,-30180 }, { 108,-30180 }, + { 109,-30180 }, { 110,-30180 }, { 111,-30180 }, { 112,-30180 }, { 113,-30180 }, + { 114,-30180 }, { 115,-30180 }, { 116,-30180 }, { 117,-30180 }, { 118,-30180 }, + { 119,-30180 }, { 120,-30180 }, { 121,14654 }, { 122,-30180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-30180 }, { 128,-30180 }, + { 129,-30180 }, { 130,-30180 }, { 131,-30180 }, { 132,-30180 }, { 133,-30180 }, + { 134,-30180 }, { 135,-30180 }, { 136,-30180 }, { 137,-30180 }, { 138,-30180 }, + { 139,-30180 }, { 140,-30180 }, { 141,-30180 }, { 142,-30180 }, { 143,-30180 }, + { 144,-30180 }, { 145,-30180 }, { 146,-30180 }, { 147,-30180 }, { 148,-30180 }, + { 149,-30180 }, { 150,-30180 }, { 151,-30180 }, { 152,-30180 }, { 153,-30180 }, + + { 154,-30180 }, { 155,-30180 }, { 156,-30180 }, { 157,-30180 }, { 158,-30180 }, + { 159,-30180 }, { 160,-30180 }, { 161,-30180 }, { 162,-30180 }, { 163,-30180 }, + { 164,-30180 }, { 165,-30180 }, { 166,-30180 }, { 167,-30180 }, { 168,-30180 }, + { 169,-30180 }, { 170,-30180 }, { 171,-30180 }, { 172,-30180 }, { 173,-30180 }, + { 174,-30180 }, { 175,-30180 }, { 176,-30180 }, { 177,-30180 }, { 178,-30180 }, + { 179,-30180 }, { 180,-30180 }, { 181,-30180 }, { 182,-30180 }, { 183,-30180 }, + { 184,-30180 }, { 185,-30180 }, { 186,-30180 }, { 187,-30180 }, { 188,-30180 }, + { 189,-30180 }, { 190,-30180 }, { 191,-30180 }, { 192,-30180 }, { 193,-30180 }, + { 194,-30180 }, { 195,-30180 }, { 196,-30180 }, { 197,-30180 }, { 198,-30180 }, + { 199,-30180 }, { 200,-30180 }, { 201,-30180 }, { 202,-30180 }, { 203,-30180 }, + + { 204,-30180 }, { 205,-30180 }, { 206,-30180 }, { 207,-30180 }, { 208,-30180 }, + { 209,-30180 }, { 210,-30180 }, { 211,-30180 }, { 212,-30180 }, { 213,-30180 }, + { 214,-30180 }, { 215,-30180 }, { 216,-30180 }, { 217,-30180 }, { 218,-30180 }, + { 219,-30180 }, { 220,-30180 }, { 221,-30180 }, { 222,-30180 }, { 223,-30180 }, + { 224,-30180 }, { 225,-30180 }, { 226,-30180 }, { 227,-30180 }, { 228,-30180 }, + { 229,-30180 }, { 230,-30180 }, { 231,-30180 }, { 232,-30180 }, { 233,-30180 }, + { 234,-30180 }, { 235,-30180 }, { 236,-30180 }, { 237,-30180 }, { 238,-30180 }, + { 239,-30180 }, { 240,-30180 }, { 241,-30180 }, { 242,-30180 }, { 243,-30180 }, + { 244,-30180 }, { 245,-30180 }, { 246,-30180 }, { 247,-30180 }, { 248,-30180 }, + { 249,-30180 }, { 250,-30180 }, { 251,-30180 }, { 252,-30180 }, { 253,-30180 }, + + { 254,-30180 }, { 255,-30180 }, { 0, 131 }, { 0,61686 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-30437 }, { 49,-30437 }, { 50,-30437 }, { 51,-30437 }, + { 52,-30437 }, { 53,-30437 }, { 54,-30437 }, { 55,-30437 }, { 56,-30437 }, + { 57,-30437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-30437 }, { 66,-30437 }, + { 67,-30437 }, { 68,-30437 }, { 69,-30437 }, { 70,-30437 }, { 71,-30437 }, + { 72,-30437 }, { 73,-30437 }, { 74,-30437 }, { 75,14654 }, { 76,-30437 }, + { 77,-30437 }, { 78,-30437 }, { 79,-30437 }, { 80,-30437 }, { 81,-30437 }, + { 82,-30437 }, { 83,-30437 }, { 84,-30437 }, { 85,-30437 }, { 86,-30437 }, + { 87,-30437 }, { 88,-30437 }, { 89,-30437 }, { 90,-30437 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-30437 }, { 0, 0 }, + + { 97,-30437 }, { 98,-30437 }, { 99,-30437 }, { 100,-30437 }, { 101,-30437 }, + { 102,-30437 }, { 103,-30437 }, { 104,-30437 }, { 105,-30437 }, { 106,-30437 }, + { 107,14654 }, { 108,-30437 }, { 109,-30437 }, { 110,-30437 }, { 111,-30437 }, + { 112,-30437 }, { 113,-30437 }, { 114,-30437 }, { 115,-30437 }, { 116,-30437 }, + { 117,-30437 }, { 118,-30437 }, { 119,-30437 }, { 120,-30437 }, { 121,-30437 }, + { 122,-30437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-30437 }, { 128,-30437 }, { 129,-30437 }, { 130,-30437 }, { 131,-30437 }, + { 132,-30437 }, { 133,-30437 }, { 134,-30437 }, { 135,-30437 }, { 136,-30437 }, + { 137,-30437 }, { 138,-30437 }, { 139,-30437 }, { 140,-30437 }, { 141,-30437 }, + { 142,-30437 }, { 143,-30437 }, { 144,-30437 }, { 145,-30437 }, { 146,-30437 }, + + { 147,-30437 }, { 148,-30437 }, { 149,-30437 }, { 150,-30437 }, { 151,-30437 }, + { 152,-30437 }, { 153,-30437 }, { 154,-30437 }, { 155,-30437 }, { 156,-30437 }, + { 157,-30437 }, { 158,-30437 }, { 159,-30437 }, { 160,-30437 }, { 161,-30437 }, + { 162,-30437 }, { 163,-30437 }, { 164,-30437 }, { 165,-30437 }, { 166,-30437 }, + { 167,-30437 }, { 168,-30437 }, { 169,-30437 }, { 170,-30437 }, { 171,-30437 }, + { 172,-30437 }, { 173,-30437 }, { 174,-30437 }, { 175,-30437 }, { 176,-30437 }, + { 177,-30437 }, { 178,-30437 }, { 179,-30437 }, { 180,-30437 }, { 181,-30437 }, + { 182,-30437 }, { 183,-30437 }, { 184,-30437 }, { 185,-30437 }, { 186,-30437 }, + { 187,-30437 }, { 188,-30437 }, { 189,-30437 }, { 190,-30437 }, { 191,-30437 }, + { 192,-30437 }, { 193,-30437 }, { 194,-30437 }, { 195,-30437 }, { 196,-30437 }, + + { 197,-30437 }, { 198,-30437 }, { 199,-30437 }, { 200,-30437 }, { 201,-30437 }, + { 202,-30437 }, { 203,-30437 }, { 204,-30437 }, { 205,-30437 }, { 206,-30437 }, + { 207,-30437 }, { 208,-30437 }, { 209,-30437 }, { 210,-30437 }, { 211,-30437 }, + { 212,-30437 }, { 213,-30437 }, { 214,-30437 }, { 215,-30437 }, { 216,-30437 }, + { 217,-30437 }, { 218,-30437 }, { 219,-30437 }, { 220,-30437 }, { 221,-30437 }, + { 222,-30437 }, { 223,-30437 }, { 224,-30437 }, { 225,-30437 }, { 226,-30437 }, + { 227,-30437 }, { 228,-30437 }, { 229,-30437 }, { 230,-30437 }, { 231,-30437 }, + { 232,-30437 }, { 233,-30437 }, { 234,-30437 }, { 235,-30437 }, { 236,-30437 }, + { 237,-30437 }, { 238,-30437 }, { 239,-30437 }, { 240,-30437 }, { 241,-30437 }, + { 242,-30437 }, { 243,-30437 }, { 244,-30437 }, { 245,-30437 }, { 246,-30437 }, + + { 247,-30437 }, { 248,-30437 }, { 249,-30437 }, { 250,-30437 }, { 251,-30437 }, + { 252,-30437 }, { 253,-30437 }, { 254,-30437 }, { 255,-30437 }, { 0, 131 }, + { 0,61429 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-30694 }, { 49,-30694 }, + { 50,-30694 }, { 51,-30694 }, { 52,-30694 }, { 53,-30694 }, { 54,-30694 }, + { 55,-30694 }, { 56,-30694 }, { 57,-30694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,14654 }, { 66,-30694 }, { 67,-30694 }, { 68,-30694 }, { 69,-30694 }, + { 70,-30694 }, { 71,-30694 }, { 72,-30694 }, { 73,-30694 }, { 74,-30694 }, + { 75,-30694 }, { 76,-30694 }, { 77,-30694 }, { 78,-30694 }, { 79,-30694 }, + { 80,-30694 }, { 81,-30694 }, { 82,-30694 }, { 83,-30694 }, { 84,-30694 }, + { 85,-30694 }, { 86,-30694 }, { 87,-30694 }, { 88,-30694 }, { 89,-30694 }, + + { 90,-30694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-30694 }, { 0, 0 }, { 97,14654 }, { 98,-30694 }, { 99,-30694 }, + { 100,-30694 }, { 101,-30694 }, { 102,-30694 }, { 103,-30694 }, { 104,-30694 }, + { 105,-30694 }, { 106,-30694 }, { 107,-30694 }, { 108,-30694 }, { 109,-30694 }, + { 110,-30694 }, { 111,-30694 }, { 112,-30694 }, { 113,-30694 }, { 114,-30694 }, + { 115,-30694 }, { 116,-30694 }, { 117,-30694 }, { 118,-30694 }, { 119,-30694 }, + { 120,-30694 }, { 121,-30694 }, { 122,-30694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-30694 }, { 128,-30694 }, { 129,-30694 }, + { 130,-30694 }, { 131,-30694 }, { 132,-30694 }, { 133,-30694 }, { 134,-30694 }, + { 135,-30694 }, { 136,-30694 }, { 137,-30694 }, { 138,-30694 }, { 139,-30694 }, + + { 140,-30694 }, { 141,-30694 }, { 142,-30694 }, { 143,-30694 }, { 144,-30694 }, + { 145,-30694 }, { 146,-30694 }, { 147,-30694 }, { 148,-30694 }, { 149,-30694 }, + { 150,-30694 }, { 151,-30694 }, { 152,-30694 }, { 153,-30694 }, { 154,-30694 }, + { 155,-30694 }, { 156,-30694 }, { 157,-30694 }, { 158,-30694 }, { 159,-30694 }, + { 160,-30694 }, { 161,-30694 }, { 162,-30694 }, { 163,-30694 }, { 164,-30694 }, + { 165,-30694 }, { 166,-30694 }, { 167,-30694 }, { 168,-30694 }, { 169,-30694 }, + { 170,-30694 }, { 171,-30694 }, { 172,-30694 }, { 173,-30694 }, { 174,-30694 }, + { 175,-30694 }, { 176,-30694 }, { 177,-30694 }, { 178,-30694 }, { 179,-30694 }, + { 180,-30694 }, { 181,-30694 }, { 182,-30694 }, { 183,-30694 }, { 184,-30694 }, + { 185,-30694 }, { 186,-30694 }, { 187,-30694 }, { 188,-30694 }, { 189,-30694 }, + + { 190,-30694 }, { 191,-30694 }, { 192,-30694 }, { 193,-30694 }, { 194,-30694 }, + { 195,-30694 }, { 196,-30694 }, { 197,-30694 }, { 198,-30694 }, { 199,-30694 }, + { 200,-30694 }, { 201,-30694 }, { 202,-30694 }, { 203,-30694 }, { 204,-30694 }, + { 205,-30694 }, { 206,-30694 }, { 207,-30694 }, { 208,-30694 }, { 209,-30694 }, + { 210,-30694 }, { 211,-30694 }, { 212,-30694 }, { 213,-30694 }, { 214,-30694 }, + { 215,-30694 }, { 216,-30694 }, { 217,-30694 }, { 218,-30694 }, { 219,-30694 }, + { 220,-30694 }, { 221,-30694 }, { 222,-30694 }, { 223,-30694 }, { 224,-30694 }, + { 225,-30694 }, { 226,-30694 }, { 227,-30694 }, { 228,-30694 }, { 229,-30694 }, + { 230,-30694 }, { 231,-30694 }, { 232,-30694 }, { 233,-30694 }, { 234,-30694 }, + { 235,-30694 }, { 236,-30694 }, { 237,-30694 }, { 238,-30694 }, { 239,-30694 }, + + { 240,-30694 }, { 241,-30694 }, { 242,-30694 }, { 243,-30694 }, { 244,-30694 }, + { 245,-30694 }, { 246,-30694 }, { 247,-30694 }, { 248,-30694 }, { 249,-30694 }, + { 250,-30694 }, { 251,-30694 }, { 252,-30694 }, { 253,-30694 }, { 254,-30694 }, + { 255,-30694 }, { 0, 48 }, { 0,61172 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-30951 }, { 49,-30951 }, { 50,-30951 }, { 51,-30951 }, { 52,-30951 }, + { 53,-30951 }, { 54,-30951 }, { 55,-30951 }, { 56,-30951 }, { 57,-30951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-30951 }, { 66,-30951 }, { 67,-30951 }, + { 68,-30951 }, { 69,-30951 }, { 70,-30951 }, { 71,-30951 }, { 72,-30951 }, + { 73,-30951 }, { 74,-30951 }, { 75,-30951 }, { 76,-30951 }, { 77,-30951 }, + { 78,-30951 }, { 79,-30951 }, { 80,-30951 }, { 81,-30951 }, { 82,-30951 }, + + { 83,-30951 }, { 84,-30951 }, { 85,-30951 }, { 86,-30951 }, { 87,-30951 }, + { 88,-30951 }, { 89,-30951 }, { 90,-30951 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-30951 }, { 0, 0 }, { 97,-30951 }, + { 98,-30951 }, { 99,-30951 }, { 100,-30951 }, { 101,-30951 }, { 102,-30951 }, + { 103,-30951 }, { 104,-30951 }, { 105,-30951 }, { 106,-30951 }, { 107,-30951 }, + { 108,-30951 }, { 109,-30951 }, { 110,-30951 }, { 111,-30951 }, { 112,-30951 }, + { 113,-30951 }, { 114,-30951 }, { 115,-30951 }, { 116,-30951 }, { 117,-30951 }, + { 118,-30951 }, { 119,-30951 }, { 120,-30951 }, { 121,-30951 }, { 122,-30951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-30951 }, + { 128,-30951 }, { 129,-30951 }, { 130,-30951 }, { 131,-30951 }, { 132,-30951 }, + + { 133,-30951 }, { 134,-30951 }, { 135,-30951 }, { 136,-30951 }, { 137,-30951 }, + { 138,-30951 }, { 139,-30951 }, { 140,-30951 }, { 141,-30951 }, { 142,-30951 }, + { 143,-30951 }, { 144,-30951 }, { 145,-30951 }, { 146,-30951 }, { 147,-30951 }, + { 148,-30951 }, { 149,-30951 }, { 150,-30951 }, { 151,-30951 }, { 152,-30951 }, + { 153,-30951 }, { 154,-30951 }, { 155,-30951 }, { 156,-30951 }, { 157,-30951 }, + { 158,-30951 }, { 159,-30951 }, { 160,-30951 }, { 161,-30951 }, { 162,-30951 }, + { 163,-30951 }, { 164,-30951 }, { 165,-30951 }, { 166,-30951 }, { 167,-30951 }, + { 168,-30951 }, { 169,-30951 }, { 170,-30951 }, { 171,-30951 }, { 172,-30951 }, + { 173,-30951 }, { 174,-30951 }, { 175,-30951 }, { 176,-30951 }, { 177,-30951 }, + { 178,-30951 }, { 179,-30951 }, { 180,-30951 }, { 181,-30951 }, { 182,-30951 }, + + { 183,-30951 }, { 184,-30951 }, { 185,-30951 }, { 186,-30951 }, { 187,-30951 }, + { 188,-30951 }, { 189,-30951 }, { 190,-30951 }, { 191,-30951 }, { 192,-30951 }, + { 193,-30951 }, { 194,-30951 }, { 195,-30951 }, { 196,-30951 }, { 197,-30951 }, + { 198,-30951 }, { 199,-30951 }, { 200,-30951 }, { 201,-30951 }, { 202,-30951 }, + { 203,-30951 }, { 204,-30951 }, { 205,-30951 }, { 206,-30951 }, { 207,-30951 }, + { 208,-30951 }, { 209,-30951 }, { 210,-30951 }, { 211,-30951 }, { 212,-30951 }, + { 213,-30951 }, { 214,-30951 }, { 215,-30951 }, { 216,-30951 }, { 217,-30951 }, + { 218,-30951 }, { 219,-30951 }, { 220,-30951 }, { 221,-30951 }, { 222,-30951 }, + { 223,-30951 }, { 224,-30951 }, { 225,-30951 }, { 226,-30951 }, { 227,-30951 }, + { 228,-30951 }, { 229,-30951 }, { 230,-30951 }, { 231,-30951 }, { 232,-30951 }, + + { 233,-30951 }, { 234,-30951 }, { 235,-30951 }, { 236,-30951 }, { 237,-30951 }, + { 238,-30951 }, { 239,-30951 }, { 240,-30951 }, { 241,-30951 }, { 242,-30951 }, + { 243,-30951 }, { 244,-30951 }, { 245,-30951 }, { 246,-30951 }, { 247,-30951 }, + { 248,-30951 }, { 249,-30951 }, { 250,-30951 }, { 251,-30951 }, { 252,-30951 }, + { 253,-30951 }, { 254,-30951 }, { 255,-30951 }, { 0, 131 }, { 0,60915 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-31208 }, { 49,-31208 }, { 50,-31208 }, + { 51,-31208 }, { 52,-31208 }, { 53,-31208 }, { 54,-31208 }, { 55,-31208 }, + { 56,-31208 }, { 57,-31208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-31208 }, + { 66,-31208 }, { 67,-31208 }, { 68,-31208 }, { 69,-31208 }, { 70,-31208 }, + { 71,-31208 }, { 72,14397 }, { 73,-31208 }, { 74,-31208 }, { 75,-31208 }, + + { 76,-31208 }, { 77,-31208 }, { 78,-31208 }, { 79,-31208 }, { 80,-31208 }, + { 81,-31208 }, { 82,-31208 }, { 83,-31208 }, { 84,-31208 }, { 85,-31208 }, + { 86,-31208 }, { 87,-31208 }, { 88,-31208 }, { 89,-31208 }, { 90,-31208 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-31208 }, + { 0, 0 }, { 97,-31208 }, { 98,-31208 }, { 99,-31208 }, { 100,-31208 }, + { 101,-31208 }, { 102,-31208 }, { 103,-31208 }, { 104,14397 }, { 105,-31208 }, + { 106,-31208 }, { 107,-31208 }, { 108,-31208 }, { 109,-31208 }, { 110,-31208 }, + { 111,-31208 }, { 112,-31208 }, { 113,-31208 }, { 114,-31208 }, { 115,-31208 }, + { 116,-31208 }, { 117,-31208 }, { 118,-31208 }, { 119,-31208 }, { 120,-31208 }, + { 121,-31208 }, { 122,-31208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-31208 }, { 128,-31208 }, { 129,-31208 }, { 130,-31208 }, + { 131,-31208 }, { 132,-31208 }, { 133,-31208 }, { 134,-31208 }, { 135,-31208 }, + { 136,-31208 }, { 137,-31208 }, { 138,-31208 }, { 139,-31208 }, { 140,-31208 }, + { 141,-31208 }, { 142,-31208 }, { 143,-31208 }, { 144,-31208 }, { 145,-31208 }, + { 146,-31208 }, { 147,-31208 }, { 148,-31208 }, { 149,-31208 }, { 150,-31208 }, + { 151,-31208 }, { 152,-31208 }, { 153,-31208 }, { 154,-31208 }, { 155,-31208 }, + { 156,-31208 }, { 157,-31208 }, { 158,-31208 }, { 159,-31208 }, { 160,-31208 }, + { 161,-31208 }, { 162,-31208 }, { 163,-31208 }, { 164,-31208 }, { 165,-31208 }, + { 166,-31208 }, { 167,-31208 }, { 168,-31208 }, { 169,-31208 }, { 170,-31208 }, + { 171,-31208 }, { 172,-31208 }, { 173,-31208 }, { 174,-31208 }, { 175,-31208 }, + + { 176,-31208 }, { 177,-31208 }, { 178,-31208 }, { 179,-31208 }, { 180,-31208 }, + { 181,-31208 }, { 182,-31208 }, { 183,-31208 }, { 184,-31208 }, { 185,-31208 }, + { 186,-31208 }, { 187,-31208 }, { 188,-31208 }, { 189,-31208 }, { 190,-31208 }, + { 191,-31208 }, { 192,-31208 }, { 193,-31208 }, { 194,-31208 }, { 195,-31208 }, + { 196,-31208 }, { 197,-31208 }, { 198,-31208 }, { 199,-31208 }, { 200,-31208 }, + { 201,-31208 }, { 202,-31208 }, { 203,-31208 }, { 204,-31208 }, { 205,-31208 }, + { 206,-31208 }, { 207,-31208 }, { 208,-31208 }, { 209,-31208 }, { 210,-31208 }, + { 211,-31208 }, { 212,-31208 }, { 213,-31208 }, { 214,-31208 }, { 215,-31208 }, + { 216,-31208 }, { 217,-31208 }, { 218,-31208 }, { 219,-31208 }, { 220,-31208 }, + { 221,-31208 }, { 222,-31208 }, { 223,-31208 }, { 224,-31208 }, { 225,-31208 }, + + { 226,-31208 }, { 227,-31208 }, { 228,-31208 }, { 229,-31208 }, { 230,-31208 }, + { 231,-31208 }, { 232,-31208 }, { 233,-31208 }, { 234,-31208 }, { 235,-31208 }, + { 236,-31208 }, { 237,-31208 }, { 238,-31208 }, { 239,-31208 }, { 240,-31208 }, + { 241,-31208 }, { 242,-31208 }, { 243,-31208 }, { 244,-31208 }, { 245,-31208 }, + { 246,-31208 }, { 247,-31208 }, { 248,-31208 }, { 249,-31208 }, { 250,-31208 }, + { 251,-31208 }, { 252,-31208 }, { 253,-31208 }, { 254,-31208 }, { 255,-31208 }, + { 0, 131 }, { 0,60658 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-31465 }, + { 49,-31465 }, { 50,-31465 }, { 51,-31465 }, { 52,-31465 }, { 53,-31465 }, + { 54,-31465 }, { 55,-31465 }, { 56,-31465 }, { 57,-31465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-31465 }, { 66,-31465 }, { 67,-31465 }, { 68,-31465 }, + + { 69,-31465 }, { 70,-31465 }, { 71,-31465 }, { 72,-31465 }, { 73,-31465 }, + { 74,-31465 }, { 75,-31465 }, { 76,-31465 }, { 77,-31465 }, { 78,-31465 }, + { 79,-31465 }, { 80,-31465 }, { 81,-31465 }, { 82,-31465 }, { 83,14397 }, + { 84,-31465 }, { 85,-31465 }, { 86,-31465 }, { 87,-31465 }, { 88,-31465 }, + { 89,-31465 }, { 90,-31465 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-31465 }, { 0, 0 }, { 97,-31465 }, { 98,-31465 }, + { 99,-31465 }, { 100,-31465 }, { 101,-31465 }, { 102,-31465 }, { 103,-31465 }, + { 104,-31465 }, { 105,-31465 }, { 106,-31465 }, { 107,-31465 }, { 108,-31465 }, + { 109,-31465 }, { 110,-31465 }, { 111,-31465 }, { 112,-31465 }, { 113,-31465 }, + { 114,-31465 }, { 115,14397 }, { 116,-31465 }, { 117,-31465 }, { 118,-31465 }, + + { 119,-31465 }, { 120,-31465 }, { 121,-31465 }, { 122,-31465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-31465 }, { 128,-31465 }, + { 129,-31465 }, { 130,-31465 }, { 131,-31465 }, { 132,-31465 }, { 133,-31465 }, + { 134,-31465 }, { 135,-31465 }, { 136,-31465 }, { 137,-31465 }, { 138,-31465 }, + { 139,-31465 }, { 140,-31465 }, { 141,-31465 }, { 142,-31465 }, { 143,-31465 }, + { 144,-31465 }, { 145,-31465 }, { 146,-31465 }, { 147,-31465 }, { 148,-31465 }, + { 149,-31465 }, { 150,-31465 }, { 151,-31465 }, { 152,-31465 }, { 153,-31465 }, + { 154,-31465 }, { 155,-31465 }, { 156,-31465 }, { 157,-31465 }, { 158,-31465 }, + { 159,-31465 }, { 160,-31465 }, { 161,-31465 }, { 162,-31465 }, { 163,-31465 }, + { 164,-31465 }, { 165,-31465 }, { 166,-31465 }, { 167,-31465 }, { 168,-31465 }, + + { 169,-31465 }, { 170,-31465 }, { 171,-31465 }, { 172,-31465 }, { 173,-31465 }, + { 174,-31465 }, { 175,-31465 }, { 176,-31465 }, { 177,-31465 }, { 178,-31465 }, + { 179,-31465 }, { 180,-31465 }, { 181,-31465 }, { 182,-31465 }, { 183,-31465 }, + { 184,-31465 }, { 185,-31465 }, { 186,-31465 }, { 187,-31465 }, { 188,-31465 }, + { 189,-31465 }, { 190,-31465 }, { 191,-31465 }, { 192,-31465 }, { 193,-31465 }, + { 194,-31465 }, { 195,-31465 }, { 196,-31465 }, { 197,-31465 }, { 198,-31465 }, + { 199,-31465 }, { 200,-31465 }, { 201,-31465 }, { 202,-31465 }, { 203,-31465 }, + { 204,-31465 }, { 205,-31465 }, { 206,-31465 }, { 207,-31465 }, { 208,-31465 }, + { 209,-31465 }, { 210,-31465 }, { 211,-31465 }, { 212,-31465 }, { 213,-31465 }, + { 214,-31465 }, { 215,-31465 }, { 216,-31465 }, { 217,-31465 }, { 218,-31465 }, + + { 219,-31465 }, { 220,-31465 }, { 221,-31465 }, { 222,-31465 }, { 223,-31465 }, + { 224,-31465 }, { 225,-31465 }, { 226,-31465 }, { 227,-31465 }, { 228,-31465 }, + { 229,-31465 }, { 230,-31465 }, { 231,-31465 }, { 232,-31465 }, { 233,-31465 }, + { 234,-31465 }, { 235,-31465 }, { 236,-31465 }, { 237,-31465 }, { 238,-31465 }, + { 239,-31465 }, { 240,-31465 }, { 241,-31465 }, { 242,-31465 }, { 243,-31465 }, + { 244,-31465 }, { 245,-31465 }, { 246,-31465 }, { 247,-31465 }, { 248,-31465 }, + { 249,-31465 }, { 250,-31465 }, { 251,-31465 }, { 252,-31465 }, { 253,-31465 }, + { 254,-31465 }, { 255,-31465 }, { 0, 131 }, { 0,60401 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-31722 }, { 49,-31722 }, { 50,-31722 }, { 51,-31722 }, + { 52,-31722 }, { 53,-31722 }, { 54,-31722 }, { 55,-31722 }, { 56,-31722 }, + { 57,-31722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-31722 }, { 66,-31722 }, + { 67,-31722 }, { 68,-31722 }, { 69,14397 }, { 70,-31722 }, { 71,-31722 }, + { 72,-31722 }, { 73,-31722 }, { 74,-31722 }, { 75,-31722 }, { 76,-31722 }, + { 77,-31722 }, { 78,-31722 }, { 79,-31722 }, { 80,-31722 }, { 81,-31722 }, + { 82,-31722 }, { 83,-31722 }, { 84,-31722 }, { 85,-31722 }, { 86,-31722 }, + { 87,-31722 }, { 88,-31722 }, { 89,-31722 }, { 90,-31722 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-31722 }, { 0, 0 }, + { 97,-31722 }, { 98,-31722 }, { 99,-31722 }, { 100,-31722 }, { 101,14397 }, + { 102,-31722 }, { 103,-31722 }, { 104,-31722 }, { 105,-31722 }, { 106,-31722 }, + { 107,-31722 }, { 108,-31722 }, { 109,-31722 }, { 110,-31722 }, { 111,-31722 }, + + { 112,-31722 }, { 113,-31722 }, { 114,-31722 }, { 115,-31722 }, { 116,-31722 }, + { 117,-31722 }, { 118,-31722 }, { 119,-31722 }, { 120,-31722 }, { 121,-31722 }, + { 122,-31722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-31722 }, { 128,-31722 }, { 129,-31722 }, { 130,-31722 }, { 131,-31722 }, + { 132,-31722 }, { 133,-31722 }, { 134,-31722 }, { 135,-31722 }, { 136,-31722 }, + { 137,-31722 }, { 138,-31722 }, { 139,-31722 }, { 140,-31722 }, { 141,-31722 }, + { 142,-31722 }, { 143,-31722 }, { 144,-31722 }, { 145,-31722 }, { 146,-31722 }, + { 147,-31722 }, { 148,-31722 }, { 149,-31722 }, { 150,-31722 }, { 151,-31722 }, + { 152,-31722 }, { 153,-31722 }, { 154,-31722 }, { 155,-31722 }, { 156,-31722 }, + { 157,-31722 }, { 158,-31722 }, { 159,-31722 }, { 160,-31722 }, { 161,-31722 }, + + { 162,-31722 }, { 163,-31722 }, { 164,-31722 }, { 165,-31722 }, { 166,-31722 }, + { 167,-31722 }, { 168,-31722 }, { 169,-31722 }, { 170,-31722 }, { 171,-31722 }, + { 172,-31722 }, { 173,-31722 }, { 174,-31722 }, { 175,-31722 }, { 176,-31722 }, + { 177,-31722 }, { 178,-31722 }, { 179,-31722 }, { 180,-31722 }, { 181,-31722 }, + { 182,-31722 }, { 183,-31722 }, { 184,-31722 }, { 185,-31722 }, { 186,-31722 }, + { 187,-31722 }, { 188,-31722 }, { 189,-31722 }, { 190,-31722 }, { 191,-31722 }, + { 192,-31722 }, { 193,-31722 }, { 194,-31722 }, { 195,-31722 }, { 196,-31722 }, + { 197,-31722 }, { 198,-31722 }, { 199,-31722 }, { 200,-31722 }, { 201,-31722 }, + { 202,-31722 }, { 203,-31722 }, { 204,-31722 }, { 205,-31722 }, { 206,-31722 }, + { 207,-31722 }, { 208,-31722 }, { 209,-31722 }, { 210,-31722 }, { 211,-31722 }, + + { 212,-31722 }, { 213,-31722 }, { 214,-31722 }, { 215,-31722 }, { 216,-31722 }, + { 217,-31722 }, { 218,-31722 }, { 219,-31722 }, { 220,-31722 }, { 221,-31722 }, + { 222,-31722 }, { 223,-31722 }, { 224,-31722 }, { 225,-31722 }, { 226,-31722 }, + { 227,-31722 }, { 228,-31722 }, { 229,-31722 }, { 230,-31722 }, { 231,-31722 }, + { 232,-31722 }, { 233,-31722 }, { 234,-31722 }, { 235,-31722 }, { 236,-31722 }, + { 237,-31722 }, { 238,-31722 }, { 239,-31722 }, { 240,-31722 }, { 241,-31722 }, + { 242,-31722 }, { 243,-31722 }, { 244,-31722 }, { 245,-31722 }, { 246,-31722 }, + { 247,-31722 }, { 248,-31722 }, { 249,-31722 }, { 250,-31722 }, { 251,-31722 }, + { 252,-31722 }, { 253,-31722 }, { 254,-31722 }, { 255,-31722 }, { 0, 131 }, + { 0,60144 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-31979 }, { 49,-31979 }, + { 50,-31979 }, { 51,-31979 }, { 52,-31979 }, { 53,-31979 }, { 54,-31979 }, + + { 55,-31979 }, { 56,-31979 }, { 57,-31979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-31979 }, { 66,-31979 }, { 67,-31979 }, { 68,-31979 }, { 69,-31979 }, + { 70,-31979 }, { 71,-31979 }, { 72,-31979 }, { 73,-31979 }, { 74,-31979 }, + { 75,-31979 }, { 76,-31979 }, { 77,-31979 }, { 78,-31979 }, { 79,-31979 }, + { 80,-31979 }, { 81,-31979 }, { 82,-31979 }, { 83,-31979 }, { 84,14397 }, + { 85,-31979 }, { 86,-31979 }, { 87,-31979 }, { 88,-31979 }, { 89,-31979 }, + { 90,-31979 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-31979 }, { 0, 0 }, { 97,-31979 }, { 98,-31979 }, { 99,-31979 }, + { 100,-31979 }, { 101,-31979 }, { 102,-31979 }, { 103,-31979 }, { 104,-31979 }, + + { 105,-31979 }, { 106,-31979 }, { 107,-31979 }, { 108,-31979 }, { 109,-31979 }, + { 110,-31979 }, { 111,-31979 }, { 112,-31979 }, { 113,-31979 }, { 114,-31979 }, + { 115,-31979 }, { 116,14397 }, { 117,-31979 }, { 118,-31979 }, { 119,-31979 }, + { 120,-31979 }, { 121,-31979 }, { 122,-31979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-31979 }, { 128,-31979 }, { 129,-31979 }, + { 130,-31979 }, { 131,-31979 }, { 132,-31979 }, { 133,-31979 }, { 134,-31979 }, + { 135,-31979 }, { 136,-31979 }, { 137,-31979 }, { 138,-31979 }, { 139,-31979 }, + { 140,-31979 }, { 141,-31979 }, { 142,-31979 }, { 143,-31979 }, { 144,-31979 }, + { 145,-31979 }, { 146,-31979 }, { 147,-31979 }, { 148,-31979 }, { 149,-31979 }, + { 150,-31979 }, { 151,-31979 }, { 152,-31979 }, { 153,-31979 }, { 154,-31979 }, + + { 155,-31979 }, { 156,-31979 }, { 157,-31979 }, { 158,-31979 }, { 159,-31979 }, + { 160,-31979 }, { 161,-31979 }, { 162,-31979 }, { 163,-31979 }, { 164,-31979 }, + { 165,-31979 }, { 166,-31979 }, { 167,-31979 }, { 168,-31979 }, { 169,-31979 }, + { 170,-31979 }, { 171,-31979 }, { 172,-31979 }, { 173,-31979 }, { 174,-31979 }, + { 175,-31979 }, { 176,-31979 }, { 177,-31979 }, { 178,-31979 }, { 179,-31979 }, + { 180,-31979 }, { 181,-31979 }, { 182,-31979 }, { 183,-31979 }, { 184,-31979 }, + { 185,-31979 }, { 186,-31979 }, { 187,-31979 }, { 188,-31979 }, { 189,-31979 }, + { 190,-31979 }, { 191,-31979 }, { 192,-31979 }, { 193,-31979 }, { 194,-31979 }, + { 195,-31979 }, { 196,-31979 }, { 197,-31979 }, { 198,-31979 }, { 199,-31979 }, + { 200,-31979 }, { 201,-31979 }, { 202,-31979 }, { 203,-31979 }, { 204,-31979 }, + + { 205,-31979 }, { 206,-31979 }, { 207,-31979 }, { 208,-31979 }, { 209,-31979 }, + { 210,-31979 }, { 211,-31979 }, { 212,-31979 }, { 213,-31979 }, { 214,-31979 }, + { 215,-31979 }, { 216,-31979 }, { 217,-31979 }, { 218,-31979 }, { 219,-31979 }, + { 220,-31979 }, { 221,-31979 }, { 222,-31979 }, { 223,-31979 }, { 224,-31979 }, + { 225,-31979 }, { 226,-31979 }, { 227,-31979 }, { 228,-31979 }, { 229,-31979 }, + { 230,-31979 }, { 231,-31979 }, { 232,-31979 }, { 233,-31979 }, { 234,-31979 }, + { 235,-31979 }, { 236,-31979 }, { 237,-31979 }, { 238,-31979 }, { 239,-31979 }, + { 240,-31979 }, { 241,-31979 }, { 242,-31979 }, { 243,-31979 }, { 244,-31979 }, + { 245,-31979 }, { 246,-31979 }, { 247,-31979 }, { 248,-31979 }, { 249,-31979 }, + { 250,-31979 }, { 251,-31979 }, { 252,-31979 }, { 253,-31979 }, { 254,-31979 }, + + { 255,-31979 }, { 0, 131 }, { 0,59887 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-32236 }, { 49,-32236 }, { 50,-32236 }, { 51,-32236 }, { 52,-32236 }, + { 53,-32236 }, { 54,-32236 }, { 55,-32236 }, { 56,-32236 }, { 57,-32236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-32236 }, { 66,-32236 }, { 67,-32236 }, + { 68,-32236 }, { 69,-32236 }, { 70,-32236 }, { 71,-32236 }, { 72,-32236 }, + { 73,14397 }, { 74,-32236 }, { 75,-32236 }, { 76,-32236 }, { 77,-32236 }, + { 78,-32236 }, { 79,-32236 }, { 80,-32236 }, { 81,-32236 }, { 82,-32236 }, + { 83,-32236 }, { 84,-32236 }, { 85,-32236 }, { 86,-32236 }, { 87,-32236 }, + { 88,-32236 }, { 89,-32236 }, { 90,-32236 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-32236 }, { 0, 0 }, { 97,-32236 }, + + { 98,-32236 }, { 99,-32236 }, { 100,-32236 }, { 101,-32236 }, { 102,-32236 }, + { 103,-32236 }, { 104,-32236 }, { 105,14397 }, { 106,-32236 }, { 107,-32236 }, + { 108,-32236 }, { 109,-32236 }, { 110,-32236 }, { 111,-32236 }, { 112,-32236 }, + { 113,-32236 }, { 114,-32236 }, { 115,-32236 }, { 116,-32236 }, { 117,-32236 }, + { 118,-32236 }, { 119,-32236 }, { 120,-32236 }, { 121,-32236 }, { 122,-32236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-32236 }, + { 128,-32236 }, { 129,-32236 }, { 130,-32236 }, { 131,-32236 }, { 132,-32236 }, + { 133,-32236 }, { 134,-32236 }, { 135,-32236 }, { 136,-32236 }, { 137,-32236 }, + { 138,-32236 }, { 139,-32236 }, { 140,-32236 }, { 141,-32236 }, { 142,-32236 }, + { 143,-32236 }, { 144,-32236 }, { 145,-32236 }, { 146,-32236 }, { 147,-32236 }, + + { 148,-32236 }, { 149,-32236 }, { 150,-32236 }, { 151,-32236 }, { 152,-32236 }, + { 153,-32236 }, { 154,-32236 }, { 155,-32236 }, { 156,-32236 }, { 157,-32236 }, + { 158,-32236 }, { 159,-32236 }, { 160,-32236 }, { 161,-32236 }, { 162,-32236 }, + { 163,-32236 }, { 164,-32236 }, { 165,-32236 }, { 166,-32236 }, { 167,-32236 }, + { 168,-32236 }, { 169,-32236 }, { 170,-32236 }, { 171,-32236 }, { 172,-32236 }, + { 173,-32236 }, { 174,-32236 }, { 175,-32236 }, { 176,-32236 }, { 177,-32236 }, + { 178,-32236 }, { 179,-32236 }, { 180,-32236 }, { 181,-32236 }, { 182,-32236 }, + { 183,-32236 }, { 184,-32236 }, { 185,-32236 }, { 186,-32236 }, { 187,-32236 }, + { 188,-32236 }, { 189,-32236 }, { 190,-32236 }, { 191,-32236 }, { 192,-32236 }, + { 193,-32236 }, { 194,-32236 }, { 195,-32236 }, { 196,-32236 }, { 197,-32236 }, + + { 198,-32236 }, { 199,-32236 }, { 200,-32236 }, { 201,-32236 }, { 202,-32236 }, + { 203,-32236 }, { 204,-32236 }, { 205,-32236 }, { 206,-32236 }, { 207,-32236 }, + { 208,-32236 }, { 209,-32236 }, { 210,-32236 }, { 211,-32236 }, { 212,-32236 }, + { 213,-32236 }, { 214,-32236 }, { 215,-32236 }, { 216,-32236 }, { 217,-32236 }, + { 218,-32236 }, { 219,-32236 }, { 220,-32236 }, { 221,-32236 }, { 222,-32236 }, + { 223,-32236 }, { 224,-32236 }, { 225,-32236 }, { 226,-32236 }, { 227,-32236 }, + { 228,-32236 }, { 229,-32236 }, { 230,-32236 }, { 231,-32236 }, { 232,-32236 }, + { 233,-32236 }, { 234,-32236 }, { 235,-32236 }, { 236,-32236 }, { 237,-32236 }, + { 238,-32236 }, { 239,-32236 }, { 240,-32236 }, { 241,-32236 }, { 242,-32236 }, + { 243,-32236 }, { 244,-32236 }, { 245,-32236 }, { 246,-32236 }, { 247,-32236 }, + + { 248,-32236 }, { 249,-32236 }, { 250,-32236 }, { 251,-32236 }, { 252,-32236 }, + { 253,-32236 }, { 254,-32236 }, { 255,-32236 }, { 0, 131 }, { 0,59630 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-32493 }, { 49,-32493 }, { 50,-32493 }, + { 51,-32493 }, { 52,-32493 }, { 53,-32493 }, { 54,-32493 }, { 55,-32493 }, + { 56,-32493 }, { 57,-32493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,14397 }, + { 66,-32493 }, { 67,-32493 }, { 68,-32493 }, { 69,-32493 }, { 70,-32493 }, + { 71,-32493 }, { 72,-32493 }, { 73,-32493 }, { 74,-32493 }, { 75,-32493 }, + { 76,-32493 }, { 77,-32493 }, { 78,-32493 }, { 79,-32493 }, { 80,-32493 }, + { 81,-32493 }, { 82,-32493 }, { 83,-32493 }, { 84,-32493 }, { 85,-32493 }, + { 86,-32493 }, { 87,-32493 }, { 88,-32493 }, { 89,-32493 }, { 90,-32493 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-32493 }, + { 0, 0 }, { 97,14397 }, { 98,-32493 }, { 99,-32493 }, { 100,-32493 }, + { 101,-32493 }, { 102,-32493 }, { 103,-32493 }, { 104,-32493 }, { 105,-32493 }, + { 106,-32493 }, { 107,-32493 }, { 108,-32493 }, { 109,-32493 }, { 110,-32493 }, + { 111,-32493 }, { 112,-32493 }, { 113,-32493 }, { 114,-32493 }, { 115,-32493 }, + { 116,-32493 }, { 117,-32493 }, { 118,-32493 }, { 119,-32493 }, { 120,-32493 }, + { 121,-32493 }, { 122,-32493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-32493 }, { 128,-32493 }, { 129,-32493 }, { 130,-32493 }, + { 131,-32493 }, { 132,-32493 }, { 133,-32493 }, { 134,-32493 }, { 135,-32493 }, + { 136,-32493 }, { 137,-32493 }, { 138,-32493 }, { 139,-32493 }, { 140,-32493 }, + + { 141,-32493 }, { 142,-32493 }, { 143,-32493 }, { 144,-32493 }, { 145,-32493 }, + { 146,-32493 }, { 147,-32493 }, { 148,-32493 }, { 149,-32493 }, { 150,-32493 }, + { 151,-32493 }, { 152,-32493 }, { 153,-32493 }, { 154,-32493 }, { 155,-32493 }, + { 156,-32493 }, { 157,-32493 }, { 158,-32493 }, { 159,-32493 }, { 160,-32493 }, + { 161,-32493 }, { 162,-32493 }, { 163,-32493 }, { 164,-32493 }, { 165,-32493 }, + { 166,-32493 }, { 167,-32493 }, { 168,-32493 }, { 169,-32493 }, { 170,-32493 }, + { 171,-32493 }, { 172,-32493 }, { 173,-32493 }, { 174,-32493 }, { 175,-32493 }, + { 176,-32493 }, { 177,-32493 }, { 178,-32493 }, { 179,-32493 }, { 180,-32493 }, + { 181,-32493 }, { 182,-32493 }, { 183,-32493 }, { 184,-32493 }, { 185,-32493 }, + { 186,-32493 }, { 187,-32493 }, { 188,-32493 }, { 189,-32493 }, { 190,-32493 }, + + { 191,-32493 }, { 192,-32493 }, { 193,-32493 }, { 194,-32493 }, { 195,-32493 }, + { 196,-32493 }, { 197,-32493 }, { 198,-32493 }, { 199,-32493 }, { 200,-32493 }, + { 201,-32493 }, { 202,-32493 }, { 203,-32493 }, { 204,-32493 }, { 205,-32493 }, + { 206,-32493 }, { 207,-32493 }, { 208,-32493 }, { 209,-32493 }, { 210,-32493 }, + { 211,-32493 }, { 212,-32493 }, { 213,-32493 }, { 214,-32493 }, { 215,-32493 }, + { 216,-32493 }, { 217,-32493 }, { 218,-32493 }, { 219,-32493 }, { 220,-32493 }, + { 221,-32493 }, { 222,-32493 }, { 223,-32493 }, { 224,-32493 }, { 225,-32493 }, + { 226,-32493 }, { 227,-32493 }, { 228,-32493 }, { 229,-32493 }, { 230,-32493 }, + { 231,-32493 }, { 232,-32493 }, { 233,-32493 }, { 234,-32493 }, { 235,-32493 }, + { 236,-32493 }, { 237,-32493 }, { 238,-32493 }, { 239,-32493 }, { 240,-32493 }, + + { 241,-32493 }, { 242,-32493 }, { 243,-32493 }, { 244,-32493 }, { 245,-32493 }, + { 246,-32493 }, { 247,-32493 }, { 248,-32493 }, { 249,-32493 }, { 250,-32493 }, + { 251,-32493 }, { 252,-32493 }, { 253,-32493 }, { 254,-32493 }, { 255,-32493 }, + { 0, 131 }, { 0,59373 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-32750 }, + { 49,-32750 }, { 50,-32750 }, { 51,-32750 }, { 52,-32750 }, { 53,-32750 }, + { 54,-32750 }, { 55,-32750 }, { 56,-32750 }, { 57,-32750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-32750 }, { 66,-32750 }, { 67,-32750 }, { 68,-32750 }, + { 69,-32750 }, { 70,-32750 }, { 71,-32750 }, { 72,-32750 }, { 73,-32750 }, + { 74,-32750 }, { 75,-32750 }, { 76,-32750 }, { 77,-32750 }, { 78,-32750 }, + { 79,-32750 }, { 80,-32750 }, { 81,-32750 }, { 82,-32750 }, { 83,-32750 }, + + { 84,-32750 }, { 85,14397 }, { 86,-32750 }, { 87,-32750 }, { 88,-32750 }, + { 89,-32750 }, { 90,-32750 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-32750 }, { 0, 0 }, { 97,-32750 }, { 98,-32750 }, + { 99,-32750 }, { 100,-32750 }, { 101,-32750 }, { 102,-32750 }, { 103,-32750 }, + { 104,-32750 }, { 105,-32750 }, { 106,-32750 }, { 107,-32750 }, { 108,-32750 }, + { 109,-32750 }, { 110,-32750 }, { 111,-32750 }, { 112,-32750 }, { 113,-32750 }, + { 114,-32750 }, { 115,-32750 }, { 116,-32750 }, { 117,14397 }, { 118,-32750 }, + { 119,-32750 }, { 120,-32750 }, { 121,-32750 }, { 122,-32750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-32750 }, { 128,-32750 }, + { 129,-32750 }, { 130,-32750 }, { 131,-32750 }, { 132,-32750 }, { 133,-32750 }, + + { 134,-32750 }, { 135,-32750 }, { 136,-32750 }, { 137,-32750 }, { 138,-32750 }, + { 139,-32750 }, { 140,-32750 }, { 141,-32750 }, { 142,-32750 }, { 143,-32750 }, + { 144,-32750 }, { 145,-32750 }, { 146,-32750 }, { 147,-32750 }, { 148,-32750 }, + { 149,-32750 }, { 150,-32750 }, { 151,-32750 }, { 152,-32750 }, { 153,-32750 }, + { 154,-32750 }, { 155,-32750 }, { 156,-32750 }, { 157,-32750 }, { 158,-32750 }, + { 159,-32750 }, { 160,-32750 }, { 161,-32750 }, { 162,-32750 }, { 163,-32750 }, + { 164,-32750 }, { 165,-32750 }, { 166,-32750 }, { 167,-32750 }, { 168,-32750 }, + { 169,-32750 }, { 170,-32750 }, { 171,-32750 }, { 172,-32750 }, { 173,-32750 }, + { 174,-32750 }, { 175,-32750 }, { 176,-32750 }, { 177,-32750 }, { 178,-32750 }, + { 179,-32750 }, { 180,-32750 }, { 181,-32750 }, { 182,-32750 }, { 183,-32750 }, + + { 184,-32750 }, { 185,-32750 }, { 186,-32750 }, { 187,-32750 }, { 188,-32750 }, + { 189,-32750 }, { 190,-32750 }, { 191,-32750 }, { 192,-32750 }, { 193,-32750 }, + { 194,-32750 }, { 195,-32750 }, { 196,-32750 }, { 197,-32750 }, { 198,-32750 }, + { 199,-32750 }, { 200,-32750 }, { 201,-32750 }, { 202,-32750 }, { 203,-32750 }, + { 204,-32750 }, { 205,-32750 }, { 206,-32750 }, { 207,-32750 }, { 208,-32750 }, + { 209,-32750 }, { 210,-32750 }, { 211,-32750 }, { 212,-32750 }, { 213,-32750 }, + { 214,-32750 }, { 215,-32750 }, { 216,-32750 }, { 217,-32750 }, { 218,-32750 }, + { 219,-32750 }, { 220,-32750 }, { 221,-32750 }, { 222,-32750 }, { 223,-32750 }, + { 224,-32750 }, { 225,-32750 }, { 226,-32750 }, { 227,-32750 }, { 228,-32750 }, + { 229,-32750 }, { 230,-32750 }, { 231,-32750 }, { 232,-32750 }, { 233,-32750 }, + + { 234,-32750 }, { 235,-32750 }, { 236,-32750 }, { 237,-32750 }, { 238,-32750 }, + { 239,-32750 }, { 240,-32750 }, { 241,-32750 }, { 242,-32750 }, { 243,-32750 }, + { 244,-32750 }, { 245,-32750 }, { 246,-32750 }, { 247,-32750 }, { 248,-32750 }, + { 249,-32750 }, { 250,-32750 }, { 251,-32750 }, { 252,-32750 }, { 253,-32750 }, + { 254,-32750 }, { 255,-32750 }, { 0, 35 }, { 0,59116 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-33007 }, { 49,-33007 }, { 50,-33007 }, { 51,-33007 }, + { 52,-33007 }, { 53,-33007 }, { 54,-33007 }, { 55,-33007 }, { 56,-33007 }, + { 57,-33007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-33007 }, { 66,-33007 }, + { 67,-33007 }, { 68,-33007 }, { 69,-33007 }, { 70,-33007 }, { 71,-33007 }, + { 72,-33007 }, { 73,-33007 }, { 74,-33007 }, { 75,-33007 }, { 76,-33007 }, + + { 77,-33007 }, { 78,-33007 }, { 79,-33007 }, { 80,-33007 }, { 81,-33007 }, + { 82,-33007 }, { 83,-33007 }, { 84,-33007 }, { 85,-33007 }, { 86,-33007 }, + { 87,-33007 }, { 88,-33007 }, { 89,-33007 }, { 90,-33007 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-33007 }, { 0, 0 }, + { 97,-33007 }, { 98,-33007 }, { 99,-33007 }, { 100,-33007 }, { 101,-33007 }, + { 102,-33007 }, { 103,-33007 }, { 104,-33007 }, { 105,-33007 }, { 106,-33007 }, + { 107,-33007 }, { 108,-33007 }, { 109,-33007 }, { 110,-33007 }, { 111,-33007 }, + { 112,-33007 }, { 113,-33007 }, { 114,-33007 }, { 115,-33007 }, { 116,-33007 }, + { 117,-33007 }, { 118,-33007 }, { 119,-33007 }, { 120,-33007 }, { 121,-33007 }, + { 122,-33007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-33007 }, { 128,-33007 }, { 129,-33007 }, { 130,-33007 }, { 131,-33007 }, + { 132,-33007 }, { 133,-33007 }, { 134,-33007 }, { 135,-33007 }, { 136,-33007 }, + { 137,-33007 }, { 138,-33007 }, { 139,-33007 }, { 140,-33007 }, { 141,-33007 }, + { 142,-33007 }, { 143,-33007 }, { 144,-33007 }, { 145,-33007 }, { 146,-33007 }, + { 147,-33007 }, { 148,-33007 }, { 149,-33007 }, { 150,-33007 }, { 151,-33007 }, + { 152,-33007 }, { 153,-33007 }, { 154,-33007 }, { 155,-33007 }, { 156,-33007 }, + { 157,-33007 }, { 158,-33007 }, { 159,-33007 }, { 160,-33007 }, { 161,-33007 }, + { 162,-33007 }, { 163,-33007 }, { 164,-33007 }, { 165,-33007 }, { 166,-33007 }, + { 167,-33007 }, { 168,-33007 }, { 169,-33007 }, { 170,-33007 }, { 171,-33007 }, + { 172,-33007 }, { 173,-33007 }, { 174,-33007 }, { 175,-33007 }, { 176,-33007 }, + + { 177,-33007 }, { 178,-33007 }, { 179,-33007 }, { 180,-33007 }, { 181,-33007 }, + { 182,-33007 }, { 183,-33007 }, { 184,-33007 }, { 185,-33007 }, { 186,-33007 }, + { 187,-33007 }, { 188,-33007 }, { 189,-33007 }, { 190,-33007 }, { 191,-33007 }, + { 192,-33007 }, { 193,-33007 }, { 194,-33007 }, { 195,-33007 }, { 196,-33007 }, + { 197,-33007 }, { 198,-33007 }, { 199,-33007 }, { 200,-33007 }, { 201,-33007 }, + { 202,-33007 }, { 203,-33007 }, { 204,-33007 }, { 205,-33007 }, { 206,-33007 }, + { 207,-33007 }, { 208,-33007 }, { 209,-33007 }, { 210,-33007 }, { 211,-33007 }, + { 212,-33007 }, { 213,-33007 }, { 214,-33007 }, { 215,-33007 }, { 216,-33007 }, + { 217,-33007 }, { 218,-33007 }, { 219,-33007 }, { 220,-33007 }, { 221,-33007 }, + { 222,-33007 }, { 223,-33007 }, { 224,-33007 }, { 225,-33007 }, { 226,-33007 }, + + { 227,-33007 }, { 228,-33007 }, { 229,-33007 }, { 230,-33007 }, { 231,-33007 }, + { 232,-33007 }, { 233,-33007 }, { 234,-33007 }, { 235,-33007 }, { 236,-33007 }, + { 237,-33007 }, { 238,-33007 }, { 239,-33007 }, { 240,-33007 }, { 241,-33007 }, + { 242,-33007 }, { 243,-33007 }, { 244,-33007 }, { 245,-33007 }, { 246,-33007 }, + { 247,-33007 }, { 248,-33007 }, { 249,-33007 }, { 250,-33007 }, { 251,-33007 }, + { 252,-33007 }, { 253,-33007 }, { 254,-33007 }, { 255,-33007 }, { 0, 33 }, + { 0,58859 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-33264 }, { 49,-33264 }, + { 50,-33264 }, { 51,-33264 }, { 52,-33264 }, { 53,-33264 }, { 54,-33264 }, + { 55,-33264 }, { 56,-33264 }, { 57,-33264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-33264 }, { 66,-33264 }, { 67,-33264 }, { 68,-33264 }, { 69,-33264 }, + + { 70,-33264 }, { 71,-33264 }, { 72,-33264 }, { 73,14140 }, { 74,-33264 }, + { 75,-33264 }, { 76,-33264 }, { 77,-33264 }, { 78,-33264 }, { 79,-33264 }, + { 80,-33264 }, { 81,-33264 }, { 82,-33264 }, { 83,-33264 }, { 84,-33264 }, + { 85,-33264 }, { 86,-33264 }, { 87,-33264 }, { 88,-33264 }, { 89,-33264 }, + { 90,-33264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-33264 }, { 0, 0 }, { 97,-33264 }, { 98,-33264 }, { 99,-33264 }, + { 100,-33264 }, { 101,-33264 }, { 102,-33264 }, { 103,-33264 }, { 104,-33264 }, + { 105,14140 }, { 106,-33264 }, { 107,-33264 }, { 108,-33264 }, { 109,-33264 }, + { 110,-33264 }, { 111,-33264 }, { 112,-33264 }, { 113,-33264 }, { 114,-33264 }, + { 115,-33264 }, { 116,-33264 }, { 117,-33264 }, { 118,-33264 }, { 119,-33264 }, + + { 120,-33264 }, { 121,-33264 }, { 122,-33264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-33264 }, { 128,-33264 }, { 129,-33264 }, + { 130,-33264 }, { 131,-33264 }, { 132,-33264 }, { 133,-33264 }, { 134,-33264 }, + { 135,-33264 }, { 136,-33264 }, { 137,-33264 }, { 138,-33264 }, { 139,-33264 }, + { 140,-33264 }, { 141,-33264 }, { 142,-33264 }, { 143,-33264 }, { 144,-33264 }, + { 145,-33264 }, { 146,-33264 }, { 147,-33264 }, { 148,-33264 }, { 149,-33264 }, + { 150,-33264 }, { 151,-33264 }, { 152,-33264 }, { 153,-33264 }, { 154,-33264 }, + { 155,-33264 }, { 156,-33264 }, { 157,-33264 }, { 158,-33264 }, { 159,-33264 }, + { 160,-33264 }, { 161,-33264 }, { 162,-33264 }, { 163,-33264 }, { 164,-33264 }, + { 165,-33264 }, { 166,-33264 }, { 167,-33264 }, { 168,-33264 }, { 169,-33264 }, + + { 170,-33264 }, { 171,-33264 }, { 172,-33264 }, { 173,-33264 }, { 174,-33264 }, + { 175,-33264 }, { 176,-33264 }, { 177,-33264 }, { 178,-33264 }, { 179,-33264 }, + { 180,-33264 }, { 181,-33264 }, { 182,-33264 }, { 183,-33264 }, { 184,-33264 }, + { 185,-33264 }, { 186,-33264 }, { 187,-33264 }, { 188,-33264 }, { 189,-33264 }, + { 190,-33264 }, { 191,-33264 }, { 192,-33264 }, { 193,-33264 }, { 194,-33264 }, + { 195,-33264 }, { 196,-33264 }, { 197,-33264 }, { 198,-33264 }, { 199,-33264 }, + { 200,-33264 }, { 201,-33264 }, { 202,-33264 }, { 203,-33264 }, { 204,-33264 }, + { 205,-33264 }, { 206,-33264 }, { 207,-33264 }, { 208,-33264 }, { 209,-33264 }, + { 210,-33264 }, { 211,-33264 }, { 212,-33264 }, { 213,-33264 }, { 214,-33264 }, + { 215,-33264 }, { 216,-33264 }, { 217,-33264 }, { 218,-33264 }, { 219,-33264 }, + + { 220,-33264 }, { 221,-33264 }, { 222,-33264 }, { 223,-33264 }, { 224,-33264 }, + { 225,-33264 }, { 226,-33264 }, { 227,-33264 }, { 228,-33264 }, { 229,-33264 }, + { 230,-33264 }, { 231,-33264 }, { 232,-33264 }, { 233,-33264 }, { 234,-33264 }, + { 235,-33264 }, { 236,-33264 }, { 237,-33264 }, { 238,-33264 }, { 239,-33264 }, + { 240,-33264 }, { 241,-33264 }, { 242,-33264 }, { 243,-33264 }, { 244,-33264 }, + { 245,-33264 }, { 246,-33264 }, { 247,-33264 }, { 248,-33264 }, { 249,-33264 }, + { 250,-33264 }, { 251,-33264 }, { 252,-33264 }, { 253,-33264 }, { 254,-33264 }, + { 255,-33264 }, { 0, 131 }, { 0,58602 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-33521 }, { 49,-33521 }, { 50,-33521 }, { 51,-33521 }, { 52,-33521 }, + { 53,-33521 }, { 54,-33521 }, { 55,-33521 }, { 56,-33521 }, { 57,-33521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-33521 }, { 66,-33521 }, { 67,-33521 }, + { 68,-33521 }, { 69,-33521 }, { 70,-33521 }, { 71,-33521 }, { 72,-33521 }, + { 73,-33521 }, { 74,-33521 }, { 75,-33521 }, { 76,-33521 }, { 77,-33521 }, + { 78,-33521 }, { 79,-33521 }, { 80,-33521 }, { 81,-33521 }, { 82,-33521 }, + { 83,-33521 }, { 84,-33521 }, { 85,-33521 }, { 86,-33521 }, { 87,-33521 }, + { 88,-33521 }, { 89,14140 }, { 90,-33521 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-33521 }, { 0, 0 }, { 97,-33521 }, + { 98,-33521 }, { 99,-33521 }, { 100,-33521 }, { 101,-33521 }, { 102,-33521 }, + { 103,-33521 }, { 104,-33521 }, { 105,-33521 }, { 106,-33521 }, { 107,-33521 }, + { 108,-33521 }, { 109,-33521 }, { 110,-33521 }, { 111,-33521 }, { 112,-33521 }, + + { 113,-33521 }, { 114,-33521 }, { 115,-33521 }, { 116,-33521 }, { 117,-33521 }, + { 118,-33521 }, { 119,-33521 }, { 120,-33521 }, { 121,14140 }, { 122,-33521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-33521 }, + { 128,-33521 }, { 129,-33521 }, { 130,-33521 }, { 131,-33521 }, { 132,-33521 }, + { 133,-33521 }, { 134,-33521 }, { 135,-33521 }, { 136,-33521 }, { 137,-33521 }, + { 138,-33521 }, { 139,-33521 }, { 140,-33521 }, { 141,-33521 }, { 142,-33521 }, + { 143,-33521 }, { 144,-33521 }, { 145,-33521 }, { 146,-33521 }, { 147,-33521 }, + { 148,-33521 }, { 149,-33521 }, { 150,-33521 }, { 151,-33521 }, { 152,-33521 }, + { 153,-33521 }, { 154,-33521 }, { 155,-33521 }, { 156,-33521 }, { 157,-33521 }, + { 158,-33521 }, { 159,-33521 }, { 160,-33521 }, { 161,-33521 }, { 162,-33521 }, + + { 163,-33521 }, { 164,-33521 }, { 165,-33521 }, { 166,-33521 }, { 167,-33521 }, + { 168,-33521 }, { 169,-33521 }, { 170,-33521 }, { 171,-33521 }, { 172,-33521 }, + { 173,-33521 }, { 174,-33521 }, { 175,-33521 }, { 176,-33521 }, { 177,-33521 }, + { 178,-33521 }, { 179,-33521 }, { 180,-33521 }, { 181,-33521 }, { 182,-33521 }, + { 183,-33521 }, { 184,-33521 }, { 185,-33521 }, { 186,-33521 }, { 187,-33521 }, + { 188,-33521 }, { 189,-33521 }, { 190,-33521 }, { 191,-33521 }, { 192,-33521 }, + { 193,-33521 }, { 194,-33521 }, { 195,-33521 }, { 196,-33521 }, { 197,-33521 }, + { 198,-33521 }, { 199,-33521 }, { 200,-33521 }, { 201,-33521 }, { 202,-33521 }, + { 203,-33521 }, { 204,-33521 }, { 205,-33521 }, { 206,-33521 }, { 207,-33521 }, + { 208,-33521 }, { 209,-33521 }, { 210,-33521 }, { 211,-33521 }, { 212,-33521 }, + + { 213,-33521 }, { 214,-33521 }, { 215,-33521 }, { 216,-33521 }, { 217,-33521 }, + { 218,-33521 }, { 219,-33521 }, { 220,-33521 }, { 221,-33521 }, { 222,-33521 }, + { 223,-33521 }, { 224,-33521 }, { 225,-33521 }, { 226,-33521 }, { 227,-33521 }, + { 228,-33521 }, { 229,-33521 }, { 230,-33521 }, { 231,-33521 }, { 232,-33521 }, + { 233,-33521 }, { 234,-33521 }, { 235,-33521 }, { 236,-33521 }, { 237,-33521 }, + { 238,-33521 }, { 239,-33521 }, { 240,-33521 }, { 241,-33521 }, { 242,-33521 }, + { 243,-33521 }, { 244,-33521 }, { 245,-33521 }, { 246,-33521 }, { 247,-33521 }, + { 248,-33521 }, { 249,-33521 }, { 250,-33521 }, { 251,-33521 }, { 252,-33521 }, + { 253,-33521 }, { 254,-33521 }, { 255,-33521 }, { 0, 131 }, { 0,58345 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-33778 }, { 49,-33778 }, { 50,-33778 }, + { 51,-33778 }, { 52,-33778 }, { 53,-33778 }, { 54,-33778 }, { 55,-33778 }, + + { 56,-33778 }, { 57,-33778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-33778 }, + { 66,-33778 }, { 67,-33778 }, { 68,-33778 }, { 69,14140 }, { 70,-33778 }, + { 71,-33778 }, { 72,-33778 }, { 73,-33778 }, { 74,-33778 }, { 75,-33778 }, + { 76,-33778 }, { 77,-33778 }, { 78,-33778 }, { 79,-33778 }, { 80,-33778 }, + { 81,-33778 }, { 82,-33778 }, { 83,-33778 }, { 84,-33778 }, { 85,-33778 }, + { 86,-33778 }, { 87,-33778 }, { 88,-33778 }, { 89,-33778 }, { 90,-33778 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-33778 }, + { 0, 0 }, { 97,-33778 }, { 98,-33778 }, { 99,-33778 }, { 100,-33778 }, + { 101,14140 }, { 102,-33778 }, { 103,-33778 }, { 104,-33778 }, { 105,-33778 }, + + { 106,-33778 }, { 107,-33778 }, { 108,-33778 }, { 109,-33778 }, { 110,-33778 }, + { 111,-33778 }, { 112,-33778 }, { 113,-33778 }, { 114,-33778 }, { 115,-33778 }, + { 116,-33778 }, { 117,-33778 }, { 118,-33778 }, { 119,-33778 }, { 120,-33778 }, + { 121,-33778 }, { 122,-33778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-33778 }, { 128,-33778 }, { 129,-33778 }, { 130,-33778 }, + { 131,-33778 }, { 132,-33778 }, { 133,-33778 }, { 134,-33778 }, { 135,-33778 }, + { 136,-33778 }, { 137,-33778 }, { 138,-33778 }, { 139,-33778 }, { 140,-33778 }, + { 141,-33778 }, { 142,-33778 }, { 143,-33778 }, { 144,-33778 }, { 145,-33778 }, + { 146,-33778 }, { 147,-33778 }, { 148,-33778 }, { 149,-33778 }, { 150,-33778 }, + { 151,-33778 }, { 152,-33778 }, { 153,-33778 }, { 154,-33778 }, { 155,-33778 }, + + { 156,-33778 }, { 157,-33778 }, { 158,-33778 }, { 159,-33778 }, { 160,-33778 }, + { 161,-33778 }, { 162,-33778 }, { 163,-33778 }, { 164,-33778 }, { 165,-33778 }, + { 166,-33778 }, { 167,-33778 }, { 168,-33778 }, { 169,-33778 }, { 170,-33778 }, + { 171,-33778 }, { 172,-33778 }, { 173,-33778 }, { 174,-33778 }, { 175,-33778 }, + { 176,-33778 }, { 177,-33778 }, { 178,-33778 }, { 179,-33778 }, { 180,-33778 }, + { 181,-33778 }, { 182,-33778 }, { 183,-33778 }, { 184,-33778 }, { 185,-33778 }, + { 186,-33778 }, { 187,-33778 }, { 188,-33778 }, { 189,-33778 }, { 190,-33778 }, + { 191,-33778 }, { 192,-33778 }, { 193,-33778 }, { 194,-33778 }, { 195,-33778 }, + { 196,-33778 }, { 197,-33778 }, { 198,-33778 }, { 199,-33778 }, { 200,-33778 }, + { 201,-33778 }, { 202,-33778 }, { 203,-33778 }, { 204,-33778 }, { 205,-33778 }, + + { 206,-33778 }, { 207,-33778 }, { 208,-33778 }, { 209,-33778 }, { 210,-33778 }, + { 211,-33778 }, { 212,-33778 }, { 213,-33778 }, { 214,-33778 }, { 215,-33778 }, + { 216,-33778 }, { 217,-33778 }, { 218,-33778 }, { 219,-33778 }, { 220,-33778 }, + { 221,-33778 }, { 222,-33778 }, { 223,-33778 }, { 224,-33778 }, { 225,-33778 }, + { 226,-33778 }, { 227,-33778 }, { 228,-33778 }, { 229,-33778 }, { 230,-33778 }, + { 231,-33778 }, { 232,-33778 }, { 233,-33778 }, { 234,-33778 }, { 235,-33778 }, + { 236,-33778 }, { 237,-33778 }, { 238,-33778 }, { 239,-33778 }, { 240,-33778 }, + { 241,-33778 }, { 242,-33778 }, { 243,-33778 }, { 244,-33778 }, { 245,-33778 }, + { 246,-33778 }, { 247,-33778 }, { 248,-33778 }, { 249,-33778 }, { 250,-33778 }, + { 251,-33778 }, { 252,-33778 }, { 253,-33778 }, { 254,-33778 }, { 255,-33778 }, + + { 0, 131 }, { 0,58088 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-34035 }, + + { 49,-34035 }, { 50,-34035 }, { 51,-34035 }, { 52,-34035 }, { 53,-34035 }, + { 54,-34035 }, { 55,-34035 }, { 56,-34035 }, { 57,-34035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-34035 }, { 66,-34035 }, { 67,-34035 }, { 68,-34035 }, + { 69,-34035 }, { 70,-34035 }, { 71,-34035 }, { 72,-34035 }, { 73,-34035 }, + { 74,-34035 }, { 75,-34035 }, { 76,-34035 }, { 77,-34035 }, { 78,-34035 }, + { 79,14140 }, { 80,-34035 }, { 81,-34035 }, { 82,-34035 }, { 83,-34035 }, + { 84,-34035 }, { 85,-34035 }, { 86,-34035 }, { 87,-34035 }, { 88,-34035 }, + { 89,-34035 }, { 90,-34035 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-34035 }, { 0, 0 }, { 97,-34035 }, { 98,-34035 }, + + { 99,-34035 }, { 100,-34035 }, { 101,-34035 }, { 102,-34035 }, { 103,-34035 }, + { 104,-34035 }, { 105,-34035 }, { 106,-34035 }, { 107,-34035 }, { 108,-34035 }, + { 109,-34035 }, { 110,-34035 }, { 111,14140 }, { 112,-34035 }, { 113,-34035 }, + { 114,-34035 }, { 115,-34035 }, { 116,-34035 }, { 117,-34035 }, { 118,-34035 }, + { 119,-34035 }, { 120,-34035 }, { 121,-34035 }, { 122,-34035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-34035 }, { 128,-34035 }, + { 129,-34035 }, { 130,-34035 }, { 131,-34035 }, { 132,-34035 }, { 133,-34035 }, + { 134,-34035 }, { 135,-34035 }, { 136,-34035 }, { 137,-34035 }, { 138,-34035 }, + { 139,-34035 }, { 140,-34035 }, { 141,-34035 }, { 142,-34035 }, { 143,-34035 }, + { 144,-34035 }, { 145,-34035 }, { 146,-34035 }, { 147,-34035 }, { 148,-34035 }, + + { 149,-34035 }, { 150,-34035 }, { 151,-34035 }, { 152,-34035 }, { 153,-34035 }, + { 154,-34035 }, { 155,-34035 }, { 156,-34035 }, { 157,-34035 }, { 158,-34035 }, + { 159,-34035 }, { 160,-34035 }, { 161,-34035 }, { 162,-34035 }, { 163,-34035 }, + { 164,-34035 }, { 165,-34035 }, { 166,-34035 }, { 167,-34035 }, { 168,-34035 }, + { 169,-34035 }, { 170,-34035 }, { 171,-34035 }, { 172,-34035 }, { 173,-34035 }, + { 174,-34035 }, { 175,-34035 }, { 176,-34035 }, { 177,-34035 }, { 178,-34035 }, + { 179,-34035 }, { 180,-34035 }, { 181,-34035 }, { 182,-34035 }, { 183,-34035 }, + { 184,-34035 }, { 185,-34035 }, { 186,-34035 }, { 187,-34035 }, { 188,-34035 }, + { 189,-34035 }, { 190,-34035 }, { 191,-34035 }, { 192,-34035 }, { 193,-34035 }, + { 194,-34035 }, { 195,-34035 }, { 196,-34035 }, { 197,-34035 }, { 198,-34035 }, + + { 199,-34035 }, { 200,-34035 }, { 201,-34035 }, { 202,-34035 }, { 203,-34035 }, + { 204,-34035 }, { 205,-34035 }, { 206,-34035 }, { 207,-34035 }, { 208,-34035 }, + { 209,-34035 }, { 210,-34035 }, { 211,-34035 }, { 212,-34035 }, { 213,-34035 }, + { 214,-34035 }, { 215,-34035 }, { 216,-34035 }, { 217,-34035 }, { 218,-34035 }, + { 219,-34035 }, { 220,-34035 }, { 221,-34035 }, { 222,-34035 }, { 223,-34035 }, + { 224,-34035 }, { 225,-34035 }, { 226,-34035 }, { 227,-34035 }, { 228,-34035 }, + { 229,-34035 }, { 230,-34035 }, { 231,-34035 }, { 232,-34035 }, { 233,-34035 }, + { 234,-34035 }, { 235,-34035 }, { 236,-34035 }, { 237,-34035 }, { 238,-34035 }, + { 239,-34035 }, { 240,-34035 }, { 241,-34035 }, { 242,-34035 }, { 243,-34035 }, + { 244,-34035 }, { 245,-34035 }, { 246,-34035 }, { 247,-34035 }, { 248,-34035 }, + + { 249,-34035 }, { 250,-34035 }, { 251,-34035 }, { 252,-34035 }, { 253,-34035 }, + { 254,-34035 }, { 255,-34035 }, { 0, 131 }, { 0,57831 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-34292 }, { 49,-34292 }, { 50,-34292 }, { 51,-34292 }, + { 52,-34292 }, { 53,-34292 }, { 54,-34292 }, { 55,-34292 }, { 56,-34292 }, + { 57,-34292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-34292 }, { 66,-34292 }, + { 67,-34292 }, { 68,-34292 }, { 69,-34292 }, { 70,14140 }, { 71,-34292 }, + { 72,-34292 }, { 73,-34292 }, { 74,-34292 }, { 75,-34292 }, { 76,-34292 }, + { 77,-34292 }, { 78,-34292 }, { 79,-34292 }, { 80,-34292 }, { 81,-34292 }, + { 82,-34292 }, { 83,-34292 }, { 84,-34292 }, { 85,-34292 }, { 86,-34292 }, + { 87,-34292 }, { 88,-34292 }, { 89,-34292 }, { 90,-34292 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-34292 }, { 0, 0 }, + { 97,-34292 }, { 98,-34292 }, { 99,-34292 }, { 100,-34292 }, { 101,-34292 }, + { 102,14140 }, { 103,-34292 }, { 104,-34292 }, { 105,-34292 }, { 106,-34292 }, + { 107,-34292 }, { 108,-34292 }, { 109,-34292 }, { 110,-34292 }, { 111,-34292 }, + { 112,-34292 }, { 113,-34292 }, { 114,-34292 }, { 115,-34292 }, { 116,-34292 }, + { 117,-34292 }, { 118,-34292 }, { 119,-34292 }, { 120,-34292 }, { 121,-34292 }, + { 122,-34292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-34292 }, { 128,-34292 }, { 129,-34292 }, { 130,-34292 }, { 131,-34292 }, + { 132,-34292 }, { 133,-34292 }, { 134,-34292 }, { 135,-34292 }, { 136,-34292 }, + { 137,-34292 }, { 138,-34292 }, { 139,-34292 }, { 140,-34292 }, { 141,-34292 }, + + { 142,-34292 }, { 143,-34292 }, { 144,-34292 }, { 145,-34292 }, { 146,-34292 }, + { 147,-34292 }, { 148,-34292 }, { 149,-34292 }, { 150,-34292 }, { 151,-34292 }, + { 152,-34292 }, { 153,-34292 }, { 154,-34292 }, { 155,-34292 }, { 156,-34292 }, + { 157,-34292 }, { 158,-34292 }, { 159,-34292 }, { 160,-34292 }, { 161,-34292 }, + { 162,-34292 }, { 163,-34292 }, { 164,-34292 }, { 165,-34292 }, { 166,-34292 }, + { 167,-34292 }, { 168,-34292 }, { 169,-34292 }, { 170,-34292 }, { 171,-34292 }, + { 172,-34292 }, { 173,-34292 }, { 174,-34292 }, { 175,-34292 }, { 176,-34292 }, + { 177,-34292 }, { 178,-34292 }, { 179,-34292 }, { 180,-34292 }, { 181,-34292 }, + { 182,-34292 }, { 183,-34292 }, { 184,-34292 }, { 185,-34292 }, { 186,-34292 }, + { 187,-34292 }, { 188,-34292 }, { 189,-34292 }, { 190,-34292 }, { 191,-34292 }, + + { 192,-34292 }, { 193,-34292 }, { 194,-34292 }, { 195,-34292 }, { 196,-34292 }, + { 197,-34292 }, { 198,-34292 }, { 199,-34292 }, { 200,-34292 }, { 201,-34292 }, + { 202,-34292 }, { 203,-34292 }, { 204,-34292 }, { 205,-34292 }, { 206,-34292 }, + { 207,-34292 }, { 208,-34292 }, { 209,-34292 }, { 210,-34292 }, { 211,-34292 }, + { 212,-34292 }, { 213,-34292 }, { 214,-34292 }, { 215,-34292 }, { 216,-34292 }, + { 217,-34292 }, { 218,-34292 }, { 219,-34292 }, { 220,-34292 }, { 221,-34292 }, + { 222,-34292 }, { 223,-34292 }, { 224,-34292 }, { 225,-34292 }, { 226,-34292 }, + { 227,-34292 }, { 228,-34292 }, { 229,-34292 }, { 230,-34292 }, { 231,-34292 }, + { 232,-34292 }, { 233,-34292 }, { 234,-34292 }, { 235,-34292 }, { 236,-34292 }, + { 237,-34292 }, { 238,-34292 }, { 239,-34292 }, { 240,-34292 }, { 241,-34292 }, + + { 242,-34292 }, { 243,-34292 }, { 244,-34292 }, { 245,-34292 }, { 246,-34292 }, + { 247,-34292 }, { 248,-34292 }, { 249,-34292 }, { 250,-34292 }, { 251,-34292 }, + { 252,-34292 }, { 253,-34292 }, { 254,-34292 }, { 255,-34292 }, { 0, 131 }, + { 0,57574 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-34549 }, { 49,-34549 }, + { 50,-34549 }, { 51,-34549 }, { 52,-34549 }, { 53,-34549 }, { 54,-34549 }, + { 55,-34549 }, { 56,-34549 }, { 57,-34549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-34549 }, { 66,-34549 }, { 67,-34549 }, { 68,-34549 }, { 69,-34549 }, + { 70,-34549 }, { 71,-34549 }, { 72,-34549 }, { 73,-34549 }, { 74,-34549 }, + { 75,-34549 }, { 76,-34549 }, { 77,-34549 }, { 78,-34549 }, { 79,-34549 }, + { 80,-34549 }, { 81,-34549 }, { 82,-34549 }, { 83,-34549 }, { 84,-34549 }, + + { 85,-34549 }, { 86,-34549 }, { 87,14140 }, { 88,-34549 }, { 89,-34549 }, + { 90,-34549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-34549 }, { 0, 0 }, { 97,-34549 }, { 98,-34549 }, { 99,-34549 }, + { 100,-34549 }, { 101,-34549 }, { 102,-34549 }, { 103,-34549 }, { 104,-34549 }, + { 105,-34549 }, { 106,-34549 }, { 107,-34549 }, { 108,-34549 }, { 109,-34549 }, + { 110,-34549 }, { 111,-34549 }, { 112,-34549 }, { 113,-34549 }, { 114,-34549 }, + { 115,-34549 }, { 116,-34549 }, { 117,-34549 }, { 118,-34549 }, { 119,14140 }, + { 120,-34549 }, { 121,-34549 }, { 122,-34549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-34549 }, { 128,-34549 }, { 129,-34549 }, + { 130,-34549 }, { 131,-34549 }, { 132,-34549 }, { 133,-34549 }, { 134,-34549 }, + + { 135,-34549 }, { 136,-34549 }, { 137,-34549 }, { 138,-34549 }, { 139,-34549 }, + { 140,-34549 }, { 141,-34549 }, { 142,-34549 }, { 143,-34549 }, { 144,-34549 }, + { 145,-34549 }, { 146,-34549 }, { 147,-34549 }, { 148,-34549 }, { 149,-34549 }, + { 150,-34549 }, { 151,-34549 }, { 152,-34549 }, { 153,-34549 }, { 154,-34549 }, + { 155,-34549 }, { 156,-34549 }, { 157,-34549 }, { 158,-34549 }, { 159,-34549 }, + { 160,-34549 }, { 161,-34549 }, { 162,-34549 }, { 163,-34549 }, { 164,-34549 }, + { 165,-34549 }, { 166,-34549 }, { 167,-34549 }, { 168,-34549 }, { 169,-34549 }, + { 170,-34549 }, { 171,-34549 }, { 172,-34549 }, { 173,-34549 }, { 174,-34549 }, + { 175,-34549 }, { 176,-34549 }, { 177,-34549 }, { 178,-34549 }, { 179,-34549 }, + { 180,-34549 }, { 181,-34549 }, { 182,-34549 }, { 183,-34549 }, { 184,-34549 }, + + { 185,-34549 }, { 186,-34549 }, { 187,-34549 }, { 188,-34549 }, { 189,-34549 }, + { 190,-34549 }, { 191,-34549 }, { 192,-34549 }, { 193,-34549 }, { 194,-34549 }, + { 195,-34549 }, { 196,-34549 }, { 197,-34549 }, { 198,-34549 }, { 199,-34549 }, + { 200,-34549 }, { 201,-34549 }, { 202,-34549 }, { 203,-34549 }, { 204,-34549 }, + { 205,-34549 }, { 206,-34549 }, { 207,-34549 }, { 208,-34549 }, { 209,-34549 }, + { 210,-34549 }, { 211,-34549 }, { 212,-34549 }, { 213,-34549 }, { 214,-34549 }, + { 215,-34549 }, { 216,-34549 }, { 217,-34549 }, { 218,-34549 }, { 219,-34549 }, + { 220,-34549 }, { 221,-34549 }, { 222,-34549 }, { 223,-34549 }, { 224,-34549 }, + { 225,-34549 }, { 226,-34549 }, { 227,-34549 }, { 228,-34549 }, { 229,-34549 }, + { 230,-34549 }, { 231,-34549 }, { 232,-34549 }, { 233,-34549 }, { 234,-34549 }, + + { 235,-34549 }, { 236,-34549 }, { 237,-34549 }, { 238,-34549 }, { 239,-34549 }, + { 240,-34549 }, { 241,-34549 }, { 242,-34549 }, { 243,-34549 }, { 244,-34549 }, + { 245,-34549 }, { 246,-34549 }, { 247,-34549 }, { 248,-34549 }, { 249,-34549 }, + { 250,-34549 }, { 251,-34549 }, { 252,-34549 }, { 253,-34549 }, { 254,-34549 }, + { 255,-34549 }, { 0, 131 }, { 0,57317 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-34806 }, { 49,-34806 }, { 50,-34806 }, { 51,-34806 }, { 52,-34806 }, + { 53,-34806 }, { 54,-34806 }, { 55,-34806 }, { 56,-34806 }, { 57,-34806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-34806 }, { 66,-34806 }, { 67,-34806 }, + { 68,-34806 }, { 69,-34806 }, { 70,-34806 }, { 71,-34806 }, { 72,14140 }, + { 73,-34806 }, { 74,-34806 }, { 75,-34806 }, { 76,-34806 }, { 77,-34806 }, + + { 78,-34806 }, { 79,-34806 }, { 80,-34806 }, { 81,-34806 }, { 82,-34806 }, + { 83,-34806 }, { 84,-34806 }, { 85,-34806 }, { 86,-34806 }, { 87,-34806 }, + { 88,-34806 }, { 89,-34806 }, { 90,-34806 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-34806 }, { 0, 0 }, { 97,-34806 }, + { 98,-34806 }, { 99,-34806 }, { 100,-34806 }, { 101,-34806 }, { 102,-34806 }, + { 103,-34806 }, { 104,14140 }, { 105,-34806 }, { 106,-34806 }, { 107,-34806 }, + { 108,-34806 }, { 109,-34806 }, { 110,-34806 }, { 111,-34806 }, { 112,-34806 }, + { 113,-34806 }, { 114,-34806 }, { 115,-34806 }, { 116,-34806 }, { 117,-34806 }, + { 118,-34806 }, { 119,-34806 }, { 120,-34806 }, { 121,-34806 }, { 122,-34806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-34806 }, + + { 128,-34806 }, { 129,-34806 }, { 130,-34806 }, { 131,-34806 }, { 132,-34806 }, + { 133,-34806 }, { 134,-34806 }, { 135,-34806 }, { 136,-34806 }, { 137,-34806 }, + { 138,-34806 }, { 139,-34806 }, { 140,-34806 }, { 141,-34806 }, { 142,-34806 }, + { 143,-34806 }, { 144,-34806 }, { 145,-34806 }, { 146,-34806 }, { 147,-34806 }, + { 148,-34806 }, { 149,-34806 }, { 150,-34806 }, { 151,-34806 }, { 152,-34806 }, + { 153,-34806 }, { 154,-34806 }, { 155,-34806 }, { 156,-34806 }, { 157,-34806 }, + { 158,-34806 }, { 159,-34806 }, { 160,-34806 }, { 161,-34806 }, { 162,-34806 }, + { 163,-34806 }, { 164,-34806 }, { 165,-34806 }, { 166,-34806 }, { 167,-34806 }, + { 168,-34806 }, { 169,-34806 }, { 170,-34806 }, { 171,-34806 }, { 172,-34806 }, + { 173,-34806 }, { 174,-34806 }, { 175,-34806 }, { 176,-34806 }, { 177,-34806 }, + + { 178,-34806 }, { 179,-34806 }, { 180,-34806 }, { 181,-34806 }, { 182,-34806 }, + { 183,-34806 }, { 184,-34806 }, { 185,-34806 }, { 186,-34806 }, { 187,-34806 }, + { 188,-34806 }, { 189,-34806 }, { 190,-34806 }, { 191,-34806 }, { 192,-34806 }, + { 193,-34806 }, { 194,-34806 }, { 195,-34806 }, { 196,-34806 }, { 197,-34806 }, + { 198,-34806 }, { 199,-34806 }, { 200,-34806 }, { 201,-34806 }, { 202,-34806 }, + { 203,-34806 }, { 204,-34806 }, { 205,-34806 }, { 206,-34806 }, { 207,-34806 }, + { 208,-34806 }, { 209,-34806 }, { 210,-34806 }, { 211,-34806 }, { 212,-34806 }, + { 213,-34806 }, { 214,-34806 }, { 215,-34806 }, { 216,-34806 }, { 217,-34806 }, + { 218,-34806 }, { 219,-34806 }, { 220,-34806 }, { 221,-34806 }, { 222,-34806 }, + { 223,-34806 }, { 224,-34806 }, { 225,-34806 }, { 226,-34806 }, { 227,-34806 }, + + { 228,-34806 }, { 229,-34806 }, { 230,-34806 }, { 231,-34806 }, { 232,-34806 }, + { 233,-34806 }, { 234,-34806 }, { 235,-34806 }, { 236,-34806 }, { 237,-34806 }, + { 238,-34806 }, { 239,-34806 }, { 240,-34806 }, { 241,-34806 }, { 242,-34806 }, + { 243,-34806 }, { 244,-34806 }, { 245,-34806 }, { 246,-34806 }, { 247,-34806 }, + { 248,-34806 }, { 249,-34806 }, { 250,-34806 }, { 251,-34806 }, { 252,-34806 }, + { 253,-34806 }, { 254,-34806 }, { 255,-34806 }, { 0, 20 }, { 0,57060 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-35063 }, { 49,-35063 }, { 50,-35063 }, + { 51,-35063 }, { 52,-35063 }, { 53,-35063 }, { 54,-35063 }, { 55,-35063 }, + { 56,-35063 }, { 57,-35063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-35063 }, + { 66,-35063 }, { 67,-35063 }, { 68,-35063 }, { 69,-35063 }, { 70,-35063 }, + + { 71,-35063 }, { 72,-35063 }, { 73,-35063 }, { 74,-35063 }, { 75,-35063 }, + { 76,-35063 }, { 77,-35063 }, { 78,-35063 }, { 79,-35063 }, { 80,-35063 }, + { 81,-35063 }, { 82,-35063 }, { 83,-35063 }, { 84,-35063 }, { 85,-35063 }, + { 86,-35063 }, { 87,-35063 }, { 88,-35063 }, { 89,-35063 }, { 90,-35063 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-35063 }, + { 0, 0 }, { 97,-35063 }, { 98,-35063 }, { 99,-35063 }, { 100,-35063 }, + { 101,-35063 }, { 102,-35063 }, { 103,-35063 }, { 104,-35063 }, { 105,-35063 }, + { 106,-35063 }, { 107,-35063 }, { 108,-35063 }, { 109,-35063 }, { 110,-35063 }, + { 111,-35063 }, { 112,-35063 }, { 113,-35063 }, { 114,-35063 }, { 115,-35063 }, + { 116,-35063 }, { 117,-35063 }, { 118,-35063 }, { 119,-35063 }, { 120,-35063 }, + + { 121,-35063 }, { 122,-35063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-35063 }, { 128,-35063 }, { 129,-35063 }, { 130,-35063 }, + { 131,-35063 }, { 132,-35063 }, { 133,-35063 }, { 134,-35063 }, { 135,-35063 }, + { 136,-35063 }, { 137,-35063 }, { 138,-35063 }, { 139,-35063 }, { 140,-35063 }, + { 141,-35063 }, { 142,-35063 }, { 143,-35063 }, { 144,-35063 }, { 145,-35063 }, + { 146,-35063 }, { 147,-35063 }, { 148,-35063 }, { 149,-35063 }, { 150,-35063 }, + { 151,-35063 }, { 152,-35063 }, { 153,-35063 }, { 154,-35063 }, { 155,-35063 }, + { 156,-35063 }, { 157,-35063 }, { 158,-35063 }, { 159,-35063 }, { 160,-35063 }, + { 161,-35063 }, { 162,-35063 }, { 163,-35063 }, { 164,-35063 }, { 165,-35063 }, + { 166,-35063 }, { 167,-35063 }, { 168,-35063 }, { 169,-35063 }, { 170,-35063 }, + + { 171,-35063 }, { 172,-35063 }, { 173,-35063 }, { 174,-35063 }, { 175,-35063 }, + { 176,-35063 }, { 177,-35063 }, { 178,-35063 }, { 179,-35063 }, { 180,-35063 }, + { 181,-35063 }, { 182,-35063 }, { 183,-35063 }, { 184,-35063 }, { 185,-35063 }, + { 186,-35063 }, { 187,-35063 }, { 188,-35063 }, { 189,-35063 }, { 190,-35063 }, + { 191,-35063 }, { 192,-35063 }, { 193,-35063 }, { 194,-35063 }, { 195,-35063 }, + { 196,-35063 }, { 197,-35063 }, { 198,-35063 }, { 199,-35063 }, { 200,-35063 }, + { 201,-35063 }, { 202,-35063 }, { 203,-35063 }, { 204,-35063 }, { 205,-35063 }, + { 206,-35063 }, { 207,-35063 }, { 208,-35063 }, { 209,-35063 }, { 210,-35063 }, + { 211,-35063 }, { 212,-35063 }, { 213,-35063 }, { 214,-35063 }, { 215,-35063 }, + { 216,-35063 }, { 217,-35063 }, { 218,-35063 }, { 219,-35063 }, { 220,-35063 }, + + { 221,-35063 }, { 222,-35063 }, { 223,-35063 }, { 224,-35063 }, { 225,-35063 }, + { 226,-35063 }, { 227,-35063 }, { 228,-35063 }, { 229,-35063 }, { 230,-35063 }, + { 231,-35063 }, { 232,-35063 }, { 233,-35063 }, { 234,-35063 }, { 235,-35063 }, + { 236,-35063 }, { 237,-35063 }, { 238,-35063 }, { 239,-35063 }, { 240,-35063 }, + { 241,-35063 }, { 242,-35063 }, { 243,-35063 }, { 244,-35063 }, { 245,-35063 }, + { 246,-35063 }, { 247,-35063 }, { 248,-35063 }, { 249,-35063 }, { 250,-35063 }, + { 251,-35063 }, { 252,-35063 }, { 253,-35063 }, { 254,-35063 }, { 255,-35063 }, + { 0, 30 }, { 0,56803 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-35320 }, + { 49,-35320 }, { 50,-35320 }, { 51,-35320 }, { 52,-35320 }, { 53,-35320 }, + { 54,-35320 }, { 55,-35320 }, { 56,-35320 }, { 57,-35320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-35320 }, { 66,-35320 }, { 67,-35320 }, { 68,-35320 }, + { 69,-35320 }, { 70,-35320 }, { 71,-35320 }, { 72,-35320 }, { 73,-35320 }, + { 74,-35320 }, { 75,-35320 }, { 76,-35320 }, { 77,-35320 }, { 78,-35320 }, + { 79,-35320 }, { 80,-35320 }, { 81,-35320 }, { 82,-35320 }, { 83,-35320 }, + { 84,-35320 }, { 85,-35320 }, { 86,-35320 }, { 87,-35320 }, { 88,-35320 }, + { 89,-35320 }, { 90,-35320 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-35320 }, { 0, 0 }, { 97,-35320 }, { 98,-35320 }, + { 99,-35320 }, { 100,-35320 }, { 101,-35320 }, { 102,-35320 }, { 103,-35320 }, + { 104,-35320 }, { 105,-35320 }, { 106,-35320 }, { 107,-35320 }, { 108,-35320 }, + { 109,-35320 }, { 110,-35320 }, { 111,-35320 }, { 112,-35320 }, { 113,-35320 }, + + { 114,-35320 }, { 115,-35320 }, { 116,-35320 }, { 117,-35320 }, { 118,-35320 }, + { 119,-35320 }, { 120,-35320 }, { 121,-35320 }, { 122,-35320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-35320 }, { 128,-35320 }, + { 129,-35320 }, { 130,-35320 }, { 131,-35320 }, { 132,-35320 }, { 133,-35320 }, + { 134,-35320 }, { 135,-35320 }, { 136,-35320 }, { 137,-35320 }, { 138,-35320 }, + { 139,-35320 }, { 140,-35320 }, { 141,-35320 }, { 142,-35320 }, { 143,-35320 }, + { 144,-35320 }, { 145,-35320 }, { 146,-35320 }, { 147,-35320 }, { 148,-35320 }, + { 149,-35320 }, { 150,-35320 }, { 151,-35320 }, { 152,-35320 }, { 153,-35320 }, + { 154,-35320 }, { 155,-35320 }, { 156,-35320 }, { 157,-35320 }, { 158,-35320 }, + { 159,-35320 }, { 160,-35320 }, { 161,-35320 }, { 162,-35320 }, { 163,-35320 }, + + { 164,-35320 }, { 165,-35320 }, { 166,-35320 }, { 167,-35320 }, { 168,-35320 }, + { 169,-35320 }, { 170,-35320 }, { 171,-35320 }, { 172,-35320 }, { 173,-35320 }, + { 174,-35320 }, { 175,-35320 }, { 176,-35320 }, { 177,-35320 }, { 178,-35320 }, + { 179,-35320 }, { 180,-35320 }, { 181,-35320 }, { 182,-35320 }, { 183,-35320 }, + { 184,-35320 }, { 185,-35320 }, { 186,-35320 }, { 187,-35320 }, { 188,-35320 }, + { 189,-35320 }, { 190,-35320 }, { 191,-35320 }, { 192,-35320 }, { 193,-35320 }, + { 194,-35320 }, { 195,-35320 }, { 196,-35320 }, { 197,-35320 }, { 198,-35320 }, + { 199,-35320 }, { 200,-35320 }, { 201,-35320 }, { 202,-35320 }, { 203,-35320 }, + { 204,-35320 }, { 205,-35320 }, { 206,-35320 }, { 207,-35320 }, { 208,-35320 }, + { 209,-35320 }, { 210,-35320 }, { 211,-35320 }, { 212,-35320 }, { 213,-35320 }, + + { 214,-35320 }, { 215,-35320 }, { 216,-35320 }, { 217,-35320 }, { 218,-35320 }, + { 219,-35320 }, { 220,-35320 }, { 221,-35320 }, { 222,-35320 }, { 223,-35320 }, + { 224,-35320 }, { 225,-35320 }, { 226,-35320 }, { 227,-35320 }, { 228,-35320 }, + { 229,-35320 }, { 230,-35320 }, { 231,-35320 }, { 232,-35320 }, { 233,-35320 }, + { 234,-35320 }, { 235,-35320 }, { 236,-35320 }, { 237,-35320 }, { 238,-35320 }, + { 239,-35320 }, { 240,-35320 }, { 241,-35320 }, { 242,-35320 }, { 243,-35320 }, + { 244,-35320 }, { 245,-35320 }, { 246,-35320 }, { 247,-35320 }, { 248,-35320 }, + { 249,-35320 }, { 250,-35320 }, { 251,-35320 }, { 252,-35320 }, { 253,-35320 }, + { 254,-35320 }, { 255,-35320 }, { 0, 131 }, { 0,56546 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-35577 }, { 49,-35577 }, { 50,-35577 }, { 51,-35577 }, + { 52,-35577 }, { 53,-35577 }, { 54,-35577 }, { 55,-35577 }, { 56,-35577 }, + + { 57,-35577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-35577 }, { 66,-35577 }, + { 67,-35577 }, { 68,-35577 }, { 69,-35577 }, { 70,-35577 }, { 71,-35577 }, + { 72,-35577 }, { 73,-35577 }, { 74,-35577 }, { 75,-35577 }, { 76,-35577 }, + { 77,-35577 }, { 78,13626 }, { 79,-35577 }, { 80,-35577 }, { 81,-35577 }, + { 82,-35577 }, { 83,-35577 }, { 84,-35577 }, { 85,-35577 }, { 86,-35577 }, + { 87,-35577 }, { 88,-35577 }, { 89,-35577 }, { 90,-35577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-35577 }, { 0, 0 }, + { 97,-35577 }, { 98,-35577 }, { 99,-35577 }, { 100,-35577 }, { 101,-35577 }, + { 102,-35577 }, { 103,-35577 }, { 104,-35577 }, { 105,-35577 }, { 106,-35577 }, + + { 107,-35577 }, { 108,-35577 }, { 109,-35577 }, { 110,13626 }, { 111,-35577 }, + { 112,-35577 }, { 113,-35577 }, { 114,-35577 }, { 115,-35577 }, { 116,-35577 }, + { 117,-35577 }, { 118,-35577 }, { 119,-35577 }, { 120,-35577 }, { 121,-35577 }, + { 122,-35577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-35577 }, { 128,-35577 }, { 129,-35577 }, { 130,-35577 }, { 131,-35577 }, + { 132,-35577 }, { 133,-35577 }, { 134,-35577 }, { 135,-35577 }, { 136,-35577 }, + { 137,-35577 }, { 138,-35577 }, { 139,-35577 }, { 140,-35577 }, { 141,-35577 }, + { 142,-35577 }, { 143,-35577 }, { 144,-35577 }, { 145,-35577 }, { 146,-35577 }, + { 147,-35577 }, { 148,-35577 }, { 149,-35577 }, { 150,-35577 }, { 151,-35577 }, + { 152,-35577 }, { 153,-35577 }, { 154,-35577 }, { 155,-35577 }, { 156,-35577 }, + + { 157,-35577 }, { 158,-35577 }, { 159,-35577 }, { 160,-35577 }, { 161,-35577 }, + { 162,-35577 }, { 163,-35577 }, { 164,-35577 }, { 165,-35577 }, { 166,-35577 }, + { 167,-35577 }, { 168,-35577 }, { 169,-35577 }, { 170,-35577 }, { 171,-35577 }, + { 172,-35577 }, { 173,-35577 }, { 174,-35577 }, { 175,-35577 }, { 176,-35577 }, + { 177,-35577 }, { 178,-35577 }, { 179,-35577 }, { 180,-35577 }, { 181,-35577 }, + { 182,-35577 }, { 183,-35577 }, { 184,-35577 }, { 185,-35577 }, { 186,-35577 }, + { 187,-35577 }, { 188,-35577 }, { 189,-35577 }, { 190,-35577 }, { 191,-35577 }, + { 192,-35577 }, { 193,-35577 }, { 194,-35577 }, { 195,-35577 }, { 196,-35577 }, + { 197,-35577 }, { 198,-35577 }, { 199,-35577 }, { 200,-35577 }, { 201,-35577 }, + { 202,-35577 }, { 203,-35577 }, { 204,-35577 }, { 205,-35577 }, { 206,-35577 }, + + { 207,-35577 }, { 208,-35577 }, { 209,-35577 }, { 210,-35577 }, { 211,-35577 }, + { 212,-35577 }, { 213,-35577 }, { 214,-35577 }, { 215,-35577 }, { 216,-35577 }, + { 217,-35577 }, { 218,-35577 }, { 219,-35577 }, { 220,-35577 }, { 221,-35577 }, + { 222,-35577 }, { 223,-35577 }, { 224,-35577 }, { 225,-35577 }, { 226,-35577 }, + { 227,-35577 }, { 228,-35577 }, { 229,-35577 }, { 230,-35577 }, { 231,-35577 }, + { 232,-35577 }, { 233,-35577 }, { 234,-35577 }, { 235,-35577 }, { 236,-35577 }, + { 237,-35577 }, { 238,-35577 }, { 239,-35577 }, { 240,-35577 }, { 241,-35577 }, + { 242,-35577 }, { 243,-35577 }, { 244,-35577 }, { 245,-35577 }, { 246,-35577 }, + { 247,-35577 }, { 248,-35577 }, { 249,-35577 }, { 250,-35577 }, { 251,-35577 }, + { 252,-35577 }, { 253,-35577 }, { 254,-35577 }, { 255,-35577 }, { 0, 131 }, + + { 0,56289 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-35834 }, { 49,-35834 }, + + { 50,-35834 }, { 51,-35834 }, { 52,-35834 }, { 53,-35834 }, { 54,-35834 }, + { 55,-35834 }, { 56,-35834 }, { 57,-35834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-35834 }, { 66,-35834 }, { 67,-35834 }, { 68,-35834 }, { 69,-35834 }, + { 70,-35834 }, { 71,-35834 }, { 72,-35834 }, { 73,-35834 }, { 74,-35834 }, + { 75,-35834 }, { 76,13626 }, { 77,-35834 }, { 78,-35834 }, { 79,-35834 }, + { 80,-35834 }, { 81,-35834 }, { 82,-35834 }, { 83,-35834 }, { 84,-35834 }, + { 85,-35834 }, { 86,-35834 }, { 87,-35834 }, { 88,-35834 }, { 89,-35834 }, + { 90,-35834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-35834 }, { 0, 0 }, { 97,-35834 }, { 98,-35834 }, { 99,-35834 }, + + { 100,-35834 }, { 101,-35834 }, { 102,-35834 }, { 103,-35834 }, { 104,-35834 }, + { 105,-35834 }, { 106,-35834 }, { 107,-35834 }, { 108,13626 }, { 109,-35834 }, + { 110,-35834 }, { 111,-35834 }, { 112,-35834 }, { 113,-35834 }, { 114,-35834 }, + { 115,-35834 }, { 116,-35834 }, { 117,-35834 }, { 118,-35834 }, { 119,-35834 }, + { 120,-35834 }, { 121,-35834 }, { 122,-35834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-35834 }, { 128,-35834 }, { 129,-35834 }, + { 130,-35834 }, { 131,-35834 }, { 132,-35834 }, { 133,-35834 }, { 134,-35834 }, + { 135,-35834 }, { 136,-35834 }, { 137,-35834 }, { 138,-35834 }, { 139,-35834 }, + { 140,-35834 }, { 141,-35834 }, { 142,-35834 }, { 143,-35834 }, { 144,-35834 }, + { 145,-35834 }, { 146,-35834 }, { 147,-35834 }, { 148,-35834 }, { 149,-35834 }, + + { 150,-35834 }, { 151,-35834 }, { 152,-35834 }, { 153,-35834 }, { 154,-35834 }, + { 155,-35834 }, { 156,-35834 }, { 157,-35834 }, { 158,-35834 }, { 159,-35834 }, + { 160,-35834 }, { 161,-35834 }, { 162,-35834 }, { 163,-35834 }, { 164,-35834 }, + { 165,-35834 }, { 166,-35834 }, { 167,-35834 }, { 168,-35834 }, { 169,-35834 }, + { 170,-35834 }, { 171,-35834 }, { 172,-35834 }, { 173,-35834 }, { 174,-35834 }, + { 175,-35834 }, { 176,-35834 }, { 177,-35834 }, { 178,-35834 }, { 179,-35834 }, + { 180,-35834 }, { 181,-35834 }, { 182,-35834 }, { 183,-35834 }, { 184,-35834 }, + { 185,-35834 }, { 186,-35834 }, { 187,-35834 }, { 188,-35834 }, { 189,-35834 }, + { 190,-35834 }, { 191,-35834 }, { 192,-35834 }, { 193,-35834 }, { 194,-35834 }, + { 195,-35834 }, { 196,-35834 }, { 197,-35834 }, { 198,-35834 }, { 199,-35834 }, + + { 200,-35834 }, { 201,-35834 }, { 202,-35834 }, { 203,-35834 }, { 204,-35834 }, + { 205,-35834 }, { 206,-35834 }, { 207,-35834 }, { 208,-35834 }, { 209,-35834 }, + { 210,-35834 }, { 211,-35834 }, { 212,-35834 }, { 213,-35834 }, { 214,-35834 }, + { 215,-35834 }, { 216,-35834 }, { 217,-35834 }, { 218,-35834 }, { 219,-35834 }, + { 220,-35834 }, { 221,-35834 }, { 222,-35834 }, { 223,-35834 }, { 224,-35834 }, + { 225,-35834 }, { 226,-35834 }, { 227,-35834 }, { 228,-35834 }, { 229,-35834 }, + { 230,-35834 }, { 231,-35834 }, { 232,-35834 }, { 233,-35834 }, { 234,-35834 }, + { 235,-35834 }, { 236,-35834 }, { 237,-35834 }, { 238,-35834 }, { 239,-35834 }, + { 240,-35834 }, { 241,-35834 }, { 242,-35834 }, { 243,-35834 }, { 244,-35834 }, + { 245,-35834 }, { 246,-35834 }, { 247,-35834 }, { 248,-35834 }, { 249,-35834 }, + + { 250,-35834 }, { 251,-35834 }, { 252,-35834 }, { 253,-35834 }, { 254,-35834 }, + { 255,-35834 }, { 0, 131 }, { 0,56032 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-36091 }, { 49,-36091 }, { 50,-36091 }, { 51,-36091 }, { 52,-36091 }, + { 53,-36091 }, { 54,-36091 }, { 55,-36091 }, { 56,-36091 }, { 57,-36091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,13626 }, { 66,-36091 }, { 67,-36091 }, + { 68,-36091 }, { 69,-36091 }, { 70,-36091 }, { 71,-36091 }, { 72,-36091 }, + { 73,-36091 }, { 74,-36091 }, { 75,-36091 }, { 76,-36091 }, { 77,-36091 }, + { 78,-36091 }, { 79,-36091 }, { 80,-36091 }, { 81,-36091 }, { 82,-36091 }, + { 83,-36091 }, { 84,-36091 }, { 85,-36091 }, { 86,-36091 }, { 87,-36091 }, + { 88,-36091 }, { 89,-36091 }, { 90,-36091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-36091 }, { 0, 0 }, { 97,13626 }, + { 98,-36091 }, { 99,-36091 }, { 100,-36091 }, { 101,-36091 }, { 102,-36091 }, + { 103,-36091 }, { 104,-36091 }, { 105,-36091 }, { 106,-36091 }, { 107,-36091 }, + { 108,-36091 }, { 109,-36091 }, { 110,-36091 }, { 111,-36091 }, { 112,-36091 }, + { 113,-36091 }, { 114,-36091 }, { 115,-36091 }, { 116,-36091 }, { 117,-36091 }, + { 118,-36091 }, { 119,-36091 }, { 120,-36091 }, { 121,-36091 }, { 122,-36091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-36091 }, + { 128,-36091 }, { 129,-36091 }, { 130,-36091 }, { 131,-36091 }, { 132,-36091 }, + { 133,-36091 }, { 134,-36091 }, { 135,-36091 }, { 136,-36091 }, { 137,-36091 }, + { 138,-36091 }, { 139,-36091 }, { 140,-36091 }, { 141,-36091 }, { 142,-36091 }, + + { 143,-36091 }, { 144,-36091 }, { 145,-36091 }, { 146,-36091 }, { 147,-36091 }, + { 148,-36091 }, { 149,-36091 }, { 150,-36091 }, { 151,-36091 }, { 152,-36091 }, + { 153,-36091 }, { 154,-36091 }, { 155,-36091 }, { 156,-36091 }, { 157,-36091 }, + { 158,-36091 }, { 159,-36091 }, { 160,-36091 }, { 161,-36091 }, { 162,-36091 }, + { 163,-36091 }, { 164,-36091 }, { 165,-36091 }, { 166,-36091 }, { 167,-36091 }, + { 168,-36091 }, { 169,-36091 }, { 170,-36091 }, { 171,-36091 }, { 172,-36091 }, + { 173,-36091 }, { 174,-36091 }, { 175,-36091 }, { 176,-36091 }, { 177,-36091 }, + { 178,-36091 }, { 179,-36091 }, { 180,-36091 }, { 181,-36091 }, { 182,-36091 }, + { 183,-36091 }, { 184,-36091 }, { 185,-36091 }, { 186,-36091 }, { 187,-36091 }, + { 188,-36091 }, { 189,-36091 }, { 190,-36091 }, { 191,-36091 }, { 192,-36091 }, + + { 193,-36091 }, { 194,-36091 }, { 195,-36091 }, { 196,-36091 }, { 197,-36091 }, + { 198,-36091 }, { 199,-36091 }, { 200,-36091 }, { 201,-36091 }, { 202,-36091 }, + { 203,-36091 }, { 204,-36091 }, { 205,-36091 }, { 206,-36091 }, { 207,-36091 }, + { 208,-36091 }, { 209,-36091 }, { 210,-36091 }, { 211,-36091 }, { 212,-36091 }, + { 213,-36091 }, { 214,-36091 }, { 215,-36091 }, { 216,-36091 }, { 217,-36091 }, + { 218,-36091 }, { 219,-36091 }, { 220,-36091 }, { 221,-36091 }, { 222,-36091 }, + { 223,-36091 }, { 224,-36091 }, { 225,-36091 }, { 226,-36091 }, { 227,-36091 }, + { 228,-36091 }, { 229,-36091 }, { 230,-36091 }, { 231,-36091 }, { 232,-36091 }, + { 233,-36091 }, { 234,-36091 }, { 235,-36091 }, { 236,-36091 }, { 237,-36091 }, + { 238,-36091 }, { 239,-36091 }, { 240,-36091 }, { 241,-36091 }, { 242,-36091 }, + + { 243,-36091 }, { 244,-36091 }, { 245,-36091 }, { 246,-36091 }, { 247,-36091 }, + { 248,-36091 }, { 249,-36091 }, { 250,-36091 }, { 251,-36091 }, { 252,-36091 }, + { 253,-36091 }, { 254,-36091 }, { 255,-36091 }, { 0, 131 }, { 0,55775 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-36348 }, { 49,-36348 }, { 50,-36348 }, + { 51,-36348 }, { 52,-36348 }, { 53,-36348 }, { 54,-36348 }, { 55,-36348 }, + { 56,-36348 }, { 57,-36348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-36348 }, + { 66,-36348 }, { 67,-36348 }, { 68,-36348 }, { 69,-36348 }, { 70,-36348 }, + { 71,-36348 }, { 72,-36348 }, { 73,-36348 }, { 74,-36348 }, { 75,-36348 }, + { 76,-36348 }, { 77,-36348 }, { 78,-36348 }, { 79,-36348 }, { 80,-36348 }, + { 81,-36348 }, { 82,-36348 }, { 83,-36348 }, { 84,13626 }, { 85,-36348 }, + + { 86,-36348 }, { 87,-36348 }, { 88,-36348 }, { 89,-36348 }, { 90,-36348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-36348 }, + { 0, 0 }, { 97,-36348 }, { 98,-36348 }, { 99,-36348 }, { 100,-36348 }, + { 101,-36348 }, { 102,-36348 }, { 103,-36348 }, { 104,-36348 }, { 105,-36348 }, + { 106,-36348 }, { 107,-36348 }, { 108,-36348 }, { 109,-36348 }, { 110,-36348 }, + { 111,-36348 }, { 112,-36348 }, { 113,-36348 }, { 114,-36348 }, { 115,-36348 }, + { 116,13626 }, { 117,-36348 }, { 118,-36348 }, { 119,-36348 }, { 120,-36348 }, + { 121,-36348 }, { 122,-36348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-36348 }, { 128,-36348 }, { 129,-36348 }, { 130,-36348 }, + { 131,-36348 }, { 132,-36348 }, { 133,-36348 }, { 134,-36348 }, { 135,-36348 }, + + { 136,-36348 }, { 137,-36348 }, { 138,-36348 }, { 139,-36348 }, { 140,-36348 }, + { 141,-36348 }, { 142,-36348 }, { 143,-36348 }, { 144,-36348 }, { 145,-36348 }, + { 146,-36348 }, { 147,-36348 }, { 148,-36348 }, { 149,-36348 }, { 150,-36348 }, + { 151,-36348 }, { 152,-36348 }, { 153,-36348 }, { 154,-36348 }, { 155,-36348 }, + { 156,-36348 }, { 157,-36348 }, { 158,-36348 }, { 159,-36348 }, { 160,-36348 }, + { 161,-36348 }, { 162,-36348 }, { 163,-36348 }, { 164,-36348 }, { 165,-36348 }, + { 166,-36348 }, { 167,-36348 }, { 168,-36348 }, { 169,-36348 }, { 170,-36348 }, + { 171,-36348 }, { 172,-36348 }, { 173,-36348 }, { 174,-36348 }, { 175,-36348 }, + { 176,-36348 }, { 177,-36348 }, { 178,-36348 }, { 179,-36348 }, { 180,-36348 }, + { 181,-36348 }, { 182,-36348 }, { 183,-36348 }, { 184,-36348 }, { 185,-36348 }, + + { 186,-36348 }, { 187,-36348 }, { 188,-36348 }, { 189,-36348 }, { 190,-36348 }, + { 191,-36348 }, { 192,-36348 }, { 193,-36348 }, { 194,-36348 }, { 195,-36348 }, + { 196,-36348 }, { 197,-36348 }, { 198,-36348 }, { 199,-36348 }, { 200,-36348 }, + { 201,-36348 }, { 202,-36348 }, { 203,-36348 }, { 204,-36348 }, { 205,-36348 }, + { 206,-36348 }, { 207,-36348 }, { 208,-36348 }, { 209,-36348 }, { 210,-36348 }, + { 211,-36348 }, { 212,-36348 }, { 213,-36348 }, { 214,-36348 }, { 215,-36348 }, + { 216,-36348 }, { 217,-36348 }, { 218,-36348 }, { 219,-36348 }, { 220,-36348 }, + { 221,-36348 }, { 222,-36348 }, { 223,-36348 }, { 224,-36348 }, { 225,-36348 }, + { 226,-36348 }, { 227,-36348 }, { 228,-36348 }, { 229,-36348 }, { 230,-36348 }, + { 231,-36348 }, { 232,-36348 }, { 233,-36348 }, { 234,-36348 }, { 235,-36348 }, + + { 236,-36348 }, { 237,-36348 }, { 238,-36348 }, { 239,-36348 }, { 240,-36348 }, + { 241,-36348 }, { 242,-36348 }, { 243,-36348 }, { 244,-36348 }, { 245,-36348 }, + { 246,-36348 }, { 247,-36348 }, { 248,-36348 }, { 249,-36348 }, { 250,-36348 }, + { 251,-36348 }, { 252,-36348 }, { 253,-36348 }, { 254,-36348 }, { 255,-36348 }, + { 0, 131 }, { 0,55518 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-36605 }, + { 49,-36605 }, { 50,-36605 }, { 51,-36605 }, { 52,-36605 }, { 53,-36605 }, + { 54,-36605 }, { 55,-36605 }, { 56,-36605 }, { 57,-36605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13626 }, { 66,-36605 }, { 67,-36605 }, { 68,-36605 }, + { 69,-36605 }, { 70,-36605 }, { 71,-36605 }, { 72,-36605 }, { 73,-36605 }, + { 74,-36605 }, { 75,-36605 }, { 76,-36605 }, { 77,-36605 }, { 78,-36605 }, + + { 79,-36605 }, { 80,-36605 }, { 81,-36605 }, { 82,-36605 }, { 83,-36605 }, + { 84,-36605 }, { 85,-36605 }, { 86,-36605 }, { 87,-36605 }, { 88,-36605 }, + { 89,-36605 }, { 90,-36605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-36605 }, { 0, 0 }, { 97,13626 }, { 98,-36605 }, + { 99,-36605 }, { 100,-36605 }, { 101,-36605 }, { 102,-36605 }, { 103,-36605 }, + { 104,-36605 }, { 105,-36605 }, { 106,-36605 }, { 107,-36605 }, { 108,-36605 }, + { 109,-36605 }, { 110,-36605 }, { 111,-36605 }, { 112,-36605 }, { 113,-36605 }, + { 114,-36605 }, { 115,-36605 }, { 116,-36605 }, { 117,-36605 }, { 118,-36605 }, + { 119,-36605 }, { 120,-36605 }, { 121,-36605 }, { 122,-36605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-36605 }, { 128,-36605 }, + + { 129,-36605 }, { 130,-36605 }, { 131,-36605 }, { 132,-36605 }, { 133,-36605 }, + { 134,-36605 }, { 135,-36605 }, { 136,-36605 }, { 137,-36605 }, { 138,-36605 }, + { 139,-36605 }, { 140,-36605 }, { 141,-36605 }, { 142,-36605 }, { 143,-36605 }, + { 144,-36605 }, { 145,-36605 }, { 146,-36605 }, { 147,-36605 }, { 148,-36605 }, + { 149,-36605 }, { 150,-36605 }, { 151,-36605 }, { 152,-36605 }, { 153,-36605 }, + { 154,-36605 }, { 155,-36605 }, { 156,-36605 }, { 157,-36605 }, { 158,-36605 }, + { 159,-36605 }, { 160,-36605 }, { 161,-36605 }, { 162,-36605 }, { 163,-36605 }, + { 164,-36605 }, { 165,-36605 }, { 166,-36605 }, { 167,-36605 }, { 168,-36605 }, + { 169,-36605 }, { 170,-36605 }, { 171,-36605 }, { 172,-36605 }, { 173,-36605 }, + { 174,-36605 }, { 175,-36605 }, { 176,-36605 }, { 177,-36605 }, { 178,-36605 }, + + { 179,-36605 }, { 180,-36605 }, { 181,-36605 }, { 182,-36605 }, { 183,-36605 }, + { 184,-36605 }, { 185,-36605 }, { 186,-36605 }, { 187,-36605 }, { 188,-36605 }, + { 189,-36605 }, { 190,-36605 }, { 191,-36605 }, { 192,-36605 }, { 193,-36605 }, + { 194,-36605 }, { 195,-36605 }, { 196,-36605 }, { 197,-36605 }, { 198,-36605 }, + { 199,-36605 }, { 200,-36605 }, { 201,-36605 }, { 202,-36605 }, { 203,-36605 }, + { 204,-36605 }, { 205,-36605 }, { 206,-36605 }, { 207,-36605 }, { 208,-36605 }, + { 209,-36605 }, { 210,-36605 }, { 211,-36605 }, { 212,-36605 }, { 213,-36605 }, + { 214,-36605 }, { 215,-36605 }, { 216,-36605 }, { 217,-36605 }, { 218,-36605 }, + { 219,-36605 }, { 220,-36605 }, { 221,-36605 }, { 222,-36605 }, { 223,-36605 }, + { 224,-36605 }, { 225,-36605 }, { 226,-36605 }, { 227,-36605 }, { 228,-36605 }, + + { 229,-36605 }, { 230,-36605 }, { 231,-36605 }, { 232,-36605 }, { 233,-36605 }, + { 234,-36605 }, { 235,-36605 }, { 236,-36605 }, { 237,-36605 }, { 238,-36605 }, + { 239,-36605 }, { 240,-36605 }, { 241,-36605 }, { 242,-36605 }, { 243,-36605 }, + { 244,-36605 }, { 245,-36605 }, { 246,-36605 }, { 247,-36605 }, { 248,-36605 }, + { 249,-36605 }, { 250,-36605 }, { 251,-36605 }, { 252,-36605 }, { 253,-36605 }, + { 254,-36605 }, { 255,-36605 }, { 0, 52 }, { 0,55261 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-36862 }, { 49,-36862 }, { 50,-36862 }, { 51,-36862 }, + { 52,-36862 }, { 53,-36862 }, { 54,-36862 }, { 55,-36862 }, { 56,-36862 }, + { 57,-36862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-36862 }, { 66,-36862 }, + { 67,-36862 }, { 68,-36862 }, { 69,-36862 }, { 70,-36862 }, { 71,-36862 }, + + { 72,-36862 }, { 73,-36862 }, { 74,-36862 }, { 75,-36862 }, { 76,-36862 }, + { 77,-36862 }, { 78,-36862 }, { 79,-36862 }, { 80,-36862 }, { 81,-36862 }, + { 82,-36862 }, { 83,-36862 }, { 84,-36862 }, { 85,-36862 }, { 86,-36862 }, + { 87,-36862 }, { 88,-36862 }, { 89,-36862 }, { 90,-36862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-36862 }, { 0, 0 }, + { 97,-36862 }, { 98,-36862 }, { 99,-36862 }, { 100,-36862 }, { 101,-36862 }, + { 102,-36862 }, { 103,-36862 }, { 104,-36862 }, { 105,-36862 }, { 106,-36862 }, + { 107,-36862 }, { 108,-36862 }, { 109,-36862 }, { 110,-36862 }, { 111,-36862 }, + { 112,-36862 }, { 113,-36862 }, { 114,-36862 }, { 115,-36862 }, { 116,-36862 }, + { 117,-36862 }, { 118,-36862 }, { 119,-36862 }, { 120,-36862 }, { 121,-36862 }, + + { 122,-36862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-36862 }, { 128,-36862 }, { 129,-36862 }, { 130,-36862 }, { 131,-36862 }, + { 132,-36862 }, { 133,-36862 }, { 134,-36862 }, { 135,-36862 }, { 136,-36862 }, + { 137,-36862 }, { 138,-36862 }, { 139,-36862 }, { 140,-36862 }, { 141,-36862 }, + { 142,-36862 }, { 143,-36862 }, { 144,-36862 }, { 145,-36862 }, { 146,-36862 }, + { 147,-36862 }, { 148,-36862 }, { 149,-36862 }, { 150,-36862 }, { 151,-36862 }, + { 152,-36862 }, { 153,-36862 }, { 154,-36862 }, { 155,-36862 }, { 156,-36862 }, + { 157,-36862 }, { 158,-36862 }, { 159,-36862 }, { 160,-36862 }, { 161,-36862 }, + { 162,-36862 }, { 163,-36862 }, { 164,-36862 }, { 165,-36862 }, { 166,-36862 }, + { 167,-36862 }, { 168,-36862 }, { 169,-36862 }, { 170,-36862 }, { 171,-36862 }, + + { 172,-36862 }, { 173,-36862 }, { 174,-36862 }, { 175,-36862 }, { 176,-36862 }, + { 177,-36862 }, { 178,-36862 }, { 179,-36862 }, { 180,-36862 }, { 181,-36862 }, + { 182,-36862 }, { 183,-36862 }, { 184,-36862 }, { 185,-36862 }, { 186,-36862 }, + { 187,-36862 }, { 188,-36862 }, { 189,-36862 }, { 190,-36862 }, { 191,-36862 }, + { 192,-36862 }, { 193,-36862 }, { 194,-36862 }, { 195,-36862 }, { 196,-36862 }, + { 197,-36862 }, { 198,-36862 }, { 199,-36862 }, { 200,-36862 }, { 201,-36862 }, + { 202,-36862 }, { 203,-36862 }, { 204,-36862 }, { 205,-36862 }, { 206,-36862 }, + { 207,-36862 }, { 208,-36862 }, { 209,-36862 }, { 210,-36862 }, { 211,-36862 }, + { 212,-36862 }, { 213,-36862 }, { 214,-36862 }, { 215,-36862 }, { 216,-36862 }, + { 217,-36862 }, { 218,-36862 }, { 219,-36862 }, { 220,-36862 }, { 221,-36862 }, + + { 222,-36862 }, { 223,-36862 }, { 224,-36862 }, { 225,-36862 }, { 226,-36862 }, + { 227,-36862 }, { 228,-36862 }, { 229,-36862 }, { 230,-36862 }, { 231,-36862 }, + { 232,-36862 }, { 233,-36862 }, { 234,-36862 }, { 235,-36862 }, { 236,-36862 }, + { 237,-36862 }, { 238,-36862 }, { 239,-36862 }, { 240,-36862 }, { 241,-36862 }, + { 242,-36862 }, { 243,-36862 }, { 244,-36862 }, { 245,-36862 }, { 246,-36862 }, + { 247,-36862 }, { 248,-36862 }, { 249,-36862 }, { 250,-36862 }, { 251,-36862 }, + { 252,-36862 }, { 253,-36862 }, { 254,-36862 }, { 255,-36862 }, { 0, 131 }, + { 0,55004 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-37119 }, { 49,-37119 }, + { 50,-37119 }, { 51,-37119 }, { 52,-37119 }, { 53,-37119 }, { 54,-37119 }, + { 55,-37119 }, { 56,-37119 }, { 57,-37119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-37119 }, { 66,-37119 }, { 67,-37119 }, { 68,-37119 }, { 69,13369 }, + { 70,-37119 }, { 71,-37119 }, { 72,-37119 }, { 73,-37119 }, { 74,-37119 }, + { 75,-37119 }, { 76,-37119 }, { 77,-37119 }, { 78,-37119 }, { 79,-37119 }, + { 80,-37119 }, { 81,-37119 }, { 82,-37119 }, { 83,-37119 }, { 84,-37119 }, + { 85,-37119 }, { 86,-37119 }, { 87,-37119 }, { 88,-37119 }, { 89,-37119 }, + { 90,-37119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-37119 }, { 0, 0 }, { 97,-37119 }, { 98,-37119 }, { 99,-37119 }, + { 100,-37119 }, { 101,13369 }, { 102,-37119 }, { 103,-37119 }, { 104,-37119 }, + { 105,-37119 }, { 106,-37119 }, { 107,-37119 }, { 108,-37119 }, { 109,-37119 }, + { 110,-37119 }, { 111,-37119 }, { 112,-37119 }, { 113,-37119 }, { 114,-37119 }, + + { 115,-37119 }, { 116,-37119 }, { 117,-37119 }, { 118,-37119 }, { 119,-37119 }, + { 120,-37119 }, { 121,-37119 }, { 122,-37119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-37119 }, { 128,-37119 }, { 129,-37119 }, + { 130,-37119 }, { 131,-37119 }, { 132,-37119 }, { 133,-37119 }, { 134,-37119 }, + { 135,-37119 }, { 136,-37119 }, { 137,-37119 }, { 138,-37119 }, { 139,-37119 }, + { 140,-37119 }, { 141,-37119 }, { 142,-37119 }, { 143,-37119 }, { 144,-37119 }, + { 145,-37119 }, { 146,-37119 }, { 147,-37119 }, { 148,-37119 }, { 149,-37119 }, + { 150,-37119 }, { 151,-37119 }, { 152,-37119 }, { 153,-37119 }, { 154,-37119 }, + { 155,-37119 }, { 156,-37119 }, { 157,-37119 }, { 158,-37119 }, { 159,-37119 }, + { 160,-37119 }, { 161,-37119 }, { 162,-37119 }, { 163,-37119 }, { 164,-37119 }, + + { 165,-37119 }, { 166,-37119 }, { 167,-37119 }, { 168,-37119 }, { 169,-37119 }, + { 170,-37119 }, { 171,-37119 }, { 172,-37119 }, { 173,-37119 }, { 174,-37119 }, + { 175,-37119 }, { 176,-37119 }, { 177,-37119 }, { 178,-37119 }, { 179,-37119 }, + { 180,-37119 }, { 181,-37119 }, { 182,-37119 }, { 183,-37119 }, { 184,-37119 }, + { 185,-37119 }, { 186,-37119 }, { 187,-37119 }, { 188,-37119 }, { 189,-37119 }, + { 190,-37119 }, { 191,-37119 }, { 192,-37119 }, { 193,-37119 }, { 194,-37119 }, + { 195,-37119 }, { 196,-37119 }, { 197,-37119 }, { 198,-37119 }, { 199,-37119 }, + { 200,-37119 }, { 201,-37119 }, { 202,-37119 }, { 203,-37119 }, { 204,-37119 }, + { 205,-37119 }, { 206,-37119 }, { 207,-37119 }, { 208,-37119 }, { 209,-37119 }, + { 210,-37119 }, { 211,-37119 }, { 212,-37119 }, { 213,-37119 }, { 214,-37119 }, + + { 215,-37119 }, { 216,-37119 }, { 217,-37119 }, { 218,-37119 }, { 219,-37119 }, + { 220,-37119 }, { 221,-37119 }, { 222,-37119 }, { 223,-37119 }, { 224,-37119 }, + { 225,-37119 }, { 226,-37119 }, { 227,-37119 }, { 228,-37119 }, { 229,-37119 }, + { 230,-37119 }, { 231,-37119 }, { 232,-37119 }, { 233,-37119 }, { 234,-37119 }, + { 235,-37119 }, { 236,-37119 }, { 237,-37119 }, { 238,-37119 }, { 239,-37119 }, + { 240,-37119 }, { 241,-37119 }, { 242,-37119 }, { 243,-37119 }, { 244,-37119 }, + { 245,-37119 }, { 246,-37119 }, { 247,-37119 }, { 248,-37119 }, { 249,-37119 }, + { 250,-37119 }, { 251,-37119 }, { 252,-37119 }, { 253,-37119 }, { 254,-37119 }, + { 255,-37119 }, { 0, 131 }, { 0,54747 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-37376 }, { 49,-37376 }, { 50,-37376 }, { 51,-37376 }, { 52,-37376 }, + { 53,-37376 }, { 54,-37376 }, { 55,-37376 }, { 56,-37376 }, { 57,-37376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-37376 }, { 66,-37376 }, { 67,-37376 }, + { 68,-37376 }, { 69,-37376 }, { 70,-37376 }, { 71,-37376 }, { 72,-37376 }, + { 73,-37376 }, { 74,-37376 }, { 75,-37376 }, { 76,-37376 }, { 77,-37376 }, + { 78,-37376 }, { 79,-37376 }, { 80,-37376 }, { 81,-37376 }, { 82,-37376 }, + { 83,-37376 }, { 84,-37376 }, { 85,13369 }, { 86,-37376 }, { 87,-37376 }, + { 88,-37376 }, { 89,-37376 }, { 90,-37376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-37376 }, { 0, 0 }, { 97,-37376 }, + { 98,-37376 }, { 99,-37376 }, { 100,-37376 }, { 101,-37376 }, { 102,-37376 }, + { 103,-37376 }, { 104,-37376 }, { 105,-37376 }, { 106,-37376 }, { 107,-37376 }, + + { 108,-37376 }, { 109,-37376 }, { 110,-37376 }, { 111,-37376 }, { 112,-37376 }, + { 113,-37376 }, { 114,-37376 }, { 115,-37376 }, { 116,-37376 }, { 117,13369 }, + { 118,-37376 }, { 119,-37376 }, { 120,-37376 }, { 121,-37376 }, { 122,-37376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-37376 }, + { 128,-37376 }, { 129,-37376 }, { 130,-37376 }, { 131,-37376 }, { 132,-37376 }, + { 133,-37376 }, { 134,-37376 }, { 135,-37376 }, { 136,-37376 }, { 137,-37376 }, + { 138,-37376 }, { 139,-37376 }, { 140,-37376 }, { 141,-37376 }, { 142,-37376 }, + { 143,-37376 }, { 144,-37376 }, { 145,-37376 }, { 146,-37376 }, { 147,-37376 }, + { 148,-37376 }, { 149,-37376 }, { 150,-37376 }, { 151,-37376 }, { 152,-37376 }, + { 153,-37376 }, { 154,-37376 }, { 155,-37376 }, { 156,-37376 }, { 157,-37376 }, + + { 158,-37376 }, { 159,-37376 }, { 160,-37376 }, { 161,-37376 }, { 162,-37376 }, + { 163,-37376 }, { 164,-37376 }, { 165,-37376 }, { 166,-37376 }, { 167,-37376 }, + { 168,-37376 }, { 169,-37376 }, { 170,-37376 }, { 171,-37376 }, { 172,-37376 }, + { 173,-37376 }, { 174,-37376 }, { 175,-37376 }, { 176,-37376 }, { 177,-37376 }, + { 178,-37376 }, { 179,-37376 }, { 180,-37376 }, { 181,-37376 }, { 182,-37376 }, + { 183,-37376 }, { 184,-37376 }, { 185,-37376 }, { 186,-37376 }, { 187,-37376 }, + { 188,-37376 }, { 189,-37376 }, { 190,-37376 }, { 191,-37376 }, { 192,-37376 }, + { 193,-37376 }, { 194,-37376 }, { 195,-37376 }, { 196,-37376 }, { 197,-37376 }, + { 198,-37376 }, { 199,-37376 }, { 200,-37376 }, { 201,-37376 }, { 202,-37376 }, + { 203,-37376 }, { 204,-37376 }, { 205,-37376 }, { 206,-37376 }, { 207,-37376 }, + + { 208,-37376 }, { 209,-37376 }, { 210,-37376 }, { 211,-37376 }, { 212,-37376 }, + { 213,-37376 }, { 214,-37376 }, { 215,-37376 }, { 216,-37376 }, { 217,-37376 }, + { 218,-37376 }, { 219,-37376 }, { 220,-37376 }, { 221,-37376 }, { 222,-37376 }, + { 223,-37376 }, { 224,-37376 }, { 225,-37376 }, { 226,-37376 }, { 227,-37376 }, + { 228,-37376 }, { 229,-37376 }, { 230,-37376 }, { 231,-37376 }, { 232,-37376 }, + { 233,-37376 }, { 234,-37376 }, { 235,-37376 }, { 236,-37376 }, { 237,-37376 }, + { 238,-37376 }, { 239,-37376 }, { 240,-37376 }, { 241,-37376 }, { 242,-37376 }, + { 243,-37376 }, { 244,-37376 }, { 245,-37376 }, { 246,-37376 }, { 247,-37376 }, + { 248,-37376 }, { 249,-37376 }, { 250,-37376 }, { 251,-37376 }, { 252,-37376 }, + { 253,-37376 }, { 254,-37376 }, { 255,-37376 }, { 0, 131 }, { 0,54490 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-37633 }, { 49,-37633 }, { 50,-37633 }, + + { 51,-37633 }, { 52,-37633 }, { 53,-37633 }, { 54,-37633 }, { 55,-37633 }, + { 56,-37633 }, { 57,-37633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,13369 }, + { 66,-37633 }, { 67,-37633 }, { 68,-37633 }, { 69,13626 }, { 70,-37633 }, + { 71,-37633 }, { 72,-37633 }, { 73,-37633 }, { 74,-37633 }, { 75,-37633 }, + { 76,-37633 }, { 77,-37633 }, { 78,-37633 }, { 79,-37633 }, { 80,-37633 }, + { 81,-37633 }, { 82,-37633 }, { 83,-37633 }, { 84,-37633 }, { 85,-37633 }, + { 86,-37633 }, { 87,-37633 }, { 88,-37633 }, { 89,-37633 }, { 90,-37633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-37633 }, + { 0, 0 }, { 97,13369 }, { 98,-37633 }, { 99,-37633 }, { 100,-37633 }, + + { 101,13626 }, { 102,-37633 }, { 103,-37633 }, { 104,-37633 }, { 105,-37633 }, + { 106,-37633 }, { 107,-37633 }, { 108,-37633 }, { 109,-37633 }, { 110,-37633 }, + { 111,-37633 }, { 112,-37633 }, { 113,-37633 }, { 114,-37633 }, { 115,-37633 }, + { 116,-37633 }, { 117,-37633 }, { 118,-37633 }, { 119,-37633 }, { 120,-37633 }, + { 121,-37633 }, { 122,-37633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-37633 }, { 128,-37633 }, { 129,-37633 }, { 130,-37633 }, + { 131,-37633 }, { 132,-37633 }, { 133,-37633 }, { 134,-37633 }, { 135,-37633 }, + { 136,-37633 }, { 137,-37633 }, { 138,-37633 }, { 139,-37633 }, { 140,-37633 }, + { 141,-37633 }, { 142,-37633 }, { 143,-37633 }, { 144,-37633 }, { 145,-37633 }, + { 146,-37633 }, { 147,-37633 }, { 148,-37633 }, { 149,-37633 }, { 150,-37633 }, + + { 151,-37633 }, { 152,-37633 }, { 153,-37633 }, { 154,-37633 }, { 155,-37633 }, + { 156,-37633 }, { 157,-37633 }, { 158,-37633 }, { 159,-37633 }, { 160,-37633 }, + { 161,-37633 }, { 162,-37633 }, { 163,-37633 }, { 164,-37633 }, { 165,-37633 }, + { 166,-37633 }, { 167,-37633 }, { 168,-37633 }, { 169,-37633 }, { 170,-37633 }, + { 171,-37633 }, { 172,-37633 }, { 173,-37633 }, { 174,-37633 }, { 175,-37633 }, + { 176,-37633 }, { 177,-37633 }, { 178,-37633 }, { 179,-37633 }, { 180,-37633 }, + { 181,-37633 }, { 182,-37633 }, { 183,-37633 }, { 184,-37633 }, { 185,-37633 }, + { 186,-37633 }, { 187,-37633 }, { 188,-37633 }, { 189,-37633 }, { 190,-37633 }, + { 191,-37633 }, { 192,-37633 }, { 193,-37633 }, { 194,-37633 }, { 195,-37633 }, + { 196,-37633 }, { 197,-37633 }, { 198,-37633 }, { 199,-37633 }, { 200,-37633 }, + + { 201,-37633 }, { 202,-37633 }, { 203,-37633 }, { 204,-37633 }, { 205,-37633 }, + { 206,-37633 }, { 207,-37633 }, { 208,-37633 }, { 209,-37633 }, { 210,-37633 }, + { 211,-37633 }, { 212,-37633 }, { 213,-37633 }, { 214,-37633 }, { 215,-37633 }, + { 216,-37633 }, { 217,-37633 }, { 218,-37633 }, { 219,-37633 }, { 220,-37633 }, + { 221,-37633 }, { 222,-37633 }, { 223,-37633 }, { 224,-37633 }, { 225,-37633 }, + { 226,-37633 }, { 227,-37633 }, { 228,-37633 }, { 229,-37633 }, { 230,-37633 }, + { 231,-37633 }, { 232,-37633 }, { 233,-37633 }, { 234,-37633 }, { 235,-37633 }, + { 236,-37633 }, { 237,-37633 }, { 238,-37633 }, { 239,-37633 }, { 240,-37633 }, + { 241,-37633 }, { 242,-37633 }, { 243,-37633 }, { 244,-37633 }, { 245,-37633 }, + { 246,-37633 }, { 247,-37633 }, { 248,-37633 }, { 249,-37633 }, { 250,-37633 }, + + { 251,-37633 }, { 252,-37633 }, { 253,-37633 }, { 254,-37633 }, { 255,-37633 }, + { 0, 131 }, { 0,54233 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-37890 }, + { 49,-37890 }, { 50,-37890 }, { 51,-37890 }, { 52,-37890 }, { 53,-37890 }, + { 54,-37890 }, { 55,-37890 }, { 56,-37890 }, { 57,-37890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-37890 }, { 66,-37890 }, { 67,-37890 }, { 68,-37890 }, + { 69,-37890 }, { 70,-37890 }, { 71,-37890 }, { 72,-37890 }, { 73,-37890 }, + { 74,-37890 }, { 75,-37890 }, { 76,-37890 }, { 77,-37890 }, { 78,-37890 }, + { 79,-37890 }, { 80,-37890 }, { 81,-37890 }, { 82,13626 }, { 83,-37890 }, + { 84,-37890 }, { 85,-37890 }, { 86,-37890 }, { 87,-37890 }, { 88,-37890 }, + { 89,-37890 }, { 90,-37890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-37890 }, { 0, 0 }, { 97,-37890 }, { 98,-37890 }, + { 99,-37890 }, { 100,-37890 }, { 101,-37890 }, { 102,-37890 }, { 103,-37890 }, + { 104,-37890 }, { 105,-37890 }, { 106,-37890 }, { 107,-37890 }, { 108,-37890 }, + { 109,-37890 }, { 110,-37890 }, { 111,-37890 }, { 112,-37890 }, { 113,-37890 }, + { 114,13626 }, { 115,-37890 }, { 116,-37890 }, { 117,-37890 }, { 118,-37890 }, + { 119,-37890 }, { 120,-37890 }, { 121,-37890 }, { 122,-37890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-37890 }, { 128,-37890 }, + { 129,-37890 }, { 130,-37890 }, { 131,-37890 }, { 132,-37890 }, { 133,-37890 }, + { 134,-37890 }, { 135,-37890 }, { 136,-37890 }, { 137,-37890 }, { 138,-37890 }, + { 139,-37890 }, { 140,-37890 }, { 141,-37890 }, { 142,-37890 }, { 143,-37890 }, + + { 144,-37890 }, { 145,-37890 }, { 146,-37890 }, { 147,-37890 }, { 148,-37890 }, + { 149,-37890 }, { 150,-37890 }, { 151,-37890 }, { 152,-37890 }, { 153,-37890 }, + { 154,-37890 }, { 155,-37890 }, { 156,-37890 }, { 157,-37890 }, { 158,-37890 }, + { 159,-37890 }, { 160,-37890 }, { 161,-37890 }, { 162,-37890 }, { 163,-37890 }, + { 164,-37890 }, { 165,-37890 }, { 166,-37890 }, { 167,-37890 }, { 168,-37890 }, + { 169,-37890 }, { 170,-37890 }, { 171,-37890 }, { 172,-37890 }, { 173,-37890 }, + { 174,-37890 }, { 175,-37890 }, { 176,-37890 }, { 177,-37890 }, { 178,-37890 }, + { 179,-37890 }, { 180,-37890 }, { 181,-37890 }, { 182,-37890 }, { 183,-37890 }, + { 184,-37890 }, { 185,-37890 }, { 186,-37890 }, { 187,-37890 }, { 188,-37890 }, + { 189,-37890 }, { 190,-37890 }, { 191,-37890 }, { 192,-37890 }, { 193,-37890 }, + + { 194,-37890 }, { 195,-37890 }, { 196,-37890 }, { 197,-37890 }, { 198,-37890 }, + { 199,-37890 }, { 200,-37890 }, { 201,-37890 }, { 202,-37890 }, { 203,-37890 }, + { 204,-37890 }, { 205,-37890 }, { 206,-37890 }, { 207,-37890 }, { 208,-37890 }, + { 209,-37890 }, { 210,-37890 }, { 211,-37890 }, { 212,-37890 }, { 213,-37890 }, + { 214,-37890 }, { 215,-37890 }, { 216,-37890 }, { 217,-37890 }, { 218,-37890 }, + { 219,-37890 }, { 220,-37890 }, { 221,-37890 }, { 222,-37890 }, { 223,-37890 }, + { 224,-37890 }, { 225,-37890 }, { 226,-37890 }, { 227,-37890 }, { 228,-37890 }, + { 229,-37890 }, { 230,-37890 }, { 231,-37890 }, { 232,-37890 }, { 233,-37890 }, + { 234,-37890 }, { 235,-37890 }, { 236,-37890 }, { 237,-37890 }, { 238,-37890 }, + { 239,-37890 }, { 240,-37890 }, { 241,-37890 }, { 242,-37890 }, { 243,-37890 }, + + { 244,-37890 }, { 245,-37890 }, { 246,-37890 }, { 247,-37890 }, { 248,-37890 }, + { 249,-37890 }, { 250,-37890 }, { 251,-37890 }, { 252,-37890 }, { 253,-37890 }, + { 254,-37890 }, { 255,-37890 }, { 0, 131 }, { 0,53976 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-38147 }, { 49,-38147 }, { 50,-38147 }, { 51,-38147 }, + { 52,-38147 }, { 53,-38147 }, { 54,-38147 }, { 55,-38147 }, { 56,-38147 }, + { 57,-38147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-38147 }, { 66,-38147 }, + { 67,-38147 }, { 68,-38147 }, { 69,-38147 }, { 70,-38147 }, { 71,-38147 }, + { 72,-38147 }, { 73,-38147 }, { 74,-38147 }, { 75,-38147 }, { 76,-38147 }, + { 77,-38147 }, { 78,-38147 }, { 79,-38147 }, { 80,-38147 }, { 81,-38147 }, + { 82,-38147 }, { 83,-38147 }, { 84,13626 }, { 85,-38147 }, { 86,-38147 }, + + { 87,-38147 }, { 88,-38147 }, { 89,-38147 }, { 90,-38147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-38147 }, { 0, 0 }, + { 97,-38147 }, { 98,-38147 }, { 99,-38147 }, { 100,-38147 }, { 101,-38147 }, + { 102,-38147 }, { 103,-38147 }, { 104,-38147 }, { 105,-38147 }, { 106,-38147 }, + { 107,-38147 }, { 108,-38147 }, { 109,-38147 }, { 110,-38147 }, { 111,-38147 }, + { 112,-38147 }, { 113,-38147 }, { 114,-38147 }, { 115,-38147 }, { 116,13626 }, + { 117,-38147 }, { 118,-38147 }, { 119,-38147 }, { 120,-38147 }, { 121,-38147 }, + { 122,-38147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-38147 }, { 128,-38147 }, { 129,-38147 }, { 130,-38147 }, { 131,-38147 }, + { 132,-38147 }, { 133,-38147 }, { 134,-38147 }, { 135,-38147 }, { 136,-38147 }, + + { 137,-38147 }, { 138,-38147 }, { 139,-38147 }, { 140,-38147 }, { 141,-38147 }, + { 142,-38147 }, { 143,-38147 }, { 144,-38147 }, { 145,-38147 }, { 146,-38147 }, + { 147,-38147 }, { 148,-38147 }, { 149,-38147 }, { 150,-38147 }, { 151,-38147 }, + { 152,-38147 }, { 153,-38147 }, { 154,-38147 }, { 155,-38147 }, { 156,-38147 }, + { 157,-38147 }, { 158,-38147 }, { 159,-38147 }, { 160,-38147 }, { 161,-38147 }, + { 162,-38147 }, { 163,-38147 }, { 164,-38147 }, { 165,-38147 }, { 166,-38147 }, + { 167,-38147 }, { 168,-38147 }, { 169,-38147 }, { 170,-38147 }, { 171,-38147 }, + { 172,-38147 }, { 173,-38147 }, { 174,-38147 }, { 175,-38147 }, { 176,-38147 }, + { 177,-38147 }, { 178,-38147 }, { 179,-38147 }, { 180,-38147 }, { 181,-38147 }, + { 182,-38147 }, { 183,-38147 }, { 184,-38147 }, { 185,-38147 }, { 186,-38147 }, + + { 187,-38147 }, { 188,-38147 }, { 189,-38147 }, { 190,-38147 }, { 191,-38147 }, + { 192,-38147 }, { 193,-38147 }, { 194,-38147 }, { 195,-38147 }, { 196,-38147 }, + { 197,-38147 }, { 198,-38147 }, { 199,-38147 }, { 200,-38147 }, { 201,-38147 }, + { 202,-38147 }, { 203,-38147 }, { 204,-38147 }, { 205,-38147 }, { 206,-38147 }, + { 207,-38147 }, { 208,-38147 }, { 209,-38147 }, { 210,-38147 }, { 211,-38147 }, + { 212,-38147 }, { 213,-38147 }, { 214,-38147 }, { 215,-38147 }, { 216,-38147 }, + { 217,-38147 }, { 218,-38147 }, { 219,-38147 }, { 220,-38147 }, { 221,-38147 }, + { 222,-38147 }, { 223,-38147 }, { 224,-38147 }, { 225,-38147 }, { 226,-38147 }, + { 227,-38147 }, { 228,-38147 }, { 229,-38147 }, { 230,-38147 }, { 231,-38147 }, + { 232,-38147 }, { 233,-38147 }, { 234,-38147 }, { 235,-38147 }, { 236,-38147 }, + + { 237,-38147 }, { 238,-38147 }, { 239,-38147 }, { 240,-38147 }, { 241,-38147 }, + { 242,-38147 }, { 243,-38147 }, { 244,-38147 }, { 245,-38147 }, { 246,-38147 }, + { 247,-38147 }, { 248,-38147 }, { 249,-38147 }, { 250,-38147 }, { 251,-38147 }, + { 252,-38147 }, { 253,-38147 }, { 254,-38147 }, { 255,-38147 }, { 0, 76 }, + { 0,53719 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-38404 }, { 49,-38404 }, + { 50,-38404 }, { 51,-38404 }, { 52,-38404 }, { 53,-38404 }, { 54,-38404 }, + { 55,-38404 }, { 56,-38404 }, { 57,-38404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-38404 }, { 66,-38404 }, { 67,-38404 }, { 68,-38404 }, { 69,-38404 }, + { 70,-38404 }, { 71,-38404 }, { 72,-38404 }, { 73,-38404 }, { 74,-38404 }, + { 75,-38404 }, { 76,-38404 }, { 77,-38404 }, { 78,-38404 }, { 79,-38404 }, + + { 80,-38404 }, { 81,-38404 }, { 82,-38404 }, { 83,-38404 }, { 84,-38404 }, + { 85,-38404 }, { 86,-38404 }, { 87,-38404 }, { 88,-38404 }, { 89,-38404 }, + { 90,-38404 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-38404 }, { 0, 0 }, { 97,-38404 }, { 98,-38404 }, { 99,-38404 }, + { 100,-38404 }, { 101,-38404 }, { 102,-38404 }, { 103,-38404 }, { 104,-38404 }, + { 105,-38404 }, { 106,-38404 }, { 107,-38404 }, { 108,-38404 }, { 109,-38404 }, + { 110,-38404 }, { 111,-38404 }, { 112,-38404 }, { 113,-38404 }, { 114,-38404 }, + { 115,-38404 }, { 116,-38404 }, { 117,-38404 }, { 118,-38404 }, { 119,-38404 }, + { 120,-38404 }, { 121,-38404 }, { 122,-38404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-38404 }, { 128,-38404 }, { 129,-38404 }, + + { 130,-38404 }, { 131,-38404 }, { 132,-38404 }, { 133,-38404 }, { 134,-38404 }, + { 135,-38404 }, { 136,-38404 }, { 137,-38404 }, { 138,-38404 }, { 139,-38404 }, + { 140,-38404 }, { 141,-38404 }, { 142,-38404 }, { 143,-38404 }, { 144,-38404 }, + { 145,-38404 }, { 146,-38404 }, { 147,-38404 }, { 148,-38404 }, { 149,-38404 }, + { 150,-38404 }, { 151,-38404 }, { 152,-38404 }, { 153,-38404 }, { 154,-38404 }, + { 155,-38404 }, { 156,-38404 }, { 157,-38404 }, { 158,-38404 }, { 159,-38404 }, + { 160,-38404 }, { 161,-38404 }, { 162,-38404 }, { 163,-38404 }, { 164,-38404 }, + { 165,-38404 }, { 166,-38404 }, { 167,-38404 }, { 168,-38404 }, { 169,-38404 }, + { 170,-38404 }, { 171,-38404 }, { 172,-38404 }, { 173,-38404 }, { 174,-38404 }, + { 175,-38404 }, { 176,-38404 }, { 177,-38404 }, { 178,-38404 }, { 179,-38404 }, + + { 180,-38404 }, { 181,-38404 }, { 182,-38404 }, { 183,-38404 }, { 184,-38404 }, + { 185,-38404 }, { 186,-38404 }, { 187,-38404 }, { 188,-38404 }, { 189,-38404 }, + { 190,-38404 }, { 191,-38404 }, { 192,-38404 }, { 193,-38404 }, { 194,-38404 }, + { 195,-38404 }, { 196,-38404 }, { 197,-38404 }, { 198,-38404 }, { 199,-38404 }, + { 200,-38404 }, { 201,-38404 }, { 202,-38404 }, { 203,-38404 }, { 204,-38404 }, + { 205,-38404 }, { 206,-38404 }, { 207,-38404 }, { 208,-38404 }, { 209,-38404 }, + { 210,-38404 }, { 211,-38404 }, { 212,-38404 }, { 213,-38404 }, { 214,-38404 }, + { 215,-38404 }, { 216,-38404 }, { 217,-38404 }, { 218,-38404 }, { 219,-38404 }, + { 220,-38404 }, { 221,-38404 }, { 222,-38404 }, { 223,-38404 }, { 224,-38404 }, + { 225,-38404 }, { 226,-38404 }, { 227,-38404 }, { 228,-38404 }, { 229,-38404 }, + + { 230,-38404 }, { 231,-38404 }, { 232,-38404 }, { 233,-38404 }, { 234,-38404 }, + { 235,-38404 }, { 236,-38404 }, { 237,-38404 }, { 238,-38404 }, { 239,-38404 }, + { 240,-38404 }, { 241,-38404 }, { 242,-38404 }, { 243,-38404 }, { 244,-38404 }, + { 245,-38404 }, { 246,-38404 }, { 247,-38404 }, { 248,-38404 }, { 249,-38404 }, + { 250,-38404 }, { 251,-38404 }, { 252,-38404 }, { 253,-38404 }, { 254,-38404 }, + { 255,-38404 }, { 0, 131 }, { 0,53462 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-38661 }, { 49,-38661 }, { 50,-38661 }, { 51,-38661 }, { 52,-38661 }, + { 53,-38661 }, { 54,-38661 }, { 55,-38661 }, { 56,-38661 }, { 57,-38661 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-38661 }, { 66,-38661 }, { 67,-38661 }, + { 68,-38661 }, { 69,-38661 }, { 70,-38661 }, { 71,-38661 }, { 72,-38661 }, + + { 73,-38661 }, { 74,-38661 }, { 75,-38661 }, { 76,-38661 }, { 77,-38661 }, + { 78,-38661 }, { 79,-38661 }, { 80,-38661 }, { 81,-38661 }, { 82,-38661 }, + { 83,13369 }, { 84,-38661 }, { 85,-38661 }, { 86,-38661 }, { 87,-38661 }, + { 88,-38661 }, { 89,-38661 }, { 90,-38661 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-38661 }, { 0, 0 }, { 97,-38661 }, + { 98,-38661 }, { 99,-38661 }, { 100,-38661 }, { 101,-38661 }, { 102,-38661 }, + { 103,-38661 }, { 104,-38661 }, { 105,-38661 }, { 106,-38661 }, { 107,-38661 }, + { 108,-38661 }, { 109,-38661 }, { 110,-38661 }, { 111,-38661 }, { 112,-38661 }, + { 113,-38661 }, { 114,-38661 }, { 115,13369 }, { 116,-38661 }, { 117,-38661 }, + { 118,-38661 }, { 119,-38661 }, { 120,-38661 }, { 121,-38661 }, { 122,-38661 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-38661 }, + { 128,-38661 }, { 129,-38661 }, { 130,-38661 }, { 131,-38661 }, { 132,-38661 }, + { 133,-38661 }, { 134,-38661 }, { 135,-38661 }, { 136,-38661 }, { 137,-38661 }, + { 138,-38661 }, { 139,-38661 }, { 140,-38661 }, { 141,-38661 }, { 142,-38661 }, + { 143,-38661 }, { 144,-38661 }, { 145,-38661 }, { 146,-38661 }, { 147,-38661 }, + { 148,-38661 }, { 149,-38661 }, { 150,-38661 }, { 151,-38661 }, { 152,-38661 }, + { 153,-38661 }, { 154,-38661 }, { 155,-38661 }, { 156,-38661 }, { 157,-38661 }, + { 158,-38661 }, { 159,-38661 }, { 160,-38661 }, { 161,-38661 }, { 162,-38661 }, + { 163,-38661 }, { 164,-38661 }, { 165,-38661 }, { 166,-38661 }, { 167,-38661 }, + { 168,-38661 }, { 169,-38661 }, { 170,-38661 }, { 171,-38661 }, { 172,-38661 }, + + { 173,-38661 }, { 174,-38661 }, { 175,-38661 }, { 176,-38661 }, { 177,-38661 }, + { 178,-38661 }, { 179,-38661 }, { 180,-38661 }, { 181,-38661 }, { 182,-38661 }, + { 183,-38661 }, { 184,-38661 }, { 185,-38661 }, { 186,-38661 }, { 187,-38661 }, + { 188,-38661 }, { 189,-38661 }, { 190,-38661 }, { 191,-38661 }, { 192,-38661 }, + { 193,-38661 }, { 194,-38661 }, { 195,-38661 }, { 196,-38661 }, { 197,-38661 }, + { 198,-38661 }, { 199,-38661 }, { 200,-38661 }, { 201,-38661 }, { 202,-38661 }, + { 203,-38661 }, { 204,-38661 }, { 205,-38661 }, { 206,-38661 }, { 207,-38661 }, + { 208,-38661 }, { 209,-38661 }, { 210,-38661 }, { 211,-38661 }, { 212,-38661 }, + { 213,-38661 }, { 214,-38661 }, { 215,-38661 }, { 216,-38661 }, { 217,-38661 }, + { 218,-38661 }, { 219,-38661 }, { 220,-38661 }, { 221,-38661 }, { 222,-38661 }, + + { 223,-38661 }, { 224,-38661 }, { 225,-38661 }, { 226,-38661 }, { 227,-38661 }, + { 228,-38661 }, { 229,-38661 }, { 230,-38661 }, { 231,-38661 }, { 232,-38661 }, + { 233,-38661 }, { 234,-38661 }, { 235,-38661 }, { 236,-38661 }, { 237,-38661 }, + { 238,-38661 }, { 239,-38661 }, { 240,-38661 }, { 241,-38661 }, { 242,-38661 }, + { 243,-38661 }, { 244,-38661 }, { 245,-38661 }, { 246,-38661 }, { 247,-38661 }, + { 248,-38661 }, { 249,-38661 }, { 250,-38661 }, { 251,-38661 }, { 252,-38661 }, + { 253,-38661 }, { 254,-38661 }, { 255,-38661 }, { 0, 131 }, { 0,53205 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-38918 }, { 49,-38918 }, { 50,-38918 }, + { 51,-38918 }, { 52,-38918 }, { 53,-38918 }, { 54,-38918 }, { 55,-38918 }, + { 56,-38918 }, { 57,-38918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-38918 }, + + { 66,-38918 }, { 67,-38918 }, { 68,-38918 }, { 69,-38918 }, { 70,-38918 }, + { 71,-38918 }, { 72,-38918 }, { 73,-38918 }, { 74,-38918 }, { 75,-38918 }, + { 76,-38918 }, { 77,-38918 }, { 78,-38918 }, { 79,-38918 }, { 80,-38918 }, + { 81,-38918 }, { 82,-38918 }, { 83,-38918 }, { 84,13369 }, { 85,-38918 }, + { 86,-38918 }, { 87,-38918 }, { 88,-38918 }, { 89,-38918 }, { 90,-38918 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-38918 }, + { 0, 0 }, { 97,-38918 }, { 98,-38918 }, { 99,-38918 }, { 100,-38918 }, + { 101,-38918 }, { 102,-38918 }, { 103,-38918 }, { 104,-38918 }, { 105,-38918 }, + { 106,-38918 }, { 107,-38918 }, { 108,-38918 }, { 109,-38918 }, { 110,-38918 }, + { 111,-38918 }, { 112,-38918 }, { 113,-38918 }, { 114,-38918 }, { 115,-38918 }, + + { 116,13369 }, { 117,-38918 }, { 118,-38918 }, { 119,-38918 }, { 120,-38918 }, + { 121,-38918 }, { 122,-38918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-38918 }, { 128,-38918 }, { 129,-38918 }, { 130,-38918 }, + { 131,-38918 }, { 132,-38918 }, { 133,-38918 }, { 134,-38918 }, { 135,-38918 }, + { 136,-38918 }, { 137,-38918 }, { 138,-38918 }, { 139,-38918 }, { 140,-38918 }, + { 141,-38918 }, { 142,-38918 }, { 143,-38918 }, { 144,-38918 }, { 145,-38918 }, + { 146,-38918 }, { 147,-38918 }, { 148,-38918 }, { 149,-38918 }, { 150,-38918 }, + { 151,-38918 }, { 152,-38918 }, { 153,-38918 }, { 154,-38918 }, { 155,-38918 }, + { 156,-38918 }, { 157,-38918 }, { 158,-38918 }, { 159,-38918 }, { 160,-38918 }, + { 161,-38918 }, { 162,-38918 }, { 163,-38918 }, { 164,-38918 }, { 165,-38918 }, + + { 166,-38918 }, { 167,-38918 }, { 168,-38918 }, { 169,-38918 }, { 170,-38918 }, + { 171,-38918 }, { 172,-38918 }, { 173,-38918 }, { 174,-38918 }, { 175,-38918 }, + { 176,-38918 }, { 177,-38918 }, { 178,-38918 }, { 179,-38918 }, { 180,-38918 }, + { 181,-38918 }, { 182,-38918 }, { 183,-38918 }, { 184,-38918 }, { 185,-38918 }, + { 186,-38918 }, { 187,-38918 }, { 188,-38918 }, { 189,-38918 }, { 190,-38918 }, + { 191,-38918 }, { 192,-38918 }, { 193,-38918 }, { 194,-38918 }, { 195,-38918 }, + { 196,-38918 }, { 197,-38918 }, { 198,-38918 }, { 199,-38918 }, { 200,-38918 }, + { 201,-38918 }, { 202,-38918 }, { 203,-38918 }, { 204,-38918 }, { 205,-38918 }, + { 206,-38918 }, { 207,-38918 }, { 208,-38918 }, { 209,-38918 }, { 210,-38918 }, + { 211,-38918 }, { 212,-38918 }, { 213,-38918 }, { 214,-38918 }, { 215,-38918 }, + + { 216,-38918 }, { 217,-38918 }, { 218,-38918 }, { 219,-38918 }, { 220,-38918 }, + { 221,-38918 }, { 222,-38918 }, { 223,-38918 }, { 224,-38918 }, { 225,-38918 }, + { 226,-38918 }, { 227,-38918 }, { 228,-38918 }, { 229,-38918 }, { 230,-38918 }, + { 231,-38918 }, { 232,-38918 }, { 233,-38918 }, { 234,-38918 }, { 235,-38918 }, + { 236,-38918 }, { 237,-38918 }, { 238,-38918 }, { 239,-38918 }, { 240,-38918 }, + { 241,-38918 }, { 242,-38918 }, { 243,-38918 }, { 244,-38918 }, { 245,-38918 }, + { 246,-38918 }, { 247,-38918 }, { 248,-38918 }, { 249,-38918 }, { 250,-38918 }, + { 251,-38918 }, { 252,-38918 }, { 253,-38918 }, { 254,-38918 }, { 255,-38918 }, + { 0, 131 }, { 0,52948 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-39175 }, + { 49,-39175 }, { 50,-39175 }, { 51,-39175 }, { 52,-39175 }, { 53,-39175 }, + { 54,-39175 }, { 55,-39175 }, { 56,-39175 }, { 57,-39175 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13369 }, { 66,-39175 }, { 67,-39175 }, { 68,-39175 }, + { 69,-39175 }, { 70,-39175 }, { 71,-39175 }, { 72,-39175 }, { 73,-39175 }, + { 74,-39175 }, { 75,-39175 }, { 76,-39175 }, { 77,-39175 }, { 78,-39175 }, + { 79,-39175 }, { 80,-39175 }, { 81,-39175 }, { 82,-39175 }, { 83,-39175 }, + { 84,-39175 }, { 85,-39175 }, { 86,-39175 }, { 87,-39175 }, { 88,-39175 }, + { 89,-39175 }, { 90,-39175 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-39175 }, { 0, 0 }, { 97,13369 }, { 98,-39175 }, + { 99,-39175 }, { 100,-39175 }, { 101,-39175 }, { 102,-39175 }, { 103,-39175 }, + { 104,-39175 }, { 105,-39175 }, { 106,-39175 }, { 107,-39175 }, { 108,-39175 }, + + { 109,-39175 }, { 110,-39175 }, { 111,-39175 }, { 112,-39175 }, { 113,-39175 }, + { 114,-39175 }, { 115,-39175 }, { 116,-39175 }, { 117,-39175 }, { 118,-39175 }, + { 119,-39175 }, { 120,-39175 }, { 121,-39175 }, { 122,-39175 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-39175 }, { 128,-39175 }, + { 129,-39175 }, { 130,-39175 }, { 131,-39175 }, { 132,-39175 }, { 133,-39175 }, + { 134,-39175 }, { 135,-39175 }, { 136,-39175 }, { 137,-39175 }, { 138,-39175 }, + { 139,-39175 }, { 140,-39175 }, { 141,-39175 }, { 142,-39175 }, { 143,-39175 }, + { 144,-39175 }, { 145,-39175 }, { 146,-39175 }, { 147,-39175 }, { 148,-39175 }, + { 149,-39175 }, { 150,-39175 }, { 151,-39175 }, { 152,-39175 }, { 153,-39175 }, + { 154,-39175 }, { 155,-39175 }, { 156,-39175 }, { 157,-39175 }, { 158,-39175 }, + + { 159,-39175 }, { 160,-39175 }, { 161,-39175 }, { 162,-39175 }, { 163,-39175 }, + { 164,-39175 }, { 165,-39175 }, { 166,-39175 }, { 167,-39175 }, { 168,-39175 }, + { 169,-39175 }, { 170,-39175 }, { 171,-39175 }, { 172,-39175 }, { 173,-39175 }, + { 174,-39175 }, { 175,-39175 }, { 176,-39175 }, { 177,-39175 }, { 178,-39175 }, + { 179,-39175 }, { 180,-39175 }, { 181,-39175 }, { 182,-39175 }, { 183,-39175 }, + { 184,-39175 }, { 185,-39175 }, { 186,-39175 }, { 187,-39175 }, { 188,-39175 }, + { 189,-39175 }, { 190,-39175 }, { 191,-39175 }, { 192,-39175 }, { 193,-39175 }, + { 194,-39175 }, { 195,-39175 }, { 196,-39175 }, { 197,-39175 }, { 198,-39175 }, + { 199,-39175 }, { 200,-39175 }, { 201,-39175 }, { 202,-39175 }, { 203,-39175 }, + { 204,-39175 }, { 205,-39175 }, { 206,-39175 }, { 207,-39175 }, { 208,-39175 }, + + { 209,-39175 }, { 210,-39175 }, { 211,-39175 }, { 212,-39175 }, { 213,-39175 }, + { 214,-39175 }, { 215,-39175 }, { 216,-39175 }, { 217,-39175 }, { 218,-39175 }, + { 219,-39175 }, { 220,-39175 }, { 221,-39175 }, { 222,-39175 }, { 223,-39175 }, + { 224,-39175 }, { 225,-39175 }, { 226,-39175 }, { 227,-39175 }, { 228,-39175 }, + { 229,-39175 }, { 230,-39175 }, { 231,-39175 }, { 232,-39175 }, { 233,-39175 }, + { 234,-39175 }, { 235,-39175 }, { 236,-39175 }, { 237,-39175 }, { 238,-39175 }, + { 239,-39175 }, { 240,-39175 }, { 241,-39175 }, { 242,-39175 }, { 243,-39175 }, + { 244,-39175 }, { 245,-39175 }, { 246,-39175 }, { 247,-39175 }, { 248,-39175 }, + { 249,-39175 }, { 250,-39175 }, { 251,-39175 }, { 252,-39175 }, { 253,-39175 }, + { 254,-39175 }, { 255,-39175 }, { 0, 131 }, { 0,52691 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-39432 }, { 49,-39432 }, { 50,-39432 }, { 51,-39432 }, + + { 52,-39432 }, { 53,-39432 }, { 54,-39432 }, { 55,-39432 }, { 56,-39432 }, + { 57,-39432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-39432 }, { 66,-39432 }, + { 67,-39432 }, { 68,-39432 }, { 69,13369 }, { 70,-39432 }, { 71,-39432 }, + { 72,-39432 }, { 73,-39432 }, { 74,-39432 }, { 75,-39432 }, { 76,-39432 }, + { 77,-39432 }, { 78,-39432 }, { 79,-39432 }, { 80,-39432 }, { 81,-39432 }, + { 82,-39432 }, { 83,-39432 }, { 84,-39432 }, { 85,-39432 }, { 86,-39432 }, + { 87,-39432 }, { 88,-39432 }, { 89,-39432 }, { 90,-39432 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-39432 }, { 0, 0 }, + { 97,-39432 }, { 98,-39432 }, { 99,-39432 }, { 100,-39432 }, { 101,13369 }, + + { 102,-39432 }, { 103,-39432 }, { 104,-39432 }, { 105,-39432 }, { 106,-39432 }, + { 107,-39432 }, { 108,-39432 }, { 109,-39432 }, { 110,-39432 }, { 111,-39432 }, + { 112,-39432 }, { 113,-39432 }, { 114,-39432 }, { 115,-39432 }, { 116,-39432 }, + { 117,-39432 }, { 118,-39432 }, { 119,-39432 }, { 120,-39432 }, { 121,-39432 }, + { 122,-39432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-39432 }, { 128,-39432 }, { 129,-39432 }, { 130,-39432 }, { 131,-39432 }, + { 132,-39432 }, { 133,-39432 }, { 134,-39432 }, { 135,-39432 }, { 136,-39432 }, + { 137,-39432 }, { 138,-39432 }, { 139,-39432 }, { 140,-39432 }, { 141,-39432 }, + { 142,-39432 }, { 143,-39432 }, { 144,-39432 }, { 145,-39432 }, { 146,-39432 }, + { 147,-39432 }, { 148,-39432 }, { 149,-39432 }, { 150,-39432 }, { 151,-39432 }, + + { 152,-39432 }, { 153,-39432 }, { 154,-39432 }, { 155,-39432 }, { 156,-39432 }, + { 157,-39432 }, { 158,-39432 }, { 159,-39432 }, { 160,-39432 }, { 161,-39432 }, + { 162,-39432 }, { 163,-39432 }, { 164,-39432 }, { 165,-39432 }, { 166,-39432 }, + { 167,-39432 }, { 168,-39432 }, { 169,-39432 }, { 170,-39432 }, { 171,-39432 }, + { 172,-39432 }, { 173,-39432 }, { 174,-39432 }, { 175,-39432 }, { 176,-39432 }, + { 177,-39432 }, { 178,-39432 }, { 179,-39432 }, { 180,-39432 }, { 181,-39432 }, + { 182,-39432 }, { 183,-39432 }, { 184,-39432 }, { 185,-39432 }, { 186,-39432 }, + { 187,-39432 }, { 188,-39432 }, { 189,-39432 }, { 190,-39432 }, { 191,-39432 }, + { 192,-39432 }, { 193,-39432 }, { 194,-39432 }, { 195,-39432 }, { 196,-39432 }, + { 197,-39432 }, { 198,-39432 }, { 199,-39432 }, { 200,-39432 }, { 201,-39432 }, + + { 202,-39432 }, { 203,-39432 }, { 204,-39432 }, { 205,-39432 }, { 206,-39432 }, + { 207,-39432 }, { 208,-39432 }, { 209,-39432 }, { 210,-39432 }, { 211,-39432 }, + { 212,-39432 }, { 213,-39432 }, { 214,-39432 }, { 215,-39432 }, { 216,-39432 }, + { 217,-39432 }, { 218,-39432 }, { 219,-39432 }, { 220,-39432 }, { 221,-39432 }, + { 222,-39432 }, { 223,-39432 }, { 224,-39432 }, { 225,-39432 }, { 226,-39432 }, + { 227,-39432 }, { 228,-39432 }, { 229,-39432 }, { 230,-39432 }, { 231,-39432 }, + { 232,-39432 }, { 233,-39432 }, { 234,-39432 }, { 235,-39432 }, { 236,-39432 }, + { 237,-39432 }, { 238,-39432 }, { 239,-39432 }, { 240,-39432 }, { 241,-39432 }, + { 242,-39432 }, { 243,-39432 }, { 244,-39432 }, { 245,-39432 }, { 246,-39432 }, + { 247,-39432 }, { 248,-39432 }, { 249,-39432 }, { 250,-39432 }, { 251,-39432 }, + + { 252,-39432 }, { 253,-39432 }, { 254,-39432 }, { 255,-39432 }, { 0, 131 }, + { 0,52434 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-39689 }, { 49,-39689 }, + { 50,-39689 }, { 51,-39689 }, { 52,-39689 }, { 53,-39689 }, { 54,-39689 }, + { 55,-39689 }, { 56,-39689 }, { 57,-39689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-39689 }, { 66,-39689 }, { 67,-39689 }, { 68,-39689 }, { 69,-39689 }, + { 70,-39689 }, { 71,-39689 }, { 72,-39689 }, { 73,13369 }, { 74,-39689 }, + { 75,-39689 }, { 76,-39689 }, { 77,-39689 }, { 78,-39689 }, { 79,-39689 }, + { 80,-39689 }, { 81,-39689 }, { 82,-39689 }, { 83,-39689 }, { 84,-39689 }, + { 85,-39689 }, { 86,-39689 }, { 87,-39689 }, { 88,-39689 }, { 89,-39689 }, + { 90,-39689 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-39689 }, { 0, 0 }, { 97,-39689 }, { 98,-39689 }, { 99,-39689 }, + { 100,-39689 }, { 101,-39689 }, { 102,-39689 }, { 103,-39689 }, { 104,-39689 }, + { 105,13369 }, { 106,-39689 }, { 107,-39689 }, { 108,-39689 }, { 109,-39689 }, + { 110,-39689 }, { 111,-39689 }, { 112,-39689 }, { 113,-39689 }, { 114,-39689 }, + { 115,-39689 }, { 116,-39689 }, { 117,-39689 }, { 118,-39689 }, { 119,-39689 }, + { 120,-39689 }, { 121,-39689 }, { 122,-39689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-39689 }, { 128,-39689 }, { 129,-39689 }, + { 130,-39689 }, { 131,-39689 }, { 132,-39689 }, { 133,-39689 }, { 134,-39689 }, + { 135,-39689 }, { 136,-39689 }, { 137,-39689 }, { 138,-39689 }, { 139,-39689 }, + { 140,-39689 }, { 141,-39689 }, { 142,-39689 }, { 143,-39689 }, { 144,-39689 }, + + { 145,-39689 }, { 146,-39689 }, { 147,-39689 }, { 148,-39689 }, { 149,-39689 }, + { 150,-39689 }, { 151,-39689 }, { 152,-39689 }, { 153,-39689 }, { 154,-39689 }, + { 155,-39689 }, { 156,-39689 }, { 157,-39689 }, { 158,-39689 }, { 159,-39689 }, + { 160,-39689 }, { 161,-39689 }, { 162,-39689 }, { 163,-39689 }, { 164,-39689 }, + { 165,-39689 }, { 166,-39689 }, { 167,-39689 }, { 168,-39689 }, { 169,-39689 }, + { 170,-39689 }, { 171,-39689 }, { 172,-39689 }, { 173,-39689 }, { 174,-39689 }, + { 175,-39689 }, { 176,-39689 }, { 177,-39689 }, { 178,-39689 }, { 179,-39689 }, + { 180,-39689 }, { 181,-39689 }, { 182,-39689 }, { 183,-39689 }, { 184,-39689 }, + { 185,-39689 }, { 186,-39689 }, { 187,-39689 }, { 188,-39689 }, { 189,-39689 }, + { 190,-39689 }, { 191,-39689 }, { 192,-39689 }, { 193,-39689 }, { 194,-39689 }, + + { 195,-39689 }, { 196,-39689 }, { 197,-39689 }, { 198,-39689 }, { 199,-39689 }, + { 200,-39689 }, { 201,-39689 }, { 202,-39689 }, { 203,-39689 }, { 204,-39689 }, + { 205,-39689 }, { 206,-39689 }, { 207,-39689 }, { 208,-39689 }, { 209,-39689 }, + { 210,-39689 }, { 211,-39689 }, { 212,-39689 }, { 213,-39689 }, { 214,-39689 }, + { 215,-39689 }, { 216,-39689 }, { 217,-39689 }, { 218,-39689 }, { 219,-39689 }, + { 220,-39689 }, { 221,-39689 }, { 222,-39689 }, { 223,-39689 }, { 224,-39689 }, + { 225,-39689 }, { 226,-39689 }, { 227,-39689 }, { 228,-39689 }, { 229,-39689 }, + { 230,-39689 }, { 231,-39689 }, { 232,-39689 }, { 233,-39689 }, { 234,-39689 }, + { 235,-39689 }, { 236,-39689 }, { 237,-39689 }, { 238,-39689 }, { 239,-39689 }, + { 240,-39689 }, { 241,-39689 }, { 242,-39689 }, { 243,-39689 }, { 244,-39689 }, + + { 245,-39689 }, { 246,-39689 }, { 247,-39689 }, { 248,-39689 }, { 249,-39689 }, + { 250,-39689 }, { 251,-39689 }, { 252,-39689 }, { 253,-39689 }, { 254,-39689 }, + { 255,-39689 }, { 0, 131 }, { 0,52177 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-39946 }, { 49,-39946 }, { 50,-39946 }, { 51,-39946 }, { 52,-39946 }, + { 53,-39946 }, { 54,-39946 }, { 55,-39946 }, { 56,-39946 }, { 57,-39946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-39946 }, { 66,-39946 }, { 67,-39946 }, + { 68,-39946 }, { 69,-39946 }, { 70,-39946 }, { 71,-39946 }, { 72,-39946 }, + { 73,13369 }, { 74,-39946 }, { 75,-39946 }, { 76,-39946 }, { 77,-39946 }, + { 78,-39946 }, { 79,-39946 }, { 80,-39946 }, { 81,-39946 }, { 82,-39946 }, + { 83,-39946 }, { 84,-39946 }, { 85,-39946 }, { 86,-39946 }, { 87,-39946 }, + + { 88,-39946 }, { 89,-39946 }, { 90,-39946 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-39946 }, { 0, 0 }, { 97,-39946 }, + { 98,-39946 }, { 99,-39946 }, { 100,-39946 }, { 101,-39946 }, { 102,-39946 }, + { 103,-39946 }, { 104,-39946 }, { 105,13369 }, { 106,-39946 }, { 107,-39946 }, + { 108,-39946 }, { 109,-39946 }, { 110,-39946 }, { 111,-39946 }, { 112,-39946 }, + { 113,-39946 }, { 114,-39946 }, { 115,-39946 }, { 116,-39946 }, { 117,-39946 }, + { 118,-39946 }, { 119,-39946 }, { 120,-39946 }, { 121,-39946 }, { 122,-39946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-39946 }, + { 128,-39946 }, { 129,-39946 }, { 130,-39946 }, { 131,-39946 }, { 132,-39946 }, + { 133,-39946 }, { 134,-39946 }, { 135,-39946 }, { 136,-39946 }, { 137,-39946 }, + + { 138,-39946 }, { 139,-39946 }, { 140,-39946 }, { 141,-39946 }, { 142,-39946 }, + { 143,-39946 }, { 144,-39946 }, { 145,-39946 }, { 146,-39946 }, { 147,-39946 }, + { 148,-39946 }, { 149,-39946 }, { 150,-39946 }, { 151,-39946 }, { 152,-39946 }, + { 153,-39946 }, { 154,-39946 }, { 155,-39946 }, { 156,-39946 }, { 157,-39946 }, + { 158,-39946 }, { 159,-39946 }, { 160,-39946 }, { 161,-39946 }, { 162,-39946 }, + { 163,-39946 }, { 164,-39946 }, { 165,-39946 }, { 166,-39946 }, { 167,-39946 }, + { 168,-39946 }, { 169,-39946 }, { 170,-39946 }, { 171,-39946 }, { 172,-39946 }, + { 173,-39946 }, { 174,-39946 }, { 175,-39946 }, { 176,-39946 }, { 177,-39946 }, + { 178,-39946 }, { 179,-39946 }, { 180,-39946 }, { 181,-39946 }, { 182,-39946 }, + { 183,-39946 }, { 184,-39946 }, { 185,-39946 }, { 186,-39946 }, { 187,-39946 }, + + { 188,-39946 }, { 189,-39946 }, { 190,-39946 }, { 191,-39946 }, { 192,-39946 }, + { 193,-39946 }, { 194,-39946 }, { 195,-39946 }, { 196,-39946 }, { 197,-39946 }, + { 198,-39946 }, { 199,-39946 }, { 200,-39946 }, { 201,-39946 }, { 202,-39946 }, + { 203,-39946 }, { 204,-39946 }, { 205,-39946 }, { 206,-39946 }, { 207,-39946 }, + { 208,-39946 }, { 209,-39946 }, { 210,-39946 }, { 211,-39946 }, { 212,-39946 }, + { 213,-39946 }, { 214,-39946 }, { 215,-39946 }, { 216,-39946 }, { 217,-39946 }, + { 218,-39946 }, { 219,-39946 }, { 220,-39946 }, { 221,-39946 }, { 222,-39946 }, + { 223,-39946 }, { 224,-39946 }, { 225,-39946 }, { 226,-39946 }, { 227,-39946 }, + { 228,-39946 }, { 229,-39946 }, { 230,-39946 }, { 231,-39946 }, { 232,-39946 }, + { 233,-39946 }, { 234,-39946 }, { 235,-39946 }, { 236,-39946 }, { 237,-39946 }, + + { 238,-39946 }, { 239,-39946 }, { 240,-39946 }, { 241,-39946 }, { 242,-39946 }, + { 243,-39946 }, { 244,-39946 }, { 245,-39946 }, { 246,-39946 }, { 247,-39946 }, + { 248,-39946 }, { 249,-39946 }, { 250,-39946 }, { 251,-39946 }, { 252,-39946 }, + { 253,-39946 }, { 254,-39946 }, { 255,-39946 }, { 0, 131 }, { 0,51920 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-40203 }, { 49,-40203 }, { 50,-40203 }, + { 51,-40203 }, { 52,-40203 }, { 53,-40203 }, { 54,-40203 }, { 55,-40203 }, + { 56,-40203 }, { 57,-40203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-40203 }, + { 66,-40203 }, { 67,-40203 }, { 68,-40203 }, { 69,-40203 }, { 70,-40203 }, + { 71,-40203 }, { 72,-40203 }, { 73,-40203 }, { 74,-40203 }, { 75,-40203 }, + { 76,-40203 }, { 77,-40203 }, { 78,-40203 }, { 79,-40203 }, { 80,-40203 }, + + { 81,-40203 }, { 82,13369 }, { 83,-40203 }, { 84,-40203 }, { 85,-40203 }, + { 86,-40203 }, { 87,-40203 }, { 88,-40203 }, { 89,-40203 }, { 90,-40203 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-40203 }, + { 0, 0 }, { 97,-40203 }, { 98,-40203 }, { 99,-40203 }, { 100,-40203 }, + { 101,-40203 }, { 102,-40203 }, { 103,-40203 }, { 104,-40203 }, { 105,-40203 }, + { 106,-40203 }, { 107,-40203 }, { 108,-40203 }, { 109,-40203 }, { 110,-40203 }, + { 111,-40203 }, { 112,-40203 }, { 113,-40203 }, { 114,13369 }, { 115,-40203 }, + { 116,-40203 }, { 117,-40203 }, { 118,-40203 }, { 119,-40203 }, { 120,-40203 }, + { 121,-40203 }, { 122,-40203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-40203 }, { 128,-40203 }, { 129,-40203 }, { 130,-40203 }, + + { 131,-40203 }, { 132,-40203 }, { 133,-40203 }, { 134,-40203 }, { 135,-40203 }, + { 136,-40203 }, { 137,-40203 }, { 138,-40203 }, { 139,-40203 }, { 140,-40203 }, + { 141,-40203 }, { 142,-40203 }, { 143,-40203 }, { 144,-40203 }, { 145,-40203 }, + { 146,-40203 }, { 147,-40203 }, { 148,-40203 }, { 149,-40203 }, { 150,-40203 }, + { 151,-40203 }, { 152,-40203 }, { 153,-40203 }, { 154,-40203 }, { 155,-40203 }, + { 156,-40203 }, { 157,-40203 }, { 158,-40203 }, { 159,-40203 }, { 160,-40203 }, + { 161,-40203 }, { 162,-40203 }, { 163,-40203 }, { 164,-40203 }, { 165,-40203 }, + { 166,-40203 }, { 167,-40203 }, { 168,-40203 }, { 169,-40203 }, { 170,-40203 }, + { 171,-40203 }, { 172,-40203 }, { 173,-40203 }, { 174,-40203 }, { 175,-40203 }, + { 176,-40203 }, { 177,-40203 }, { 178,-40203 }, { 179,-40203 }, { 180,-40203 }, + + { 181,-40203 }, { 182,-40203 }, { 183,-40203 }, { 184,-40203 }, { 185,-40203 }, + { 186,-40203 }, { 187,-40203 }, { 188,-40203 }, { 189,-40203 }, { 190,-40203 }, + { 191,-40203 }, { 192,-40203 }, { 193,-40203 }, { 194,-40203 }, { 195,-40203 }, + { 196,-40203 }, { 197,-40203 }, { 198,-40203 }, { 199,-40203 }, { 200,-40203 }, + { 201,-40203 }, { 202,-40203 }, { 203,-40203 }, { 204,-40203 }, { 205,-40203 }, + { 206,-40203 }, { 207,-40203 }, { 208,-40203 }, { 209,-40203 }, { 210,-40203 }, + { 211,-40203 }, { 212,-40203 }, { 213,-40203 }, { 214,-40203 }, { 215,-40203 }, + { 216,-40203 }, { 217,-40203 }, { 218,-40203 }, { 219,-40203 }, { 220,-40203 }, + { 221,-40203 }, { 222,-40203 }, { 223,-40203 }, { 224,-40203 }, { 225,-40203 }, + { 226,-40203 }, { 227,-40203 }, { 228,-40203 }, { 229,-40203 }, { 230,-40203 }, + + { 231,-40203 }, { 232,-40203 }, { 233,-40203 }, { 234,-40203 }, { 235,-40203 }, + { 236,-40203 }, { 237,-40203 }, { 238,-40203 }, { 239,-40203 }, { 240,-40203 }, + { 241,-40203 }, { 242,-40203 }, { 243,-40203 }, { 244,-40203 }, { 245,-40203 }, + { 246,-40203 }, { 247,-40203 }, { 248,-40203 }, { 249,-40203 }, { 250,-40203 }, + { 251,-40203 }, { 252,-40203 }, { 253,-40203 }, { 254,-40203 }, { 255,-40203 }, + { 0, 131 }, { 0,51663 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-40460 }, + { 49,-40460 }, { 50,-40460 }, { 51,-40460 }, { 52,-40460 }, { 53,-40460 }, + { 54,-40460 }, { 55,-40460 }, { 56,-40460 }, { 57,-40460 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-40460 }, { 66,-40460 }, { 67,-40460 }, { 68,-40460 }, + { 69,-40460 }, { 70,-40460 }, { 71,-40460 }, { 72,-40460 }, { 73,13369 }, + + { 74,-40460 }, { 75,-40460 }, { 76,-40460 }, { 77,-40460 }, { 78,-40460 }, + { 79,-40460 }, { 80,-40460 }, { 81,-40460 }, { 82,-40460 }, { 83,-40460 }, + { 84,-40460 }, { 85,-40460 }, { 86,-40460 }, { 87,-40460 }, { 88,-40460 }, + { 89,-40460 }, { 90,-40460 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-40460 }, { 0, 0 }, { 97,-40460 }, { 98,-40460 }, + { 99,-40460 }, { 100,-40460 }, { 101,-40460 }, { 102,-40460 }, { 103,-40460 }, + { 104,-40460 }, { 105,13369 }, { 106,-40460 }, { 107,-40460 }, { 108,-40460 }, + { 109,-40460 }, { 110,-40460 }, { 111,-40460 }, { 112,-40460 }, { 113,-40460 }, + { 114,-40460 }, { 115,-40460 }, { 116,-40460 }, { 117,-40460 }, { 118,-40460 }, + { 119,-40460 }, { 120,-40460 }, { 121,-40460 }, { 122,-40460 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-40460 }, { 128,-40460 }, + { 129,-40460 }, { 130,-40460 }, { 131,-40460 }, { 132,-40460 }, { 133,-40460 }, + { 134,-40460 }, { 135,-40460 }, { 136,-40460 }, { 137,-40460 }, { 138,-40460 }, + { 139,-40460 }, { 140,-40460 }, { 141,-40460 }, { 142,-40460 }, { 143,-40460 }, + { 144,-40460 }, { 145,-40460 }, { 146,-40460 }, { 147,-40460 }, { 148,-40460 }, + { 149,-40460 }, { 150,-40460 }, { 151,-40460 }, { 152,-40460 }, { 153,-40460 }, + { 154,-40460 }, { 155,-40460 }, { 156,-40460 }, { 157,-40460 }, { 158,-40460 }, + { 159,-40460 }, { 160,-40460 }, { 161,-40460 }, { 162,-40460 }, { 163,-40460 }, + { 164,-40460 }, { 165,-40460 }, { 166,-40460 }, { 167,-40460 }, { 168,-40460 }, + { 169,-40460 }, { 170,-40460 }, { 171,-40460 }, { 172,-40460 }, { 173,-40460 }, + + { 174,-40460 }, { 175,-40460 }, { 176,-40460 }, { 177,-40460 }, { 178,-40460 }, + { 179,-40460 }, { 180,-40460 }, { 181,-40460 }, { 182,-40460 }, { 183,-40460 }, + { 184,-40460 }, { 185,-40460 }, { 186,-40460 }, { 187,-40460 }, { 188,-40460 }, + { 189,-40460 }, { 190,-40460 }, { 191,-40460 }, { 192,-40460 }, { 193,-40460 }, + { 194,-40460 }, { 195,-40460 }, { 196,-40460 }, { 197,-40460 }, { 198,-40460 }, + { 199,-40460 }, { 200,-40460 }, { 201,-40460 }, { 202,-40460 }, { 203,-40460 }, + { 204,-40460 }, { 205,-40460 }, { 206,-40460 }, { 207,-40460 }, { 208,-40460 }, + { 209,-40460 }, { 210,-40460 }, { 211,-40460 }, { 212,-40460 }, { 213,-40460 }, + { 214,-40460 }, { 215,-40460 }, { 216,-40460 }, { 217,-40460 }, { 218,-40460 }, + { 219,-40460 }, { 220,-40460 }, { 221,-40460 }, { 222,-40460 }, { 223,-40460 }, + + { 224,-40460 }, { 225,-40460 }, { 226,-40460 }, { 227,-40460 }, { 228,-40460 }, + { 229,-40460 }, { 230,-40460 }, { 231,-40460 }, { 232,-40460 }, { 233,-40460 }, + { 234,-40460 }, { 235,-40460 }, { 236,-40460 }, { 237,-40460 }, { 238,-40460 }, + { 239,-40460 }, { 240,-40460 }, { 241,-40460 }, { 242,-40460 }, { 243,-40460 }, + { 244,-40460 }, { 245,-40460 }, { 246,-40460 }, { 247,-40460 }, { 248,-40460 }, + { 249,-40460 }, { 250,-40460 }, { 251,-40460 }, { 252,-40460 }, { 253,-40460 }, + { 254,-40460 }, { 255,-40460 }, { 0, 131 }, { 0,51406 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-40717 }, { 49,-40717 }, { 50,-40717 }, { 51,-40717 }, + { 52,-40717 }, { 53,-40717 }, { 54,-40717 }, { 55,-40717 }, { 56,-40717 }, + { 57,-40717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-40717 }, { 66,-40717 }, + + { 67,13369 }, { 68,-40717 }, { 69,-40717 }, { 70,-40717 }, { 71,-40717 }, + { 72,-40717 }, { 73,-40717 }, { 74,-40717 }, { 75,-40717 }, { 76,-40717 }, + { 77,-40717 }, { 78,-40717 }, { 79,-40717 }, { 80,-40717 }, { 81,-40717 }, + { 82,-40717 }, { 83,-40717 }, { 84,-40717 }, { 85,-40717 }, { 86,-40717 }, + { 87,-40717 }, { 88,-40717 }, { 89,-40717 }, { 90,-40717 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-40717 }, { 0, 0 }, + { 97,-40717 }, { 98,-40717 }, { 99,13369 }, { 100,-40717 }, { 101,-40717 }, + { 102,-40717 }, { 103,-40717 }, { 104,-40717 }, { 105,-40717 }, { 106,-40717 }, + { 107,-40717 }, { 108,-40717 }, { 109,-40717 }, { 110,-40717 }, { 111,-40717 }, + { 112,-40717 }, { 113,-40717 }, { 114,-40717 }, { 115,-40717 }, { 116,-40717 }, + + { 117,-40717 }, { 118,-40717 }, { 119,-40717 }, { 120,-40717 }, { 121,-40717 }, + { 122,-40717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-40717 }, { 128,-40717 }, { 129,-40717 }, { 130,-40717 }, { 131,-40717 }, + { 132,-40717 }, { 133,-40717 }, { 134,-40717 }, { 135,-40717 }, { 136,-40717 }, + { 137,-40717 }, { 138,-40717 }, { 139,-40717 }, { 140,-40717 }, { 141,-40717 }, + { 142,-40717 }, { 143,-40717 }, { 144,-40717 }, { 145,-40717 }, { 146,-40717 }, + { 147,-40717 }, { 148,-40717 }, { 149,-40717 }, { 150,-40717 }, { 151,-40717 }, + { 152,-40717 }, { 153,-40717 }, { 154,-40717 }, { 155,-40717 }, { 156,-40717 }, + { 157,-40717 }, { 158,-40717 }, { 159,-40717 }, { 160,-40717 }, { 161,-40717 }, + { 162,-40717 }, { 163,-40717 }, { 164,-40717 }, { 165,-40717 }, { 166,-40717 }, + + { 167,-40717 }, { 168,-40717 }, { 169,-40717 }, { 170,-40717 }, { 171,-40717 }, + { 172,-40717 }, { 173,-40717 }, { 174,-40717 }, { 175,-40717 }, { 176,-40717 }, + { 177,-40717 }, { 178,-40717 }, { 179,-40717 }, { 180,-40717 }, { 181,-40717 }, + { 182,-40717 }, { 183,-40717 }, { 184,-40717 }, { 185,-40717 }, { 186,-40717 }, + { 187,-40717 }, { 188,-40717 }, { 189,-40717 }, { 190,-40717 }, { 191,-40717 }, + { 192,-40717 }, { 193,-40717 }, { 194,-40717 }, { 195,-40717 }, { 196,-40717 }, + { 197,-40717 }, { 198,-40717 }, { 199,-40717 }, { 200,-40717 }, { 201,-40717 }, + { 202,-40717 }, { 203,-40717 }, { 204,-40717 }, { 205,-40717 }, { 206,-40717 }, + { 207,-40717 }, { 208,-40717 }, { 209,-40717 }, { 210,-40717 }, { 211,-40717 }, + { 212,-40717 }, { 213,-40717 }, { 214,-40717 }, { 215,-40717 }, { 216,-40717 }, + + { 217,-40717 }, { 218,-40717 }, { 219,-40717 }, { 220,-40717 }, { 221,-40717 }, + { 222,-40717 }, { 223,-40717 }, { 224,-40717 }, { 225,-40717 }, { 226,-40717 }, + { 227,-40717 }, { 228,-40717 }, { 229,-40717 }, { 230,-40717 }, { 231,-40717 }, + { 232,-40717 }, { 233,-40717 }, { 234,-40717 }, { 235,-40717 }, { 236,-40717 }, + { 237,-40717 }, { 238,-40717 }, { 239,-40717 }, { 240,-40717 }, { 241,-40717 }, + { 242,-40717 }, { 243,-40717 }, { 244,-40717 }, { 245,-40717 }, { 246,-40717 }, + { 247,-40717 }, { 248,-40717 }, { 249,-40717 }, { 250,-40717 }, { 251,-40717 }, + { 252,-40717 }, { 253,-40717 }, { 254,-40717 }, { 255,-40717 }, { 0, 131 }, + { 0,51149 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-40974 }, { 49,-40974 }, + { 50,-40974 }, { 51,-40974 }, { 52,-40974 }, { 53,-40974 }, { 54,-40974 }, + { 55,-40974 }, { 56,-40974 }, { 57,-40974 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-40974 }, { 66,-40974 }, { 67,-40974 }, { 68,-40974 }, { 69,-40974 }, + { 70,-40974 }, { 71,-40974 }, { 72,-40974 }, { 73,-40974 }, { 74,-40974 }, + { 75,-40974 }, { 76,-40974 }, { 77,-40974 }, { 78,-40974 }, { 79,-40974 }, + { 80,-40974 }, { 81,-40974 }, { 82,-40974 }, { 83,-40974 }, { 84,-40974 }, + { 85,-40974 }, { 86,-40974 }, { 87,13369 }, { 88,-40974 }, { 89,-40974 }, + { 90,-40974 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-40974 }, { 0, 0 }, { 97,-40974 }, { 98,-40974 }, { 99,-40974 }, + { 100,-40974 }, { 101,-40974 }, { 102,-40974 }, { 103,-40974 }, { 104,-40974 }, + { 105,-40974 }, { 106,-40974 }, { 107,-40974 }, { 108,-40974 }, { 109,-40974 }, + + { 110,-40974 }, { 111,-40974 }, { 112,-40974 }, { 113,-40974 }, { 114,-40974 }, + { 115,-40974 }, { 116,-40974 }, { 117,-40974 }, { 118,-40974 }, { 119,13369 }, + { 120,-40974 }, { 121,-40974 }, { 122,-40974 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-40974 }, { 128,-40974 }, { 129,-40974 }, + { 130,-40974 }, { 131,-40974 }, { 132,-40974 }, { 133,-40974 }, { 134,-40974 }, + { 135,-40974 }, { 136,-40974 }, { 137,-40974 }, { 138,-40974 }, { 139,-40974 }, + { 140,-40974 }, { 141,-40974 }, { 142,-40974 }, { 143,-40974 }, { 144,-40974 }, + { 145,-40974 }, { 146,-40974 }, { 147,-40974 }, { 148,-40974 }, { 149,-40974 }, + { 150,-40974 }, { 151,-40974 }, { 152,-40974 }, { 153,-40974 }, { 154,-40974 }, + { 155,-40974 }, { 156,-40974 }, { 157,-40974 }, { 158,-40974 }, { 159,-40974 }, + + { 160,-40974 }, { 161,-40974 }, { 162,-40974 }, { 163,-40974 }, { 164,-40974 }, + { 165,-40974 }, { 166,-40974 }, { 167,-40974 }, { 168,-40974 }, { 169,-40974 }, + { 170,-40974 }, { 171,-40974 }, { 172,-40974 }, { 173,-40974 }, { 174,-40974 }, + { 175,-40974 }, { 176,-40974 }, { 177,-40974 }, { 178,-40974 }, { 179,-40974 }, + { 180,-40974 }, { 181,-40974 }, { 182,-40974 }, { 183,-40974 }, { 184,-40974 }, + { 185,-40974 }, { 186,-40974 }, { 187,-40974 }, { 188,-40974 }, { 189,-40974 }, + { 190,-40974 }, { 191,-40974 }, { 192,-40974 }, { 193,-40974 }, { 194,-40974 }, + { 195,-40974 }, { 196,-40974 }, { 197,-40974 }, { 198,-40974 }, { 199,-40974 }, + { 200,-40974 }, { 201,-40974 }, { 202,-40974 }, { 203,-40974 }, { 204,-40974 }, + { 205,-40974 }, { 206,-40974 }, { 207,-40974 }, { 208,-40974 }, { 209,-40974 }, + + { 210,-40974 }, { 211,-40974 }, { 212,-40974 }, { 213,-40974 }, { 214,-40974 }, + { 215,-40974 }, { 216,-40974 }, { 217,-40974 }, { 218,-40974 }, { 219,-40974 }, + { 220,-40974 }, { 221,-40974 }, { 222,-40974 }, { 223,-40974 }, { 224,-40974 }, + { 225,-40974 }, { 226,-40974 }, { 227,-40974 }, { 228,-40974 }, { 229,-40974 }, + { 230,-40974 }, { 231,-40974 }, { 232,-40974 }, { 233,-40974 }, { 234,-40974 }, + { 235,-40974 }, { 236,-40974 }, { 237,-40974 }, { 238,-40974 }, { 239,-40974 }, + { 240,-40974 }, { 241,-40974 }, { 242,-40974 }, { 243,-40974 }, { 244,-40974 }, + { 245,-40974 }, { 246,-40974 }, { 247,-40974 }, { 248,-40974 }, { 249,-40974 }, + { 250,-40974 }, { 251,-40974 }, { 252,-40974 }, { 253,-40974 }, { 254,-40974 }, + { 255,-40974 }, { 0, 131 }, { 0,50892 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-41231 }, { 49,-41231 }, { 50,-41231 }, { 51,-41231 }, { 52,-41231 }, + + { 53,-41231 }, { 54,-41231 }, { 55,-41231 }, { 56,-41231 }, { 57,-41231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-41231 }, { 66,-41231 }, { 67,-41231 }, + { 68,-41231 }, { 69,-41231 }, { 70,-41231 }, { 71,-41231 }, { 72,-41231 }, + { 73,-41231 }, { 74,-41231 }, { 75,-41231 }, { 76,-41231 }, { 77,-41231 }, + { 78,-41231 }, { 79,-41231 }, { 80,-41231 }, { 81,-41231 }, { 82,-41231 }, + { 83,-41231 }, { 84,13369 }, { 85,-41231 }, { 86,-41231 }, { 87,-41231 }, + { 88,-41231 }, { 89,-41231 }, { 90,-41231 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-41231 }, { 0, 0 }, { 97,-41231 }, + { 98,-41231 }, { 99,-41231 }, { 100,-41231 }, { 101,-41231 }, { 102,-41231 }, + + { 103,-41231 }, { 104,-41231 }, { 105,-41231 }, { 106,-41231 }, { 107,-41231 }, + { 108,-41231 }, { 109,-41231 }, { 110,-41231 }, { 111,-41231 }, { 112,-41231 }, + { 113,-41231 }, { 114,-41231 }, { 115,-41231 }, { 116,13369 }, { 117,-41231 }, + { 118,-41231 }, { 119,-41231 }, { 120,-41231 }, { 121,-41231 }, { 122,-41231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-41231 }, + { 128,-41231 }, { 129,-41231 }, { 130,-41231 }, { 131,-41231 }, { 132,-41231 }, + { 133,-41231 }, { 134,-41231 }, { 135,-41231 }, { 136,-41231 }, { 137,-41231 }, + { 138,-41231 }, { 139,-41231 }, { 140,-41231 }, { 141,-41231 }, { 142,-41231 }, + { 143,-41231 }, { 144,-41231 }, { 145,-41231 }, { 146,-41231 }, { 147,-41231 }, + { 148,-41231 }, { 149,-41231 }, { 150,-41231 }, { 151,-41231 }, { 152,-41231 }, + + { 153,-41231 }, { 154,-41231 }, { 155,-41231 }, { 156,-41231 }, { 157,-41231 }, + { 158,-41231 }, { 159,-41231 }, { 160,-41231 }, { 161,-41231 }, { 162,-41231 }, + { 163,-41231 }, { 164,-41231 }, { 165,-41231 }, { 166,-41231 }, { 167,-41231 }, + { 168,-41231 }, { 169,-41231 }, { 170,-41231 }, { 171,-41231 }, { 172,-41231 }, + { 173,-41231 }, { 174,-41231 }, { 175,-41231 }, { 176,-41231 }, { 177,-41231 }, + { 178,-41231 }, { 179,-41231 }, { 180,-41231 }, { 181,-41231 }, { 182,-41231 }, + { 183,-41231 }, { 184,-41231 }, { 185,-41231 }, { 186,-41231 }, { 187,-41231 }, + { 188,-41231 }, { 189,-41231 }, { 190,-41231 }, { 191,-41231 }, { 192,-41231 }, + { 193,-41231 }, { 194,-41231 }, { 195,-41231 }, { 196,-41231 }, { 197,-41231 }, + { 198,-41231 }, { 199,-41231 }, { 200,-41231 }, { 201,-41231 }, { 202,-41231 }, + + { 203,-41231 }, { 204,-41231 }, { 205,-41231 }, { 206,-41231 }, { 207,-41231 }, + { 208,-41231 }, { 209,-41231 }, { 210,-41231 }, { 211,-41231 }, { 212,-41231 }, + { 213,-41231 }, { 214,-41231 }, { 215,-41231 }, { 216,-41231 }, { 217,-41231 }, + { 218,-41231 }, { 219,-41231 }, { 220,-41231 }, { 221,-41231 }, { 222,-41231 }, + { 223,-41231 }, { 224,-41231 }, { 225,-41231 }, { 226,-41231 }, { 227,-41231 }, + { 228,-41231 }, { 229,-41231 }, { 230,-41231 }, { 231,-41231 }, { 232,-41231 }, + { 233,-41231 }, { 234,-41231 }, { 235,-41231 }, { 236,-41231 }, { 237,-41231 }, + { 238,-41231 }, { 239,-41231 }, { 240,-41231 }, { 241,-41231 }, { 242,-41231 }, + { 243,-41231 }, { 244,-41231 }, { 245,-41231 }, { 246,-41231 }, { 247,-41231 }, + { 248,-41231 }, { 249,-41231 }, { 250,-41231 }, { 251,-41231 }, { 252,-41231 }, + + { 253,-41231 }, { 254,-41231 }, { 255,-41231 }, { 0, 131 }, { 0,50635 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-41488 }, { 49,-41488 }, { 50,-41488 }, + { 51,-41488 }, { 52,-41488 }, { 53,-41488 }, { 54,-41488 }, { 55,-41488 }, + { 56,-41488 }, { 57,-41488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-41488 }, + { 66,-41488 }, { 67,-41488 }, { 68,-41488 }, { 69,-41488 }, { 70,-41488 }, + { 71,-41488 }, { 72,-41488 }, { 73,-41488 }, { 74,-41488 }, { 75,-41488 }, + { 76,-41488 }, { 77,-41488 }, { 78,-41488 }, { 79,-41488 }, { 80,-41488 }, + { 81,-41488 }, { 82,-41488 }, { 83,-41488 }, { 84,13369 }, { 85,-41488 }, + { 86,-41488 }, { 87,-41488 }, { 88,-41488 }, { 89,-41488 }, { 90,-41488 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-41488 }, + + { 0, 0 }, { 97,-41488 }, { 98,-41488 }, { 99,-41488 }, { 100,-41488 }, + { 101,-41488 }, { 102,-41488 }, { 103,-41488 }, { 104,-41488 }, { 105,-41488 }, + { 106,-41488 }, { 107,-41488 }, { 108,-41488 }, { 109,-41488 }, { 110,-41488 }, + { 111,-41488 }, { 112,-41488 }, { 113,-41488 }, { 114,-41488 }, { 115,-41488 }, + { 116,13369 }, { 117,-41488 }, { 118,-41488 }, { 119,-41488 }, { 120,-41488 }, + { 121,-41488 }, { 122,-41488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-41488 }, { 128,-41488 }, { 129,-41488 }, { 130,-41488 }, + { 131,-41488 }, { 132,-41488 }, { 133,-41488 }, { 134,-41488 }, { 135,-41488 }, + { 136,-41488 }, { 137,-41488 }, { 138,-41488 }, { 139,-41488 }, { 140,-41488 }, + { 141,-41488 }, { 142,-41488 }, { 143,-41488 }, { 144,-41488 }, { 145,-41488 }, + + { 146,-41488 }, { 147,-41488 }, { 148,-41488 }, { 149,-41488 }, { 150,-41488 }, + { 151,-41488 }, { 152,-41488 }, { 153,-41488 }, { 154,-41488 }, { 155,-41488 }, + { 156,-41488 }, { 157,-41488 }, { 158,-41488 }, { 159,-41488 }, { 160,-41488 }, + { 161,-41488 }, { 162,-41488 }, { 163,-41488 }, { 164,-41488 }, { 165,-41488 }, + { 166,-41488 }, { 167,-41488 }, { 168,-41488 }, { 169,-41488 }, { 170,-41488 }, + { 171,-41488 }, { 172,-41488 }, { 173,-41488 }, { 174,-41488 }, { 175,-41488 }, + { 176,-41488 }, { 177,-41488 }, { 178,-41488 }, { 179,-41488 }, { 180,-41488 }, + { 181,-41488 }, { 182,-41488 }, { 183,-41488 }, { 184,-41488 }, { 185,-41488 }, + { 186,-41488 }, { 187,-41488 }, { 188,-41488 }, { 189,-41488 }, { 190,-41488 }, + { 191,-41488 }, { 192,-41488 }, { 193,-41488 }, { 194,-41488 }, { 195,-41488 }, + + { 196,-41488 }, { 197,-41488 }, { 198,-41488 }, { 199,-41488 }, { 200,-41488 }, + { 201,-41488 }, { 202,-41488 }, { 203,-41488 }, { 204,-41488 }, { 205,-41488 }, + { 206,-41488 }, { 207,-41488 }, { 208,-41488 }, { 209,-41488 }, { 210,-41488 }, + { 211,-41488 }, { 212,-41488 }, { 213,-41488 }, { 214,-41488 }, { 215,-41488 }, + { 216,-41488 }, { 217,-41488 }, { 218,-41488 }, { 219,-41488 }, { 220,-41488 }, + { 221,-41488 }, { 222,-41488 }, { 223,-41488 }, { 224,-41488 }, { 225,-41488 }, + { 226,-41488 }, { 227,-41488 }, { 228,-41488 }, { 229,-41488 }, { 230,-41488 }, + { 231,-41488 }, { 232,-41488 }, { 233,-41488 }, { 234,-41488 }, { 235,-41488 }, + { 236,-41488 }, { 237,-41488 }, { 238,-41488 }, { 239,-41488 }, { 240,-41488 }, + { 241,-41488 }, { 242,-41488 }, { 243,-41488 }, { 244,-41488 }, { 245,-41488 }, + + { 246,-41488 }, { 247,-41488 }, { 248,-41488 }, { 249,-41488 }, { 250,-41488 }, + { 251,-41488 }, { 252,-41488 }, { 253,-41488 }, { 254,-41488 }, { 255,-41488 }, + { 0, 131 }, { 0,50378 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-41745 }, + { 49,-41745 }, { 50,-41745 }, { 51,-41745 }, { 52,-41745 }, { 53,-41745 }, + { 54,-41745 }, { 55,-41745 }, { 56,-41745 }, { 57,-41745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-41745 }, { 66,-41745 }, { 67,-41745 }, { 68,-41745 }, + { 69,13369 }, { 70,-41745 }, { 71,-41745 }, { 72,-41745 }, { 73,-41745 }, + { 74,-41745 }, { 75,-41745 }, { 76,-41745 }, { 77,-41745 }, { 78,-41745 }, + { 79,-41745 }, { 80,-41745 }, { 81,-41745 }, { 82,-41745 }, { 83,-41745 }, + { 84,-41745 }, { 85,-41745 }, { 86,-41745 }, { 87,-41745 }, { 88,-41745 }, + + { 89,-41745 }, { 90,-41745 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-41745 }, { 0, 0 }, { 97,-41745 }, { 98,-41745 }, + { 99,-41745 }, { 100,-41745 }, { 101,13369 }, { 102,-41745 }, { 103,-41745 }, + { 104,-41745 }, { 105,-41745 }, { 106,-41745 }, { 107,-41745 }, { 108,-41745 }, + { 109,-41745 }, { 110,-41745 }, { 111,-41745 }, { 112,-41745 }, { 113,-41745 }, + { 114,-41745 }, { 115,-41745 }, { 116,-41745 }, { 117,-41745 }, { 118,-41745 }, + { 119,-41745 }, { 120,-41745 }, { 121,-41745 }, { 122,-41745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-41745 }, { 128,-41745 }, + { 129,-41745 }, { 130,-41745 }, { 131,-41745 }, { 132,-41745 }, { 133,-41745 }, + { 134,-41745 }, { 135,-41745 }, { 136,-41745 }, { 137,-41745 }, { 138,-41745 }, + + { 139,-41745 }, { 140,-41745 }, { 141,-41745 }, { 142,-41745 }, { 143,-41745 }, + { 144,-41745 }, { 145,-41745 }, { 146,-41745 }, { 147,-41745 }, { 148,-41745 }, + { 149,-41745 }, { 150,-41745 }, { 151,-41745 }, { 152,-41745 }, { 153,-41745 }, + { 154,-41745 }, { 155,-41745 }, { 156,-41745 }, { 157,-41745 }, { 158,-41745 }, + { 159,-41745 }, { 160,-41745 }, { 161,-41745 }, { 162,-41745 }, { 163,-41745 }, + { 164,-41745 }, { 165,-41745 }, { 166,-41745 }, { 167,-41745 }, { 168,-41745 }, + { 169,-41745 }, { 170,-41745 }, { 171,-41745 }, { 172,-41745 }, { 173,-41745 }, + { 174,-41745 }, { 175,-41745 }, { 176,-41745 }, { 177,-41745 }, { 178,-41745 }, + { 179,-41745 }, { 180,-41745 }, { 181,-41745 }, { 182,-41745 }, { 183,-41745 }, + { 184,-41745 }, { 185,-41745 }, { 186,-41745 }, { 187,-41745 }, { 188,-41745 }, + + { 189,-41745 }, { 190,-41745 }, { 191,-41745 }, { 192,-41745 }, { 193,-41745 }, + { 194,-41745 }, { 195,-41745 }, { 196,-41745 }, { 197,-41745 }, { 198,-41745 }, + { 199,-41745 }, { 200,-41745 }, { 201,-41745 }, { 202,-41745 }, { 203,-41745 }, + { 204,-41745 }, { 205,-41745 }, { 206,-41745 }, { 207,-41745 }, { 208,-41745 }, + { 209,-41745 }, { 210,-41745 }, { 211,-41745 }, { 212,-41745 }, { 213,-41745 }, + { 214,-41745 }, { 215,-41745 }, { 216,-41745 }, { 217,-41745 }, { 218,-41745 }, + { 219,-41745 }, { 220,-41745 }, { 221,-41745 }, { 222,-41745 }, { 223,-41745 }, + { 224,-41745 }, { 225,-41745 }, { 226,-41745 }, { 227,-41745 }, { 228,-41745 }, + { 229,-41745 }, { 230,-41745 }, { 231,-41745 }, { 232,-41745 }, { 233,-41745 }, + { 234,-41745 }, { 235,-41745 }, { 236,-41745 }, { 237,-41745 }, { 238,-41745 }, + + { 239,-41745 }, { 240,-41745 }, { 241,-41745 }, { 242,-41745 }, { 243,-41745 }, + { 244,-41745 }, { 245,-41745 }, { 246,-41745 }, { 247,-41745 }, { 248,-41745 }, + { 249,-41745 }, { 250,-41745 }, { 251,-41745 }, { 252,-41745 }, { 253,-41745 }, + { 254,-41745 }, { 255,-41745 }, { 0, 131 }, { 0,50121 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-42002 }, { 49,-42002 }, { 50,-42002 }, { 51,-42002 }, + { 52,-42002 }, { 53,-42002 }, { 54,-42002 }, { 55,-42002 }, { 56,-42002 }, + { 57,-42002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-42002 }, { 66,-42002 }, + { 67,-42002 }, { 68,13369 }, { 69,-42002 }, { 70,-42002 }, { 71,-42002 }, + { 72,-42002 }, { 73,-42002 }, { 74,-42002 }, { 75,-42002 }, { 76,-42002 }, + { 77,-42002 }, { 78,-42002 }, { 79,-42002 }, { 80,-42002 }, { 81,-42002 }, + + { 82,-42002 }, { 83,-42002 }, { 84,-42002 }, { 85,-42002 }, { 86,-42002 }, + { 87,-42002 }, { 88,-42002 }, { 89,-42002 }, { 90,-42002 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-42002 }, { 0, 0 }, + { 97,-42002 }, { 98,-42002 }, { 99,-42002 }, { 100,13369 }, { 101,-42002 }, + { 102,-42002 }, { 103,-42002 }, { 104,-42002 }, { 105,-42002 }, { 106,-42002 }, + { 107,-42002 }, { 108,-42002 }, { 109,-42002 }, { 110,-42002 }, { 111,-42002 }, + { 112,-42002 }, { 113,-42002 }, { 114,-42002 }, { 115,-42002 }, { 116,-42002 }, + { 117,-42002 }, { 118,-42002 }, { 119,-42002 }, { 120,-42002 }, { 121,-42002 }, + { 122,-42002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-42002 }, { 128,-42002 }, { 129,-42002 }, { 130,-42002 }, { 131,-42002 }, + + { 132,-42002 }, { 133,-42002 }, { 134,-42002 }, { 135,-42002 }, { 136,-42002 }, + { 137,-42002 }, { 138,-42002 }, { 139,-42002 }, { 140,-42002 }, { 141,-42002 }, + { 142,-42002 }, { 143,-42002 }, { 144,-42002 }, { 145,-42002 }, { 146,-42002 }, + { 147,-42002 }, { 148,-42002 }, { 149,-42002 }, { 150,-42002 }, { 151,-42002 }, + { 152,-42002 }, { 153,-42002 }, { 154,-42002 }, { 155,-42002 }, { 156,-42002 }, + { 157,-42002 }, { 158,-42002 }, { 159,-42002 }, { 160,-42002 }, { 161,-42002 }, + { 162,-42002 }, { 163,-42002 }, { 164,-42002 }, { 165,-42002 }, { 166,-42002 }, + { 167,-42002 }, { 168,-42002 }, { 169,-42002 }, { 170,-42002 }, { 171,-42002 }, + { 172,-42002 }, { 173,-42002 }, { 174,-42002 }, { 175,-42002 }, { 176,-42002 }, + { 177,-42002 }, { 178,-42002 }, { 179,-42002 }, { 180,-42002 }, { 181,-42002 }, + + { 182,-42002 }, { 183,-42002 }, { 184,-42002 }, { 185,-42002 }, { 186,-42002 }, + { 187,-42002 }, { 188,-42002 }, { 189,-42002 }, { 190,-42002 }, { 191,-42002 }, + { 192,-42002 }, { 193,-42002 }, { 194,-42002 }, { 195,-42002 }, { 196,-42002 }, + { 197,-42002 }, { 198,-42002 }, { 199,-42002 }, { 200,-42002 }, { 201,-42002 }, + { 202,-42002 }, { 203,-42002 }, { 204,-42002 }, { 205,-42002 }, { 206,-42002 }, + { 207,-42002 }, { 208,-42002 }, { 209,-42002 }, { 210,-42002 }, { 211,-42002 }, + { 212,-42002 }, { 213,-42002 }, { 214,-42002 }, { 215,-42002 }, { 216,-42002 }, + { 217,-42002 }, { 218,-42002 }, { 219,-42002 }, { 220,-42002 }, { 221,-42002 }, + { 222,-42002 }, { 223,-42002 }, { 224,-42002 }, { 225,-42002 }, { 226,-42002 }, + { 227,-42002 }, { 228,-42002 }, { 229,-42002 }, { 230,-42002 }, { 231,-42002 }, + + { 232,-42002 }, { 233,-42002 }, { 234,-42002 }, { 235,-42002 }, { 236,-42002 }, + { 237,-42002 }, { 238,-42002 }, { 239,-42002 }, { 240,-42002 }, { 241,-42002 }, + { 242,-42002 }, { 243,-42002 }, { 244,-42002 }, { 245,-42002 }, { 246,-42002 }, + { 247,-42002 }, { 248,-42002 }, { 249,-42002 }, { 250,-42002 }, { 251,-42002 }, + { 252,-42002 }, { 253,-42002 }, { 254,-42002 }, { 255,-42002 }, { 0, 131 }, + { 0,49864 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-42259 }, { 49,-42259 }, + { 50,-42259 }, { 51,-42259 }, { 52,-42259 }, { 53,-42259 }, { 54,-42259 }, + { 55,-42259 }, { 56,-42259 }, { 57,-42259 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,13369 }, { 66,-42259 }, { 67,-42259 }, { 68,-42259 }, { 69,-42259 }, + { 70,-42259 }, { 71,-42259 }, { 72,-42259 }, { 73,-42259 }, { 74,-42259 }, + + { 75,-42259 }, { 76,-42259 }, { 77,-42259 }, { 78,-42259 }, { 79,-42259 }, + { 80,-42259 }, { 81,-42259 }, { 82,-42259 }, { 83,-42259 }, { 84,-42259 }, + { 85,-42259 }, { 86,-42259 }, { 87,-42259 }, { 88,-42259 }, { 89,-42259 }, + { 90,-42259 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-42259 }, { 0, 0 }, { 97,13369 }, { 98,-42259 }, { 99,-42259 }, + { 100,-42259 }, { 101,-42259 }, { 102,-42259 }, { 103,-42259 }, { 104,-42259 }, + { 105,-42259 }, { 106,-42259 }, { 107,-42259 }, { 108,-42259 }, { 109,-42259 }, + { 110,-42259 }, { 111,-42259 }, { 112,-42259 }, { 113,-42259 }, { 114,-42259 }, + { 115,-42259 }, { 116,-42259 }, { 117,-42259 }, { 118,-42259 }, { 119,-42259 }, + { 120,-42259 }, { 121,-42259 }, { 122,-42259 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-42259 }, { 128,-42259 }, { 129,-42259 }, + { 130,-42259 }, { 131,-42259 }, { 132,-42259 }, { 133,-42259 }, { 134,-42259 }, + { 135,-42259 }, { 136,-42259 }, { 137,-42259 }, { 138,-42259 }, { 139,-42259 }, + { 140,-42259 }, { 141,-42259 }, { 142,-42259 }, { 143,-42259 }, { 144,-42259 }, + { 145,-42259 }, { 146,-42259 }, { 147,-42259 }, { 148,-42259 }, { 149,-42259 }, + { 150,-42259 }, { 151,-42259 }, { 152,-42259 }, { 153,-42259 }, { 154,-42259 }, + { 155,-42259 }, { 156,-42259 }, { 157,-42259 }, { 158,-42259 }, { 159,-42259 }, + { 160,-42259 }, { 161,-42259 }, { 162,-42259 }, { 163,-42259 }, { 164,-42259 }, + { 165,-42259 }, { 166,-42259 }, { 167,-42259 }, { 168,-42259 }, { 169,-42259 }, + { 170,-42259 }, { 171,-42259 }, { 172,-42259 }, { 173,-42259 }, { 174,-42259 }, + + { 175,-42259 }, { 176,-42259 }, { 177,-42259 }, { 178,-42259 }, { 179,-42259 }, + { 180,-42259 }, { 181,-42259 }, { 182,-42259 }, { 183,-42259 }, { 184,-42259 }, + { 185,-42259 }, { 186,-42259 }, { 187,-42259 }, { 188,-42259 }, { 189,-42259 }, + { 190,-42259 }, { 191,-42259 }, { 192,-42259 }, { 193,-42259 }, { 194,-42259 }, + { 195,-42259 }, { 196,-42259 }, { 197,-42259 }, { 198,-42259 }, { 199,-42259 }, + { 200,-42259 }, { 201,-42259 }, { 202,-42259 }, { 203,-42259 }, { 204,-42259 }, + { 205,-42259 }, { 206,-42259 }, { 207,-42259 }, { 208,-42259 }, { 209,-42259 }, + { 210,-42259 }, { 211,-42259 }, { 212,-42259 }, { 213,-42259 }, { 214,-42259 }, + { 215,-42259 }, { 216,-42259 }, { 217,-42259 }, { 218,-42259 }, { 219,-42259 }, + { 220,-42259 }, { 221,-42259 }, { 222,-42259 }, { 223,-42259 }, { 224,-42259 }, + + { 225,-42259 }, { 226,-42259 }, { 227,-42259 }, { 228,-42259 }, { 229,-42259 }, + { 230,-42259 }, { 231,-42259 }, { 232,-42259 }, { 233,-42259 }, { 234,-42259 }, + { 235,-42259 }, { 236,-42259 }, { 237,-42259 }, { 238,-42259 }, { 239,-42259 }, + { 240,-42259 }, { 241,-42259 }, { 242,-42259 }, { 243,-42259 }, { 244,-42259 }, + { 245,-42259 }, { 246,-42259 }, { 247,-42259 }, { 248,-42259 }, { 249,-42259 }, + { 250,-42259 }, { 251,-42259 }, { 252,-42259 }, { 253,-42259 }, { 254,-42259 }, + { 255,-42259 }, { 0, 131 }, { 0,49607 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-42516 }, { 49,-42516 }, { 50,-42516 }, { 51,-42516 }, { 52,-42516 }, + { 53,-42516 }, { 54,-42516 }, { 55,-42516 }, { 56,-42516 }, { 57,-42516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-42516 }, { 66,-42516 }, { 67,-42516 }, + + { 68,-42516 }, { 69,-42516 }, { 70,-42516 }, { 71,-42516 }, { 72,-42516 }, + { 73,-42516 }, { 74,-42516 }, { 75,-42516 }, { 76,-42516 }, { 77,-42516 }, + { 78,-42516 }, { 79,-42516 }, { 80,-42516 }, { 81,-42516 }, { 82,13369 }, + { 83,-42516 }, { 84,-42516 }, { 85,-42516 }, { 86,-42516 }, { 87,-42516 }, + { 88,-42516 }, { 89,-42516 }, { 90,-42516 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-42516 }, { 0, 0 }, { 97,-42516 }, + { 98,-42516 }, { 99,-42516 }, { 100,-42516 }, { 101,-42516 }, { 102,-42516 }, + { 103,-42516 }, { 104,-42516 }, { 105,-42516 }, { 106,-42516 }, { 107,-42516 }, + { 108,-42516 }, { 109,-42516 }, { 110,-42516 }, { 111,-42516 }, { 112,-42516 }, + { 113,-42516 }, { 114,13369 }, { 115,-42516 }, { 116,-42516 }, { 117,-42516 }, + + { 118,-42516 }, { 119,-42516 }, { 120,-42516 }, { 121,-42516 }, { 122,-42516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-42516 }, + { 128,-42516 }, { 129,-42516 }, { 130,-42516 }, { 131,-42516 }, { 132,-42516 }, + { 133,-42516 }, { 134,-42516 }, { 135,-42516 }, { 136,-42516 }, { 137,-42516 }, + { 138,-42516 }, { 139,-42516 }, { 140,-42516 }, { 141,-42516 }, { 142,-42516 }, + { 143,-42516 }, { 144,-42516 }, { 145,-42516 }, { 146,-42516 }, { 147,-42516 }, + { 148,-42516 }, { 149,-42516 }, { 150,-42516 }, { 151,-42516 }, { 152,-42516 }, + { 153,-42516 }, { 154,-42516 }, { 155,-42516 }, { 156,-42516 }, { 157,-42516 }, + { 158,-42516 }, { 159,-42516 }, { 160,-42516 }, { 161,-42516 }, { 162,-42516 }, + { 163,-42516 }, { 164,-42516 }, { 165,-42516 }, { 166,-42516 }, { 167,-42516 }, + + { 168,-42516 }, { 169,-42516 }, { 170,-42516 }, { 171,-42516 }, { 172,-42516 }, + { 173,-42516 }, { 174,-42516 }, { 175,-42516 }, { 176,-42516 }, { 177,-42516 }, + { 178,-42516 }, { 179,-42516 }, { 180,-42516 }, { 181,-42516 }, { 182,-42516 }, + { 183,-42516 }, { 184,-42516 }, { 185,-42516 }, { 186,-42516 }, { 187,-42516 }, + { 188,-42516 }, { 189,-42516 }, { 190,-42516 }, { 191,-42516 }, { 192,-42516 }, + { 193,-42516 }, { 194,-42516 }, { 195,-42516 }, { 196,-42516 }, { 197,-42516 }, + { 198,-42516 }, { 199,-42516 }, { 200,-42516 }, { 201,-42516 }, { 202,-42516 }, + { 203,-42516 }, { 204,-42516 }, { 205,-42516 }, { 206,-42516 }, { 207,-42516 }, + { 208,-42516 }, { 209,-42516 }, { 210,-42516 }, { 211,-42516 }, { 212,-42516 }, + { 213,-42516 }, { 214,-42516 }, { 215,-42516 }, { 216,-42516 }, { 217,-42516 }, + + { 218,-42516 }, { 219,-42516 }, { 220,-42516 }, { 221,-42516 }, { 222,-42516 }, + { 223,-42516 }, { 224,-42516 }, { 225,-42516 }, { 226,-42516 }, { 227,-42516 }, + { 228,-42516 }, { 229,-42516 }, { 230,-42516 }, { 231,-42516 }, { 232,-42516 }, + { 233,-42516 }, { 234,-42516 }, { 235,-42516 }, { 236,-42516 }, { 237,-42516 }, + { 238,-42516 }, { 239,-42516 }, { 240,-42516 }, { 241,-42516 }, { 242,-42516 }, + { 243,-42516 }, { 244,-42516 }, { 245,-42516 }, { 246,-42516 }, { 247,-42516 }, + { 248,-42516 }, { 249,-42516 }, { 250,-42516 }, { 251,-42516 }, { 252,-42516 }, + { 253,-42516 }, { 254,-42516 }, { 255,-42516 }, { 0, 131 }, { 0,49350 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-42773 }, { 49,-42773 }, { 50,-42773 }, + { 51,-42773 }, { 52,-42773 }, { 53,-42773 }, { 54,-42773 }, { 55,-42773 }, + { 56,-42773 }, { 57,-42773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-42773 }, + { 66,-42773 }, { 67,-42773 }, { 68,-42773 }, { 69,-42773 }, { 70,-42773 }, + { 71,-42773 }, { 72,-42773 }, { 73,-42773 }, { 74,-42773 }, { 75,-42773 }, + { 76,13369 }, { 77,-42773 }, { 78,-42773 }, { 79,-42773 }, { 80,-42773 }, + { 81,-42773 }, { 82,-42773 }, { 83,-42773 }, { 84,-42773 }, { 85,-42773 }, + { 86,-42773 }, { 87,-42773 }, { 88,-42773 }, { 89,-42773 }, { 90,-42773 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-42773 }, + { 0, 0 }, { 97,-42773 }, { 98,-42773 }, { 99,-42773 }, { 100,-42773 }, + { 101,-42773 }, { 102,-42773 }, { 103,-42773 }, { 104,-42773 }, { 105,-42773 }, + { 106,-42773 }, { 107,-42773 }, { 108,13369 }, { 109,-42773 }, { 110,-42773 }, + + { 111,-42773 }, { 112,-42773 }, { 113,-42773 }, { 114,-42773 }, { 115,-42773 }, + { 116,-42773 }, { 117,-42773 }, { 118,-42773 }, { 119,-42773 }, { 120,-42773 }, + { 121,-42773 }, { 122,-42773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-42773 }, { 128,-42773 }, { 129,-42773 }, { 130,-42773 }, + { 131,-42773 }, { 132,-42773 }, { 133,-42773 }, { 134,-42773 }, { 135,-42773 }, + { 136,-42773 }, { 137,-42773 }, { 138,-42773 }, { 139,-42773 }, { 140,-42773 }, + { 141,-42773 }, { 142,-42773 }, { 143,-42773 }, { 144,-42773 }, { 145,-42773 }, + { 146,-42773 }, { 147,-42773 }, { 148,-42773 }, { 149,-42773 }, { 150,-42773 }, + { 151,-42773 }, { 152,-42773 }, { 153,-42773 }, { 154,-42773 }, { 155,-42773 }, + { 156,-42773 }, { 157,-42773 }, { 158,-42773 }, { 159,-42773 }, { 160,-42773 }, + + { 161,-42773 }, { 162,-42773 }, { 163,-42773 }, { 164,-42773 }, { 165,-42773 }, + { 166,-42773 }, { 167,-42773 }, { 168,-42773 }, { 169,-42773 }, { 170,-42773 }, + { 171,-42773 }, { 172,-42773 }, { 173,-42773 }, { 174,-42773 }, { 175,-42773 }, + { 176,-42773 }, { 177,-42773 }, { 178,-42773 }, { 179,-42773 }, { 180,-42773 }, + { 181,-42773 }, { 182,-42773 }, { 183,-42773 }, { 184,-42773 }, { 185,-42773 }, + { 186,-42773 }, { 187,-42773 }, { 188,-42773 }, { 189,-42773 }, { 190,-42773 }, + { 191,-42773 }, { 192,-42773 }, { 193,-42773 }, { 194,-42773 }, { 195,-42773 }, + { 196,-42773 }, { 197,-42773 }, { 198,-42773 }, { 199,-42773 }, { 200,-42773 }, + { 201,-42773 }, { 202,-42773 }, { 203,-42773 }, { 204,-42773 }, { 205,-42773 }, + { 206,-42773 }, { 207,-42773 }, { 208,-42773 }, { 209,-42773 }, { 210,-42773 }, + + { 211,-42773 }, { 212,-42773 }, { 213,-42773 }, { 214,-42773 }, { 215,-42773 }, + { 216,-42773 }, { 217,-42773 }, { 218,-42773 }, { 219,-42773 }, { 220,-42773 }, + { 221,-42773 }, { 222,-42773 }, { 223,-42773 }, { 224,-42773 }, { 225,-42773 }, + { 226,-42773 }, { 227,-42773 }, { 228,-42773 }, { 229,-42773 }, { 230,-42773 }, + { 231,-42773 }, { 232,-42773 }, { 233,-42773 }, { 234,-42773 }, { 235,-42773 }, + { 236,-42773 }, { 237,-42773 }, { 238,-42773 }, { 239,-42773 }, { 240,-42773 }, + { 241,-42773 }, { 242,-42773 }, { 243,-42773 }, { 244,-42773 }, { 245,-42773 }, + { 246,-42773 }, { 247,-42773 }, { 248,-42773 }, { 249,-42773 }, { 250,-42773 }, + { 251,-42773 }, { 252,-42773 }, { 253,-42773 }, { 254,-42773 }, { 255,-42773 }, + { 0, 131 }, { 0,49093 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-43030 }, + { 49,-43030 }, { 50,-43030 }, { 51,-43030 }, { 52,-43030 }, { 53,-43030 }, + + { 54,-43030 }, { 55,-43030 }, { 56,-43030 }, { 57,-43030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-43030 }, { 66,-43030 }, { 67,-43030 }, { 68,-43030 }, + { 69,-43030 }, { 70,-43030 }, { 71,-43030 }, { 72,-43030 }, { 73,-43030 }, + { 74,-43030 }, { 75,-43030 }, { 76,-43030 }, { 77,-43030 }, { 78,13369 }, + { 79,-43030 }, { 80,-43030 }, { 81,-43030 }, { 82,-43030 }, { 83,-43030 }, + { 84,-43030 }, { 85,-43030 }, { 86,-43030 }, { 87,-43030 }, { 88,-43030 }, + { 89,-43030 }, { 90,-43030 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-43030 }, { 0, 0 }, { 97,-43030 }, { 98,-43030 }, + { 99,-43030 }, { 100,-43030 }, { 101,-43030 }, { 102,-43030 }, { 103,-43030 }, + + { 104,-43030 }, { 105,-43030 }, { 106,-43030 }, { 107,-43030 }, { 108,-43030 }, + { 109,-43030 }, { 110,13369 }, { 111,-43030 }, { 112,-43030 }, { 113,-43030 }, + { 114,-43030 }, { 115,-43030 }, { 116,-43030 }, { 117,-43030 }, { 118,-43030 }, + { 119,-43030 }, { 120,-43030 }, { 121,-43030 }, { 122,-43030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-43030 }, { 128,-43030 }, + { 129,-43030 }, { 130,-43030 }, { 131,-43030 }, { 132,-43030 }, { 133,-43030 }, + { 134,-43030 }, { 135,-43030 }, { 136,-43030 }, { 137,-43030 }, { 138,-43030 }, + { 139,-43030 }, { 140,-43030 }, { 141,-43030 }, { 142,-43030 }, { 143,-43030 }, + { 144,-43030 }, { 145,-43030 }, { 146,-43030 }, { 147,-43030 }, { 148,-43030 }, + { 149,-43030 }, { 150,-43030 }, { 151,-43030 }, { 152,-43030 }, { 153,-43030 }, + + { 154,-43030 }, { 155,-43030 }, { 156,-43030 }, { 157,-43030 }, { 158,-43030 }, + { 159,-43030 }, { 160,-43030 }, { 161,-43030 }, { 162,-43030 }, { 163,-43030 }, + { 164,-43030 }, { 165,-43030 }, { 166,-43030 }, { 167,-43030 }, { 168,-43030 }, + { 169,-43030 }, { 170,-43030 }, { 171,-43030 }, { 172,-43030 }, { 173,-43030 }, + { 174,-43030 }, { 175,-43030 }, { 176,-43030 }, { 177,-43030 }, { 178,-43030 }, + { 179,-43030 }, { 180,-43030 }, { 181,-43030 }, { 182,-43030 }, { 183,-43030 }, + { 184,-43030 }, { 185,-43030 }, { 186,-43030 }, { 187,-43030 }, { 188,-43030 }, + { 189,-43030 }, { 190,-43030 }, { 191,-43030 }, { 192,-43030 }, { 193,-43030 }, + { 194,-43030 }, { 195,-43030 }, { 196,-43030 }, { 197,-43030 }, { 198,-43030 }, + { 199,-43030 }, { 200,-43030 }, { 201,-43030 }, { 202,-43030 }, { 203,-43030 }, + + { 204,-43030 }, { 205,-43030 }, { 206,-43030 }, { 207,-43030 }, { 208,-43030 }, + { 209,-43030 }, { 210,-43030 }, { 211,-43030 }, { 212,-43030 }, { 213,-43030 }, + { 214,-43030 }, { 215,-43030 }, { 216,-43030 }, { 217,-43030 }, { 218,-43030 }, + { 219,-43030 }, { 220,-43030 }, { 221,-43030 }, { 222,-43030 }, { 223,-43030 }, + { 224,-43030 }, { 225,-43030 }, { 226,-43030 }, { 227,-43030 }, { 228,-43030 }, + { 229,-43030 }, { 230,-43030 }, { 231,-43030 }, { 232,-43030 }, { 233,-43030 }, + { 234,-43030 }, { 235,-43030 }, { 236,-43030 }, { 237,-43030 }, { 238,-43030 }, + { 239,-43030 }, { 240,-43030 }, { 241,-43030 }, { 242,-43030 }, { 243,-43030 }, + { 244,-43030 }, { 245,-43030 }, { 246,-43030 }, { 247,-43030 }, { 248,-43030 }, + { 249,-43030 }, { 250,-43030 }, { 251,-43030 }, { 252,-43030 }, { 253,-43030 }, + + { 254,-43030 }, { 255,-43030 }, { 0, 131 }, { 0,48836 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-43287 }, { 49,-43287 }, { 50,-43287 }, { 51,-43287 }, + { 52,-43287 }, { 53,-43287 }, { 54,-43287 }, { 55,-43287 }, { 56,-43287 }, + { 57,-43287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-43287 }, { 66,-43287 }, + { 67,-43287 }, { 68,-43287 }, { 69,-43287 }, { 70,-43287 }, { 71,-43287 }, + { 72,-43287 }, { 73,-43287 }, { 74,-43287 }, { 75,-43287 }, { 76,13369 }, + { 77,-43287 }, { 78,-43287 }, { 79,-43287 }, { 80,-43287 }, { 81,-43287 }, + { 82,-43287 }, { 83,-43287 }, { 84,-43287 }, { 85,-43287 }, { 86,-43287 }, + { 87,-43287 }, { 88,-43287 }, { 89,-43287 }, { 90,-43287 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-43287 }, { 0, 0 }, + + { 97,-43287 }, { 98,-43287 }, { 99,-43287 }, { 100,-43287 }, { 101,-43287 }, + { 102,-43287 }, { 103,-43287 }, { 104,-43287 }, { 105,-43287 }, { 106,-43287 }, + { 107,-43287 }, { 108,13369 }, { 109,-43287 }, { 110,-43287 }, { 111,-43287 }, + { 112,-43287 }, { 113,-43287 }, { 114,-43287 }, { 115,-43287 }, { 116,-43287 }, + { 117,-43287 }, { 118,-43287 }, { 119,-43287 }, { 120,-43287 }, { 121,-43287 }, + { 122,-43287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-43287 }, { 128,-43287 }, { 129,-43287 }, { 130,-43287 }, { 131,-43287 }, + { 132,-43287 }, { 133,-43287 }, { 134,-43287 }, { 135,-43287 }, { 136,-43287 }, + { 137,-43287 }, { 138,-43287 }, { 139,-43287 }, { 140,-43287 }, { 141,-43287 }, + { 142,-43287 }, { 143,-43287 }, { 144,-43287 }, { 145,-43287 }, { 146,-43287 }, + + { 147,-43287 }, { 148,-43287 }, { 149,-43287 }, { 150,-43287 }, { 151,-43287 }, + { 152,-43287 }, { 153,-43287 }, { 154,-43287 }, { 155,-43287 }, { 156,-43287 }, + { 157,-43287 }, { 158,-43287 }, { 159,-43287 }, { 160,-43287 }, { 161,-43287 }, + { 162,-43287 }, { 163,-43287 }, { 164,-43287 }, { 165,-43287 }, { 166,-43287 }, + { 167,-43287 }, { 168,-43287 }, { 169,-43287 }, { 170,-43287 }, { 171,-43287 }, + { 172,-43287 }, { 173,-43287 }, { 174,-43287 }, { 175,-43287 }, { 176,-43287 }, + { 177,-43287 }, { 178,-43287 }, { 179,-43287 }, { 180,-43287 }, { 181,-43287 }, + { 182,-43287 }, { 183,-43287 }, { 184,-43287 }, { 185,-43287 }, { 186,-43287 }, + { 187,-43287 }, { 188,-43287 }, { 189,-43287 }, { 190,-43287 }, { 191,-43287 }, + { 192,-43287 }, { 193,-43287 }, { 194,-43287 }, { 195,-43287 }, { 196,-43287 }, + + { 197,-43287 }, { 198,-43287 }, { 199,-43287 }, { 200,-43287 }, { 201,-43287 }, + { 202,-43287 }, { 203,-43287 }, { 204,-43287 }, { 205,-43287 }, { 206,-43287 }, + { 207,-43287 }, { 208,-43287 }, { 209,-43287 }, { 210,-43287 }, { 211,-43287 }, + { 212,-43287 }, { 213,-43287 }, { 214,-43287 }, { 215,-43287 }, { 216,-43287 }, + { 217,-43287 }, { 218,-43287 }, { 219,-43287 }, { 220,-43287 }, { 221,-43287 }, + { 222,-43287 }, { 223,-43287 }, { 224,-43287 }, { 225,-43287 }, { 226,-43287 }, + { 227,-43287 }, { 228,-43287 }, { 229,-43287 }, { 230,-43287 }, { 231,-43287 }, + { 232,-43287 }, { 233,-43287 }, { 234,-43287 }, { 235,-43287 }, { 236,-43287 }, + { 237,-43287 }, { 238,-43287 }, { 239,-43287 }, { 240,-43287 }, { 241,-43287 }, + { 242,-43287 }, { 243,-43287 }, { 244,-43287 }, { 245,-43287 }, { 246,-43287 }, + + { 247,-43287 }, { 248,-43287 }, { 249,-43287 }, { 250,-43287 }, { 251,-43287 }, + { 252,-43287 }, { 253,-43287 }, { 254,-43287 }, { 255,-43287 }, { 0, 131 }, + { 0,48579 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-43544 }, { 49,-43544 }, + { 50,-43544 }, { 51,-43544 }, { 52,-43544 }, { 53,-43544 }, { 54,-43544 }, + { 55,-43544 }, { 56,-43544 }, { 57,-43544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-43544 }, { 66,-43544 }, { 67,-43544 }, { 68,-43544 }, { 69,-43544 }, + { 70,-43544 }, { 71,-43544 }, { 72,-43544 }, { 73,-43544 }, { 74,-43544 }, + { 75,-43544 }, { 76,-43544 }, { 77,-43544 }, { 78,13369 }, { 79,-43544 }, + { 80,-43544 }, { 81,-43544 }, { 82,-43544 }, { 83,-43544 }, { 84,-43544 }, + { 85,-43544 }, { 86,-43544 }, { 87,-43544 }, { 88,-43544 }, { 89,-43544 }, + + { 90,-43544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-43544 }, { 0, 0 }, { 97,-43544 }, { 98,-43544 }, { 99,-43544 }, + { 100,-43544 }, { 101,-43544 }, { 102,-43544 }, { 103,-43544 }, { 104,-43544 }, + { 105,-43544 }, { 106,-43544 }, { 107,-43544 }, { 108,-43544 }, { 109,-43544 }, + { 110,13369 }, { 111,-43544 }, { 112,-43544 }, { 113,-43544 }, { 114,-43544 }, + { 115,-43544 }, { 116,-43544 }, { 117,-43544 }, { 118,-43544 }, { 119,-43544 }, + { 120,-43544 }, { 121,-43544 }, { 122,-43544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-43544 }, { 128,-43544 }, { 129,-43544 }, + { 130,-43544 }, { 131,-43544 }, { 132,-43544 }, { 133,-43544 }, { 134,-43544 }, + { 135,-43544 }, { 136,-43544 }, { 137,-43544 }, { 138,-43544 }, { 139,-43544 }, + + { 140,-43544 }, { 141,-43544 }, { 142,-43544 }, { 143,-43544 }, { 144,-43544 }, + { 145,-43544 }, { 146,-43544 }, { 147,-43544 }, { 148,-43544 }, { 149,-43544 }, + { 150,-43544 }, { 151,-43544 }, { 152,-43544 }, { 153,-43544 }, { 154,-43544 }, + { 155,-43544 }, { 156,-43544 }, { 157,-43544 }, { 158,-43544 }, { 159,-43544 }, + { 160,-43544 }, { 161,-43544 }, { 162,-43544 }, { 163,-43544 }, { 164,-43544 }, + { 165,-43544 }, { 166,-43544 }, { 167,-43544 }, { 168,-43544 }, { 169,-43544 }, + { 170,-43544 }, { 171,-43544 }, { 172,-43544 }, { 173,-43544 }, { 174,-43544 }, + { 175,-43544 }, { 176,-43544 }, { 177,-43544 }, { 178,-43544 }, { 179,-43544 }, + { 180,-43544 }, { 181,-43544 }, { 182,-43544 }, { 183,-43544 }, { 184,-43544 }, + { 185,-43544 }, { 186,-43544 }, { 187,-43544 }, { 188,-43544 }, { 189,-43544 }, + + { 190,-43544 }, { 191,-43544 }, { 192,-43544 }, { 193,-43544 }, { 194,-43544 }, + { 195,-43544 }, { 196,-43544 }, { 197,-43544 }, { 198,-43544 }, { 199,-43544 }, + { 200,-43544 }, { 201,-43544 }, { 202,-43544 }, { 203,-43544 }, { 204,-43544 }, + { 205,-43544 }, { 206,-43544 }, { 207,-43544 }, { 208,-43544 }, { 209,-43544 }, + { 210,-43544 }, { 211,-43544 }, { 212,-43544 }, { 213,-43544 }, { 214,-43544 }, + { 215,-43544 }, { 216,-43544 }, { 217,-43544 }, { 218,-43544 }, { 219,-43544 }, + { 220,-43544 }, { 221,-43544 }, { 222,-43544 }, { 223,-43544 }, { 224,-43544 }, + { 225,-43544 }, { 226,-43544 }, { 227,-43544 }, { 228,-43544 }, { 229,-43544 }, + { 230,-43544 }, { 231,-43544 }, { 232,-43544 }, { 233,-43544 }, { 234,-43544 }, + { 235,-43544 }, { 236,-43544 }, { 237,-43544 }, { 238,-43544 }, { 239,-43544 }, + + { 240,-43544 }, { 241,-43544 }, { 242,-43544 }, { 243,-43544 }, { 244,-43544 }, + { 245,-43544 }, { 246,-43544 }, { 247,-43544 }, { 248,-43544 }, { 249,-43544 }, + { 250,-43544 }, { 251,-43544 }, { 252,-43544 }, { 253,-43544 }, { 254,-43544 }, + { 255,-43544 }, { 0, 131 }, { 0,48322 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-43801 }, { 49,-43801 }, { 50,-43801 }, { 51,-43801 }, { 52,-43801 }, + { 53,-43801 }, { 54,-43801 }, { 55,-43801 }, { 56,-43801 }, { 57,-43801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-43801 }, { 66,-43801 }, { 67,-43801 }, + { 68,-43801 }, { 69,-43801 }, { 70,-43801 }, { 71,-43801 }, { 72,-43801 }, + { 73,-43801 }, { 74,-43801 }, { 75,-43801 }, { 76,-43801 }, { 77,-43801 }, + { 78,-43801 }, { 79,-43801 }, { 80,-43801 }, { 81,-43801 }, { 82,-43801 }, + + { 83,-43801 }, { 84,13369 }, { 85,-43801 }, { 86,-43801 }, { 87,-43801 }, + { 88,-43801 }, { 89,-43801 }, { 90,-43801 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-43801 }, { 0, 0 }, { 97,-43801 }, + { 98,-43801 }, { 99,-43801 }, { 100,-43801 }, { 101,-43801 }, { 102,-43801 }, + { 103,-43801 }, { 104,-43801 }, { 105,-43801 }, { 106,-43801 }, { 107,-43801 }, + { 108,-43801 }, { 109,-43801 }, { 110,-43801 }, { 111,-43801 }, { 112,-43801 }, + { 113,-43801 }, { 114,-43801 }, { 115,-43801 }, { 116,13369 }, { 117,-43801 }, + { 118,-43801 }, { 119,-43801 }, { 120,-43801 }, { 121,-43801 }, { 122,-43801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-43801 }, + { 128,-43801 }, { 129,-43801 }, { 130,-43801 }, { 131,-43801 }, { 132,-43801 }, + + { 133,-43801 }, { 134,-43801 }, { 135,-43801 }, { 136,-43801 }, { 137,-43801 }, + { 138,-43801 }, { 139,-43801 }, { 140,-43801 }, { 141,-43801 }, { 142,-43801 }, + { 143,-43801 }, { 144,-43801 }, { 145,-43801 }, { 146,-43801 }, { 147,-43801 }, + { 148,-43801 }, { 149,-43801 }, { 150,-43801 }, { 151,-43801 }, { 152,-43801 }, + { 153,-43801 }, { 154,-43801 }, { 155,-43801 }, { 156,-43801 }, { 157,-43801 }, + { 158,-43801 }, { 159,-43801 }, { 160,-43801 }, { 161,-43801 }, { 162,-43801 }, + { 163,-43801 }, { 164,-43801 }, { 165,-43801 }, { 166,-43801 }, { 167,-43801 }, + { 168,-43801 }, { 169,-43801 }, { 170,-43801 }, { 171,-43801 }, { 172,-43801 }, + { 173,-43801 }, { 174,-43801 }, { 175,-43801 }, { 176,-43801 }, { 177,-43801 }, + { 178,-43801 }, { 179,-43801 }, { 180,-43801 }, { 181,-43801 }, { 182,-43801 }, + + { 183,-43801 }, { 184,-43801 }, { 185,-43801 }, { 186,-43801 }, { 187,-43801 }, + { 188,-43801 }, { 189,-43801 }, { 190,-43801 }, { 191,-43801 }, { 192,-43801 }, + { 193,-43801 }, { 194,-43801 }, { 195,-43801 }, { 196,-43801 }, { 197,-43801 }, + { 198,-43801 }, { 199,-43801 }, { 200,-43801 }, { 201,-43801 }, { 202,-43801 }, + { 203,-43801 }, { 204,-43801 }, { 205,-43801 }, { 206,-43801 }, { 207,-43801 }, + { 208,-43801 }, { 209,-43801 }, { 210,-43801 }, { 211,-43801 }, { 212,-43801 }, + { 213,-43801 }, { 214,-43801 }, { 215,-43801 }, { 216,-43801 }, { 217,-43801 }, + { 218,-43801 }, { 219,-43801 }, { 220,-43801 }, { 221,-43801 }, { 222,-43801 }, + { 223,-43801 }, { 224,-43801 }, { 225,-43801 }, { 226,-43801 }, { 227,-43801 }, + { 228,-43801 }, { 229,-43801 }, { 230,-43801 }, { 231,-43801 }, { 232,-43801 }, + + { 233,-43801 }, { 234,-43801 }, { 235,-43801 }, { 236,-43801 }, { 237,-43801 }, + { 238,-43801 }, { 239,-43801 }, { 240,-43801 }, { 241,-43801 }, { 242,-43801 }, + { 243,-43801 }, { 244,-43801 }, { 245,-43801 }, { 246,-43801 }, { 247,-43801 }, + { 248,-43801 }, { 249,-43801 }, { 250,-43801 }, { 251,-43801 }, { 252,-43801 }, + { 253,-43801 }, { 254,-43801 }, { 255,-43801 }, { 0, 131 }, { 0,48065 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-44058 }, { 49,-44058 }, { 50,-44058 }, + { 51,-44058 }, { 52,-44058 }, { 53,-44058 }, { 54,-44058 }, { 55,-44058 }, + { 56,-44058 }, { 57,-44058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-44058 }, + { 66,-44058 }, { 67,-44058 }, { 68,-44058 }, { 69,-44058 }, { 70,-44058 }, + { 71,-44058 }, { 72,-44058 }, { 73,-44058 }, { 74,-44058 }, { 75,-44058 }, + + { 76,-44058 }, { 77,13369 }, { 78,-44058 }, { 79,-44058 }, { 80,-44058 }, + { 81,-44058 }, { 82,-44058 }, { 83,-44058 }, { 84,-44058 }, { 85,-44058 }, + { 86,-44058 }, { 87,-44058 }, { 88,-44058 }, { 89,-44058 }, { 90,-44058 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-44058 }, + { 0, 0 }, { 97,-44058 }, { 98,-44058 }, { 99,-44058 }, { 100,-44058 }, + { 101,-44058 }, { 102,-44058 }, { 103,-44058 }, { 104,-44058 }, { 105,-44058 }, + { 106,-44058 }, { 107,-44058 }, { 108,-44058 }, { 109,13369 }, { 110,-44058 }, + { 111,-44058 }, { 112,-44058 }, { 113,-44058 }, { 114,-44058 }, { 115,-44058 }, + { 116,-44058 }, { 117,-44058 }, { 118,-44058 }, { 119,-44058 }, { 120,-44058 }, + { 121,-44058 }, { 122,-44058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-44058 }, { 128,-44058 }, { 129,-44058 }, { 130,-44058 }, + { 131,-44058 }, { 132,-44058 }, { 133,-44058 }, { 134,-44058 }, { 135,-44058 }, + { 136,-44058 }, { 137,-44058 }, { 138,-44058 }, { 139,-44058 }, { 140,-44058 }, + { 141,-44058 }, { 142,-44058 }, { 143,-44058 }, { 144,-44058 }, { 145,-44058 }, + { 146,-44058 }, { 147,-44058 }, { 148,-44058 }, { 149,-44058 }, { 150,-44058 }, + { 151,-44058 }, { 152,-44058 }, { 153,-44058 }, { 154,-44058 }, { 155,-44058 }, + { 156,-44058 }, { 157,-44058 }, { 158,-44058 }, { 159,-44058 }, { 160,-44058 }, + { 161,-44058 }, { 162,-44058 }, { 163,-44058 }, { 164,-44058 }, { 165,-44058 }, + { 166,-44058 }, { 167,-44058 }, { 168,-44058 }, { 169,-44058 }, { 170,-44058 }, + { 171,-44058 }, { 172,-44058 }, { 173,-44058 }, { 174,-44058 }, { 175,-44058 }, + + { 176,-44058 }, { 177,-44058 }, { 178,-44058 }, { 179,-44058 }, { 180,-44058 }, + { 181,-44058 }, { 182,-44058 }, { 183,-44058 }, { 184,-44058 }, { 185,-44058 }, + { 186,-44058 }, { 187,-44058 }, { 188,-44058 }, { 189,-44058 }, { 190,-44058 }, + { 191,-44058 }, { 192,-44058 }, { 193,-44058 }, { 194,-44058 }, { 195,-44058 }, + { 196,-44058 }, { 197,-44058 }, { 198,-44058 }, { 199,-44058 }, { 200,-44058 }, + { 201,-44058 }, { 202,-44058 }, { 203,-44058 }, { 204,-44058 }, { 205,-44058 }, + { 206,-44058 }, { 207,-44058 }, { 208,-44058 }, { 209,-44058 }, { 210,-44058 }, + { 211,-44058 }, { 212,-44058 }, { 213,-44058 }, { 214,-44058 }, { 215,-44058 }, + { 216,-44058 }, { 217,-44058 }, { 218,-44058 }, { 219,-44058 }, { 220,-44058 }, + { 221,-44058 }, { 222,-44058 }, { 223,-44058 }, { 224,-44058 }, { 225,-44058 }, + + { 226,-44058 }, { 227,-44058 }, { 228,-44058 }, { 229,-44058 }, { 230,-44058 }, + { 231,-44058 }, { 232,-44058 }, { 233,-44058 }, { 234,-44058 }, { 235,-44058 }, + { 236,-44058 }, { 237,-44058 }, { 238,-44058 }, { 239,-44058 }, { 240,-44058 }, + { 241,-44058 }, { 242,-44058 }, { 243,-44058 }, { 244,-44058 }, { 245,-44058 }, + { 246,-44058 }, { 247,-44058 }, { 248,-44058 }, { 249,-44058 }, { 250,-44058 }, + { 251,-44058 }, { 252,-44058 }, { 253,-44058 }, { 254,-44058 }, { 255,-44058 }, + { 0, 131 }, { 0,47808 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-44315 }, + { 49,-44315 }, { 50,-44315 }, { 51,-44315 }, { 52,-44315 }, { 53,-44315 }, + { 54,-44315 }, { 55,-44315 }, { 56,-44315 }, { 57,-44315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13369 }, { 66,-44315 }, { 67,-44315 }, { 68,-44315 }, + + { 69,-44315 }, { 70,-44315 }, { 71,-44315 }, { 72,-44315 }, { 73,-44315 }, + { 74,-44315 }, { 75,-44315 }, { 76,-44315 }, { 77,-44315 }, { 78,-44315 }, + { 79,-44315 }, { 80,-44315 }, { 81,-44315 }, { 82,-44315 }, { 83,-44315 }, + { 84,-44315 }, { 85,-44315 }, { 86,-44315 }, { 87,-44315 }, { 88,-44315 }, + { 89,-44315 }, { 90,-44315 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-44315 }, { 0, 0 }, { 97,13369 }, { 98,-44315 }, + { 99,-44315 }, { 100,-44315 }, { 101,-44315 }, { 102,-44315 }, { 103,-44315 }, + { 104,-44315 }, { 105,-44315 }, { 106,-44315 }, { 107,-44315 }, { 108,-44315 }, + { 109,-44315 }, { 110,-44315 }, { 111,-44315 }, { 112,-44315 }, { 113,-44315 }, + { 114,-44315 }, { 115,-44315 }, { 116,-44315 }, { 117,-44315 }, { 118,-44315 }, + + { 119,-44315 }, { 120,-44315 }, { 121,-44315 }, { 122,-44315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-44315 }, { 128,-44315 }, + { 129,-44315 }, { 130,-44315 }, { 131,-44315 }, { 132,-44315 }, { 133,-44315 }, + { 134,-44315 }, { 135,-44315 }, { 136,-44315 }, { 137,-44315 }, { 138,-44315 }, + { 139,-44315 }, { 140,-44315 }, { 141,-44315 }, { 142,-44315 }, { 143,-44315 }, + { 144,-44315 }, { 145,-44315 }, { 146,-44315 }, { 147,-44315 }, { 148,-44315 }, + { 149,-44315 }, { 150,-44315 }, { 151,-44315 }, { 152,-44315 }, { 153,-44315 }, + { 154,-44315 }, { 155,-44315 }, { 156,-44315 }, { 157,-44315 }, { 158,-44315 }, + { 159,-44315 }, { 160,-44315 }, { 161,-44315 }, { 162,-44315 }, { 163,-44315 }, + { 164,-44315 }, { 165,-44315 }, { 166,-44315 }, { 167,-44315 }, { 168,-44315 }, + + { 169,-44315 }, { 170,-44315 }, { 171,-44315 }, { 172,-44315 }, { 173,-44315 }, + { 174,-44315 }, { 175,-44315 }, { 176,-44315 }, { 177,-44315 }, { 178,-44315 }, + { 179,-44315 }, { 180,-44315 }, { 181,-44315 }, { 182,-44315 }, { 183,-44315 }, + { 184,-44315 }, { 185,-44315 }, { 186,-44315 }, { 187,-44315 }, { 188,-44315 }, + { 189,-44315 }, { 190,-44315 }, { 191,-44315 }, { 192,-44315 }, { 193,-44315 }, + { 194,-44315 }, { 195,-44315 }, { 196,-44315 }, { 197,-44315 }, { 198,-44315 }, + { 199,-44315 }, { 200,-44315 }, { 201,-44315 }, { 202,-44315 }, { 203,-44315 }, + { 204,-44315 }, { 205,-44315 }, { 206,-44315 }, { 207,-44315 }, { 208,-44315 }, + { 209,-44315 }, { 210,-44315 }, { 211,-44315 }, { 212,-44315 }, { 213,-44315 }, + { 214,-44315 }, { 215,-44315 }, { 216,-44315 }, { 217,-44315 }, { 218,-44315 }, + + { 219,-44315 }, { 220,-44315 }, { 221,-44315 }, { 222,-44315 }, { 223,-44315 }, + { 224,-44315 }, { 225,-44315 }, { 226,-44315 }, { 227,-44315 }, { 228,-44315 }, + { 229,-44315 }, { 230,-44315 }, { 231,-44315 }, { 232,-44315 }, { 233,-44315 }, + { 234,-44315 }, { 235,-44315 }, { 236,-44315 }, { 237,-44315 }, { 238,-44315 }, + { 239,-44315 }, { 240,-44315 }, { 241,-44315 }, { 242,-44315 }, { 243,-44315 }, + { 244,-44315 }, { 245,-44315 }, { 246,-44315 }, { 247,-44315 }, { 248,-44315 }, + { 249,-44315 }, { 250,-44315 }, { 251,-44315 }, { 252,-44315 }, { 253,-44315 }, + { 254,-44315 }, { 255,-44315 }, { 0, 0 }, { 0,47551 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 131 }, { 0,47546 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9,-39424 }, { 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, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 32,-39424 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41,-39422 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-44577 }, { 49,-44577 }, { 50,-44577 }, { 51,-44577 }, + { 52,-44577 }, { 53,-44577 }, { 54,-44577 }, { 55,-44577 }, { 56,-44577 }, + + { 57,-44577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 69,-39404 }, { 65,13364 }, { 66,-44577 }, + { 67,-44577 }, { 68,-44577 }, { 69,-44577 }, { 70,-44577 }, { 71,-44577 }, + { 72,-44577 }, { 73,-44577 }, { 74,-44577 }, { 75,-44577 }, { 76,-44577 }, + { 77,-44577 }, { 78,-44577 }, { 79,-44577 }, { 80,-44577 }, { 81,-44577 }, + { 82,-44577 }, { 83,-44577 }, { 84,-44577 }, { 85,-44577 }, { 86,-44577 }, + { 87,-44577 }, { 88,-44577 }, { 89,-44577 }, { 90,-44577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-44577 }, { 101,-39404 }, + { 97,13364 }, { 98,-44577 }, { 99,-44577 }, { 100,-44577 }, { 101,-44577 }, + { 102,-44577 }, { 103,-44577 }, { 104,-44577 }, { 105,-44577 }, { 106,-44577 }, + + { 107,-44577 }, { 108,-44577 }, { 109,-44577 }, { 110,-44577 }, { 111,-44577 }, + { 112,-44577 }, { 113,-44577 }, { 114,-44577 }, { 115,-44577 }, { 116,-44577 }, + { 117,-44577 }, { 118,-44577 }, { 119,-44577 }, { 120,-44577 }, { 121,-44577 }, + { 122,-44577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-44577 }, { 128,-44577 }, { 129,-44577 }, { 130,-44577 }, { 131,-44577 }, + { 132,-44577 }, { 133,-44577 }, { 134,-44577 }, { 135,-44577 }, { 136,-44577 }, + { 137,-44577 }, { 138,-44577 }, { 139,-44577 }, { 140,-44577 }, { 141,-44577 }, + { 142,-44577 }, { 143,-44577 }, { 144,-44577 }, { 145,-44577 }, { 146,-44577 }, + { 147,-44577 }, { 148,-44577 }, { 149,-44577 }, { 150,-44577 }, { 151,-44577 }, + { 152,-44577 }, { 153,-44577 }, { 154,-44577 }, { 155,-44577 }, { 156,-44577 }, + + { 157,-44577 }, { 158,-44577 }, { 159,-44577 }, { 160,-44577 }, { 161,-44577 }, + { 162,-44577 }, { 163,-44577 }, { 164,-44577 }, { 165,-44577 }, { 166,-44577 }, + { 167,-44577 }, { 168,-44577 }, { 169,-44577 }, { 170,-44577 }, { 171,-44577 }, + { 172,-44577 }, { 173,-44577 }, { 174,-44577 }, { 175,-44577 }, { 176,-44577 }, + { 177,-44577 }, { 178,-44577 }, { 179,-44577 }, { 180,-44577 }, { 181,-44577 }, + { 182,-44577 }, { 183,-44577 }, { 184,-44577 }, { 185,-44577 }, { 186,-44577 }, + { 187,-44577 }, { 188,-44577 }, { 189,-44577 }, { 190,-44577 }, { 191,-44577 }, + { 192,-44577 }, { 193,-44577 }, { 194,-44577 }, { 195,-44577 }, { 196,-44577 }, + { 197,-44577 }, { 198,-44577 }, { 199,-44577 }, { 200,-44577 }, { 201,-44577 }, + { 202,-44577 }, { 203,-44577 }, { 204,-44577 }, { 205,-44577 }, { 206,-44577 }, + + { 207,-44577 }, { 208,-44577 }, { 209,-44577 }, { 210,-44577 }, { 211,-44577 }, + { 212,-44577 }, { 213,-44577 }, { 214,-44577 }, { 215,-44577 }, { 216,-44577 }, + { 217,-44577 }, { 218,-44577 }, { 219,-44577 }, { 220,-44577 }, { 221,-44577 }, + { 222,-44577 }, { 223,-44577 }, { 224,-44577 }, { 225,-44577 }, { 226,-44577 }, + { 227,-44577 }, { 228,-44577 }, { 229,-44577 }, { 230,-44577 }, { 231,-44577 }, + { 232,-44577 }, { 233,-44577 }, { 234,-44577 }, { 235,-44577 }, { 236,-44577 }, + { 237,-44577 }, { 238,-44577 }, { 239,-44577 }, { 240,-44577 }, { 241,-44577 }, + { 242,-44577 }, { 243,-44577 }, { 244,-44577 }, { 245,-44577 }, { 246,-44577 }, + { 247,-44577 }, { 248,-44577 }, { 249,-44577 }, { 250,-44577 }, { 251,-44577 }, + { 252,-44577 }, { 253,-44577 }, { 254,-44577 }, { 255,-44577 }, { 0, 77 }, + + { 0,47289 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-44834 }, { 49,-44834 }, + + { 50,-44834 }, { 51,-44834 }, { 52,-44834 }, { 53,-44834 }, { 54,-44834 }, + { 55,-44834 }, { 56,-44834 }, { 57,-44834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-44834 }, { 66,-44834 }, { 67,-44834 }, { 68,-44834 }, { 69,-44834 }, + { 70,-44834 }, { 71,-44834 }, { 72,-44834 }, { 73,-44834 }, { 74,-44834 }, + { 75,-44834 }, { 76,-44834 }, { 77,-44834 }, { 78,-44834 }, { 79,-44834 }, + { 80,-44834 }, { 81,-44834 }, { 82,-44834 }, { 83,-44834 }, { 84,-44834 }, + { 85,-44834 }, { 86,-44834 }, { 87,-44834 }, { 88,-44834 }, { 89,-44834 }, + { 90,-44834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-44834 }, { 0, 0 }, { 97,-44834 }, { 98,-44834 }, { 99,-44834 }, + + { 100,-44834 }, { 101,-44834 }, { 102,-44834 }, { 103,-44834 }, { 104,-44834 }, + { 105,-44834 }, { 106,-44834 }, { 107,-44834 }, { 108,-44834 }, { 109,-44834 }, + { 110,-44834 }, { 111,-44834 }, { 112,-44834 }, { 113,-44834 }, { 114,-44834 }, + { 115,-44834 }, { 116,-44834 }, { 117,-44834 }, { 118,-44834 }, { 119,-44834 }, + { 120,-44834 }, { 121,-44834 }, { 122,-44834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-44834 }, { 128,-44834 }, { 129,-44834 }, + { 130,-44834 }, { 131,-44834 }, { 132,-44834 }, { 133,-44834 }, { 134,-44834 }, + { 135,-44834 }, { 136,-44834 }, { 137,-44834 }, { 138,-44834 }, { 139,-44834 }, + { 140,-44834 }, { 141,-44834 }, { 142,-44834 }, { 143,-44834 }, { 144,-44834 }, + { 145,-44834 }, { 146,-44834 }, { 147,-44834 }, { 148,-44834 }, { 149,-44834 }, + + { 150,-44834 }, { 151,-44834 }, { 152,-44834 }, { 153,-44834 }, { 154,-44834 }, + { 155,-44834 }, { 156,-44834 }, { 157,-44834 }, { 158,-44834 }, { 159,-44834 }, + { 160,-44834 }, { 161,-44834 }, { 162,-44834 }, { 163,-44834 }, { 164,-44834 }, + { 165,-44834 }, { 166,-44834 }, { 167,-44834 }, { 168,-44834 }, { 169,-44834 }, + { 170,-44834 }, { 171,-44834 }, { 172,-44834 }, { 173,-44834 }, { 174,-44834 }, + { 175,-44834 }, { 176,-44834 }, { 177,-44834 }, { 178,-44834 }, { 179,-44834 }, + { 180,-44834 }, { 181,-44834 }, { 182,-44834 }, { 183,-44834 }, { 184,-44834 }, + { 185,-44834 }, { 186,-44834 }, { 187,-44834 }, { 188,-44834 }, { 189,-44834 }, + { 190,-44834 }, { 191,-44834 }, { 192,-44834 }, { 193,-44834 }, { 194,-44834 }, + { 195,-44834 }, { 196,-44834 }, { 197,-44834 }, { 198,-44834 }, { 199,-44834 }, + + { 200,-44834 }, { 201,-44834 }, { 202,-44834 }, { 203,-44834 }, { 204,-44834 }, + { 205,-44834 }, { 206,-44834 }, { 207,-44834 }, { 208,-44834 }, { 209,-44834 }, + { 210,-44834 }, { 211,-44834 }, { 212,-44834 }, { 213,-44834 }, { 214,-44834 }, + { 215,-44834 }, { 216,-44834 }, { 217,-44834 }, { 218,-44834 }, { 219,-44834 }, + { 220,-44834 }, { 221,-44834 }, { 222,-44834 }, { 223,-44834 }, { 224,-44834 }, + { 225,-44834 }, { 226,-44834 }, { 227,-44834 }, { 228,-44834 }, { 229,-44834 }, + { 230,-44834 }, { 231,-44834 }, { 232,-44834 }, { 233,-44834 }, { 234,-44834 }, + { 235,-44834 }, { 236,-44834 }, { 237,-44834 }, { 238,-44834 }, { 239,-44834 }, + { 240,-44834 }, { 241,-44834 }, { 242,-44834 }, { 243,-44834 }, { 244,-44834 }, + { 245,-44834 }, { 246,-44834 }, { 247,-44834 }, { 248,-44834 }, { 249,-44834 }, + + { 250,-44834 }, { 251,-44834 }, { 252,-44834 }, { 253,-44834 }, { 254,-44834 }, + { 255,-44834 }, { 0, 50 }, { 0,47032 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-45091 }, { 49,-45091 }, { 50,-45091 }, { 51,-45091 }, { 52,-45091 }, + { 53,-45091 }, { 54,-45091 }, { 55,-45091 }, { 56,-45091 }, { 57,-45091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-45091 }, { 66,-45091 }, { 67,-45091 }, + { 68,-45091 }, { 69,-45091 }, { 70,-45091 }, { 71,-45091 }, { 72,-45091 }, + { 73,-45091 }, { 74,-45091 }, { 75,-45091 }, { 76,-45091 }, { 77,-45091 }, + { 78,-45091 }, { 79,-45091 }, { 80,-45091 }, { 81,-45091 }, { 82,-45091 }, + { 83,-45091 }, { 84,-45091 }, { 85,-45091 }, { 86,-45091 }, { 87,-45091 }, + { 88,-45091 }, { 89,-45091 }, { 90,-45091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-45091 }, { 0, 0 }, { 97,-45091 }, + { 98,-45091 }, { 99,-45091 }, { 100,-45091 }, { 101,-45091 }, { 102,-45091 }, + { 103,-45091 }, { 104,-45091 }, { 105,-45091 }, { 106,-45091 }, { 107,-45091 }, + { 108,-45091 }, { 109,-45091 }, { 110,-45091 }, { 111,-45091 }, { 112,-45091 }, + { 113,-45091 }, { 114,-45091 }, { 115,-45091 }, { 116,-45091 }, { 117,-45091 }, + { 118,-45091 }, { 119,-45091 }, { 120,-45091 }, { 121,-45091 }, { 122,-45091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-45091 }, + { 128,-45091 }, { 129,-45091 }, { 130,-45091 }, { 131,-45091 }, { 132,-45091 }, + { 133,-45091 }, { 134,-45091 }, { 135,-45091 }, { 136,-45091 }, { 137,-45091 }, + { 138,-45091 }, { 139,-45091 }, { 140,-45091 }, { 141,-45091 }, { 142,-45091 }, + + { 143,-45091 }, { 144,-45091 }, { 145,-45091 }, { 146,-45091 }, { 147,-45091 }, + { 148,-45091 }, { 149,-45091 }, { 150,-45091 }, { 151,-45091 }, { 152,-45091 }, + { 153,-45091 }, { 154,-45091 }, { 155,-45091 }, { 156,-45091 }, { 157,-45091 }, + { 158,-45091 }, { 159,-45091 }, { 160,-45091 }, { 161,-45091 }, { 162,-45091 }, + { 163,-45091 }, { 164,-45091 }, { 165,-45091 }, { 166,-45091 }, { 167,-45091 }, + { 168,-45091 }, { 169,-45091 }, { 170,-45091 }, { 171,-45091 }, { 172,-45091 }, + { 173,-45091 }, { 174,-45091 }, { 175,-45091 }, { 176,-45091 }, { 177,-45091 }, + { 178,-45091 }, { 179,-45091 }, { 180,-45091 }, { 181,-45091 }, { 182,-45091 }, + { 183,-45091 }, { 184,-45091 }, { 185,-45091 }, { 186,-45091 }, { 187,-45091 }, + { 188,-45091 }, { 189,-45091 }, { 190,-45091 }, { 191,-45091 }, { 192,-45091 }, + + { 193,-45091 }, { 194,-45091 }, { 195,-45091 }, { 196,-45091 }, { 197,-45091 }, + { 198,-45091 }, { 199,-45091 }, { 200,-45091 }, { 201,-45091 }, { 202,-45091 }, + { 203,-45091 }, { 204,-45091 }, { 205,-45091 }, { 206,-45091 }, { 207,-45091 }, + { 208,-45091 }, { 209,-45091 }, { 210,-45091 }, { 211,-45091 }, { 212,-45091 }, + { 213,-45091 }, { 214,-45091 }, { 215,-45091 }, { 216,-45091 }, { 217,-45091 }, + { 218,-45091 }, { 219,-45091 }, { 220,-45091 }, { 221,-45091 }, { 222,-45091 }, + { 223,-45091 }, { 224,-45091 }, { 225,-45091 }, { 226,-45091 }, { 227,-45091 }, + { 228,-45091 }, { 229,-45091 }, { 230,-45091 }, { 231,-45091 }, { 232,-45091 }, + { 233,-45091 }, { 234,-45091 }, { 235,-45091 }, { 236,-45091 }, { 237,-45091 }, + { 238,-45091 }, { 239,-45091 }, { 240,-45091 }, { 241,-45091 }, { 242,-45091 }, + + { 243,-45091 }, { 244,-45091 }, { 245,-45091 }, { 246,-45091 }, { 247,-45091 }, + { 248,-45091 }, { 249,-45091 }, { 250,-45091 }, { 251,-45091 }, { 252,-45091 }, + { 253,-45091 }, { 254,-45091 }, { 255,-45091 }, { 0, 131 }, { 0,46775 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-45348 }, { 49,-45348 }, { 50,-45348 }, + { 51,-45348 }, { 52,-45348 }, { 53,-45348 }, { 54,-45348 }, { 55,-45348 }, + { 56,-45348 }, { 57,-45348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-45348 }, + { 66,12850 }, { 67,-45348 }, { 68,-45348 }, { 69,-45348 }, { 70,-45348 }, + { 71,-45348 }, { 72,-45348 }, { 73,-45348 }, { 74,-45348 }, { 75,-45348 }, + { 76,-45348 }, { 77,-45348 }, { 78,-45348 }, { 79,-45348 }, { 80,-45348 }, + { 81,-45348 }, { 82,-45348 }, { 83,-45348 }, { 84,-45348 }, { 85,-45348 }, + + { 86,-45348 }, { 87,-45348 }, { 88,-45348 }, { 89,-45348 }, { 90,-45348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-45348 }, + { 0, 0 }, { 97,-45348 }, { 98,12850 }, { 99,-45348 }, { 100,-45348 }, + { 101,-45348 }, { 102,-45348 }, { 103,-45348 }, { 104,-45348 }, { 105,-45348 }, + { 106,-45348 }, { 107,-45348 }, { 108,-45348 }, { 109,-45348 }, { 110,-45348 }, + { 111,-45348 }, { 112,-45348 }, { 113,-45348 }, { 114,-45348 }, { 115,-45348 }, + { 116,-45348 }, { 117,-45348 }, { 118,-45348 }, { 119,-45348 }, { 120,-45348 }, + { 121,-45348 }, { 122,-45348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-45348 }, { 128,-45348 }, { 129,-45348 }, { 130,-45348 }, + { 131,-45348 }, { 132,-45348 }, { 133,-45348 }, { 134,-45348 }, { 135,-45348 }, + + { 136,-45348 }, { 137,-45348 }, { 138,-45348 }, { 139,-45348 }, { 140,-45348 }, + { 141,-45348 }, { 142,-45348 }, { 143,-45348 }, { 144,-45348 }, { 145,-45348 }, + { 146,-45348 }, { 147,-45348 }, { 148,-45348 }, { 149,-45348 }, { 150,-45348 }, + { 151,-45348 }, { 152,-45348 }, { 153,-45348 }, { 154,-45348 }, { 155,-45348 }, + { 156,-45348 }, { 157,-45348 }, { 158,-45348 }, { 159,-45348 }, { 160,-45348 }, + { 161,-45348 }, { 162,-45348 }, { 163,-45348 }, { 164,-45348 }, { 165,-45348 }, + { 166,-45348 }, { 167,-45348 }, { 168,-45348 }, { 169,-45348 }, { 170,-45348 }, + { 171,-45348 }, { 172,-45348 }, { 173,-45348 }, { 174,-45348 }, { 175,-45348 }, + { 176,-45348 }, { 177,-45348 }, { 178,-45348 }, { 179,-45348 }, { 180,-45348 }, + { 181,-45348 }, { 182,-45348 }, { 183,-45348 }, { 184,-45348 }, { 185,-45348 }, + + { 186,-45348 }, { 187,-45348 }, { 188,-45348 }, { 189,-45348 }, { 190,-45348 }, + { 191,-45348 }, { 192,-45348 }, { 193,-45348 }, { 194,-45348 }, { 195,-45348 }, + { 196,-45348 }, { 197,-45348 }, { 198,-45348 }, { 199,-45348 }, { 200,-45348 }, + { 201,-45348 }, { 202,-45348 }, { 203,-45348 }, { 204,-45348 }, { 205,-45348 }, + { 206,-45348 }, { 207,-45348 }, { 208,-45348 }, { 209,-45348 }, { 210,-45348 }, + { 211,-45348 }, { 212,-45348 }, { 213,-45348 }, { 214,-45348 }, { 215,-45348 }, + { 216,-45348 }, { 217,-45348 }, { 218,-45348 }, { 219,-45348 }, { 220,-45348 }, + { 221,-45348 }, { 222,-45348 }, { 223,-45348 }, { 224,-45348 }, { 225,-45348 }, + { 226,-45348 }, { 227,-45348 }, { 228,-45348 }, { 229,-45348 }, { 230,-45348 }, + { 231,-45348 }, { 232,-45348 }, { 233,-45348 }, { 234,-45348 }, { 235,-45348 }, + + { 236,-45348 }, { 237,-45348 }, { 238,-45348 }, { 239,-45348 }, { 240,-45348 }, + { 241,-45348 }, { 242,-45348 }, { 243,-45348 }, { 244,-45348 }, { 245,-45348 }, + { 246,-45348 }, { 247,-45348 }, { 248,-45348 }, { 249,-45348 }, { 250,-45348 }, + { 251,-45348 }, { 252,-45348 }, { 253,-45348 }, { 254,-45348 }, { 255,-45348 }, + { 0, 57 }, { 0,46518 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-45605 }, + { 49,-45605 }, { 50,-45605 }, { 51,-45605 }, { 52,-45605 }, { 53,-45605 }, + { 54,-45605 }, { 55,-45605 }, { 56,-45605 }, { 57,-45605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-45605 }, { 66,-45605 }, { 67,-45605 }, { 68,-45605 }, + { 69,-45605 }, { 70,-45605 }, { 71,-45605 }, { 72,-45605 }, { 73,-45605 }, + { 74,-45605 }, { 75,-45605 }, { 76,-45605 }, { 77,-45605 }, { 78,-45605 }, + + { 79,-45605 }, { 80,-45605 }, { 81,-45605 }, { 82,-45605 }, { 83,-45605 }, + { 84,-45605 }, { 85,-45605 }, { 86,-45605 }, { 87,-45605 }, { 88,-45605 }, + { 89,-45605 }, { 90,-45605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-45605 }, { 0, 0 }, { 97,-45605 }, { 98,-45605 }, + { 99,-45605 }, { 100,-45605 }, { 101,-45605 }, { 102,-45605 }, { 103,-45605 }, + { 104,-45605 }, { 105,-45605 }, { 106,-45605 }, { 107,-45605 }, { 108,-45605 }, + { 109,-45605 }, { 110,-45605 }, { 111,-45605 }, { 112,-45605 }, { 113,-45605 }, + { 114,-45605 }, { 115,-45605 }, { 116,-45605 }, { 117,-45605 }, { 118,-45605 }, + { 119,-45605 }, { 120,-45605 }, { 121,-45605 }, { 122,-45605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-45605 }, { 128,-45605 }, + + { 129,-45605 }, { 130,-45605 }, { 131,-45605 }, { 132,-45605 }, { 133,-45605 }, + { 134,-45605 }, { 135,-45605 }, { 136,-45605 }, { 137,-45605 }, { 138,-45605 }, + { 139,-45605 }, { 140,-45605 }, { 141,-45605 }, { 142,-45605 }, { 143,-45605 }, + { 144,-45605 }, { 145,-45605 }, { 146,-45605 }, { 147,-45605 }, { 148,-45605 }, + { 149,-45605 }, { 150,-45605 }, { 151,-45605 }, { 152,-45605 }, { 153,-45605 }, + { 154,-45605 }, { 155,-45605 }, { 156,-45605 }, { 157,-45605 }, { 158,-45605 }, + { 159,-45605 }, { 160,-45605 }, { 161,-45605 }, { 162,-45605 }, { 163,-45605 }, + { 164,-45605 }, { 165,-45605 }, { 166,-45605 }, { 167,-45605 }, { 168,-45605 }, + { 169,-45605 }, { 170,-45605 }, { 171,-45605 }, { 172,-45605 }, { 173,-45605 }, + { 174,-45605 }, { 175,-45605 }, { 176,-45605 }, { 177,-45605 }, { 178,-45605 }, + + { 179,-45605 }, { 180,-45605 }, { 181,-45605 }, { 182,-45605 }, { 183,-45605 }, + { 184,-45605 }, { 185,-45605 }, { 186,-45605 }, { 187,-45605 }, { 188,-45605 }, + { 189,-45605 }, { 190,-45605 }, { 191,-45605 }, { 192,-45605 }, { 193,-45605 }, + { 194,-45605 }, { 195,-45605 }, { 196,-45605 }, { 197,-45605 }, { 198,-45605 }, + { 199,-45605 }, { 200,-45605 }, { 201,-45605 }, { 202,-45605 }, { 203,-45605 }, + { 204,-45605 }, { 205,-45605 }, { 206,-45605 }, { 207,-45605 }, { 208,-45605 }, + { 209,-45605 }, { 210,-45605 }, { 211,-45605 }, { 212,-45605 }, { 213,-45605 }, + { 214,-45605 }, { 215,-45605 }, { 216,-45605 }, { 217,-45605 }, { 218,-45605 }, + { 219,-45605 }, { 220,-45605 }, { 221,-45605 }, { 222,-45605 }, { 223,-45605 }, + { 224,-45605 }, { 225,-45605 }, { 226,-45605 }, { 227,-45605 }, { 228,-45605 }, + + { 229,-45605 }, { 230,-45605 }, { 231,-45605 }, { 232,-45605 }, { 233,-45605 }, + { 234,-45605 }, { 235,-45605 }, { 236,-45605 }, { 237,-45605 }, { 238,-45605 }, + { 239,-45605 }, { 240,-45605 }, { 241,-45605 }, { 242,-45605 }, { 243,-45605 }, + { 244,-45605 }, { 245,-45605 }, { 246,-45605 }, { 247,-45605 }, { 248,-45605 }, + { 249,-45605 }, { 250,-45605 }, { 251,-45605 }, { 252,-45605 }, { 253,-45605 }, + { 254,-45605 }, { 255,-45605 }, { 0, 72 }, { 0,46261 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-45862 }, { 49,-45862 }, { 50,-45862 }, { 51,-45862 }, + { 52,-45862 }, { 53,-45862 }, { 54,-45862 }, { 55,-45862 }, { 56,-45862 }, + { 57,-45862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-45862 }, { 66,-45862 }, + { 67,-45862 }, { 68,-45862 }, { 69,-45862 }, { 70,-45862 }, { 71,-45862 }, + + { 72,-45862 }, { 73,-45862 }, { 74,-45862 }, { 75,-45862 }, { 76,-45862 }, + { 77,-45862 }, { 78,-45862 }, { 79,-45862 }, { 80,-45862 }, { 81,-45862 }, + { 82,-45862 }, { 83,-45862 }, { 84,-45862 }, { 85,-45862 }, { 86,-45862 }, + { 87,-45862 }, { 88,-45862 }, { 89,-45862 }, { 90,-45862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-45862 }, { 0, 0 }, + { 97,-45862 }, { 98,-45862 }, { 99,-45862 }, { 100,-45862 }, { 101,-45862 }, + { 102,-45862 }, { 103,-45862 }, { 104,-45862 }, { 105,-45862 }, { 106,-45862 }, + { 107,-45862 }, { 108,-45862 }, { 109,-45862 }, { 110,-45862 }, { 111,-45862 }, + { 112,-45862 }, { 113,-45862 }, { 114,-45862 }, { 115,-45862 }, { 116,-45862 }, + { 117,-45862 }, { 118,-45862 }, { 119,-45862 }, { 120,-45862 }, { 121,-45862 }, + + { 122,-45862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-45862 }, { 128,-45862 }, { 129,-45862 }, { 130,-45862 }, { 131,-45862 }, + { 132,-45862 }, { 133,-45862 }, { 134,-45862 }, { 135,-45862 }, { 136,-45862 }, + { 137,-45862 }, { 138,-45862 }, { 139,-45862 }, { 140,-45862 }, { 141,-45862 }, + { 142,-45862 }, { 143,-45862 }, { 144,-45862 }, { 145,-45862 }, { 146,-45862 }, + { 147,-45862 }, { 148,-45862 }, { 149,-45862 }, { 150,-45862 }, { 151,-45862 }, + { 152,-45862 }, { 153,-45862 }, { 154,-45862 }, { 155,-45862 }, { 156,-45862 }, + { 157,-45862 }, { 158,-45862 }, { 159,-45862 }, { 160,-45862 }, { 161,-45862 }, + { 162,-45862 }, { 163,-45862 }, { 164,-45862 }, { 165,-45862 }, { 166,-45862 }, + { 167,-45862 }, { 168,-45862 }, { 169,-45862 }, { 170,-45862 }, { 171,-45862 }, + + { 172,-45862 }, { 173,-45862 }, { 174,-45862 }, { 175,-45862 }, { 176,-45862 }, + { 177,-45862 }, { 178,-45862 }, { 179,-45862 }, { 180,-45862 }, { 181,-45862 }, + { 182,-45862 }, { 183,-45862 }, { 184,-45862 }, { 185,-45862 }, { 186,-45862 }, + { 187,-45862 }, { 188,-45862 }, { 189,-45862 }, { 190,-45862 }, { 191,-45862 }, + { 192,-45862 }, { 193,-45862 }, { 194,-45862 }, { 195,-45862 }, { 196,-45862 }, + { 197,-45862 }, { 198,-45862 }, { 199,-45862 }, { 200,-45862 }, { 201,-45862 }, + { 202,-45862 }, { 203,-45862 }, { 204,-45862 }, { 205,-45862 }, { 206,-45862 }, + { 207,-45862 }, { 208,-45862 }, { 209,-45862 }, { 210,-45862 }, { 211,-45862 }, + { 212,-45862 }, { 213,-45862 }, { 214,-45862 }, { 215,-45862 }, { 216,-45862 }, + { 217,-45862 }, { 218,-45862 }, { 219,-45862 }, { 220,-45862 }, { 221,-45862 }, + + { 222,-45862 }, { 223,-45862 }, { 224,-45862 }, { 225,-45862 }, { 226,-45862 }, + { 227,-45862 }, { 228,-45862 }, { 229,-45862 }, { 230,-45862 }, { 231,-45862 }, + { 232,-45862 }, { 233,-45862 }, { 234,-45862 }, { 235,-45862 }, { 236,-45862 }, + { 237,-45862 }, { 238,-45862 }, { 239,-45862 }, { 240,-45862 }, { 241,-45862 }, + { 242,-45862 }, { 243,-45862 }, { 244,-45862 }, { 245,-45862 }, { 246,-45862 }, + { 247,-45862 }, { 248,-45862 }, { 249,-45862 }, { 250,-45862 }, { 251,-45862 }, + { 252,-45862 }, { 253,-45862 }, { 254,-45862 }, { 255,-45862 }, { 0, 29 }, + { 0,46004 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-46119 }, { 49,-46119 }, + { 50,-46119 }, { 51,-46119 }, { 52,-46119 }, { 53,-46119 }, { 54,-46119 }, + { 55,-46119 }, { 56,-46119 }, { 57,-46119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-46119 }, { 66,-46119 }, { 67,-46119 }, { 68,-46119 }, { 69,-46119 }, + { 70,-46119 }, { 71,-46119 }, { 72,-46119 }, { 73,-46119 }, { 74,-46119 }, + { 75,-46119 }, { 76,-46119 }, { 77,-46119 }, { 78,-46119 }, { 79,-46119 }, + { 80,-46119 }, { 81,-46119 }, { 82,-46119 }, { 83,-46119 }, { 84,-46119 }, + { 85,-46119 }, { 86,-46119 }, { 87,-46119 }, { 88,-46119 }, { 89,-46119 }, + { 90,-46119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-46119 }, { 0, 0 }, { 97,-46119 }, { 98,-46119 }, { 99,-46119 }, + { 100,-46119 }, { 101,-46119 }, { 102,-46119 }, { 103,-46119 }, { 104,-46119 }, + { 105,-46119 }, { 106,-46119 }, { 107,-46119 }, { 108,-46119 }, { 109,-46119 }, + { 110,-46119 }, { 111,-46119 }, { 112,-46119 }, { 113,-46119 }, { 114,-46119 }, + + { 115,-46119 }, { 116,-46119 }, { 117,-46119 }, { 118,-46119 }, { 119,-46119 }, + { 120,-46119 }, { 121,-46119 }, { 122,-46119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-46119 }, { 128,-46119 }, { 129,-46119 }, + { 130,-46119 }, { 131,-46119 }, { 132,-46119 }, { 133,-46119 }, { 134,-46119 }, + { 135,-46119 }, { 136,-46119 }, { 137,-46119 }, { 138,-46119 }, { 139,-46119 }, + { 140,-46119 }, { 141,-46119 }, { 142,-46119 }, { 143,-46119 }, { 144,-46119 }, + { 145,-46119 }, { 146,-46119 }, { 147,-46119 }, { 148,-46119 }, { 149,-46119 }, + { 150,-46119 }, { 151,-46119 }, { 152,-46119 }, { 153,-46119 }, { 154,-46119 }, + { 155,-46119 }, { 156,-46119 }, { 157,-46119 }, { 158,-46119 }, { 159,-46119 }, + { 160,-46119 }, { 161,-46119 }, { 162,-46119 }, { 163,-46119 }, { 164,-46119 }, + + { 165,-46119 }, { 166,-46119 }, { 167,-46119 }, { 168,-46119 }, { 169,-46119 }, + { 170,-46119 }, { 171,-46119 }, { 172,-46119 }, { 173,-46119 }, { 174,-46119 }, + { 175,-46119 }, { 176,-46119 }, { 177,-46119 }, { 178,-46119 }, { 179,-46119 }, + { 180,-46119 }, { 181,-46119 }, { 182,-46119 }, { 183,-46119 }, { 184,-46119 }, + { 185,-46119 }, { 186,-46119 }, { 187,-46119 }, { 188,-46119 }, { 189,-46119 }, + { 190,-46119 }, { 191,-46119 }, { 192,-46119 }, { 193,-46119 }, { 194,-46119 }, + { 195,-46119 }, { 196,-46119 }, { 197,-46119 }, { 198,-46119 }, { 199,-46119 }, + { 200,-46119 }, { 201,-46119 }, { 202,-46119 }, { 203,-46119 }, { 204,-46119 }, + { 205,-46119 }, { 206,-46119 }, { 207,-46119 }, { 208,-46119 }, { 209,-46119 }, + { 210,-46119 }, { 211,-46119 }, { 212,-46119 }, { 213,-46119 }, { 214,-46119 }, + + { 215,-46119 }, { 216,-46119 }, { 217,-46119 }, { 218,-46119 }, { 219,-46119 }, + { 220,-46119 }, { 221,-46119 }, { 222,-46119 }, { 223,-46119 }, { 224,-46119 }, + { 225,-46119 }, { 226,-46119 }, { 227,-46119 }, { 228,-46119 }, { 229,-46119 }, + { 230,-46119 }, { 231,-46119 }, { 232,-46119 }, { 233,-46119 }, { 234,-46119 }, + { 235,-46119 }, { 236,-46119 }, { 237,-46119 }, { 238,-46119 }, { 239,-46119 }, + { 240,-46119 }, { 241,-46119 }, { 242,-46119 }, { 243,-46119 }, { 244,-46119 }, + { 245,-46119 }, { 246,-46119 }, { 247,-46119 }, { 248,-46119 }, { 249,-46119 }, + { 250,-46119 }, { 251,-46119 }, { 252,-46119 }, { 253,-46119 }, { 254,-46119 }, + { 255,-46119 }, { 0, 54 }, { 0,45747 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-46376 }, { 49,-46376 }, { 50,-46376 }, { 51,-46376 }, { 52,-46376 }, + { 53,-46376 }, { 54,-46376 }, { 55,-46376 }, { 56,-46376 }, { 57,-46376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-46376 }, { 66,-46376 }, { 67,-46376 }, + { 68,-46376 }, { 69,-46376 }, { 70,-46376 }, { 71,-46376 }, { 72,-46376 }, + { 73,-46376 }, { 74,-46376 }, { 75,-46376 }, { 76,-46376 }, { 77,-46376 }, + { 78,-46376 }, { 79,-46376 }, { 80,-46376 }, { 81,-46376 }, { 82,-46376 }, + { 83,-46376 }, { 84,-46376 }, { 85,-46376 }, { 86,-46376 }, { 87,-46376 }, + { 88,-46376 }, { 89,-46376 }, { 90,-46376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-46376 }, { 0, 0 }, { 97,-46376 }, + { 98,-46376 }, { 99,-46376 }, { 100,-46376 }, { 101,-46376 }, { 102,-46376 }, + { 103,-46376 }, { 104,-46376 }, { 105,-46376 }, { 106,-46376 }, { 107,-46376 }, + + { 108,-46376 }, { 109,-46376 }, { 110,-46376 }, { 111,-46376 }, { 112,-46376 }, + { 113,-46376 }, { 114,-46376 }, { 115,-46376 }, { 116,-46376 }, { 117,-46376 }, + { 118,-46376 }, { 119,-46376 }, { 120,-46376 }, { 121,-46376 }, { 122,-46376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-46376 }, + { 128,-46376 }, { 129,-46376 }, { 130,-46376 }, { 131,-46376 }, { 132,-46376 }, + { 133,-46376 }, { 134,-46376 }, { 135,-46376 }, { 136,-46376 }, { 137,-46376 }, + { 138,-46376 }, { 139,-46376 }, { 140,-46376 }, { 141,-46376 }, { 142,-46376 }, + { 143,-46376 }, { 144,-46376 }, { 145,-46376 }, { 146,-46376 }, { 147,-46376 }, + { 148,-46376 }, { 149,-46376 }, { 150,-46376 }, { 151,-46376 }, { 152,-46376 }, + { 153,-46376 }, { 154,-46376 }, { 155,-46376 }, { 156,-46376 }, { 157,-46376 }, + + { 158,-46376 }, { 159,-46376 }, { 160,-46376 }, { 161,-46376 }, { 162,-46376 }, + { 163,-46376 }, { 164,-46376 }, { 165,-46376 }, { 166,-46376 }, { 167,-46376 }, + { 168,-46376 }, { 169,-46376 }, { 170,-46376 }, { 171,-46376 }, { 172,-46376 }, + { 173,-46376 }, { 174,-46376 }, { 175,-46376 }, { 176,-46376 }, { 177,-46376 }, + { 178,-46376 }, { 179,-46376 }, { 180,-46376 }, { 181,-46376 }, { 182,-46376 }, + { 183,-46376 }, { 184,-46376 }, { 185,-46376 }, { 186,-46376 }, { 187,-46376 }, + { 188,-46376 }, { 189,-46376 }, { 190,-46376 }, { 191,-46376 }, { 192,-46376 }, + { 193,-46376 }, { 194,-46376 }, { 195,-46376 }, { 196,-46376 }, { 197,-46376 }, + { 198,-46376 }, { 199,-46376 }, { 200,-46376 }, { 201,-46376 }, { 202,-46376 }, + { 203,-46376 }, { 204,-46376 }, { 205,-46376 }, { 206,-46376 }, { 207,-46376 }, + + { 208,-46376 }, { 209,-46376 }, { 210,-46376 }, { 211,-46376 }, { 212,-46376 }, + { 213,-46376 }, { 214,-46376 }, { 215,-46376 }, { 216,-46376 }, { 217,-46376 }, + { 218,-46376 }, { 219,-46376 }, { 220,-46376 }, { 221,-46376 }, { 222,-46376 }, + { 223,-46376 }, { 224,-46376 }, { 225,-46376 }, { 226,-46376 }, { 227,-46376 }, + { 228,-46376 }, { 229,-46376 }, { 230,-46376 }, { 231,-46376 }, { 232,-46376 }, + { 233,-46376 }, { 234,-46376 }, { 235,-46376 }, { 236,-46376 }, { 237,-46376 }, + { 238,-46376 }, { 239,-46376 }, { 240,-46376 }, { 241,-46376 }, { 242,-46376 }, + { 243,-46376 }, { 244,-46376 }, { 245,-46376 }, { 246,-46376 }, { 247,-46376 }, + { 248,-46376 }, { 249,-46376 }, { 250,-46376 }, { 251,-46376 }, { 252,-46376 }, + { 253,-46376 }, { 254,-46376 }, { 255,-46376 }, { 0, 131 }, { 0,45490 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-46633 }, { 49,-46633 }, { 50,-46633 }, + + { 51,-46633 }, { 52,-46633 }, { 53,-46633 }, { 54,-46633 }, { 55,-46633 }, + { 56,-46633 }, { 57,-46633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-46633 }, + { 66,-46633 }, { 67,-46633 }, { 68,-46633 }, { 69,-46633 }, { 70,-46633 }, + { 71,-46633 }, { 72,-46633 }, { 73,-46633 }, { 74,-46633 }, { 75,-46633 }, + { 76,-46633 }, { 77,-46633 }, { 78,11822 }, { 79,-46633 }, { 80,-46633 }, + { 81,-46633 }, { 82,-46633 }, { 83,-46633 }, { 84,-46633 }, { 85,-46633 }, + { 86,-46633 }, { 87,-46633 }, { 88,-46633 }, { 89,-46633 }, { 90,-46633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-46633 }, + { 0, 0 }, { 97,-46633 }, { 98,-46633 }, { 99,-46633 }, { 100,-46633 }, + + { 101,-46633 }, { 102,-46633 }, { 103,-46633 }, { 104,-46633 }, { 105,-46633 }, + { 106,-46633 }, { 107,-46633 }, { 108,-46633 }, { 109,-46633 }, { 110,11822 }, + { 111,-46633 }, { 112,-46633 }, { 113,-46633 }, { 114,-46633 }, { 115,-46633 }, + { 116,-46633 }, { 117,-46633 }, { 118,-46633 }, { 119,-46633 }, { 120,-46633 }, + { 121,-46633 }, { 122,-46633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-46633 }, { 128,-46633 }, { 129,-46633 }, { 130,-46633 }, + { 131,-46633 }, { 132,-46633 }, { 133,-46633 }, { 134,-46633 }, { 135,-46633 }, + { 136,-46633 }, { 137,-46633 }, { 138,-46633 }, { 139,-46633 }, { 140,-46633 }, + { 141,-46633 }, { 142,-46633 }, { 143,-46633 }, { 144,-46633 }, { 145,-46633 }, + { 146,-46633 }, { 147,-46633 }, { 148,-46633 }, { 149,-46633 }, { 150,-46633 }, + + { 151,-46633 }, { 152,-46633 }, { 153,-46633 }, { 154,-46633 }, { 155,-46633 }, + { 156,-46633 }, { 157,-46633 }, { 158,-46633 }, { 159,-46633 }, { 160,-46633 }, + { 161,-46633 }, { 162,-46633 }, { 163,-46633 }, { 164,-46633 }, { 165,-46633 }, + { 166,-46633 }, { 167,-46633 }, { 168,-46633 }, { 169,-46633 }, { 170,-46633 }, + { 171,-46633 }, { 172,-46633 }, { 173,-46633 }, { 174,-46633 }, { 175,-46633 }, + { 176,-46633 }, { 177,-46633 }, { 178,-46633 }, { 179,-46633 }, { 180,-46633 }, + { 181,-46633 }, { 182,-46633 }, { 183,-46633 }, { 184,-46633 }, { 185,-46633 }, + { 186,-46633 }, { 187,-46633 }, { 188,-46633 }, { 189,-46633 }, { 190,-46633 }, + { 191,-46633 }, { 192,-46633 }, { 193,-46633 }, { 194,-46633 }, { 195,-46633 }, + { 196,-46633 }, { 197,-46633 }, { 198,-46633 }, { 199,-46633 }, { 200,-46633 }, + + { 201,-46633 }, { 202,-46633 }, { 203,-46633 }, { 204,-46633 }, { 205,-46633 }, + { 206,-46633 }, { 207,-46633 }, { 208,-46633 }, { 209,-46633 }, { 210,-46633 }, + { 211,-46633 }, { 212,-46633 }, { 213,-46633 }, { 214,-46633 }, { 215,-46633 }, + { 216,-46633 }, { 217,-46633 }, { 218,-46633 }, { 219,-46633 }, { 220,-46633 }, + { 221,-46633 }, { 222,-46633 }, { 223,-46633 }, { 224,-46633 }, { 225,-46633 }, + { 226,-46633 }, { 227,-46633 }, { 228,-46633 }, { 229,-46633 }, { 230,-46633 }, + { 231,-46633 }, { 232,-46633 }, { 233,-46633 }, { 234,-46633 }, { 235,-46633 }, + { 236,-46633 }, { 237,-46633 }, { 238,-46633 }, { 239,-46633 }, { 240,-46633 }, + { 241,-46633 }, { 242,-46633 }, { 243,-46633 }, { 244,-46633 }, { 245,-46633 }, + { 246,-46633 }, { 247,-46633 }, { 248,-46633 }, { 249,-46633 }, { 250,-46633 }, + + { 251,-46633 }, { 252,-46633 }, { 253,-46633 }, { 254,-46633 }, { 255,-46633 }, + { 0, 131 }, { 0,45233 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-46890 }, + { 49,-46890 }, { 50,-46890 }, { 51,-46890 }, { 52,-46890 }, { 53,-46890 }, + { 54,-46890 }, { 55,-46890 }, { 56,-46890 }, { 57,-46890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-46890 }, { 66,-46890 }, { 67,-46890 }, { 68,-46890 }, + { 69,-46890 }, { 70,-46890 }, { 71,-46890 }, { 72,-46890 }, { 73,-46890 }, + { 74,-46890 }, { 75,-46890 }, { 76,-46890 }, { 77,-46890 }, { 78,-46890 }, + { 79,-46890 }, { 80,-46890 }, { 81,-46890 }, { 82,11822 }, { 83,-46890 }, + { 84,-46890 }, { 85,-46890 }, { 86,-46890 }, { 87,-46890 }, { 88,-46890 }, + { 89,-46890 }, { 90,-46890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-46890 }, { 0, 0 }, { 97,-46890 }, { 98,-46890 }, + { 99,-46890 }, { 100,-46890 }, { 101,-46890 }, { 102,-46890 }, { 103,-46890 }, + { 104,-46890 }, { 105,-46890 }, { 106,-46890 }, { 107,-46890 }, { 108,-46890 }, + { 109,-46890 }, { 110,-46890 }, { 111,-46890 }, { 112,-46890 }, { 113,-46890 }, + { 114,11822 }, { 115,-46890 }, { 116,-46890 }, { 117,-46890 }, { 118,-46890 }, + { 119,-46890 }, { 120,-46890 }, { 121,-46890 }, { 122,-46890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-46890 }, { 128,-46890 }, + { 129,-46890 }, { 130,-46890 }, { 131,-46890 }, { 132,-46890 }, { 133,-46890 }, + { 134,-46890 }, { 135,-46890 }, { 136,-46890 }, { 137,-46890 }, { 138,-46890 }, + { 139,-46890 }, { 140,-46890 }, { 141,-46890 }, { 142,-46890 }, { 143,-46890 }, + + { 144,-46890 }, { 145,-46890 }, { 146,-46890 }, { 147,-46890 }, { 148,-46890 }, + { 149,-46890 }, { 150,-46890 }, { 151,-46890 }, { 152,-46890 }, { 153,-46890 }, + { 154,-46890 }, { 155,-46890 }, { 156,-46890 }, { 157,-46890 }, { 158,-46890 }, + { 159,-46890 }, { 160,-46890 }, { 161,-46890 }, { 162,-46890 }, { 163,-46890 }, + { 164,-46890 }, { 165,-46890 }, { 166,-46890 }, { 167,-46890 }, { 168,-46890 }, + { 169,-46890 }, { 170,-46890 }, { 171,-46890 }, { 172,-46890 }, { 173,-46890 }, + { 174,-46890 }, { 175,-46890 }, { 176,-46890 }, { 177,-46890 }, { 178,-46890 }, + { 179,-46890 }, { 180,-46890 }, { 181,-46890 }, { 182,-46890 }, { 183,-46890 }, + { 184,-46890 }, { 185,-46890 }, { 186,-46890 }, { 187,-46890 }, { 188,-46890 }, + { 189,-46890 }, { 190,-46890 }, { 191,-46890 }, { 192,-46890 }, { 193,-46890 }, + + { 194,-46890 }, { 195,-46890 }, { 196,-46890 }, { 197,-46890 }, { 198,-46890 }, + { 199,-46890 }, { 200,-46890 }, { 201,-46890 }, { 202,-46890 }, { 203,-46890 }, + { 204,-46890 }, { 205,-46890 }, { 206,-46890 }, { 207,-46890 }, { 208,-46890 }, + { 209,-46890 }, { 210,-46890 }, { 211,-46890 }, { 212,-46890 }, { 213,-46890 }, + { 214,-46890 }, { 215,-46890 }, { 216,-46890 }, { 217,-46890 }, { 218,-46890 }, + { 219,-46890 }, { 220,-46890 }, { 221,-46890 }, { 222,-46890 }, { 223,-46890 }, + { 224,-46890 }, { 225,-46890 }, { 226,-46890 }, { 227,-46890 }, { 228,-46890 }, + { 229,-46890 }, { 230,-46890 }, { 231,-46890 }, { 232,-46890 }, { 233,-46890 }, + { 234,-46890 }, { 235,-46890 }, { 236,-46890 }, { 237,-46890 }, { 238,-46890 }, + { 239,-46890 }, { 240,-46890 }, { 241,-46890 }, { 242,-46890 }, { 243,-46890 }, + + { 244,-46890 }, { 245,-46890 }, { 246,-46890 }, { 247,-46890 }, { 248,-46890 }, + { 249,-46890 }, { 250,-46890 }, { 251,-46890 }, { 252,-46890 }, { 253,-46890 }, + { 254,-46890 }, { 255,-46890 }, { 0, 131 }, { 0,44976 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-47147 }, { 49,-47147 }, { 50,-47147 }, { 51,-47147 }, + { 52,-47147 }, { 53,-47147 }, { 54,-47147 }, { 55,-47147 }, { 56,-47147 }, + { 57,-47147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-47147 }, { 66,-47147 }, + { 67,-47147 }, { 68,-47147 }, { 69,-47147 }, { 70,-47147 }, { 71,-47147 }, + { 72,-47147 }, { 73,-47147 }, { 74,-47147 }, { 75,-47147 }, { 76,11822 }, + { 77,-47147 }, { 78,-47147 }, { 79,-47147 }, { 80,-47147 }, { 81,-47147 }, + { 82,-47147 }, { 83,-47147 }, { 84,-47147 }, { 85,-47147 }, { 86,-47147 }, + + { 87,-47147 }, { 88,-47147 }, { 89,-47147 }, { 90,-47147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-47147 }, { 0, 0 }, + { 97,-47147 }, { 98,-47147 }, { 99,-47147 }, { 100,-47147 }, { 101,-47147 }, + { 102,-47147 }, { 103,-47147 }, { 104,-47147 }, { 105,-47147 }, { 106,-47147 }, + { 107,-47147 }, { 108,11822 }, { 109,-47147 }, { 110,-47147 }, { 111,-47147 }, + { 112,-47147 }, { 113,-47147 }, { 114,-47147 }, { 115,-47147 }, { 116,-47147 }, + { 117,-47147 }, { 118,-47147 }, { 119,-47147 }, { 120,-47147 }, { 121,-47147 }, + { 122,-47147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-47147 }, { 128,-47147 }, { 129,-47147 }, { 130,-47147 }, { 131,-47147 }, + { 132,-47147 }, { 133,-47147 }, { 134,-47147 }, { 135,-47147 }, { 136,-47147 }, + + { 137,-47147 }, { 138,-47147 }, { 139,-47147 }, { 140,-47147 }, { 141,-47147 }, + { 142,-47147 }, { 143,-47147 }, { 144,-47147 }, { 145,-47147 }, { 146,-47147 }, + { 147,-47147 }, { 148,-47147 }, { 149,-47147 }, { 150,-47147 }, { 151,-47147 }, + { 152,-47147 }, { 153,-47147 }, { 154,-47147 }, { 155,-47147 }, { 156,-47147 }, + { 157,-47147 }, { 158,-47147 }, { 159,-47147 }, { 160,-47147 }, { 161,-47147 }, + { 162,-47147 }, { 163,-47147 }, { 164,-47147 }, { 165,-47147 }, { 166,-47147 }, + { 167,-47147 }, { 168,-47147 }, { 169,-47147 }, { 170,-47147 }, { 171,-47147 }, + { 172,-47147 }, { 173,-47147 }, { 174,-47147 }, { 175,-47147 }, { 176,-47147 }, + { 177,-47147 }, { 178,-47147 }, { 179,-47147 }, { 180,-47147 }, { 181,-47147 }, + { 182,-47147 }, { 183,-47147 }, { 184,-47147 }, { 185,-47147 }, { 186,-47147 }, + + { 187,-47147 }, { 188,-47147 }, { 189,-47147 }, { 190,-47147 }, { 191,-47147 }, + { 192,-47147 }, { 193,-47147 }, { 194,-47147 }, { 195,-47147 }, { 196,-47147 }, + { 197,-47147 }, { 198,-47147 }, { 199,-47147 }, { 200,-47147 }, { 201,-47147 }, + { 202,-47147 }, { 203,-47147 }, { 204,-47147 }, { 205,-47147 }, { 206,-47147 }, + { 207,-47147 }, { 208,-47147 }, { 209,-47147 }, { 210,-47147 }, { 211,-47147 }, + { 212,-47147 }, { 213,-47147 }, { 214,-47147 }, { 215,-47147 }, { 216,-47147 }, + { 217,-47147 }, { 218,-47147 }, { 219,-47147 }, { 220,-47147 }, { 221,-47147 }, + { 222,-47147 }, { 223,-47147 }, { 224,-47147 }, { 225,-47147 }, { 226,-47147 }, + { 227,-47147 }, { 228,-47147 }, { 229,-47147 }, { 230,-47147 }, { 231,-47147 }, + { 232,-47147 }, { 233,-47147 }, { 234,-47147 }, { 235,-47147 }, { 236,-47147 }, + + { 237,-47147 }, { 238,-47147 }, { 239,-47147 }, { 240,-47147 }, { 241,-47147 }, + { 242,-47147 }, { 243,-47147 }, { 244,-47147 }, { 245,-47147 }, { 246,-47147 }, + { 247,-47147 }, { 248,-47147 }, { 249,-47147 }, { 250,-47147 }, { 251,-47147 }, + { 252,-47147 }, { 253,-47147 }, { 254,-47147 }, { 255,-47147 }, { 0, 131 }, + { 0,44719 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-47404 }, { 49,-47404 }, + { 50,-47404 }, { 51,-47404 }, { 52,-47404 }, { 53,-47404 }, { 54,-47404 }, + { 55,-47404 }, { 56,-47404 }, { 57,-47404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-47404 }, { 66,-47404 }, { 67,-47404 }, { 68,-47404 }, { 69,-47404 }, + { 70,11822 }, { 71,-47404 }, { 72,-47404 }, { 73,-47404 }, { 74,-47404 }, + { 75,-47404 }, { 76,-47404 }, { 77,-47404 }, { 78,-47404 }, { 79,-47404 }, + + { 80,-47404 }, { 81,-47404 }, { 82,-47404 }, { 83,-47404 }, { 84,-47404 }, + { 85,-47404 }, { 86,-47404 }, { 87,-47404 }, { 88,-47404 }, { 89,-47404 }, + { 90,-47404 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-47404 }, { 0, 0 }, { 97,-47404 }, { 98,-47404 }, { 99,-47404 }, + { 100,-47404 }, { 101,-47404 }, { 102,11822 }, { 103,-47404 }, { 104,-47404 }, + { 105,-47404 }, { 106,-47404 }, { 107,-47404 }, { 108,-47404 }, { 109,-47404 }, + { 110,-47404 }, { 111,-47404 }, { 112,-47404 }, { 113,-47404 }, { 114,-47404 }, + { 115,-47404 }, { 116,-47404 }, { 117,-47404 }, { 118,-47404 }, { 119,-47404 }, + { 120,-47404 }, { 121,-47404 }, { 122,-47404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-47404 }, { 128,-47404 }, { 129,-47404 }, + + { 130,-47404 }, { 131,-47404 }, { 132,-47404 }, { 133,-47404 }, { 134,-47404 }, + { 135,-47404 }, { 136,-47404 }, { 137,-47404 }, { 138,-47404 }, { 139,-47404 }, + { 140,-47404 }, { 141,-47404 }, { 142,-47404 }, { 143,-47404 }, { 144,-47404 }, + { 145,-47404 }, { 146,-47404 }, { 147,-47404 }, { 148,-47404 }, { 149,-47404 }, + { 150,-47404 }, { 151,-47404 }, { 152,-47404 }, { 153,-47404 }, { 154,-47404 }, + { 155,-47404 }, { 156,-47404 }, { 157,-47404 }, { 158,-47404 }, { 159,-47404 }, + { 160,-47404 }, { 161,-47404 }, { 162,-47404 }, { 163,-47404 }, { 164,-47404 }, + { 165,-47404 }, { 166,-47404 }, { 167,-47404 }, { 168,-47404 }, { 169,-47404 }, + { 170,-47404 }, { 171,-47404 }, { 172,-47404 }, { 173,-47404 }, { 174,-47404 }, + { 175,-47404 }, { 176,-47404 }, { 177,-47404 }, { 178,-47404 }, { 179,-47404 }, + + { 180,-47404 }, { 181,-47404 }, { 182,-47404 }, { 183,-47404 }, { 184,-47404 }, + { 185,-47404 }, { 186,-47404 }, { 187,-47404 }, { 188,-47404 }, { 189,-47404 }, + { 190,-47404 }, { 191,-47404 }, { 192,-47404 }, { 193,-47404 }, { 194,-47404 }, + { 195,-47404 }, { 196,-47404 }, { 197,-47404 }, { 198,-47404 }, { 199,-47404 }, + { 200,-47404 }, { 201,-47404 }, { 202,-47404 }, { 203,-47404 }, { 204,-47404 }, + { 205,-47404 }, { 206,-47404 }, { 207,-47404 }, { 208,-47404 }, { 209,-47404 }, + { 210,-47404 }, { 211,-47404 }, { 212,-47404 }, { 213,-47404 }, { 214,-47404 }, + { 215,-47404 }, { 216,-47404 }, { 217,-47404 }, { 218,-47404 }, { 219,-47404 }, + { 220,-47404 }, { 221,-47404 }, { 222,-47404 }, { 223,-47404 }, { 224,-47404 }, + { 225,-47404 }, { 226,-47404 }, { 227,-47404 }, { 228,-47404 }, { 229,-47404 }, + + { 230,-47404 }, { 231,-47404 }, { 232,-47404 }, { 233,-47404 }, { 234,-47404 }, + { 235,-47404 }, { 236,-47404 }, { 237,-47404 }, { 238,-47404 }, { 239,-47404 }, + { 240,-47404 }, { 241,-47404 }, { 242,-47404 }, { 243,-47404 }, { 244,-47404 }, + { 245,-47404 }, { 246,-47404 }, { 247,-47404 }, { 248,-47404 }, { 249,-47404 }, + { 250,-47404 }, { 251,-47404 }, { 252,-47404 }, { 253,-47404 }, { 254,-47404 }, + { 255,-47404 }, { 0, 70 }, { 0,44462 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-47661 }, { 49,-47661 }, { 50,-47661 }, { 51,-47661 }, { 52,-47661 }, + { 53,-47661 }, { 54,-47661 }, { 55,-47661 }, { 56,-47661 }, { 57,-47661 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-47661 }, { 66,-47661 }, { 67,-47661 }, + { 68,-47661 }, { 69,-47661 }, { 70,-47661 }, { 71,-47661 }, { 72,-47661 }, + + { 73,-47661 }, { 74,-47661 }, { 75,-47661 }, { 76,-47661 }, { 77,-47661 }, + { 78,-47661 }, { 79,-47661 }, { 80,-47661 }, { 81,-47661 }, { 82,-47661 }, + { 83,-47661 }, { 84,-47661 }, { 85,-47661 }, { 86,-47661 }, { 87,-47661 }, + { 88,-47661 }, { 89,-47661 }, { 90,-47661 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-47661 }, { 0, 0 }, { 97,-47661 }, + { 98,-47661 }, { 99,-47661 }, { 100,-47661 }, { 101,-47661 }, { 102,-47661 }, + { 103,-47661 }, { 104,-47661 }, { 105,-47661 }, { 106,-47661 }, { 107,-47661 }, + { 108,-47661 }, { 109,-47661 }, { 110,-47661 }, { 111,-47661 }, { 112,-47661 }, + { 113,-47661 }, { 114,-47661 }, { 115,-47661 }, { 116,-47661 }, { 117,-47661 }, + { 118,-47661 }, { 119,-47661 }, { 120,-47661 }, { 121,-47661 }, { 122,-47661 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-47661 }, + { 128,-47661 }, { 129,-47661 }, { 130,-47661 }, { 131,-47661 }, { 132,-47661 }, + { 133,-47661 }, { 134,-47661 }, { 135,-47661 }, { 136,-47661 }, { 137,-47661 }, + { 138,-47661 }, { 139,-47661 }, { 140,-47661 }, { 141,-47661 }, { 142,-47661 }, + { 143,-47661 }, { 144,-47661 }, { 145,-47661 }, { 146,-47661 }, { 147,-47661 }, + { 148,-47661 }, { 149,-47661 }, { 150,-47661 }, { 151,-47661 }, { 152,-47661 }, + { 153,-47661 }, { 154,-47661 }, { 155,-47661 }, { 156,-47661 }, { 157,-47661 }, + { 158,-47661 }, { 159,-47661 }, { 160,-47661 }, { 161,-47661 }, { 162,-47661 }, + { 163,-47661 }, { 164,-47661 }, { 165,-47661 }, { 166,-47661 }, { 167,-47661 }, + { 168,-47661 }, { 169,-47661 }, { 170,-47661 }, { 171,-47661 }, { 172,-47661 }, + + { 173,-47661 }, { 174,-47661 }, { 175,-47661 }, { 176,-47661 }, { 177,-47661 }, + { 178,-47661 }, { 179,-47661 }, { 180,-47661 }, { 181,-47661 }, { 182,-47661 }, + { 183,-47661 }, { 184,-47661 }, { 185,-47661 }, { 186,-47661 }, { 187,-47661 }, + { 188,-47661 }, { 189,-47661 }, { 190,-47661 }, { 191,-47661 }, { 192,-47661 }, + { 193,-47661 }, { 194,-47661 }, { 195,-47661 }, { 196,-47661 }, { 197,-47661 }, + { 198,-47661 }, { 199,-47661 }, { 200,-47661 }, { 201,-47661 }, { 202,-47661 }, + { 203,-47661 }, { 204,-47661 }, { 205,-47661 }, { 206,-47661 }, { 207,-47661 }, + { 208,-47661 }, { 209,-47661 }, { 210,-47661 }, { 211,-47661 }, { 212,-47661 }, + { 213,-47661 }, { 214,-47661 }, { 215,-47661 }, { 216,-47661 }, { 217,-47661 }, + { 218,-47661 }, { 219,-47661 }, { 220,-47661 }, { 221,-47661 }, { 222,-47661 }, + + { 223,-47661 }, { 224,-47661 }, { 225,-47661 }, { 226,-47661 }, { 227,-47661 }, + { 228,-47661 }, { 229,-47661 }, { 230,-47661 }, { 231,-47661 }, { 232,-47661 }, + { 233,-47661 }, { 234,-47661 }, { 235,-47661 }, { 236,-47661 }, { 237,-47661 }, + { 238,-47661 }, { 239,-47661 }, { 240,-47661 }, { 241,-47661 }, { 242,-47661 }, + { 243,-47661 }, { 244,-47661 }, { 245,-47661 }, { 246,-47661 }, { 247,-47661 }, + { 248,-47661 }, { 249,-47661 }, { 250,-47661 }, { 251,-47661 }, { 252,-47661 }, + { 253,-47661 }, { 254,-47661 }, { 255,-47661 }, { 0, 131 }, { 0,44205 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-47918 }, { 49,-47918 }, { 50,-47918 }, + { 51,-47918 }, { 52,-47918 }, { 53,-47918 }, { 54,-47918 }, { 55,-47918 }, + { 56,-47918 }, { 57,-47918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-47918 }, + + { 66,-47918 }, { 67,11565 }, { 68,-47918 }, { 69,-47918 }, { 70,-47918 }, + { 71,-47918 }, { 72,-47918 }, { 73,-47918 }, { 74,-47918 }, { 75,-47918 }, + { 76,-47918 }, { 77,-47918 }, { 78,-47918 }, { 79,-47918 }, { 80,-47918 }, + { 81,-47918 }, { 82,-47918 }, { 83,-47918 }, { 84,-47918 }, { 85,-47918 }, + { 86,-47918 }, { 87,-47918 }, { 88,-47918 }, { 89,-47918 }, { 90,-47918 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-47918 }, + { 0, 0 }, { 97,-47918 }, { 98,-47918 }, { 99,11565 }, { 100,-47918 }, + { 101,-47918 }, { 102,-47918 }, { 103,-47918 }, { 104,-47918 }, { 105,-47918 }, + { 106,-47918 }, { 107,-47918 }, { 108,-47918 }, { 109,-47918 }, { 110,-47918 }, + { 111,-47918 }, { 112,-47918 }, { 113,-47918 }, { 114,-47918 }, { 115,-47918 }, + + { 116,-47918 }, { 117,-47918 }, { 118,-47918 }, { 119,-47918 }, { 120,-47918 }, + { 121,-47918 }, { 122,-47918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-47918 }, { 128,-47918 }, { 129,-47918 }, { 130,-47918 }, + { 131,-47918 }, { 132,-47918 }, { 133,-47918 }, { 134,-47918 }, { 135,-47918 }, + { 136,-47918 }, { 137,-47918 }, { 138,-47918 }, { 139,-47918 }, { 140,-47918 }, + { 141,-47918 }, { 142,-47918 }, { 143,-47918 }, { 144,-47918 }, { 145,-47918 }, + { 146,-47918 }, { 147,-47918 }, { 148,-47918 }, { 149,-47918 }, { 150,-47918 }, + { 151,-47918 }, { 152,-47918 }, { 153,-47918 }, { 154,-47918 }, { 155,-47918 }, + { 156,-47918 }, { 157,-47918 }, { 158,-47918 }, { 159,-47918 }, { 160,-47918 }, + { 161,-47918 }, { 162,-47918 }, { 163,-47918 }, { 164,-47918 }, { 165,-47918 }, + + { 166,-47918 }, { 167,-47918 }, { 168,-47918 }, { 169,-47918 }, { 170,-47918 }, + { 171,-47918 }, { 172,-47918 }, { 173,-47918 }, { 174,-47918 }, { 175,-47918 }, + { 176,-47918 }, { 177,-47918 }, { 178,-47918 }, { 179,-47918 }, { 180,-47918 }, + { 181,-47918 }, { 182,-47918 }, { 183,-47918 }, { 184,-47918 }, { 185,-47918 }, + { 186,-47918 }, { 187,-47918 }, { 188,-47918 }, { 189,-47918 }, { 190,-47918 }, + { 191,-47918 }, { 192,-47918 }, { 193,-47918 }, { 194,-47918 }, { 195,-47918 }, + { 196,-47918 }, { 197,-47918 }, { 198,-47918 }, { 199,-47918 }, { 200,-47918 }, + { 201,-47918 }, { 202,-47918 }, { 203,-47918 }, { 204,-47918 }, { 205,-47918 }, + { 206,-47918 }, { 207,-47918 }, { 208,-47918 }, { 209,-47918 }, { 210,-47918 }, + { 211,-47918 }, { 212,-47918 }, { 213,-47918 }, { 214,-47918 }, { 215,-47918 }, + + { 216,-47918 }, { 217,-47918 }, { 218,-47918 }, { 219,-47918 }, { 220,-47918 }, + { 221,-47918 }, { 222,-47918 }, { 223,-47918 }, { 224,-47918 }, { 225,-47918 }, + { 226,-47918 }, { 227,-47918 }, { 228,-47918 }, { 229,-47918 }, { 230,-47918 }, + { 231,-47918 }, { 232,-47918 }, { 233,-47918 }, { 234,-47918 }, { 235,-47918 }, + { 236,-47918 }, { 237,-47918 }, { 238,-47918 }, { 239,-47918 }, { 240,-47918 }, + { 241,-47918 }, { 242,-47918 }, { 243,-47918 }, { 244,-47918 }, { 245,-47918 }, + { 246,-47918 }, { 247,-47918 }, { 248,-47918 }, { 249,-47918 }, { 250,-47918 }, + { 251,-47918 }, { 252,-47918 }, { 253,-47918 }, { 254,-47918 }, { 255,-47918 }, + { 0, 131 }, { 0,43948 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-48175 }, + { 49,-48175 }, { 50,-48175 }, { 51,-48175 }, { 52,-48175 }, { 53,-48175 }, + { 54,-48175 }, { 55,-48175 }, { 56,-48175 }, { 57,-48175 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-48175 }, { 66,-48175 }, { 67,-48175 }, { 68,-48175 }, + { 69,-48175 }, { 70,-48175 }, { 71,-48175 }, { 72,-48175 }, { 73,-48175 }, + { 74,-48175 }, { 75,-48175 }, { 76,-48175 }, { 77,-48175 }, { 78,-48175 }, + { 79,-48175 }, { 80,-48175 }, { 81,-48175 }, { 82,11565 }, { 83,-48175 }, + { 84,-48175 }, { 85,-48175 }, { 86,-48175 }, { 87,-48175 }, { 88,-48175 }, + { 89,-48175 }, { 90,-48175 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-48175 }, { 0, 0 }, { 97,-48175 }, { 98,-48175 }, + { 99,-48175 }, { 100,-48175 }, { 101,-48175 }, { 102,-48175 }, { 103,-48175 }, + { 104,-48175 }, { 105,-48175 }, { 106,-48175 }, { 107,-48175 }, { 108,-48175 }, + + { 109,-48175 }, { 110,-48175 }, { 111,-48175 }, { 112,-48175 }, { 113,-48175 }, + { 114,11565 }, { 115,-48175 }, { 116,-48175 }, { 117,-48175 }, { 118,-48175 }, + { 119,-48175 }, { 120,-48175 }, { 121,-48175 }, { 122,-48175 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-48175 }, { 128,-48175 }, + { 129,-48175 }, { 130,-48175 }, { 131,-48175 }, { 132,-48175 }, { 133,-48175 }, + { 134,-48175 }, { 135,-48175 }, { 136,-48175 }, { 137,-48175 }, { 138,-48175 }, + { 139,-48175 }, { 140,-48175 }, { 141,-48175 }, { 142,-48175 }, { 143,-48175 }, + { 144,-48175 }, { 145,-48175 }, { 146,-48175 }, { 147,-48175 }, { 148,-48175 }, + { 149,-48175 }, { 150,-48175 }, { 151,-48175 }, { 152,-48175 }, { 153,-48175 }, + { 154,-48175 }, { 155,-48175 }, { 156,-48175 }, { 157,-48175 }, { 158,-48175 }, + + { 159,-48175 }, { 160,-48175 }, { 161,-48175 }, { 162,-48175 }, { 163,-48175 }, + { 164,-48175 }, { 165,-48175 }, { 166,-48175 }, { 167,-48175 }, { 168,-48175 }, + { 169,-48175 }, { 170,-48175 }, { 171,-48175 }, { 172,-48175 }, { 173,-48175 }, + { 174,-48175 }, { 175,-48175 }, { 176,-48175 }, { 177,-48175 }, { 178,-48175 }, + { 179,-48175 }, { 180,-48175 }, { 181,-48175 }, { 182,-48175 }, { 183,-48175 }, + { 184,-48175 }, { 185,-48175 }, { 186,-48175 }, { 187,-48175 }, { 188,-48175 }, + { 189,-48175 }, { 190,-48175 }, { 191,-48175 }, { 192,-48175 }, { 193,-48175 }, + { 194,-48175 }, { 195,-48175 }, { 196,-48175 }, { 197,-48175 }, { 198,-48175 }, + { 199,-48175 }, { 200,-48175 }, { 201,-48175 }, { 202,-48175 }, { 203,-48175 }, + { 204,-48175 }, { 205,-48175 }, { 206,-48175 }, { 207,-48175 }, { 208,-48175 }, + + { 209,-48175 }, { 210,-48175 }, { 211,-48175 }, { 212,-48175 }, { 213,-48175 }, + { 214,-48175 }, { 215,-48175 }, { 216,-48175 }, { 217,-48175 }, { 218,-48175 }, + { 219,-48175 }, { 220,-48175 }, { 221,-48175 }, { 222,-48175 }, { 223,-48175 }, + { 224,-48175 }, { 225,-48175 }, { 226,-48175 }, { 227,-48175 }, { 228,-48175 }, + { 229,-48175 }, { 230,-48175 }, { 231,-48175 }, { 232,-48175 }, { 233,-48175 }, + { 234,-48175 }, { 235,-48175 }, { 236,-48175 }, { 237,-48175 }, { 238,-48175 }, + { 239,-48175 }, { 240,-48175 }, { 241,-48175 }, { 242,-48175 }, { 243,-48175 }, + { 244,-48175 }, { 245,-48175 }, { 246,-48175 }, { 247,-48175 }, { 248,-48175 }, + { 249,-48175 }, { 250,-48175 }, { 251,-48175 }, { 252,-48175 }, { 253,-48175 }, + { 254,-48175 }, { 255,-48175 }, { 0, 34 }, { 0,43691 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-48432 }, { 49,-48432 }, { 50,-48432 }, { 51,-48432 }, + + { 52,-48432 }, { 53,-48432 }, { 54,-48432 }, { 55,-48432 }, { 56,-48432 }, + { 57,-48432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-48432 }, { 66,-48432 }, + { 67,-48432 }, { 68,-48432 }, { 69,-48432 }, { 70,-48432 }, { 71,-48432 }, + { 72,-48432 }, { 73,-48432 }, { 74,-48432 }, { 75,-48432 }, { 76,-48432 }, + { 77,-48432 }, { 78,-48432 }, { 79,-48432 }, { 80,-48432 }, { 81,-48432 }, + { 82,-48432 }, { 83,-48432 }, { 84,-48432 }, { 85,-48432 }, { 86,-48432 }, + { 87,-48432 }, { 88,-48432 }, { 89,-48432 }, { 90,-48432 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-48432 }, { 0, 0 }, + { 97,-48432 }, { 98,-48432 }, { 99,-48432 }, { 100,-48432 }, { 101,-48432 }, + + { 102,-48432 }, { 103,-48432 }, { 104,-48432 }, { 105,-48432 }, { 106,-48432 }, + { 107,-48432 }, { 108,-48432 }, { 109,-48432 }, { 110,-48432 }, { 111,-48432 }, + { 112,-48432 }, { 113,-48432 }, { 114,-48432 }, { 115,-48432 }, { 116,-48432 }, + { 117,-48432 }, { 118,-48432 }, { 119,-48432 }, { 120,-48432 }, { 121,-48432 }, + { 122,-48432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-48432 }, { 128,-48432 }, { 129,-48432 }, { 130,-48432 }, { 131,-48432 }, + { 132,-48432 }, { 133,-48432 }, { 134,-48432 }, { 135,-48432 }, { 136,-48432 }, + { 137,-48432 }, { 138,-48432 }, { 139,-48432 }, { 140,-48432 }, { 141,-48432 }, + { 142,-48432 }, { 143,-48432 }, { 144,-48432 }, { 145,-48432 }, { 146,-48432 }, + { 147,-48432 }, { 148,-48432 }, { 149,-48432 }, { 150,-48432 }, { 151,-48432 }, + + { 152,-48432 }, { 153,-48432 }, { 154,-48432 }, { 155,-48432 }, { 156,-48432 }, + { 157,-48432 }, { 158,-48432 }, { 159,-48432 }, { 160,-48432 }, { 161,-48432 }, + { 162,-48432 }, { 163,-48432 }, { 164,-48432 }, { 165,-48432 }, { 166,-48432 }, + { 167,-48432 }, { 168,-48432 }, { 169,-48432 }, { 170,-48432 }, { 171,-48432 }, + { 172,-48432 }, { 173,-48432 }, { 174,-48432 }, { 175,-48432 }, { 176,-48432 }, + { 177,-48432 }, { 178,-48432 }, { 179,-48432 }, { 180,-48432 }, { 181,-48432 }, + { 182,-48432 }, { 183,-48432 }, { 184,-48432 }, { 185,-48432 }, { 186,-48432 }, + { 187,-48432 }, { 188,-48432 }, { 189,-48432 }, { 190,-48432 }, { 191,-48432 }, + { 192,-48432 }, { 193,-48432 }, { 194,-48432 }, { 195,-48432 }, { 196,-48432 }, + { 197,-48432 }, { 198,-48432 }, { 199,-48432 }, { 200,-48432 }, { 201,-48432 }, + + { 202,-48432 }, { 203,-48432 }, { 204,-48432 }, { 205,-48432 }, { 206,-48432 }, + { 207,-48432 }, { 208,-48432 }, { 209,-48432 }, { 210,-48432 }, { 211,-48432 }, + { 212,-48432 }, { 213,-48432 }, { 214,-48432 }, { 215,-48432 }, { 216,-48432 }, + { 217,-48432 }, { 218,-48432 }, { 219,-48432 }, { 220,-48432 }, { 221,-48432 }, + { 222,-48432 }, { 223,-48432 }, { 224,-48432 }, { 225,-48432 }, { 226,-48432 }, + { 227,-48432 }, { 228,-48432 }, { 229,-48432 }, { 230,-48432 }, { 231,-48432 }, + { 232,-48432 }, { 233,-48432 }, { 234,-48432 }, { 235,-48432 }, { 236,-48432 }, + { 237,-48432 }, { 238,-48432 }, { 239,-48432 }, { 240,-48432 }, { 241,-48432 }, + { 242,-48432 }, { 243,-48432 }, { 244,-48432 }, { 245,-48432 }, { 246,-48432 }, + { 247,-48432 }, { 248,-48432 }, { 249,-48432 }, { 250,-48432 }, { 251,-48432 }, + + { 252,-48432 }, { 253,-48432 }, { 254,-48432 }, { 255,-48432 }, { 0, 131 }, + { 0,43434 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-48689 }, { 49,-48689 }, + { 50,-48689 }, { 51,-48689 }, { 52,-48689 }, { 53,-48689 }, { 54,-48689 }, + { 55,-48689 }, { 56,-48689 }, { 57,-48689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-48689 }, { 66,-48689 }, { 67,-48689 }, { 68,-48689 }, { 69,-48689 }, + { 70,-48689 }, { 71,-48689 }, { 72,-48689 }, { 73,11308 }, { 74,-48689 }, + { 75,-48689 }, { 76,-48689 }, { 77,-48689 }, { 78,-48689 }, { 79,-48689 }, + { 80,-48689 }, { 81,-48689 }, { 82,-48689 }, { 83,-48689 }, { 84,-48689 }, + { 85,-48689 }, { 86,-48689 }, { 87,-48689 }, { 88,-48689 }, { 89,-48689 }, + { 90,-48689 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-48689 }, { 0, 0 }, { 97,-48689 }, { 98,-48689 }, { 99,-48689 }, + { 100,-48689 }, { 101,-48689 }, { 102,-48689 }, { 103,-48689 }, { 104,-48689 }, + { 105,11308 }, { 106,-48689 }, { 107,-48689 }, { 108,-48689 }, { 109,-48689 }, + { 110,-48689 }, { 111,-48689 }, { 112,-48689 }, { 113,-48689 }, { 114,-48689 }, + { 115,-48689 }, { 116,-48689 }, { 117,-48689 }, { 118,-48689 }, { 119,-48689 }, + { 120,-48689 }, { 121,-48689 }, { 122,-48689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-48689 }, { 128,-48689 }, { 129,-48689 }, + { 130,-48689 }, { 131,-48689 }, { 132,-48689 }, { 133,-48689 }, { 134,-48689 }, + { 135,-48689 }, { 136,-48689 }, { 137,-48689 }, { 138,-48689 }, { 139,-48689 }, + { 140,-48689 }, { 141,-48689 }, { 142,-48689 }, { 143,-48689 }, { 144,-48689 }, + + { 145,-48689 }, { 146,-48689 }, { 147,-48689 }, { 148,-48689 }, { 149,-48689 }, + { 150,-48689 }, { 151,-48689 }, { 152,-48689 }, { 153,-48689 }, { 154,-48689 }, + { 155,-48689 }, { 156,-48689 }, { 157,-48689 }, { 158,-48689 }, { 159,-48689 }, + { 160,-48689 }, { 161,-48689 }, { 162,-48689 }, { 163,-48689 }, { 164,-48689 }, + { 165,-48689 }, { 166,-48689 }, { 167,-48689 }, { 168,-48689 }, { 169,-48689 }, + { 170,-48689 }, { 171,-48689 }, { 172,-48689 }, { 173,-48689 }, { 174,-48689 }, + { 175,-48689 }, { 176,-48689 }, { 177,-48689 }, { 178,-48689 }, { 179,-48689 }, + { 180,-48689 }, { 181,-48689 }, { 182,-48689 }, { 183,-48689 }, { 184,-48689 }, + { 185,-48689 }, { 186,-48689 }, { 187,-48689 }, { 188,-48689 }, { 189,-48689 }, + { 190,-48689 }, { 191,-48689 }, { 192,-48689 }, { 193,-48689 }, { 194,-48689 }, + + { 195,-48689 }, { 196,-48689 }, { 197,-48689 }, { 198,-48689 }, { 199,-48689 }, + { 200,-48689 }, { 201,-48689 }, { 202,-48689 }, { 203,-48689 }, { 204,-48689 }, + { 205,-48689 }, { 206,-48689 }, { 207,-48689 }, { 208,-48689 }, { 209,-48689 }, + { 210,-48689 }, { 211,-48689 }, { 212,-48689 }, { 213,-48689 }, { 214,-48689 }, + { 215,-48689 }, { 216,-48689 }, { 217,-48689 }, { 218,-48689 }, { 219,-48689 }, + { 220,-48689 }, { 221,-48689 }, { 222,-48689 }, { 223,-48689 }, { 224,-48689 }, + { 225,-48689 }, { 226,-48689 }, { 227,-48689 }, { 228,-48689 }, { 229,-48689 }, + { 230,-48689 }, { 231,-48689 }, { 232,-48689 }, { 233,-48689 }, { 234,-48689 }, + { 235,-48689 }, { 236,-48689 }, { 237,-48689 }, { 238,-48689 }, { 239,-48689 }, + { 240,-48689 }, { 241,-48689 }, { 242,-48689 }, { 243,-48689 }, { 244,-48689 }, + + { 245,-48689 }, { 246,-48689 }, { 247,-48689 }, { 248,-48689 }, { 249,-48689 }, + { 250,-48689 }, { 251,-48689 }, { 252,-48689 }, { 253,-48689 }, { 254,-48689 }, + { 255,-48689 }, { 0, 131 }, { 0,43177 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-48946 }, { 49,-48946 }, { 50,-48946 }, { 51,-48946 }, { 52,-48946 }, + { 53,-48946 }, { 54,-48946 }, { 55,-48946 }, { 56,-48946 }, { 57,-48946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-48946 }, { 66,-48946 }, { 67,-48946 }, + { 68,-48946 }, { 69,-48946 }, { 70,-48946 }, { 71,-48946 }, { 72,-48946 }, + { 73,11308 }, { 74,-48946 }, { 75,-48946 }, { 76,-48946 }, { 77,-48946 }, + { 78,-48946 }, { 79,-48946 }, { 80,-48946 }, { 81,-48946 }, { 82,-48946 }, + { 83,-48946 }, { 84,-48946 }, { 85,-48946 }, { 86,-48946 }, { 87,-48946 }, + + { 88,-48946 }, { 89,-48946 }, { 90,-48946 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-48946 }, { 0, 0 }, { 97,-48946 }, + { 98,-48946 }, { 99,-48946 }, { 100,-48946 }, { 101,-48946 }, { 102,-48946 }, + { 103,-48946 }, { 104,-48946 }, { 105,11308 }, { 106,-48946 }, { 107,-48946 }, + { 108,-48946 }, { 109,-48946 }, { 110,-48946 }, { 111,-48946 }, { 112,-48946 }, + { 113,-48946 }, { 114,-48946 }, { 115,-48946 }, { 116,-48946 }, { 117,-48946 }, + { 118,-48946 }, { 119,-48946 }, { 120,-48946 }, { 121,-48946 }, { 122,-48946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-48946 }, + { 128,-48946 }, { 129,-48946 }, { 130,-48946 }, { 131,-48946 }, { 132,-48946 }, + { 133,-48946 }, { 134,-48946 }, { 135,-48946 }, { 136,-48946 }, { 137,-48946 }, + + { 138,-48946 }, { 139,-48946 }, { 140,-48946 }, { 141,-48946 }, { 142,-48946 }, + { 143,-48946 }, { 144,-48946 }, { 145,-48946 }, { 146,-48946 }, { 147,-48946 }, + { 148,-48946 }, { 149,-48946 }, { 150,-48946 }, { 151,-48946 }, { 152,-48946 }, + { 153,-48946 }, { 154,-48946 }, { 155,-48946 }, { 156,-48946 }, { 157,-48946 }, + { 158,-48946 }, { 159,-48946 }, { 160,-48946 }, { 161,-48946 }, { 162,-48946 }, + { 163,-48946 }, { 164,-48946 }, { 165,-48946 }, { 166,-48946 }, { 167,-48946 }, + { 168,-48946 }, { 169,-48946 }, { 170,-48946 }, { 171,-48946 }, { 172,-48946 }, + { 173,-48946 }, { 174,-48946 }, { 175,-48946 }, { 176,-48946 }, { 177,-48946 }, + { 178,-48946 }, { 179,-48946 }, { 180,-48946 }, { 181,-48946 }, { 182,-48946 }, + { 183,-48946 }, { 184,-48946 }, { 185,-48946 }, { 186,-48946 }, { 187,-48946 }, + + { 188,-48946 }, { 189,-48946 }, { 190,-48946 }, { 191,-48946 }, { 192,-48946 }, + { 193,-48946 }, { 194,-48946 }, { 195,-48946 }, { 196,-48946 }, { 197,-48946 }, + { 198,-48946 }, { 199,-48946 }, { 200,-48946 }, { 201,-48946 }, { 202,-48946 }, + { 203,-48946 }, { 204,-48946 }, { 205,-48946 }, { 206,-48946 }, { 207,-48946 }, + { 208,-48946 }, { 209,-48946 }, { 210,-48946 }, { 211,-48946 }, { 212,-48946 }, + { 213,-48946 }, { 214,-48946 }, { 215,-48946 }, { 216,-48946 }, { 217,-48946 }, + { 218,-48946 }, { 219,-48946 }, { 220,-48946 }, { 221,-48946 }, { 222,-48946 }, + { 223,-48946 }, { 224,-48946 }, { 225,-48946 }, { 226,-48946 }, { 227,-48946 }, + { 228,-48946 }, { 229,-48946 }, { 230,-48946 }, { 231,-48946 }, { 232,-48946 }, + { 233,-48946 }, { 234,-48946 }, { 235,-48946 }, { 236,-48946 }, { 237,-48946 }, + + { 238,-48946 }, { 239,-48946 }, { 240,-48946 }, { 241,-48946 }, { 242,-48946 }, + { 243,-48946 }, { 244,-48946 }, { 245,-48946 }, { 246,-48946 }, { 247,-48946 }, + { 248,-48946 }, { 249,-48946 }, { 250,-48946 }, { 251,-48946 }, { 252,-48946 }, + { 253,-48946 }, { 254,-48946 }, { 255,-48946 }, { 0, 131 }, { 0,42920 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-49203 }, { 49,-49203 }, { 50,-49203 }, + { 51,-49203 }, { 52,-49203 }, { 53,-49203 }, { 54,-49203 }, { 55,-49203 }, + { 56,-49203 }, { 57,-49203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-49203 }, + { 66,-49203 }, { 67,-49203 }, { 68,11308 }, { 69,-49203 }, { 70,-49203 }, + { 71,-49203 }, { 72,-49203 }, { 73,-49203 }, { 74,-49203 }, { 75,-49203 }, + { 76,-49203 }, { 77,-49203 }, { 78,-49203 }, { 79,-49203 }, { 80,-49203 }, + + { 81,-49203 }, { 82,-49203 }, { 83,-49203 }, { 84,-49203 }, { 85,-49203 }, + { 86,-49203 }, { 87,-49203 }, { 88,-49203 }, { 89,-49203 }, { 90,-49203 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-49203 }, + { 0, 0 }, { 97,-49203 }, { 98,-49203 }, { 99,-49203 }, { 100,11308 }, + { 101,-49203 }, { 102,-49203 }, { 103,-49203 }, { 104,-49203 }, { 105,-49203 }, + { 106,-49203 }, { 107,-49203 }, { 108,-49203 }, { 109,-49203 }, { 110,-49203 }, + { 111,-49203 }, { 112,-49203 }, { 113,-49203 }, { 114,-49203 }, { 115,-49203 }, + { 116,-49203 }, { 117,-49203 }, { 118,-49203 }, { 119,-49203 }, { 120,-49203 }, + { 121,-49203 }, { 122,-49203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-49203 }, { 128,-49203 }, { 129,-49203 }, { 130,-49203 }, + + { 131,-49203 }, { 132,-49203 }, { 133,-49203 }, { 134,-49203 }, { 135,-49203 }, + { 136,-49203 }, { 137,-49203 }, { 138,-49203 }, { 139,-49203 }, { 140,-49203 }, + { 141,-49203 }, { 142,-49203 }, { 143,-49203 }, { 144,-49203 }, { 145,-49203 }, + { 146,-49203 }, { 147,-49203 }, { 148,-49203 }, { 149,-49203 }, { 150,-49203 }, + { 151,-49203 }, { 152,-49203 }, { 153,-49203 }, { 154,-49203 }, { 155,-49203 }, + { 156,-49203 }, { 157,-49203 }, { 158,-49203 }, { 159,-49203 }, { 160,-49203 }, + { 161,-49203 }, { 162,-49203 }, { 163,-49203 }, { 164,-49203 }, { 165,-49203 }, + { 166,-49203 }, { 167,-49203 }, { 168,-49203 }, { 169,-49203 }, { 170,-49203 }, + { 171,-49203 }, { 172,-49203 }, { 173,-49203 }, { 174,-49203 }, { 175,-49203 }, + { 176,-49203 }, { 177,-49203 }, { 178,-49203 }, { 179,-49203 }, { 180,-49203 }, + + { 181,-49203 }, { 182,-49203 }, { 183,-49203 }, { 184,-49203 }, { 185,-49203 }, + { 186,-49203 }, { 187,-49203 }, { 188,-49203 }, { 189,-49203 }, { 190,-49203 }, + { 191,-49203 }, { 192,-49203 }, { 193,-49203 }, { 194,-49203 }, { 195,-49203 }, + { 196,-49203 }, { 197,-49203 }, { 198,-49203 }, { 199,-49203 }, { 200,-49203 }, + { 201,-49203 }, { 202,-49203 }, { 203,-49203 }, { 204,-49203 }, { 205,-49203 }, + { 206,-49203 }, { 207,-49203 }, { 208,-49203 }, { 209,-49203 }, { 210,-49203 }, + { 211,-49203 }, { 212,-49203 }, { 213,-49203 }, { 214,-49203 }, { 215,-49203 }, + { 216,-49203 }, { 217,-49203 }, { 218,-49203 }, { 219,-49203 }, { 220,-49203 }, + { 221,-49203 }, { 222,-49203 }, { 223,-49203 }, { 224,-49203 }, { 225,-49203 }, + { 226,-49203 }, { 227,-49203 }, { 228,-49203 }, { 229,-49203 }, { 230,-49203 }, + + { 231,-49203 }, { 232,-49203 }, { 233,-49203 }, { 234,-49203 }, { 235,-49203 }, + { 236,-49203 }, { 237,-49203 }, { 238,-49203 }, { 239,-49203 }, { 240,-49203 }, + { 241,-49203 }, { 242,-49203 }, { 243,-49203 }, { 244,-49203 }, { 245,-49203 }, + { 246,-49203 }, { 247,-49203 }, { 248,-49203 }, { 249,-49203 }, { 250,-49203 }, + { 251,-49203 }, { 252,-49203 }, { 253,-49203 }, { 254,-49203 }, { 255,-49203 }, + { 0, 63 }, { 0,42663 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-49460 }, + { 49,-49460 }, { 50,-49460 }, { 51,-49460 }, { 52,-49460 }, { 53,-49460 }, + { 54,-49460 }, { 55,-49460 }, { 56,-49460 }, { 57,-49460 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-49460 }, { 66,-49460 }, { 67,-49460 }, { 68,-49460 }, + { 69,-49460 }, { 70,-49460 }, { 71,-49460 }, { 72,-49460 }, { 73,-49460 }, + + { 74,-49460 }, { 75,-49460 }, { 76,11308 }, { 77,-49460 }, { 78,-49460 }, + { 79,-49460 }, { 80,-49460 }, { 81,-49460 }, { 82,-49460 }, { 83,-49460 }, + { 84,-49460 }, { 85,-49460 }, { 86,-49460 }, { 87,-49460 }, { 88,-49460 }, + { 89,-49460 }, { 90,-49460 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-49460 }, { 0, 0 }, { 97,-49460 }, { 98,-49460 }, + { 99,-49460 }, { 100,-49460 }, { 101,-49460 }, { 102,-49460 }, { 103,-49460 }, + { 104,-49460 }, { 105,-49460 }, { 106,-49460 }, { 107,-49460 }, { 108,11308 }, + { 109,-49460 }, { 110,-49460 }, { 111,-49460 }, { 112,-49460 }, { 113,-49460 }, + { 114,-49460 }, { 115,-49460 }, { 116,-49460 }, { 117,-49460 }, { 118,-49460 }, + { 119,-49460 }, { 120,-49460 }, { 121,-49460 }, { 122,-49460 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-49460 }, { 128,-49460 }, + { 129,-49460 }, { 130,-49460 }, { 131,-49460 }, { 132,-49460 }, { 133,-49460 }, + { 134,-49460 }, { 135,-49460 }, { 136,-49460 }, { 137,-49460 }, { 138,-49460 }, + { 139,-49460 }, { 140,-49460 }, { 141,-49460 }, { 142,-49460 }, { 143,-49460 }, + { 144,-49460 }, { 145,-49460 }, { 146,-49460 }, { 147,-49460 }, { 148,-49460 }, + { 149,-49460 }, { 150,-49460 }, { 151,-49460 }, { 152,-49460 }, { 153,-49460 }, + { 154,-49460 }, { 155,-49460 }, { 156,-49460 }, { 157,-49460 }, { 158,-49460 }, + { 159,-49460 }, { 160,-49460 }, { 161,-49460 }, { 162,-49460 }, { 163,-49460 }, + { 164,-49460 }, { 165,-49460 }, { 166,-49460 }, { 167,-49460 }, { 168,-49460 }, + { 169,-49460 }, { 170,-49460 }, { 171,-49460 }, { 172,-49460 }, { 173,-49460 }, + + { 174,-49460 }, { 175,-49460 }, { 176,-49460 }, { 177,-49460 }, { 178,-49460 }, + { 179,-49460 }, { 180,-49460 }, { 181,-49460 }, { 182,-49460 }, { 183,-49460 }, + { 184,-49460 }, { 185,-49460 }, { 186,-49460 }, { 187,-49460 }, { 188,-49460 }, + { 189,-49460 }, { 190,-49460 }, { 191,-49460 }, { 192,-49460 }, { 193,-49460 }, + { 194,-49460 }, { 195,-49460 }, { 196,-49460 }, { 197,-49460 }, { 198,-49460 }, + { 199,-49460 }, { 200,-49460 }, { 201,-49460 }, { 202,-49460 }, { 203,-49460 }, + { 204,-49460 }, { 205,-49460 }, { 206,-49460 }, { 207,-49460 }, { 208,-49460 }, + { 209,-49460 }, { 210,-49460 }, { 211,-49460 }, { 212,-49460 }, { 213,-49460 }, + { 214,-49460 }, { 215,-49460 }, { 216,-49460 }, { 217,-49460 }, { 218,-49460 }, + { 219,-49460 }, { 220,-49460 }, { 221,-49460 }, { 222,-49460 }, { 223,-49460 }, + + { 224,-49460 }, { 225,-49460 }, { 226,-49460 }, { 227,-49460 }, { 228,-49460 }, + { 229,-49460 }, { 230,-49460 }, { 231,-49460 }, { 232,-49460 }, { 233,-49460 }, + { 234,-49460 }, { 235,-49460 }, { 236,-49460 }, { 237,-49460 }, { 238,-49460 }, + { 239,-49460 }, { 240,-49460 }, { 241,-49460 }, { 242,-49460 }, { 243,-49460 }, + { 244,-49460 }, { 245,-49460 }, { 246,-49460 }, { 247,-49460 }, { 248,-49460 }, + { 249,-49460 }, { 250,-49460 }, { 251,-49460 }, { 252,-49460 }, { 253,-49460 }, + { 254,-49460 }, { 255,-49460 }, { 0, 131 }, { 0,42406 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-49717 }, { 49,-49717 }, { 50,-49717 }, { 51,-49717 }, + { 52,-49717 }, { 53,-49717 }, { 54,-49717 }, { 55,-49717 }, { 56,-49717 }, + { 57,-49717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-49717 }, { 66,-49717 }, + + { 67,11308 }, { 68,-49717 }, { 69,-49717 }, { 70,-49717 }, { 71,-49717 }, + { 72,-49717 }, { 73,-49717 }, { 74,-49717 }, { 75,-49717 }, { 76,-49717 }, + { 77,-49717 }, { 78,-49717 }, { 79,-49717 }, { 80,-49717 }, { 81,-49717 }, + { 82,-49717 }, { 83,-49717 }, { 84,-49717 }, { 85,-49717 }, { 86,-49717 }, + { 87,-49717 }, { 88,-49717 }, { 89,-49717 }, { 90,-49717 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-49717 }, { 0, 0 }, + { 97,-49717 }, { 98,-49717 }, { 99,11308 }, { 100,-49717 }, { 101,-49717 }, + { 102,-49717 }, { 103,-49717 }, { 104,-49717 }, { 105,-49717 }, { 106,-49717 }, + { 107,-49717 }, { 108,-49717 }, { 109,-49717 }, { 110,-49717 }, { 111,-49717 }, + { 112,-49717 }, { 113,-49717 }, { 114,-49717 }, { 115,-49717 }, { 116,-49717 }, + + { 117,-49717 }, { 118,-49717 }, { 119,-49717 }, { 120,-49717 }, { 121,-49717 }, + { 122,-49717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-49717 }, { 128,-49717 }, { 129,-49717 }, { 130,-49717 }, { 131,-49717 }, + { 132,-49717 }, { 133,-49717 }, { 134,-49717 }, { 135,-49717 }, { 136,-49717 }, + { 137,-49717 }, { 138,-49717 }, { 139,-49717 }, { 140,-49717 }, { 141,-49717 }, + { 142,-49717 }, { 143,-49717 }, { 144,-49717 }, { 145,-49717 }, { 146,-49717 }, + { 147,-49717 }, { 148,-49717 }, { 149,-49717 }, { 150,-49717 }, { 151,-49717 }, + { 152,-49717 }, { 153,-49717 }, { 154,-49717 }, { 155,-49717 }, { 156,-49717 }, + { 157,-49717 }, { 158,-49717 }, { 159,-49717 }, { 160,-49717 }, { 161,-49717 }, + { 162,-49717 }, { 163,-49717 }, { 164,-49717 }, { 165,-49717 }, { 166,-49717 }, + + { 167,-49717 }, { 168,-49717 }, { 169,-49717 }, { 170,-49717 }, { 171,-49717 }, + { 172,-49717 }, { 173,-49717 }, { 174,-49717 }, { 175,-49717 }, { 176,-49717 }, + { 177,-49717 }, { 178,-49717 }, { 179,-49717 }, { 180,-49717 }, { 181,-49717 }, + { 182,-49717 }, { 183,-49717 }, { 184,-49717 }, { 185,-49717 }, { 186,-49717 }, + { 187,-49717 }, { 188,-49717 }, { 189,-49717 }, { 190,-49717 }, { 191,-49717 }, + { 192,-49717 }, { 193,-49717 }, { 194,-49717 }, { 195,-49717 }, { 196,-49717 }, + { 197,-49717 }, { 198,-49717 }, { 199,-49717 }, { 200,-49717 }, { 201,-49717 }, + { 202,-49717 }, { 203,-49717 }, { 204,-49717 }, { 205,-49717 }, { 206,-49717 }, + { 207,-49717 }, { 208,-49717 }, { 209,-49717 }, { 210,-49717 }, { 211,-49717 }, + { 212,-49717 }, { 213,-49717 }, { 214,-49717 }, { 215,-49717 }, { 216,-49717 }, + + { 217,-49717 }, { 218,-49717 }, { 219,-49717 }, { 220,-49717 }, { 221,-49717 }, + { 222,-49717 }, { 223,-49717 }, { 224,-49717 }, { 225,-49717 }, { 226,-49717 }, + { 227,-49717 }, { 228,-49717 }, { 229,-49717 }, { 230,-49717 }, { 231,-49717 }, + { 232,-49717 }, { 233,-49717 }, { 234,-49717 }, { 235,-49717 }, { 236,-49717 }, + { 237,-49717 }, { 238,-49717 }, { 239,-49717 }, { 240,-49717 }, { 241,-49717 }, + { 242,-49717 }, { 243,-49717 }, { 244,-49717 }, { 245,-49717 }, { 246,-49717 }, + { 247,-49717 }, { 248,-49717 }, { 249,-49717 }, { 250,-49717 }, { 251,-49717 }, + { 252,-49717 }, { 253,-49717 }, { 254,-49717 }, { 255,-49717 }, { 0, 131 }, + { 0,42149 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-49974 }, { 49,-49974 }, + { 50,-49974 }, { 51,-49974 }, { 52,-49974 }, { 53,-49974 }, { 54,-49974 }, + { 55,-49974 }, { 56,-49974 }, { 57,-49974 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-49974 }, { 66,-49974 }, { 67,-49974 }, { 68,-49974 }, { 69,-49974 }, + { 70,-49974 }, { 71,-49974 }, { 72,-49974 }, { 73,11308 }, { 74,-49974 }, + { 75,-49974 }, { 76,-49974 }, { 77,-49974 }, { 78,-49974 }, { 79,-49974 }, + { 80,-49974 }, { 81,-49974 }, { 82,-49974 }, { 83,-49974 }, { 84,-49974 }, + { 85,-49974 }, { 86,-49974 }, { 87,-49974 }, { 88,-49974 }, { 89,-49974 }, + { 90,-49974 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-49974 }, { 0, 0 }, { 97,-49974 }, { 98,-49974 }, { 99,-49974 }, + { 100,-49974 }, { 101,-49974 }, { 102,-49974 }, { 103,-49974 }, { 104,-49974 }, + { 105,11308 }, { 106,-49974 }, { 107,-49974 }, { 108,-49974 }, { 109,-49974 }, + + { 110,-49974 }, { 111,-49974 }, { 112,-49974 }, { 113,-49974 }, { 114,-49974 }, + { 115,-49974 }, { 116,-49974 }, { 117,-49974 }, { 118,-49974 }, { 119,-49974 }, + { 120,-49974 }, { 121,-49974 }, { 122,-49974 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-49974 }, { 128,-49974 }, { 129,-49974 }, + { 130,-49974 }, { 131,-49974 }, { 132,-49974 }, { 133,-49974 }, { 134,-49974 }, + { 135,-49974 }, { 136,-49974 }, { 137,-49974 }, { 138,-49974 }, { 139,-49974 }, + { 140,-49974 }, { 141,-49974 }, { 142,-49974 }, { 143,-49974 }, { 144,-49974 }, + { 145,-49974 }, { 146,-49974 }, { 147,-49974 }, { 148,-49974 }, { 149,-49974 }, + { 150,-49974 }, { 151,-49974 }, { 152,-49974 }, { 153,-49974 }, { 154,-49974 }, + { 155,-49974 }, { 156,-49974 }, { 157,-49974 }, { 158,-49974 }, { 159,-49974 }, + + { 160,-49974 }, { 161,-49974 }, { 162,-49974 }, { 163,-49974 }, { 164,-49974 }, + { 165,-49974 }, { 166,-49974 }, { 167,-49974 }, { 168,-49974 }, { 169,-49974 }, + { 170,-49974 }, { 171,-49974 }, { 172,-49974 }, { 173,-49974 }, { 174,-49974 }, + { 175,-49974 }, { 176,-49974 }, { 177,-49974 }, { 178,-49974 }, { 179,-49974 }, + { 180,-49974 }, { 181,-49974 }, { 182,-49974 }, { 183,-49974 }, { 184,-49974 }, + { 185,-49974 }, { 186,-49974 }, { 187,-49974 }, { 188,-49974 }, { 189,-49974 }, + { 190,-49974 }, { 191,-49974 }, { 192,-49974 }, { 193,-49974 }, { 194,-49974 }, + { 195,-49974 }, { 196,-49974 }, { 197,-49974 }, { 198,-49974 }, { 199,-49974 }, + { 200,-49974 }, { 201,-49974 }, { 202,-49974 }, { 203,-49974 }, { 204,-49974 }, + { 205,-49974 }, { 206,-49974 }, { 207,-49974 }, { 208,-49974 }, { 209,-49974 }, + + { 210,-49974 }, { 211,-49974 }, { 212,-49974 }, { 213,-49974 }, { 214,-49974 }, + { 215,-49974 }, { 216,-49974 }, { 217,-49974 }, { 218,-49974 }, { 219,-49974 }, + { 220,-49974 }, { 221,-49974 }, { 222,-49974 }, { 223,-49974 }, { 224,-49974 }, + { 225,-49974 }, { 226,-49974 }, { 227,-49974 }, { 228,-49974 }, { 229,-49974 }, + { 230,-49974 }, { 231,-49974 }, { 232,-49974 }, { 233,-49974 }, { 234,-49974 }, + { 235,-49974 }, { 236,-49974 }, { 237,-49974 }, { 238,-49974 }, { 239,-49974 }, + { 240,-49974 }, { 241,-49974 }, { 242,-49974 }, { 243,-49974 }, { 244,-49974 }, + { 245,-49974 }, { 246,-49974 }, { 247,-49974 }, { 248,-49974 }, { 249,-49974 }, + { 250,-49974 }, { 251,-49974 }, { 252,-49974 }, { 253,-49974 }, { 254,-49974 }, + { 255,-49974 }, { 0, 131 }, { 0,41892 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-50231 }, { 49,-50231 }, { 50,-50231 }, { 51,-50231 }, { 52,-50231 }, + + { 53,-50231 }, { 54,-50231 }, { 55,-50231 }, { 56,-50231 }, { 57,-50231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-50231 }, { 66,-50231 }, { 67,-50231 }, + { 68,-50231 }, { 69,-50231 }, { 70,-50231 }, { 71,-50231 }, { 72,-50231 }, + { 73,-50231 }, { 74,-50231 }, { 75,-50231 }, { 76,11308 }, { 77,-50231 }, + { 78,-50231 }, { 79,-50231 }, { 80,-50231 }, { 81,-50231 }, { 82,-50231 }, + { 83,-50231 }, { 84,-50231 }, { 85,-50231 }, { 86,-50231 }, { 87,-50231 }, + { 88,-50231 }, { 89,-50231 }, { 90,-50231 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-50231 }, { 0, 0 }, { 97,-50231 }, + { 98,-50231 }, { 99,-50231 }, { 100,-50231 }, { 101,-50231 }, { 102,-50231 }, + + { 103,-50231 }, { 104,-50231 }, { 105,-50231 }, { 106,-50231 }, { 107,-50231 }, + { 108,11308 }, { 109,-50231 }, { 110,-50231 }, { 111,-50231 }, { 112,-50231 }, + { 113,-50231 }, { 114,-50231 }, { 115,-50231 }, { 116,-50231 }, { 117,-50231 }, + { 118,-50231 }, { 119,-50231 }, { 120,-50231 }, { 121,-50231 }, { 122,-50231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-50231 }, + { 128,-50231 }, { 129,-50231 }, { 130,-50231 }, { 131,-50231 }, { 132,-50231 }, + { 133,-50231 }, { 134,-50231 }, { 135,-50231 }, { 136,-50231 }, { 137,-50231 }, + { 138,-50231 }, { 139,-50231 }, { 140,-50231 }, { 141,-50231 }, { 142,-50231 }, + { 143,-50231 }, { 144,-50231 }, { 145,-50231 }, { 146,-50231 }, { 147,-50231 }, + { 148,-50231 }, { 149,-50231 }, { 150,-50231 }, { 151,-50231 }, { 152,-50231 }, + + { 153,-50231 }, { 154,-50231 }, { 155,-50231 }, { 156,-50231 }, { 157,-50231 }, + { 158,-50231 }, { 159,-50231 }, { 160,-50231 }, { 161,-50231 }, { 162,-50231 }, + { 163,-50231 }, { 164,-50231 }, { 165,-50231 }, { 166,-50231 }, { 167,-50231 }, + { 168,-50231 }, { 169,-50231 }, { 170,-50231 }, { 171,-50231 }, { 172,-50231 }, + { 173,-50231 }, { 174,-50231 }, { 175,-50231 }, { 176,-50231 }, { 177,-50231 }, + { 178,-50231 }, { 179,-50231 }, { 180,-50231 }, { 181,-50231 }, { 182,-50231 }, + { 183,-50231 }, { 184,-50231 }, { 185,-50231 }, { 186,-50231 }, { 187,-50231 }, + { 188,-50231 }, { 189,-50231 }, { 190,-50231 }, { 191,-50231 }, { 192,-50231 }, + { 193,-50231 }, { 194,-50231 }, { 195,-50231 }, { 196,-50231 }, { 197,-50231 }, + { 198,-50231 }, { 199,-50231 }, { 200,-50231 }, { 201,-50231 }, { 202,-50231 }, + + { 203,-50231 }, { 204,-50231 }, { 205,-50231 }, { 206,-50231 }, { 207,-50231 }, + { 208,-50231 }, { 209,-50231 }, { 210,-50231 }, { 211,-50231 }, { 212,-50231 }, + { 213,-50231 }, { 214,-50231 }, { 215,-50231 }, { 216,-50231 }, { 217,-50231 }, + { 218,-50231 }, { 219,-50231 }, { 220,-50231 }, { 221,-50231 }, { 222,-50231 }, + { 223,-50231 }, { 224,-50231 }, { 225,-50231 }, { 226,-50231 }, { 227,-50231 }, + { 228,-50231 }, { 229,-50231 }, { 230,-50231 }, { 231,-50231 }, { 232,-50231 }, + { 233,-50231 }, { 234,-50231 }, { 235,-50231 }, { 236,-50231 }, { 237,-50231 }, + { 238,-50231 }, { 239,-50231 }, { 240,-50231 }, { 241,-50231 }, { 242,-50231 }, + { 243,-50231 }, { 244,-50231 }, { 245,-50231 }, { 246,-50231 }, { 247,-50231 }, + { 248,-50231 }, { 249,-50231 }, { 250,-50231 }, { 251,-50231 }, { 252,-50231 }, + + { 253,-50231 }, { 254,-50231 }, { 255,-50231 }, { 0, 131 }, { 0,41635 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-50488 }, { 49,-50488 }, { 50,-50488 }, + { 51,-50488 }, { 52,-50488 }, { 53,-50488 }, { 54,-50488 }, { 55,-50488 }, + { 56,-50488 }, { 57,-50488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-50488 }, + { 66,-50488 }, { 67,-50488 }, { 68,-50488 }, { 69,-50488 }, { 70,-50488 }, + { 71,-50488 }, { 72,-50488 }, { 73,-50488 }, { 74,-50488 }, { 75,-50488 }, + { 76,-50488 }, { 77,11308 }, { 78,-50488 }, { 79,-50488 }, { 80,-50488 }, + { 81,-50488 }, { 82,-50488 }, { 83,-50488 }, { 84,-50488 }, { 85,-50488 }, + { 86,-50488 }, { 87,-50488 }, { 88,-50488 }, { 89,-50488 }, { 90,-50488 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-50488 }, + + { 0, 0 }, { 97,-50488 }, { 98,-50488 }, { 99,-50488 }, { 100,-50488 }, + { 101,-50488 }, { 102,-50488 }, { 103,-50488 }, { 104,-50488 }, { 105,-50488 }, + { 106,-50488 }, { 107,-50488 }, { 108,-50488 }, { 109,11308 }, { 110,-50488 }, + { 111,-50488 }, { 112,-50488 }, { 113,-50488 }, { 114,-50488 }, { 115,-50488 }, + { 116,-50488 }, { 117,-50488 }, { 118,-50488 }, { 119,-50488 }, { 120,-50488 }, + { 121,-50488 }, { 122,-50488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-50488 }, { 128,-50488 }, { 129,-50488 }, { 130,-50488 }, + { 131,-50488 }, { 132,-50488 }, { 133,-50488 }, { 134,-50488 }, { 135,-50488 }, + { 136,-50488 }, { 137,-50488 }, { 138,-50488 }, { 139,-50488 }, { 140,-50488 }, + { 141,-50488 }, { 142,-50488 }, { 143,-50488 }, { 144,-50488 }, { 145,-50488 }, + + { 146,-50488 }, { 147,-50488 }, { 148,-50488 }, { 149,-50488 }, { 150,-50488 }, + { 151,-50488 }, { 152,-50488 }, { 153,-50488 }, { 154,-50488 }, { 155,-50488 }, + { 156,-50488 }, { 157,-50488 }, { 158,-50488 }, { 159,-50488 }, { 160,-50488 }, + { 161,-50488 }, { 162,-50488 }, { 163,-50488 }, { 164,-50488 }, { 165,-50488 }, + { 166,-50488 }, { 167,-50488 }, { 168,-50488 }, { 169,-50488 }, { 170,-50488 }, + { 171,-50488 }, { 172,-50488 }, { 173,-50488 }, { 174,-50488 }, { 175,-50488 }, + { 176,-50488 }, { 177,-50488 }, { 178,-50488 }, { 179,-50488 }, { 180,-50488 }, + { 181,-50488 }, { 182,-50488 }, { 183,-50488 }, { 184,-50488 }, { 185,-50488 }, + { 186,-50488 }, { 187,-50488 }, { 188,-50488 }, { 189,-50488 }, { 190,-50488 }, + { 191,-50488 }, { 192,-50488 }, { 193,-50488 }, { 194,-50488 }, { 195,-50488 }, + + { 196,-50488 }, { 197,-50488 }, { 198,-50488 }, { 199,-50488 }, { 200,-50488 }, + { 201,-50488 }, { 202,-50488 }, { 203,-50488 }, { 204,-50488 }, { 205,-50488 }, + { 206,-50488 }, { 207,-50488 }, { 208,-50488 }, { 209,-50488 }, { 210,-50488 }, + { 211,-50488 }, { 212,-50488 }, { 213,-50488 }, { 214,-50488 }, { 215,-50488 }, + { 216,-50488 }, { 217,-50488 }, { 218,-50488 }, { 219,-50488 }, { 220,-50488 }, + { 221,-50488 }, { 222,-50488 }, { 223,-50488 }, { 224,-50488 }, { 225,-50488 }, + { 226,-50488 }, { 227,-50488 }, { 228,-50488 }, { 229,-50488 }, { 230,-50488 }, + { 231,-50488 }, { 232,-50488 }, { 233,-50488 }, { 234,-50488 }, { 235,-50488 }, + { 236,-50488 }, { 237,-50488 }, { 238,-50488 }, { 239,-50488 }, { 240,-50488 }, + { 241,-50488 }, { 242,-50488 }, { 243,-50488 }, { 244,-50488 }, { 245,-50488 }, + + { 246,-50488 }, { 247,-50488 }, { 248,-50488 }, { 249,-50488 }, { 250,-50488 }, + { 251,-50488 }, { 252,-50488 }, { 253,-50488 }, { 254,-50488 }, { 255,-50488 }, + { 0, 131 }, { 0,41378 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-50745 }, + { 49,-50745 }, { 50,-50745 }, { 51,-50745 }, { 52,-50745 }, { 53,-50745 }, + { 54,-50745 }, { 55,-50745 }, { 56,-50745 }, { 57,-50745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-50745 }, { 66,-50745 }, { 67,-50745 }, { 68,11308 }, + { 69,-50745 }, { 70,-50745 }, { 71,-50745 }, { 72,-50745 }, { 73,-50745 }, + { 74,-50745 }, { 75,-50745 }, { 76,-50745 }, { 77,-50745 }, { 78,-50745 }, + { 79,-50745 }, { 80,-50745 }, { 81,-50745 }, { 82,-50745 }, { 83,-50745 }, + { 84,-50745 }, { 85,-50745 }, { 86,-50745 }, { 87,-50745 }, { 88,-50745 }, + + { 89,-50745 }, { 90,-50745 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-50745 }, { 0, 0 }, { 97,-50745 }, { 98,-50745 }, + { 99,-50745 }, { 100,11308 }, { 101,-50745 }, { 102,-50745 }, { 103,-50745 }, + { 104,-50745 }, { 105,-50745 }, { 106,-50745 }, { 107,-50745 }, { 108,-50745 }, + { 109,-50745 }, { 110,-50745 }, { 111,-50745 }, { 112,-50745 }, { 113,-50745 }, + { 114,-50745 }, { 115,-50745 }, { 116,-50745 }, { 117,-50745 }, { 118,-50745 }, + { 119,-50745 }, { 120,-50745 }, { 121,-50745 }, { 122,-50745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-50745 }, { 128,-50745 }, + { 129,-50745 }, { 130,-50745 }, { 131,-50745 }, { 132,-50745 }, { 133,-50745 }, + { 134,-50745 }, { 135,-50745 }, { 136,-50745 }, { 137,-50745 }, { 138,-50745 }, + + { 139,-50745 }, { 140,-50745 }, { 141,-50745 }, { 142,-50745 }, { 143,-50745 }, + { 144,-50745 }, { 145,-50745 }, { 146,-50745 }, { 147,-50745 }, { 148,-50745 }, + { 149,-50745 }, { 150,-50745 }, { 151,-50745 }, { 152,-50745 }, { 153,-50745 }, + { 154,-50745 }, { 155,-50745 }, { 156,-50745 }, { 157,-50745 }, { 158,-50745 }, + { 159,-50745 }, { 160,-50745 }, { 161,-50745 }, { 162,-50745 }, { 163,-50745 }, + { 164,-50745 }, { 165,-50745 }, { 166,-50745 }, { 167,-50745 }, { 168,-50745 }, + { 169,-50745 }, { 170,-50745 }, { 171,-50745 }, { 172,-50745 }, { 173,-50745 }, + { 174,-50745 }, { 175,-50745 }, { 176,-50745 }, { 177,-50745 }, { 178,-50745 }, + { 179,-50745 }, { 180,-50745 }, { 181,-50745 }, { 182,-50745 }, { 183,-50745 }, + { 184,-50745 }, { 185,-50745 }, { 186,-50745 }, { 187,-50745 }, { 188,-50745 }, + + { 189,-50745 }, { 190,-50745 }, { 191,-50745 }, { 192,-50745 }, { 193,-50745 }, + { 194,-50745 }, { 195,-50745 }, { 196,-50745 }, { 197,-50745 }, { 198,-50745 }, + { 199,-50745 }, { 200,-50745 }, { 201,-50745 }, { 202,-50745 }, { 203,-50745 }, + { 204,-50745 }, { 205,-50745 }, { 206,-50745 }, { 207,-50745 }, { 208,-50745 }, + { 209,-50745 }, { 210,-50745 }, { 211,-50745 }, { 212,-50745 }, { 213,-50745 }, + { 214,-50745 }, { 215,-50745 }, { 216,-50745 }, { 217,-50745 }, { 218,-50745 }, + { 219,-50745 }, { 220,-50745 }, { 221,-50745 }, { 222,-50745 }, { 223,-50745 }, + { 224,-50745 }, { 225,-50745 }, { 226,-50745 }, { 227,-50745 }, { 228,-50745 }, + { 229,-50745 }, { 230,-50745 }, { 231,-50745 }, { 232,-50745 }, { 233,-50745 }, + { 234,-50745 }, { 235,-50745 }, { 236,-50745 }, { 237,-50745 }, { 238,-50745 }, + + { 239,-50745 }, { 240,-50745 }, { 241,-50745 }, { 242,-50745 }, { 243,-50745 }, + { 244,-50745 }, { 245,-50745 }, { 246,-50745 }, { 247,-50745 }, { 248,-50745 }, + { 249,-50745 }, { 250,-50745 }, { 251,-50745 }, { 252,-50745 }, { 253,-50745 }, + { 254,-50745 }, { 255,-50745 }, { 0, 131 }, { 0,41121 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-51002 }, { 49,-51002 }, { 50,-51002 }, { 51,-51002 }, + { 52,-51002 }, { 53,-51002 }, { 54,-51002 }, { 55,-51002 }, { 56,-51002 }, + { 57,-51002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-51002 }, { 66,-51002 }, + { 67,-51002 }, { 68,-51002 }, { 69,-51002 }, { 70,-51002 }, { 71,-51002 }, + { 72,-51002 }, { 73,-51002 }, { 74,-51002 }, { 75,-51002 }, { 76,-51002 }, + { 77,-51002 }, { 78,11308 }, { 79,-51002 }, { 80,-51002 }, { 81,-51002 }, + + { 82,-51002 }, { 83,-51002 }, { 84,-51002 }, { 85,-51002 }, { 86,-51002 }, + { 87,-51002 }, { 88,-51002 }, { 89,-51002 }, { 90,-51002 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-51002 }, { 0, 0 }, + { 97,-51002 }, { 98,-51002 }, { 99,-51002 }, { 100,-51002 }, { 101,-51002 }, + { 102,-51002 }, { 103,-51002 }, { 104,-51002 }, { 105,-51002 }, { 106,-51002 }, + { 107,-51002 }, { 108,-51002 }, { 109,-51002 }, { 110,11308 }, { 111,-51002 }, + { 112,-51002 }, { 113,-51002 }, { 114,-51002 }, { 115,-51002 }, { 116,-51002 }, + { 117,-51002 }, { 118,-51002 }, { 119,-51002 }, { 120,-51002 }, { 121,-51002 }, + { 122,-51002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-51002 }, { 128,-51002 }, { 129,-51002 }, { 130,-51002 }, { 131,-51002 }, + + { 132,-51002 }, { 133,-51002 }, { 134,-51002 }, { 135,-51002 }, { 136,-51002 }, + { 137,-51002 }, { 138,-51002 }, { 139,-51002 }, { 140,-51002 }, { 141,-51002 }, + { 142,-51002 }, { 143,-51002 }, { 144,-51002 }, { 145,-51002 }, { 146,-51002 }, + { 147,-51002 }, { 148,-51002 }, { 149,-51002 }, { 150,-51002 }, { 151,-51002 }, + { 152,-51002 }, { 153,-51002 }, { 154,-51002 }, { 155,-51002 }, { 156,-51002 }, + { 157,-51002 }, { 158,-51002 }, { 159,-51002 }, { 160,-51002 }, { 161,-51002 }, + { 162,-51002 }, { 163,-51002 }, { 164,-51002 }, { 165,-51002 }, { 166,-51002 }, + { 167,-51002 }, { 168,-51002 }, { 169,-51002 }, { 170,-51002 }, { 171,-51002 }, + { 172,-51002 }, { 173,-51002 }, { 174,-51002 }, { 175,-51002 }, { 176,-51002 }, + { 177,-51002 }, { 178,-51002 }, { 179,-51002 }, { 180,-51002 }, { 181,-51002 }, + + { 182,-51002 }, { 183,-51002 }, { 184,-51002 }, { 185,-51002 }, { 186,-51002 }, + { 187,-51002 }, { 188,-51002 }, { 189,-51002 }, { 190,-51002 }, { 191,-51002 }, + { 192,-51002 }, { 193,-51002 }, { 194,-51002 }, { 195,-51002 }, { 196,-51002 }, + { 197,-51002 }, { 198,-51002 }, { 199,-51002 }, { 200,-51002 }, { 201,-51002 }, + { 202,-51002 }, { 203,-51002 }, { 204,-51002 }, { 205,-51002 }, { 206,-51002 }, + { 207,-51002 }, { 208,-51002 }, { 209,-51002 }, { 210,-51002 }, { 211,-51002 }, + { 212,-51002 }, { 213,-51002 }, { 214,-51002 }, { 215,-51002 }, { 216,-51002 }, + { 217,-51002 }, { 218,-51002 }, { 219,-51002 }, { 220,-51002 }, { 221,-51002 }, + { 222,-51002 }, { 223,-51002 }, { 224,-51002 }, { 225,-51002 }, { 226,-51002 }, + { 227,-51002 }, { 228,-51002 }, { 229,-51002 }, { 230,-51002 }, { 231,-51002 }, + + { 232,-51002 }, { 233,-51002 }, { 234,-51002 }, { 235,-51002 }, { 236,-51002 }, + { 237,-51002 }, { 238,-51002 }, { 239,-51002 }, { 240,-51002 }, { 241,-51002 }, + { 242,-51002 }, { 243,-51002 }, { 244,-51002 }, { 245,-51002 }, { 246,-51002 }, + { 247,-51002 }, { 248,-51002 }, { 249,-51002 }, { 250,-51002 }, { 251,-51002 }, + { 252,-51002 }, { 253,-51002 }, { 254,-51002 }, { 255,-51002 }, { 0, 131 }, + { 0,40864 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-51259 }, { 49,-51259 }, + { 50,-51259 }, { 51,-51259 }, { 52,-51259 }, { 53,-51259 }, { 54,-51259 }, + { 55,-51259 }, { 56,-51259 }, { 57,-51259 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,11308 }, { 66,-51259 }, { 67,-51259 }, { 68,-51259 }, { 69,-51259 }, + { 70,-51259 }, { 71,-51259 }, { 72,-51259 }, { 73,-51259 }, { 74,-51259 }, + + { 75,-51259 }, { 76,-51259 }, { 77,-51259 }, { 78,-51259 }, { 79,-51259 }, + { 80,-51259 }, { 81,-51259 }, { 82,-51259 }, { 83,-51259 }, { 84,-51259 }, + { 85,-51259 }, { 86,-51259 }, { 87,-51259 }, { 88,-51259 }, { 89,-51259 }, + { 90,-51259 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-51259 }, { 0, 0 }, { 97,11308 }, { 98,-51259 }, { 99,-51259 }, + { 100,-51259 }, { 101,-51259 }, { 102,-51259 }, { 103,-51259 }, { 104,-51259 }, + { 105,-51259 }, { 106,-51259 }, { 107,-51259 }, { 108,-51259 }, { 109,-51259 }, + { 110,-51259 }, { 111,-51259 }, { 112,-51259 }, { 113,-51259 }, { 114,-51259 }, + { 115,-51259 }, { 116,-51259 }, { 117,-51259 }, { 118,-51259 }, { 119,-51259 }, + { 120,-51259 }, { 121,-51259 }, { 122,-51259 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-51259 }, { 128,-51259 }, { 129,-51259 }, + { 130,-51259 }, { 131,-51259 }, { 132,-51259 }, { 133,-51259 }, { 134,-51259 }, + { 135,-51259 }, { 136,-51259 }, { 137,-51259 }, { 138,-51259 }, { 139,-51259 }, + { 140,-51259 }, { 141,-51259 }, { 142,-51259 }, { 143,-51259 }, { 144,-51259 }, + { 145,-51259 }, { 146,-51259 }, { 147,-51259 }, { 148,-51259 }, { 149,-51259 }, + { 150,-51259 }, { 151,-51259 }, { 152,-51259 }, { 153,-51259 }, { 154,-51259 }, + { 155,-51259 }, { 156,-51259 }, { 157,-51259 }, { 158,-51259 }, { 159,-51259 }, + { 160,-51259 }, { 161,-51259 }, { 162,-51259 }, { 163,-51259 }, { 164,-51259 }, + { 165,-51259 }, { 166,-51259 }, { 167,-51259 }, { 168,-51259 }, { 169,-51259 }, + { 170,-51259 }, { 171,-51259 }, { 172,-51259 }, { 173,-51259 }, { 174,-51259 }, + + { 175,-51259 }, { 176,-51259 }, { 177,-51259 }, { 178,-51259 }, { 179,-51259 }, + { 180,-51259 }, { 181,-51259 }, { 182,-51259 }, { 183,-51259 }, { 184,-51259 }, + { 185,-51259 }, { 186,-51259 }, { 187,-51259 }, { 188,-51259 }, { 189,-51259 }, + { 190,-51259 }, { 191,-51259 }, { 192,-51259 }, { 193,-51259 }, { 194,-51259 }, + { 195,-51259 }, { 196,-51259 }, { 197,-51259 }, { 198,-51259 }, { 199,-51259 }, + { 200,-51259 }, { 201,-51259 }, { 202,-51259 }, { 203,-51259 }, { 204,-51259 }, + { 205,-51259 }, { 206,-51259 }, { 207,-51259 }, { 208,-51259 }, { 209,-51259 }, + { 210,-51259 }, { 211,-51259 }, { 212,-51259 }, { 213,-51259 }, { 214,-51259 }, + { 215,-51259 }, { 216,-51259 }, { 217,-51259 }, { 218,-51259 }, { 219,-51259 }, + { 220,-51259 }, { 221,-51259 }, { 222,-51259 }, { 223,-51259 }, { 224,-51259 }, + + { 225,-51259 }, { 226,-51259 }, { 227,-51259 }, { 228,-51259 }, { 229,-51259 }, + { 230,-51259 }, { 231,-51259 }, { 232,-51259 }, { 233,-51259 }, { 234,-51259 }, + { 235,-51259 }, { 236,-51259 }, { 237,-51259 }, { 238,-51259 }, { 239,-51259 }, + { 240,-51259 }, { 241,-51259 }, { 242,-51259 }, { 243,-51259 }, { 244,-51259 }, + { 245,-51259 }, { 246,-51259 }, { 247,-51259 }, { 248,-51259 }, { 249,-51259 }, + { 250,-51259 }, { 251,-51259 }, { 252,-51259 }, { 253,-51259 }, { 254,-51259 }, + { 255,-51259 }, { 0, 131 }, { 0,40607 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-51516 }, { 49,-51516 }, { 50,-51516 }, { 51,-51516 }, { 52,-51516 }, + { 53,-51516 }, { 54,-51516 }, { 55,-51516 }, { 56,-51516 }, { 57,-51516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-51516 }, { 66,-51516 }, { 67,-51516 }, + + { 68,-51516 }, { 69,-51516 }, { 70,11308 }, { 71,-51516 }, { 72,-51516 }, + { 73,-51516 }, { 74,-51516 }, { 75,-51516 }, { 76,-51516 }, { 77,-51516 }, + { 78,-51516 }, { 79,-51516 }, { 80,-51516 }, { 81,-51516 }, { 82,-51516 }, + { 83,-51516 }, { 84,-51516 }, { 85,-51516 }, { 86,-51516 }, { 87,-51516 }, + { 88,-51516 }, { 89,-51516 }, { 90,-51516 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-51516 }, { 0, 0 }, { 97,-51516 }, + { 98,-51516 }, { 99,-51516 }, { 100,-51516 }, { 101,-51516 }, { 102,11308 }, + { 103,-51516 }, { 104,-51516 }, { 105,-51516 }, { 106,-51516 }, { 107,-51516 }, + { 108,-51516 }, { 109,-51516 }, { 110,-51516 }, { 111,-51516 }, { 112,-51516 }, + { 113,-51516 }, { 114,-51516 }, { 115,-51516 }, { 116,-51516 }, { 117,-51516 }, + + { 118,-51516 }, { 119,-51516 }, { 120,-51516 }, { 121,-51516 }, { 122,-51516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-51516 }, + { 128,-51516 }, { 129,-51516 }, { 130,-51516 }, { 131,-51516 }, { 132,-51516 }, + { 133,-51516 }, { 134,-51516 }, { 135,-51516 }, { 136,-51516 }, { 137,-51516 }, + { 138,-51516 }, { 139,-51516 }, { 140,-51516 }, { 141,-51516 }, { 142,-51516 }, + { 143,-51516 }, { 144,-51516 }, { 145,-51516 }, { 146,-51516 }, { 147,-51516 }, + { 148,-51516 }, { 149,-51516 }, { 150,-51516 }, { 151,-51516 }, { 152,-51516 }, + { 153,-51516 }, { 154,-51516 }, { 155,-51516 }, { 156,-51516 }, { 157,-51516 }, + { 158,-51516 }, { 159,-51516 }, { 160,-51516 }, { 161,-51516 }, { 162,-51516 }, + { 163,-51516 }, { 164,-51516 }, { 165,-51516 }, { 166,-51516 }, { 167,-51516 }, + + { 168,-51516 }, { 169,-51516 }, { 170,-51516 }, { 171,-51516 }, { 172,-51516 }, + { 173,-51516 }, { 174,-51516 }, { 175,-51516 }, { 176,-51516 }, { 177,-51516 }, + { 178,-51516 }, { 179,-51516 }, { 180,-51516 }, { 181,-51516 }, { 182,-51516 }, + { 183,-51516 }, { 184,-51516 }, { 185,-51516 }, { 186,-51516 }, { 187,-51516 }, + { 188,-51516 }, { 189,-51516 }, { 190,-51516 }, { 191,-51516 }, { 192,-51516 }, + { 193,-51516 }, { 194,-51516 }, { 195,-51516 }, { 196,-51516 }, { 197,-51516 }, + { 198,-51516 }, { 199,-51516 }, { 200,-51516 }, { 201,-51516 }, { 202,-51516 }, + { 203,-51516 }, { 204,-51516 }, { 205,-51516 }, { 206,-51516 }, { 207,-51516 }, + { 208,-51516 }, { 209,-51516 }, { 210,-51516 }, { 211,-51516 }, { 212,-51516 }, + { 213,-51516 }, { 214,-51516 }, { 215,-51516 }, { 216,-51516 }, { 217,-51516 }, + + { 218,-51516 }, { 219,-51516 }, { 220,-51516 }, { 221,-51516 }, { 222,-51516 }, + { 223,-51516 }, { 224,-51516 }, { 225,-51516 }, { 226,-51516 }, { 227,-51516 }, + { 228,-51516 }, { 229,-51516 }, { 230,-51516 }, { 231,-51516 }, { 232,-51516 }, + { 233,-51516 }, { 234,-51516 }, { 235,-51516 }, { 236,-51516 }, { 237,-51516 }, + { 238,-51516 }, { 239,-51516 }, { 240,-51516 }, { 241,-51516 }, { 242,-51516 }, + { 243,-51516 }, { 244,-51516 }, { 245,-51516 }, { 246,-51516 }, { 247,-51516 }, + { 248,-51516 }, { 249,-51516 }, { 250,-51516 }, { 251,-51516 }, { 252,-51516 }, + { 253,-51516 }, { 254,-51516 }, { 255,-51516 }, { 0, 69 }, { 0,40350 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-51773 }, { 49,-51773 }, { 50,-51773 }, + { 51,-51773 }, { 52,-51773 }, { 53,-51773 }, { 54,-51773 }, { 55,-51773 }, + { 56,-51773 }, { 57,-51773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-51773 }, + { 66,-51773 }, { 67,-51773 }, { 68,-51773 }, { 69,-51773 }, { 70,-51773 }, + { 71,-51773 }, { 72,-51773 }, { 73,-51773 }, { 74,-51773 }, { 75,-51773 }, + { 76,-51773 }, { 77,-51773 }, { 78,-51773 }, { 79,-51773 }, { 80,-51773 }, + { 81,-51773 }, { 82,-51773 }, { 83,-51773 }, { 84,-51773 }, { 85,-51773 }, + { 86,-51773 }, { 87,-51773 }, { 88,-51773 }, { 89,-51773 }, { 90,-51773 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-51773 }, + { 0, 0 }, { 97,-51773 }, { 98,-51773 }, { 99,-51773 }, { 100,-51773 }, + { 101,-51773 }, { 102,-51773 }, { 103,-51773 }, { 104,-51773 }, { 105,-51773 }, + { 106,-51773 }, { 107,-51773 }, { 108,-51773 }, { 109,-51773 }, { 110,-51773 }, + + { 111,-51773 }, { 112,-51773 }, { 113,-51773 }, { 114,-51773 }, { 115,-51773 }, + { 116,-51773 }, { 117,-51773 }, { 118,-51773 }, { 119,-51773 }, { 120,-51773 }, + { 121,-51773 }, { 122,-51773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-51773 }, { 128,-51773 }, { 129,-51773 }, { 130,-51773 }, + { 131,-51773 }, { 132,-51773 }, { 133,-51773 }, { 134,-51773 }, { 135,-51773 }, + { 136,-51773 }, { 137,-51773 }, { 138,-51773 }, { 139,-51773 }, { 140,-51773 }, + { 141,-51773 }, { 142,-51773 }, { 143,-51773 }, { 144,-51773 }, { 145,-51773 }, + { 146,-51773 }, { 147,-51773 }, { 148,-51773 }, { 149,-51773 }, { 150,-51773 }, + { 151,-51773 }, { 152,-51773 }, { 153,-51773 }, { 154,-51773 }, { 155,-51773 }, + { 156,-51773 }, { 157,-51773 }, { 158,-51773 }, { 159,-51773 }, { 160,-51773 }, + + { 161,-51773 }, { 162,-51773 }, { 163,-51773 }, { 164,-51773 }, { 165,-51773 }, + { 166,-51773 }, { 167,-51773 }, { 168,-51773 }, { 169,-51773 }, { 170,-51773 }, + { 171,-51773 }, { 172,-51773 }, { 173,-51773 }, { 174,-51773 }, { 175,-51773 }, + { 176,-51773 }, { 177,-51773 }, { 178,-51773 }, { 179,-51773 }, { 180,-51773 }, + { 181,-51773 }, { 182,-51773 }, { 183,-51773 }, { 184,-51773 }, { 185,-51773 }, + { 186,-51773 }, { 187,-51773 }, { 188,-51773 }, { 189,-51773 }, { 190,-51773 }, + { 191,-51773 }, { 192,-51773 }, { 193,-51773 }, { 194,-51773 }, { 195,-51773 }, + { 196,-51773 }, { 197,-51773 }, { 198,-51773 }, { 199,-51773 }, { 200,-51773 }, + { 201,-51773 }, { 202,-51773 }, { 203,-51773 }, { 204,-51773 }, { 205,-51773 }, + { 206,-51773 }, { 207,-51773 }, { 208,-51773 }, { 209,-51773 }, { 210,-51773 }, + + { 211,-51773 }, { 212,-51773 }, { 213,-51773 }, { 214,-51773 }, { 215,-51773 }, + { 216,-51773 }, { 217,-51773 }, { 218,-51773 }, { 219,-51773 }, { 220,-51773 }, + { 221,-51773 }, { 222,-51773 }, { 223,-51773 }, { 224,-51773 }, { 225,-51773 }, + { 226,-51773 }, { 227,-51773 }, { 228,-51773 }, { 229,-51773 }, { 230,-51773 }, + { 231,-51773 }, { 232,-51773 }, { 233,-51773 }, { 234,-51773 }, { 235,-51773 }, + { 236,-51773 }, { 237,-51773 }, { 238,-51773 }, { 239,-51773 }, { 240,-51773 }, + { 241,-51773 }, { 242,-51773 }, { 243,-51773 }, { 244,-51773 }, { 245,-51773 }, + { 246,-51773 }, { 247,-51773 }, { 248,-51773 }, { 249,-51773 }, { 250,-51773 }, + { 251,-51773 }, { 252,-51773 }, { 253,-51773 }, { 254,-51773 }, { 255,-51773 }, + { 0, 131 }, { 0,40093 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-52030 }, + { 49,-52030 }, { 50,-52030 }, { 51,-52030 }, { 52,-52030 }, { 53,-52030 }, + + { 54,-52030 }, { 55,-52030 }, { 56,-52030 }, { 57,-52030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-52030 }, { 66,-52030 }, { 67,-52030 }, { 68,-52030 }, + { 69,-52030 }, { 70,-52030 }, { 71,-52030 }, { 72,-52030 }, { 73,-52030 }, + { 74,-52030 }, { 75,-52030 }, { 76,-52030 }, { 77,-52030 }, { 78,-52030 }, + { 79,-52030 }, { 80,11051 }, { 81,-52030 }, { 82,-52030 }, { 83,-52030 }, + { 84,-52030 }, { 85,-52030 }, { 86,-52030 }, { 87,-52030 }, { 88,-52030 }, + { 89,-52030 }, { 90,-52030 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-52030 }, { 0, 0 }, { 97,-52030 }, { 98,-52030 }, + { 99,-52030 }, { 100,-52030 }, { 101,-52030 }, { 102,-52030 }, { 103,-52030 }, + + { 104,-52030 }, { 105,-52030 }, { 106,-52030 }, { 107,-52030 }, { 108,-52030 }, + { 109,-52030 }, { 110,-52030 }, { 111,-52030 }, { 112,11051 }, { 113,-52030 }, + { 114,-52030 }, { 115,-52030 }, { 116,-52030 }, { 117,-52030 }, { 118,-52030 }, + { 119,-52030 }, { 120,-52030 }, { 121,-52030 }, { 122,-52030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-52030 }, { 128,-52030 }, + { 129,-52030 }, { 130,-52030 }, { 131,-52030 }, { 132,-52030 }, { 133,-52030 }, + { 134,-52030 }, { 135,-52030 }, { 136,-52030 }, { 137,-52030 }, { 138,-52030 }, + { 139,-52030 }, { 140,-52030 }, { 141,-52030 }, { 142,-52030 }, { 143,-52030 }, + { 144,-52030 }, { 145,-52030 }, { 146,-52030 }, { 147,-52030 }, { 148,-52030 }, + { 149,-52030 }, { 150,-52030 }, { 151,-52030 }, { 152,-52030 }, { 153,-52030 }, + + { 154,-52030 }, { 155,-52030 }, { 156,-52030 }, { 157,-52030 }, { 158,-52030 }, + { 159,-52030 }, { 160,-52030 }, { 161,-52030 }, { 162,-52030 }, { 163,-52030 }, + { 164,-52030 }, { 165,-52030 }, { 166,-52030 }, { 167,-52030 }, { 168,-52030 }, + { 169,-52030 }, { 170,-52030 }, { 171,-52030 }, { 172,-52030 }, { 173,-52030 }, + { 174,-52030 }, { 175,-52030 }, { 176,-52030 }, { 177,-52030 }, { 178,-52030 }, + { 179,-52030 }, { 180,-52030 }, { 181,-52030 }, { 182,-52030 }, { 183,-52030 }, + { 184,-52030 }, { 185,-52030 }, { 186,-52030 }, { 187,-52030 }, { 188,-52030 }, + { 189,-52030 }, { 190,-52030 }, { 191,-52030 }, { 192,-52030 }, { 193,-52030 }, + { 194,-52030 }, { 195,-52030 }, { 196,-52030 }, { 197,-52030 }, { 198,-52030 }, + { 199,-52030 }, { 200,-52030 }, { 201,-52030 }, { 202,-52030 }, { 203,-52030 }, + + { 204,-52030 }, { 205,-52030 }, { 206,-52030 }, { 207,-52030 }, { 208,-52030 }, + { 209,-52030 }, { 210,-52030 }, { 211,-52030 }, { 212,-52030 }, { 213,-52030 }, + { 214,-52030 }, { 215,-52030 }, { 216,-52030 }, { 217,-52030 }, { 218,-52030 }, + { 219,-52030 }, { 220,-52030 }, { 221,-52030 }, { 222,-52030 }, { 223,-52030 }, + { 224,-52030 }, { 225,-52030 }, { 226,-52030 }, { 227,-52030 }, { 228,-52030 }, + { 229,-52030 }, { 230,-52030 }, { 231,-52030 }, { 232,-52030 }, { 233,-52030 }, + { 234,-52030 }, { 235,-52030 }, { 236,-52030 }, { 237,-52030 }, { 238,-52030 }, + { 239,-52030 }, { 240,-52030 }, { 241,-52030 }, { 242,-52030 }, { 243,-52030 }, + { 244,-52030 }, { 245,-52030 }, { 246,-52030 }, { 247,-52030 }, { 248,-52030 }, + { 249,-52030 }, { 250,-52030 }, { 251,-52030 }, { 252,-52030 }, { 253,-52030 }, + + { 254,-52030 }, { 255,-52030 }, { 0, 26 }, { 0,39836 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-52287 }, { 49,-52287 }, { 50,-52287 }, { 51,-52287 }, + { 52,-52287 }, { 53,-52287 }, { 54,-52287 }, { 55,-52287 }, { 56,-52287 }, + { 57,-52287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-52287 }, { 66,-52287 }, + { 67,-52287 }, { 68,-52287 }, { 69,-52287 }, { 70,-52287 }, { 71,-52287 }, + { 72,-52287 }, { 73,-52287 }, { 74,-52287 }, { 75,-52287 }, { 76,-52287 }, + { 77,-52287 }, { 78,-52287 }, { 79,-52287 }, { 80,-52287 }, { 81,-52287 }, + { 82,-52287 }, { 83,-52287 }, { 84,-52287 }, { 85,-52287 }, { 86,-52287 }, + { 87,-52287 }, { 88,-52287 }, { 89,-52287 }, { 90,-52287 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-52287 }, { 0, 0 }, + + { 97,-52287 }, { 98,-52287 }, { 99,-52287 }, { 100,-52287 }, { 101,-52287 }, + { 102,-52287 }, { 103,-52287 }, { 104,-52287 }, { 105,-52287 }, { 106,-52287 }, + { 107,-52287 }, { 108,-52287 }, { 109,-52287 }, { 110,-52287 }, { 111,-52287 }, + { 112,-52287 }, { 113,-52287 }, { 114,-52287 }, { 115,-52287 }, { 116,-52287 }, + { 117,-52287 }, { 118,-52287 }, { 119,-52287 }, { 120,-52287 }, { 121,-52287 }, + { 122,-52287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-52287 }, { 128,-52287 }, { 129,-52287 }, { 130,-52287 }, { 131,-52287 }, + { 132,-52287 }, { 133,-52287 }, { 134,-52287 }, { 135,-52287 }, { 136,-52287 }, + { 137,-52287 }, { 138,-52287 }, { 139,-52287 }, { 140,-52287 }, { 141,-52287 }, + { 142,-52287 }, { 143,-52287 }, { 144,-52287 }, { 145,-52287 }, { 146,-52287 }, + + { 147,-52287 }, { 148,-52287 }, { 149,-52287 }, { 150,-52287 }, { 151,-52287 }, + { 152,-52287 }, { 153,-52287 }, { 154,-52287 }, { 155,-52287 }, { 156,-52287 }, + { 157,-52287 }, { 158,-52287 }, { 159,-52287 }, { 160,-52287 }, { 161,-52287 }, + { 162,-52287 }, { 163,-52287 }, { 164,-52287 }, { 165,-52287 }, { 166,-52287 }, + { 167,-52287 }, { 168,-52287 }, { 169,-52287 }, { 170,-52287 }, { 171,-52287 }, + { 172,-52287 }, { 173,-52287 }, { 174,-52287 }, { 175,-52287 }, { 176,-52287 }, + { 177,-52287 }, { 178,-52287 }, { 179,-52287 }, { 180,-52287 }, { 181,-52287 }, + { 182,-52287 }, { 183,-52287 }, { 184,-52287 }, { 185,-52287 }, { 186,-52287 }, + { 187,-52287 }, { 188,-52287 }, { 189,-52287 }, { 190,-52287 }, { 191,-52287 }, + { 192,-52287 }, { 193,-52287 }, { 194,-52287 }, { 195,-52287 }, { 196,-52287 }, + + { 197,-52287 }, { 198,-52287 }, { 199,-52287 }, { 200,-52287 }, { 201,-52287 }, + { 202,-52287 }, { 203,-52287 }, { 204,-52287 }, { 205,-52287 }, { 206,-52287 }, + { 207,-52287 }, { 208,-52287 }, { 209,-52287 }, { 210,-52287 }, { 211,-52287 }, + { 212,-52287 }, { 213,-52287 }, { 214,-52287 }, { 215,-52287 }, { 216,-52287 }, + { 217,-52287 }, { 218,-52287 }, { 219,-52287 }, { 220,-52287 }, { 221,-52287 }, + { 222,-52287 }, { 223,-52287 }, { 224,-52287 }, { 225,-52287 }, { 226,-52287 }, + { 227,-52287 }, { 228,-52287 }, { 229,-52287 }, { 230,-52287 }, { 231,-52287 }, + { 232,-52287 }, { 233,-52287 }, { 234,-52287 }, { 235,-52287 }, { 236,-52287 }, + { 237,-52287 }, { 238,-52287 }, { 239,-52287 }, { 240,-52287 }, { 241,-52287 }, + { 242,-52287 }, { 243,-52287 }, { 244,-52287 }, { 245,-52287 }, { 246,-52287 }, + + { 247,-52287 }, { 248,-52287 }, { 249,-52287 }, { 250,-52287 }, { 251,-52287 }, + { 252,-52287 }, { 253,-52287 }, { 254,-52287 }, { 255,-52287 }, { 0, 131 }, + { 0,39579 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-52544 }, { 49,-52544 }, + { 50,-52544 }, { 51,-52544 }, { 52,-52544 }, { 53,-52544 }, { 54,-52544 }, + { 55,-52544 }, { 56,-52544 }, { 57,-52544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-52544 }, { 66,-52544 }, { 67,-52544 }, { 68,-52544 }, { 69,-52544 }, + { 70,-52544 }, { 71,-52544 }, { 72,-52544 }, { 73,-52544 }, { 74,-52544 }, + { 75,-52544 }, { 76,-52544 }, { 77,-52544 }, { 78,-52544 }, { 79,-52544 }, + { 80,-52544 }, { 81,-52544 }, { 82,-52544 }, { 83,-52544 }, { 84,10794 }, + { 85,-52544 }, { 86,-52544 }, { 87,-52544 }, { 88,-52544 }, { 89,-52544 }, + + { 90,-52544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-52544 }, { 0, 0 }, { 97,-52544 }, { 98,-52544 }, { 99,-52544 }, + { 100,-52544 }, { 101,-52544 }, { 102,-52544 }, { 103,-52544 }, { 104,-52544 }, + { 105,-52544 }, { 106,-52544 }, { 107,-52544 }, { 108,-52544 }, { 109,-52544 }, + { 110,-52544 }, { 111,-52544 }, { 112,-52544 }, { 113,-52544 }, { 114,-52544 }, + { 115,-52544 }, { 116,10794 }, { 117,-52544 }, { 118,-52544 }, { 119,-52544 }, + { 120,-52544 }, { 121,-52544 }, { 122,-52544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-52544 }, { 128,-52544 }, { 129,-52544 }, + { 130,-52544 }, { 131,-52544 }, { 132,-52544 }, { 133,-52544 }, { 134,-52544 }, + { 135,-52544 }, { 136,-52544 }, { 137,-52544 }, { 138,-52544 }, { 139,-52544 }, + + { 140,-52544 }, { 141,-52544 }, { 142,-52544 }, { 143,-52544 }, { 144,-52544 }, + { 145,-52544 }, { 146,-52544 }, { 147,-52544 }, { 148,-52544 }, { 149,-52544 }, + { 150,-52544 }, { 151,-52544 }, { 152,-52544 }, { 153,-52544 }, { 154,-52544 }, + { 155,-52544 }, { 156,-52544 }, { 157,-52544 }, { 158,-52544 }, { 159,-52544 }, + { 160,-52544 }, { 161,-52544 }, { 162,-52544 }, { 163,-52544 }, { 164,-52544 }, + { 165,-52544 }, { 166,-52544 }, { 167,-52544 }, { 168,-52544 }, { 169,-52544 }, + { 170,-52544 }, { 171,-52544 }, { 172,-52544 }, { 173,-52544 }, { 174,-52544 }, + { 175,-52544 }, { 176,-52544 }, { 177,-52544 }, { 178,-52544 }, { 179,-52544 }, + { 180,-52544 }, { 181,-52544 }, { 182,-52544 }, { 183,-52544 }, { 184,-52544 }, + { 185,-52544 }, { 186,-52544 }, { 187,-52544 }, { 188,-52544 }, { 189,-52544 }, + + { 190,-52544 }, { 191,-52544 }, { 192,-52544 }, { 193,-52544 }, { 194,-52544 }, + { 195,-52544 }, { 196,-52544 }, { 197,-52544 }, { 198,-52544 }, { 199,-52544 }, + { 200,-52544 }, { 201,-52544 }, { 202,-52544 }, { 203,-52544 }, { 204,-52544 }, + { 205,-52544 }, { 206,-52544 }, { 207,-52544 }, { 208,-52544 }, { 209,-52544 }, + { 210,-52544 }, { 211,-52544 }, { 212,-52544 }, { 213,-52544 }, { 214,-52544 }, + { 215,-52544 }, { 216,-52544 }, { 217,-52544 }, { 218,-52544 }, { 219,-52544 }, + { 220,-52544 }, { 221,-52544 }, { 222,-52544 }, { 223,-52544 }, { 224,-52544 }, + { 225,-52544 }, { 226,-52544 }, { 227,-52544 }, { 228,-52544 }, { 229,-52544 }, + { 230,-52544 }, { 231,-52544 }, { 232,-52544 }, { 233,-52544 }, { 234,-52544 }, + { 235,-52544 }, { 236,-52544 }, { 237,-52544 }, { 238,-52544 }, { 239,-52544 }, + + { 240,-52544 }, { 241,-52544 }, { 242,-52544 }, { 243,-52544 }, { 244,-52544 }, + { 245,-52544 }, { 246,-52544 }, { 247,-52544 }, { 248,-52544 }, { 249,-52544 }, + { 250,-52544 }, { 251,-52544 }, { 252,-52544 }, { 253,-52544 }, { 254,-52544 }, + { 255,-52544 }, { 0, 131 }, { 0,39322 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-52801 }, { 49,-52801 }, { 50,-52801 }, { 51,-52801 }, { 52,-52801 }, + { 53,-52801 }, { 54,-52801 }, { 55,-52801 }, { 56,-52801 }, { 57,-52801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-52801 }, { 66,-52801 }, { 67,10794 }, + { 68,-52801 }, { 69,-52801 }, { 70,-52801 }, { 71,-52801 }, { 72,-52801 }, + { 73,-52801 }, { 74,-52801 }, { 75,-52801 }, { 76,-52801 }, { 77,-52801 }, + { 78,-52801 }, { 79,-52801 }, { 80,-52801 }, { 81,-52801 }, { 82,-52801 }, + + { 83,-52801 }, { 84,-52801 }, { 85,-52801 }, { 86,-52801 }, { 87,-52801 }, + { 88,-52801 }, { 89,-52801 }, { 90,-52801 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-52801 }, { 0, 0 }, { 97,-52801 }, + { 98,-52801 }, { 99,10794 }, { 100,-52801 }, { 101,-52801 }, { 102,-52801 }, + { 103,-52801 }, { 104,-52801 }, { 105,-52801 }, { 106,-52801 }, { 107,-52801 }, + { 108,-52801 }, { 109,-52801 }, { 110,-52801 }, { 111,-52801 }, { 112,-52801 }, + { 113,-52801 }, { 114,-52801 }, { 115,-52801 }, { 116,-52801 }, { 117,-52801 }, + { 118,-52801 }, { 119,-52801 }, { 120,-52801 }, { 121,-52801 }, { 122,-52801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-52801 }, + { 128,-52801 }, { 129,-52801 }, { 130,-52801 }, { 131,-52801 }, { 132,-52801 }, + + { 133,-52801 }, { 134,-52801 }, { 135,-52801 }, { 136,-52801 }, { 137,-52801 }, + { 138,-52801 }, { 139,-52801 }, { 140,-52801 }, { 141,-52801 }, { 142,-52801 }, + { 143,-52801 }, { 144,-52801 }, { 145,-52801 }, { 146,-52801 }, { 147,-52801 }, + { 148,-52801 }, { 149,-52801 }, { 150,-52801 }, { 151,-52801 }, { 152,-52801 }, + { 153,-52801 }, { 154,-52801 }, { 155,-52801 }, { 156,-52801 }, { 157,-52801 }, + { 158,-52801 }, { 159,-52801 }, { 160,-52801 }, { 161,-52801 }, { 162,-52801 }, + { 163,-52801 }, { 164,-52801 }, { 165,-52801 }, { 166,-52801 }, { 167,-52801 }, + { 168,-52801 }, { 169,-52801 }, { 170,-52801 }, { 171,-52801 }, { 172,-52801 }, + { 173,-52801 }, { 174,-52801 }, { 175,-52801 }, { 176,-52801 }, { 177,-52801 }, + { 178,-52801 }, { 179,-52801 }, { 180,-52801 }, { 181,-52801 }, { 182,-52801 }, + + { 183,-52801 }, { 184,-52801 }, { 185,-52801 }, { 186,-52801 }, { 187,-52801 }, + { 188,-52801 }, { 189,-52801 }, { 190,-52801 }, { 191,-52801 }, { 192,-52801 }, + { 193,-52801 }, { 194,-52801 }, { 195,-52801 }, { 196,-52801 }, { 197,-52801 }, + { 198,-52801 }, { 199,-52801 }, { 200,-52801 }, { 201,-52801 }, { 202,-52801 }, + { 203,-52801 }, { 204,-52801 }, { 205,-52801 }, { 206,-52801 }, { 207,-52801 }, + { 208,-52801 }, { 209,-52801 }, { 210,-52801 }, { 211,-52801 }, { 212,-52801 }, + { 213,-52801 }, { 214,-52801 }, { 215,-52801 }, { 216,-52801 }, { 217,-52801 }, + { 218,-52801 }, { 219,-52801 }, { 220,-52801 }, { 221,-52801 }, { 222,-52801 }, + { 223,-52801 }, { 224,-52801 }, { 225,-52801 }, { 226,-52801 }, { 227,-52801 }, + { 228,-52801 }, { 229,-52801 }, { 230,-52801 }, { 231,-52801 }, { 232,-52801 }, + + { 233,-52801 }, { 234,-52801 }, { 235,-52801 }, { 236,-52801 }, { 237,-52801 }, + { 238,-52801 }, { 239,-52801 }, { 240,-52801 }, { 241,-52801 }, { 242,-52801 }, + { 243,-52801 }, { 244,-52801 }, { 245,-52801 }, { 246,-52801 }, { 247,-52801 }, + { 248,-52801 }, { 249,-52801 }, { 250,-52801 }, { 251,-52801 }, { 252,-52801 }, + { 253,-52801 }, { 254,-52801 }, { 255,-52801 }, { 0, 131 }, { 0,39065 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-53058 }, { 49,-53058 }, { 50,-53058 }, + { 51,-53058 }, { 52,-53058 }, { 53,-53058 }, { 54,-53058 }, { 55,-53058 }, + { 56,-53058 }, { 57,-53058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-53058 }, + { 66,-53058 }, { 67,10794 }, { 68,-53058 }, { 69,-53058 }, { 70,-53058 }, + { 71,-53058 }, { 72,-53058 }, { 73,-53058 }, { 74,-53058 }, { 75,-53058 }, + + { 76,-53058 }, { 77,-53058 }, { 78,-53058 }, { 79,-53058 }, { 80,-53058 }, + { 81,-53058 }, { 82,-53058 }, { 83,-53058 }, { 84,-53058 }, { 85,-53058 }, + { 86,-53058 }, { 87,-53058 }, { 88,-53058 }, { 89,-53058 }, { 90,-53058 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-53058 }, + { 0, 0 }, { 97,-53058 }, { 98,-53058 }, { 99,10794 }, { 100,-53058 }, + { 101,-53058 }, { 102,-53058 }, { 103,-53058 }, { 104,-53058 }, { 105,-53058 }, + { 106,-53058 }, { 107,-53058 }, { 108,-53058 }, { 109,-53058 }, { 110,-53058 }, + { 111,-53058 }, { 112,-53058 }, { 113,-53058 }, { 114,-53058 }, { 115,-53058 }, + { 116,-53058 }, { 117,-53058 }, { 118,-53058 }, { 119,-53058 }, { 120,-53058 }, + { 121,-53058 }, { 122,-53058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-53058 }, { 128,-53058 }, { 129,-53058 }, { 130,-53058 }, + { 131,-53058 }, { 132,-53058 }, { 133,-53058 }, { 134,-53058 }, { 135,-53058 }, + { 136,-53058 }, { 137,-53058 }, { 138,-53058 }, { 139,-53058 }, { 140,-53058 }, + { 141,-53058 }, { 142,-53058 }, { 143,-53058 }, { 144,-53058 }, { 145,-53058 }, + { 146,-53058 }, { 147,-53058 }, { 148,-53058 }, { 149,-53058 }, { 150,-53058 }, + { 151,-53058 }, { 152,-53058 }, { 153,-53058 }, { 154,-53058 }, { 155,-53058 }, + { 156,-53058 }, { 157,-53058 }, { 158,-53058 }, { 159,-53058 }, { 160,-53058 }, + { 161,-53058 }, { 162,-53058 }, { 163,-53058 }, { 164,-53058 }, { 165,-53058 }, + { 166,-53058 }, { 167,-53058 }, { 168,-53058 }, { 169,-53058 }, { 170,-53058 }, + { 171,-53058 }, { 172,-53058 }, { 173,-53058 }, { 174,-53058 }, { 175,-53058 }, + + { 176,-53058 }, { 177,-53058 }, { 178,-53058 }, { 179,-53058 }, { 180,-53058 }, + { 181,-53058 }, { 182,-53058 }, { 183,-53058 }, { 184,-53058 }, { 185,-53058 }, + { 186,-53058 }, { 187,-53058 }, { 188,-53058 }, { 189,-53058 }, { 190,-53058 }, + { 191,-53058 }, { 192,-53058 }, { 193,-53058 }, { 194,-53058 }, { 195,-53058 }, + { 196,-53058 }, { 197,-53058 }, { 198,-53058 }, { 199,-53058 }, { 200,-53058 }, + { 201,-53058 }, { 202,-53058 }, { 203,-53058 }, { 204,-53058 }, { 205,-53058 }, + { 206,-53058 }, { 207,-53058 }, { 208,-53058 }, { 209,-53058 }, { 210,-53058 }, + { 211,-53058 }, { 212,-53058 }, { 213,-53058 }, { 214,-53058 }, { 215,-53058 }, + { 216,-53058 }, { 217,-53058 }, { 218,-53058 }, { 219,-53058 }, { 220,-53058 }, + { 221,-53058 }, { 222,-53058 }, { 223,-53058 }, { 224,-53058 }, { 225,-53058 }, + + { 226,-53058 }, { 227,-53058 }, { 228,-53058 }, { 229,-53058 }, { 230,-53058 }, + { 231,-53058 }, { 232,-53058 }, { 233,-53058 }, { 234,-53058 }, { 235,-53058 }, + { 236,-53058 }, { 237,-53058 }, { 238,-53058 }, { 239,-53058 }, { 240,-53058 }, + { 241,-53058 }, { 242,-53058 }, { 243,-53058 }, { 244,-53058 }, { 245,-53058 }, + { 246,-53058 }, { 247,-53058 }, { 248,-53058 }, { 249,-53058 }, { 250,-53058 }, + { 251,-53058 }, { 252,-53058 }, { 253,-53058 }, { 254,-53058 }, { 255,-53058 }, + { 0, 131 }, { 0,38808 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-53315 }, + { 49,-53315 }, { 50,-53315 }, { 51,-53315 }, { 52,-53315 }, { 53,-53315 }, + { 54,-53315 }, { 55,-53315 }, { 56,-53315 }, { 57,-53315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-53315 }, { 66,-53315 }, { 67,-53315 }, { 68,-53315 }, + + { 69,-53315 }, { 70,-53315 }, { 71,-53315 }, { 72,-53315 }, { 73,-53315 }, + { 74,-53315 }, { 75,-53315 }, { 76,-53315 }, { 77,-53315 }, { 78,-53315 }, + { 79,-53315 }, { 80,-53315 }, { 81,-53315 }, { 82,10794 }, { 83,-53315 }, + { 84,-53315 }, { 85,-53315 }, { 86,-53315 }, { 87,-53315 }, { 88,-53315 }, + { 89,-53315 }, { 90,-53315 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-53315 }, { 0, 0 }, { 97,-53315 }, { 98,-53315 }, + { 99,-53315 }, { 100,-53315 }, { 101,-53315 }, { 102,-53315 }, { 103,-53315 }, + { 104,-53315 }, { 105,-53315 }, { 106,-53315 }, { 107,-53315 }, { 108,-53315 }, + { 109,-53315 }, { 110,-53315 }, { 111,-53315 }, { 112,-53315 }, { 113,-53315 }, + { 114,10794 }, { 115,-53315 }, { 116,-53315 }, { 117,-53315 }, { 118,-53315 }, + + { 119,-53315 }, { 120,-53315 }, { 121,-53315 }, { 122,-53315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-53315 }, { 128,-53315 }, + { 129,-53315 }, { 130,-53315 }, { 131,-53315 }, { 132,-53315 }, { 133,-53315 }, + { 134,-53315 }, { 135,-53315 }, { 136,-53315 }, { 137,-53315 }, { 138,-53315 }, + { 139,-53315 }, { 140,-53315 }, { 141,-53315 }, { 142,-53315 }, { 143,-53315 }, + { 144,-53315 }, { 145,-53315 }, { 146,-53315 }, { 147,-53315 }, { 148,-53315 }, + { 149,-53315 }, { 150,-53315 }, { 151,-53315 }, { 152,-53315 }, { 153,-53315 }, + { 154,-53315 }, { 155,-53315 }, { 156,-53315 }, { 157,-53315 }, { 158,-53315 }, + { 159,-53315 }, { 160,-53315 }, { 161,-53315 }, { 162,-53315 }, { 163,-53315 }, + { 164,-53315 }, { 165,-53315 }, { 166,-53315 }, { 167,-53315 }, { 168,-53315 }, + + { 169,-53315 }, { 170,-53315 }, { 171,-53315 }, { 172,-53315 }, { 173,-53315 }, + { 174,-53315 }, { 175,-53315 }, { 176,-53315 }, { 177,-53315 }, { 178,-53315 }, + { 179,-53315 }, { 180,-53315 }, { 181,-53315 }, { 182,-53315 }, { 183,-53315 }, + { 184,-53315 }, { 185,-53315 }, { 186,-53315 }, { 187,-53315 }, { 188,-53315 }, + { 189,-53315 }, { 190,-53315 }, { 191,-53315 }, { 192,-53315 }, { 193,-53315 }, + { 194,-53315 }, { 195,-53315 }, { 196,-53315 }, { 197,-53315 }, { 198,-53315 }, + { 199,-53315 }, { 200,-53315 }, { 201,-53315 }, { 202,-53315 }, { 203,-53315 }, + { 204,-53315 }, { 205,-53315 }, { 206,-53315 }, { 207,-53315 }, { 208,-53315 }, + { 209,-53315 }, { 210,-53315 }, { 211,-53315 }, { 212,-53315 }, { 213,-53315 }, + { 214,-53315 }, { 215,-53315 }, { 216,-53315 }, { 217,-53315 }, { 218,-53315 }, + + { 219,-53315 }, { 220,-53315 }, { 221,-53315 }, { 222,-53315 }, { 223,-53315 }, + { 224,-53315 }, { 225,-53315 }, { 226,-53315 }, { 227,-53315 }, { 228,-53315 }, + { 229,-53315 }, { 230,-53315 }, { 231,-53315 }, { 232,-53315 }, { 233,-53315 }, + { 234,-53315 }, { 235,-53315 }, { 236,-53315 }, { 237,-53315 }, { 238,-53315 }, + { 239,-53315 }, { 240,-53315 }, { 241,-53315 }, { 242,-53315 }, { 243,-53315 }, + { 244,-53315 }, { 245,-53315 }, { 246,-53315 }, { 247,-53315 }, { 248,-53315 }, + { 249,-53315 }, { 250,-53315 }, { 251,-53315 }, { 252,-53315 }, { 253,-53315 }, + { 254,-53315 }, { 255,-53315 }, { 0, 131 }, { 0,38551 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-53572 }, { 49,-53572 }, { 50,-53572 }, { 51,-53572 }, + { 52,-53572 }, { 53,-53572 }, { 54,-53572 }, { 55,-53572 }, { 56,-53572 }, + { 57,-53572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-53572 }, { 66,-53572 }, + { 67,-53572 }, { 68,-53572 }, { 69,-53572 }, { 70,-53572 }, { 71,-53572 }, + { 72,-53572 }, { 73,-53572 }, { 74,-53572 }, { 75,-53572 }, { 76,-53572 }, + { 77,-53572 }, { 78,10794 }, { 79,-53572 }, { 80,-53572 }, { 81,-53572 }, + { 82,-53572 }, { 83,-53572 }, { 84,-53572 }, { 85,-53572 }, { 86,-53572 }, + { 87,-53572 }, { 88,-53572 }, { 89,-53572 }, { 90,-53572 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-53572 }, { 0, 0 }, + { 97,-53572 }, { 98,-53572 }, { 99,-53572 }, { 100,-53572 }, { 101,-53572 }, + { 102,-53572 }, { 103,-53572 }, { 104,-53572 }, { 105,-53572 }, { 106,-53572 }, + { 107,-53572 }, { 108,-53572 }, { 109,-53572 }, { 110,10794 }, { 111,-53572 }, + + { 112,-53572 }, { 113,-53572 }, { 114,-53572 }, { 115,-53572 }, { 116,-53572 }, + { 117,-53572 }, { 118,-53572 }, { 119,-53572 }, { 120,-53572 }, { 121,-53572 }, + { 122,-53572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-53572 }, { 128,-53572 }, { 129,-53572 }, { 130,-53572 }, { 131,-53572 }, + { 132,-53572 }, { 133,-53572 }, { 134,-53572 }, { 135,-53572 }, { 136,-53572 }, + { 137,-53572 }, { 138,-53572 }, { 139,-53572 }, { 140,-53572 }, { 141,-53572 }, + { 142,-53572 }, { 143,-53572 }, { 144,-53572 }, { 145,-53572 }, { 146,-53572 }, + { 147,-53572 }, { 148,-53572 }, { 149,-53572 }, { 150,-53572 }, { 151,-53572 }, + { 152,-53572 }, { 153,-53572 }, { 154,-53572 }, { 155,-53572 }, { 156,-53572 }, + { 157,-53572 }, { 158,-53572 }, { 159,-53572 }, { 160,-53572 }, { 161,-53572 }, + + { 162,-53572 }, { 163,-53572 }, { 164,-53572 }, { 165,-53572 }, { 166,-53572 }, + { 167,-53572 }, { 168,-53572 }, { 169,-53572 }, { 170,-53572 }, { 171,-53572 }, + { 172,-53572 }, { 173,-53572 }, { 174,-53572 }, { 175,-53572 }, { 176,-53572 }, + { 177,-53572 }, { 178,-53572 }, { 179,-53572 }, { 180,-53572 }, { 181,-53572 }, + { 182,-53572 }, { 183,-53572 }, { 184,-53572 }, { 185,-53572 }, { 186,-53572 }, + { 187,-53572 }, { 188,-53572 }, { 189,-53572 }, { 190,-53572 }, { 191,-53572 }, + { 192,-53572 }, { 193,-53572 }, { 194,-53572 }, { 195,-53572 }, { 196,-53572 }, + { 197,-53572 }, { 198,-53572 }, { 199,-53572 }, { 200,-53572 }, { 201,-53572 }, + { 202,-53572 }, { 203,-53572 }, { 204,-53572 }, { 205,-53572 }, { 206,-53572 }, + { 207,-53572 }, { 208,-53572 }, { 209,-53572 }, { 210,-53572 }, { 211,-53572 }, + + { 212,-53572 }, { 213,-53572 }, { 214,-53572 }, { 215,-53572 }, { 216,-53572 }, + { 217,-53572 }, { 218,-53572 }, { 219,-53572 }, { 220,-53572 }, { 221,-53572 }, + { 222,-53572 }, { 223,-53572 }, { 224,-53572 }, { 225,-53572 }, { 226,-53572 }, + { 227,-53572 }, { 228,-53572 }, { 229,-53572 }, { 230,-53572 }, { 231,-53572 }, + { 232,-53572 }, { 233,-53572 }, { 234,-53572 }, { 235,-53572 }, { 236,-53572 }, + { 237,-53572 }, { 238,-53572 }, { 239,-53572 }, { 240,-53572 }, { 241,-53572 }, + { 242,-53572 }, { 243,-53572 }, { 244,-53572 }, { 245,-53572 }, { 246,-53572 }, + { 247,-53572 }, { 248,-53572 }, { 249,-53572 }, { 250,-53572 }, { 251,-53572 }, + { 252,-53572 }, { 253,-53572 }, { 254,-53572 }, { 255,-53572 }, { 0, 131 }, + { 0,38294 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-53829 }, { 49,-53829 }, + { 50,-53829 }, { 51,-53829 }, { 52,-53829 }, { 53,-53829 }, { 54,-53829 }, + + { 55,-53829 }, { 56,-53829 }, { 57,-53829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-53829 }, { 66,-53829 }, { 67,10794 }, { 68,-53829 }, { 69,-53829 }, + { 70,-53829 }, { 71,-53829 }, { 72,-53829 }, { 73,-53829 }, { 74,-53829 }, + { 75,-53829 }, { 76,-53829 }, { 77,-53829 }, { 78,-53829 }, { 79,-53829 }, + { 80,-53829 }, { 81,-53829 }, { 82,-53829 }, { 83,-53829 }, { 84,-53829 }, + { 85,-53829 }, { 86,-53829 }, { 87,-53829 }, { 88,-53829 }, { 89,-53829 }, + { 90,-53829 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-53829 }, { 0, 0 }, { 97,-53829 }, { 98,-53829 }, { 99,10794 }, + { 100,-53829 }, { 101,-53829 }, { 102,-53829 }, { 103,-53829 }, { 104,-53829 }, + + { 105,-53829 }, { 106,-53829 }, { 107,-53829 }, { 108,-53829 }, { 109,-53829 }, + { 110,-53829 }, { 111,-53829 }, { 112,-53829 }, { 113,-53829 }, { 114,-53829 }, + { 115,-53829 }, { 116,-53829 }, { 117,-53829 }, { 118,-53829 }, { 119,-53829 }, + { 120,-53829 }, { 121,-53829 }, { 122,-53829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-53829 }, { 128,-53829 }, { 129,-53829 }, + { 130,-53829 }, { 131,-53829 }, { 132,-53829 }, { 133,-53829 }, { 134,-53829 }, + { 135,-53829 }, { 136,-53829 }, { 137,-53829 }, { 138,-53829 }, { 139,-53829 }, + { 140,-53829 }, { 141,-53829 }, { 142,-53829 }, { 143,-53829 }, { 144,-53829 }, + { 145,-53829 }, { 146,-53829 }, { 147,-53829 }, { 148,-53829 }, { 149,-53829 }, + { 150,-53829 }, { 151,-53829 }, { 152,-53829 }, { 153,-53829 }, { 154,-53829 }, + + { 155,-53829 }, { 156,-53829 }, { 157,-53829 }, { 158,-53829 }, { 159,-53829 }, + { 160,-53829 }, { 161,-53829 }, { 162,-53829 }, { 163,-53829 }, { 164,-53829 }, + { 165,-53829 }, { 166,-53829 }, { 167,-53829 }, { 168,-53829 }, { 169,-53829 }, + { 170,-53829 }, { 171,-53829 }, { 172,-53829 }, { 173,-53829 }, { 174,-53829 }, + { 175,-53829 }, { 176,-53829 }, { 177,-53829 }, { 178,-53829 }, { 179,-53829 }, + { 180,-53829 }, { 181,-53829 }, { 182,-53829 }, { 183,-53829 }, { 184,-53829 }, + { 185,-53829 }, { 186,-53829 }, { 187,-53829 }, { 188,-53829 }, { 189,-53829 }, + { 190,-53829 }, { 191,-53829 }, { 192,-53829 }, { 193,-53829 }, { 194,-53829 }, + { 195,-53829 }, { 196,-53829 }, { 197,-53829 }, { 198,-53829 }, { 199,-53829 }, + { 200,-53829 }, { 201,-53829 }, { 202,-53829 }, { 203,-53829 }, { 204,-53829 }, + + { 205,-53829 }, { 206,-53829 }, { 207,-53829 }, { 208,-53829 }, { 209,-53829 }, + { 210,-53829 }, { 211,-53829 }, { 212,-53829 }, { 213,-53829 }, { 214,-53829 }, + { 215,-53829 }, { 216,-53829 }, { 217,-53829 }, { 218,-53829 }, { 219,-53829 }, + { 220,-53829 }, { 221,-53829 }, { 222,-53829 }, { 223,-53829 }, { 224,-53829 }, + { 225,-53829 }, { 226,-53829 }, { 227,-53829 }, { 228,-53829 }, { 229,-53829 }, + { 230,-53829 }, { 231,-53829 }, { 232,-53829 }, { 233,-53829 }, { 234,-53829 }, + { 235,-53829 }, { 236,-53829 }, { 237,-53829 }, { 238,-53829 }, { 239,-53829 }, + { 240,-53829 }, { 241,-53829 }, { 242,-53829 }, { 243,-53829 }, { 244,-53829 }, + { 245,-53829 }, { 246,-53829 }, { 247,-53829 }, { 248,-53829 }, { 249,-53829 }, + { 250,-53829 }, { 251,-53829 }, { 252,-53829 }, { 253,-53829 }, { 254,-53829 }, + + { 255,-53829 }, { 0, 131 }, { 0,38037 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-54086 }, { 49,-54086 }, { 50,-54086 }, { 51,-54086 }, { 52,-54086 }, + { 53,-54086 }, { 54,-54086 }, { 55,-54086 }, { 56,-54086 }, { 57,-54086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-54086 }, { 66,-54086 }, { 67,-54086 }, + { 68,-54086 }, { 69,-54086 }, { 70,-54086 }, { 71,-54086 }, { 72,10794 }, + { 73,-54086 }, { 74,-54086 }, { 75,-54086 }, { 76,-54086 }, { 77,-54086 }, + { 78,-54086 }, { 79,-54086 }, { 80,-54086 }, { 81,-54086 }, { 82,-54086 }, + { 83,-54086 }, { 84,-54086 }, { 85,-54086 }, { 86,-54086 }, { 87,-54086 }, + { 88,-54086 }, { 89,-54086 }, { 90,-54086 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-54086 }, { 0, 0 }, { 97,-54086 }, + + { 98,-54086 }, { 99,-54086 }, { 100,-54086 }, { 101,-54086 }, { 102,-54086 }, + { 103,-54086 }, { 104,10794 }, { 105,-54086 }, { 106,-54086 }, { 107,-54086 }, + { 108,-54086 }, { 109,-54086 }, { 110,-54086 }, { 111,-54086 }, { 112,-54086 }, + { 113,-54086 }, { 114,-54086 }, { 115,-54086 }, { 116,-54086 }, { 117,-54086 }, + { 118,-54086 }, { 119,-54086 }, { 120,-54086 }, { 121,-54086 }, { 122,-54086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-54086 }, + { 128,-54086 }, { 129,-54086 }, { 130,-54086 }, { 131,-54086 }, { 132,-54086 }, + { 133,-54086 }, { 134,-54086 }, { 135,-54086 }, { 136,-54086 }, { 137,-54086 }, + { 138,-54086 }, { 139,-54086 }, { 140,-54086 }, { 141,-54086 }, { 142,-54086 }, + { 143,-54086 }, { 144,-54086 }, { 145,-54086 }, { 146,-54086 }, { 147,-54086 }, + + { 148,-54086 }, { 149,-54086 }, { 150,-54086 }, { 151,-54086 }, { 152,-54086 }, + { 153,-54086 }, { 154,-54086 }, { 155,-54086 }, { 156,-54086 }, { 157,-54086 }, + { 158,-54086 }, { 159,-54086 }, { 160,-54086 }, { 161,-54086 }, { 162,-54086 }, + { 163,-54086 }, { 164,-54086 }, { 165,-54086 }, { 166,-54086 }, { 167,-54086 }, + { 168,-54086 }, { 169,-54086 }, { 170,-54086 }, { 171,-54086 }, { 172,-54086 }, + { 173,-54086 }, { 174,-54086 }, { 175,-54086 }, { 176,-54086 }, { 177,-54086 }, + { 178,-54086 }, { 179,-54086 }, { 180,-54086 }, { 181,-54086 }, { 182,-54086 }, + { 183,-54086 }, { 184,-54086 }, { 185,-54086 }, { 186,-54086 }, { 187,-54086 }, + { 188,-54086 }, { 189,-54086 }, { 190,-54086 }, { 191,-54086 }, { 192,-54086 }, + { 193,-54086 }, { 194,-54086 }, { 195,-54086 }, { 196,-54086 }, { 197,-54086 }, + + { 198,-54086 }, { 199,-54086 }, { 200,-54086 }, { 201,-54086 }, { 202,-54086 }, + { 203,-54086 }, { 204,-54086 }, { 205,-54086 }, { 206,-54086 }, { 207,-54086 }, + { 208,-54086 }, { 209,-54086 }, { 210,-54086 }, { 211,-54086 }, { 212,-54086 }, + { 213,-54086 }, { 214,-54086 }, { 215,-54086 }, { 216,-54086 }, { 217,-54086 }, + { 218,-54086 }, { 219,-54086 }, { 220,-54086 }, { 221,-54086 }, { 222,-54086 }, + { 223,-54086 }, { 224,-54086 }, { 225,-54086 }, { 226,-54086 }, { 227,-54086 }, + { 228,-54086 }, { 229,-54086 }, { 230,-54086 }, { 231,-54086 }, { 232,-54086 }, + { 233,-54086 }, { 234,-54086 }, { 235,-54086 }, { 236,-54086 }, { 237,-54086 }, + { 238,-54086 }, { 239,-54086 }, { 240,-54086 }, { 241,-54086 }, { 242,-54086 }, + { 243,-54086 }, { 244,-54086 }, { 245,-54086 }, { 246,-54086 }, { 247,-54086 }, + + { 248,-54086 }, { 249,-54086 }, { 250,-54086 }, { 251,-54086 }, { 252,-54086 }, + { 253,-54086 }, { 254,-54086 }, { 255,-54086 }, { 0, 58 }, { 0,37780 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-54343 }, { 49,-54343 }, { 50,-54343 }, + { 51,-54343 }, { 52,-54343 }, { 53,-54343 }, { 54,-54343 }, { 55,-54343 }, + { 56,-54343 }, { 57,-54343 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-54343 }, + { 66,-54343 }, { 67,-54343 }, { 68,-54343 }, { 69,-54343 }, { 70,-54343 }, + { 71,-54343 }, { 72,-54343 }, { 73,-54343 }, { 74,-54343 }, { 75,-54343 }, + { 76,-54343 }, { 77,-54343 }, { 78,-54343 }, { 79,-54343 }, { 80,-54343 }, + { 81,-54343 }, { 82,-54343 }, { 83,-54343 }, { 84,-54343 }, { 85,-54343 }, + { 86,-54343 }, { 87,-54343 }, { 88,-54343 }, { 89,-54343 }, { 90,-54343 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-54343 }, + { 0, 0 }, { 97,-54343 }, { 98,-54343 }, { 99,-54343 }, { 100,-54343 }, + { 101,-54343 }, { 102,-54343 }, { 103,-54343 }, { 104,-54343 }, { 105,-54343 }, + { 106,-54343 }, { 107,-54343 }, { 108,-54343 }, { 109,-54343 }, { 110,-54343 }, + { 111,-54343 }, { 112,-54343 }, { 113,-54343 }, { 114,-54343 }, { 115,-54343 }, + { 116,-54343 }, { 117,-54343 }, { 118,-54343 }, { 119,-54343 }, { 120,-54343 }, + { 121,-54343 }, { 122,-54343 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-54343 }, { 128,-54343 }, { 129,-54343 }, { 130,-54343 }, + { 131,-54343 }, { 132,-54343 }, { 133,-54343 }, { 134,-54343 }, { 135,-54343 }, + { 136,-54343 }, { 137,-54343 }, { 138,-54343 }, { 139,-54343 }, { 140,-54343 }, + + { 141,-54343 }, { 142,-54343 }, { 143,-54343 }, { 144,-54343 }, { 145,-54343 }, + { 146,-54343 }, { 147,-54343 }, { 148,-54343 }, { 149,-54343 }, { 150,-54343 }, + { 151,-54343 }, { 152,-54343 }, { 153,-54343 }, { 154,-54343 }, { 155,-54343 }, + { 156,-54343 }, { 157,-54343 }, { 158,-54343 }, { 159,-54343 }, { 160,-54343 }, + { 161,-54343 }, { 162,-54343 }, { 163,-54343 }, { 164,-54343 }, { 165,-54343 }, + { 166,-54343 }, { 167,-54343 }, { 168,-54343 }, { 169,-54343 }, { 170,-54343 }, + { 171,-54343 }, { 172,-54343 }, { 173,-54343 }, { 174,-54343 }, { 175,-54343 }, + { 176,-54343 }, { 177,-54343 }, { 178,-54343 }, { 179,-54343 }, { 180,-54343 }, + { 181,-54343 }, { 182,-54343 }, { 183,-54343 }, { 184,-54343 }, { 185,-54343 }, + { 186,-54343 }, { 187,-54343 }, { 188,-54343 }, { 189,-54343 }, { 190,-54343 }, + + { 191,-54343 }, { 192,-54343 }, { 193,-54343 }, { 194,-54343 }, { 195,-54343 }, + { 196,-54343 }, { 197,-54343 }, { 198,-54343 }, { 199,-54343 }, { 200,-54343 }, + { 201,-54343 }, { 202,-54343 }, { 203,-54343 }, { 204,-54343 }, { 205,-54343 }, + { 206,-54343 }, { 207,-54343 }, { 208,-54343 }, { 209,-54343 }, { 210,-54343 }, + { 211,-54343 }, { 212,-54343 }, { 213,-54343 }, { 214,-54343 }, { 215,-54343 }, + { 216,-54343 }, { 217,-54343 }, { 218,-54343 }, { 219,-54343 }, { 220,-54343 }, + { 221,-54343 }, { 222,-54343 }, { 223,-54343 }, { 224,-54343 }, { 225,-54343 }, + { 226,-54343 }, { 227,-54343 }, { 228,-54343 }, { 229,-54343 }, { 230,-54343 }, + { 231,-54343 }, { 232,-54343 }, { 233,-54343 }, { 234,-54343 }, { 235,-54343 }, + { 236,-54343 }, { 237,-54343 }, { 238,-54343 }, { 239,-54343 }, { 240,-54343 }, + + { 241,-54343 }, { 242,-54343 }, { 243,-54343 }, { 244,-54343 }, { 245,-54343 }, + { 246,-54343 }, { 247,-54343 }, { 248,-54343 }, { 249,-54343 }, { 250,-54343 }, + { 251,-54343 }, { 252,-54343 }, { 253,-54343 }, { 254,-54343 }, { 255,-54343 }, + { 0, 88 }, { 0,37523 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-54600 }, + { 49,-54600 }, { 50,-54600 }, { 51,-54600 }, { 52,-54600 }, { 53,-54600 }, + { 54,-54600 }, { 55,-54600 }, { 56,-54600 }, { 57,-54600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-54600 }, { 66,-54600 }, { 67,-54600 }, { 68,-54600 }, + { 69,-54600 }, { 70,-54600 }, { 71,-54600 }, { 72,-54600 }, { 73,-54600 }, + { 74,-54600 }, { 75,-54600 }, { 76,-54600 }, { 77,-54600 }, { 78,-54600 }, + { 79,-54600 }, { 80,-54600 }, { 81,-54600 }, { 82,-54600 }, { 83,-54600 }, + + { 84,-54600 }, { 85,-54600 }, { 86,-54600 }, { 87,-54600 }, { 88,-54600 }, + { 89,-54600 }, { 90,-54600 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-54600 }, { 0, 0 }, { 97,-54600 }, { 98,-54600 }, + { 99,-54600 }, { 100,-54600 }, { 101,-54600 }, { 102,-54600 }, { 103,-54600 }, + { 104,-54600 }, { 105,-54600 }, { 106,-54600 }, { 107,-54600 }, { 108,-54600 }, + { 109,-54600 }, { 110,-54600 }, { 111,-54600 }, { 112,-54600 }, { 113,-54600 }, + { 114,-54600 }, { 115,-54600 }, { 116,-54600 }, { 117,-54600 }, { 118,-54600 }, + { 119,-54600 }, { 120,-54600 }, { 121,-54600 }, { 122,-54600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-54600 }, { 128,-54600 }, + { 129,-54600 }, { 130,-54600 }, { 131,-54600 }, { 132,-54600 }, { 133,-54600 }, + + { 134,-54600 }, { 135,-54600 }, { 136,-54600 }, { 137,-54600 }, { 138,-54600 }, + { 139,-54600 }, { 140,-54600 }, { 141,-54600 }, { 142,-54600 }, { 143,-54600 }, + { 144,-54600 }, { 145,-54600 }, { 146,-54600 }, { 147,-54600 }, { 148,-54600 }, + { 149,-54600 }, { 150,-54600 }, { 151,-54600 }, { 152,-54600 }, { 153,-54600 }, + { 154,-54600 }, { 155,-54600 }, { 156,-54600 }, { 157,-54600 }, { 158,-54600 }, + { 159,-54600 }, { 160,-54600 }, { 161,-54600 }, { 162,-54600 }, { 163,-54600 }, + { 164,-54600 }, { 165,-54600 }, { 166,-54600 }, { 167,-54600 }, { 168,-54600 }, + { 169,-54600 }, { 170,-54600 }, { 171,-54600 }, { 172,-54600 }, { 173,-54600 }, + { 174,-54600 }, { 175,-54600 }, { 176,-54600 }, { 177,-54600 }, { 178,-54600 }, + { 179,-54600 }, { 180,-54600 }, { 181,-54600 }, { 182,-54600 }, { 183,-54600 }, + + { 184,-54600 }, { 185,-54600 }, { 186,-54600 }, { 187,-54600 }, { 188,-54600 }, + { 189,-54600 }, { 190,-54600 }, { 191,-54600 }, { 192,-54600 }, { 193,-54600 }, + { 194,-54600 }, { 195,-54600 }, { 196,-54600 }, { 197,-54600 }, { 198,-54600 }, + { 199,-54600 }, { 200,-54600 }, { 201,-54600 }, { 202,-54600 }, { 203,-54600 }, + { 204,-54600 }, { 205,-54600 }, { 206,-54600 }, { 207,-54600 }, { 208,-54600 }, + { 209,-54600 }, { 210,-54600 }, { 211,-54600 }, { 212,-54600 }, { 213,-54600 }, + { 214,-54600 }, { 215,-54600 }, { 216,-54600 }, { 217,-54600 }, { 218,-54600 }, + { 219,-54600 }, { 220,-54600 }, { 221,-54600 }, { 222,-54600 }, { 223,-54600 }, + { 224,-54600 }, { 225,-54600 }, { 226,-54600 }, { 227,-54600 }, { 228,-54600 }, + { 229,-54600 }, { 230,-54600 }, { 231,-54600 }, { 232,-54600 }, { 233,-54600 }, + + { 234,-54600 }, { 235,-54600 }, { 236,-54600 }, { 237,-54600 }, { 238,-54600 }, + { 239,-54600 }, { 240,-54600 }, { 241,-54600 }, { 242,-54600 }, { 243,-54600 }, + { 244,-54600 }, { 245,-54600 }, { 246,-54600 }, { 247,-54600 }, { 248,-54600 }, + { 249,-54600 }, { 250,-54600 }, { 251,-54600 }, { 252,-54600 }, { 253,-54600 }, + { 254,-54600 }, { 255,-54600 }, { 0, 68 }, { 0,37266 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-54857 }, { 49,-54857 }, { 50,-54857 }, { 51,-54857 }, + { 52,-54857 }, { 53,-54857 }, { 54,-54857 }, { 55,-54857 }, { 56,-54857 }, + { 57,-54857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-54857 }, { 66,-54857 }, + { 67,-54857 }, { 68,-54857 }, { 69,-54857 }, { 70,-54857 }, { 71,-54857 }, + { 72,-54857 }, { 73,-54857 }, { 74,-54857 }, { 75,-54857 }, { 76,-54857 }, + + { 77,-54857 }, { 78,-54857 }, { 79,-54857 }, { 80,-54857 }, { 81,-54857 }, + { 82,-54857 }, { 83,-54857 }, { 84,-54857 }, { 85,-54857 }, { 86,-54857 }, + { 87,-54857 }, { 88,-54857 }, { 89,-54857 }, { 90,-54857 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-54857 }, { 0, 0 }, + { 97,-54857 }, { 98,-54857 }, { 99,-54857 }, { 100,-54857 }, { 101,-54857 }, + { 102,-54857 }, { 103,-54857 }, { 104,-54857 }, { 105,-54857 }, { 106,-54857 }, + { 107,-54857 }, { 108,-54857 }, { 109,-54857 }, { 110,-54857 }, { 111,-54857 }, + { 112,-54857 }, { 113,-54857 }, { 114,-54857 }, { 115,-54857 }, { 116,-54857 }, + { 117,-54857 }, { 118,-54857 }, { 119,-54857 }, { 120,-54857 }, { 121,-54857 }, + { 122,-54857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-54857 }, { 128,-54857 }, { 129,-54857 }, { 130,-54857 }, { 131,-54857 }, + { 132,-54857 }, { 133,-54857 }, { 134,-54857 }, { 135,-54857 }, { 136,-54857 }, + { 137,-54857 }, { 138,-54857 }, { 139,-54857 }, { 140,-54857 }, { 141,-54857 }, + { 142,-54857 }, { 143,-54857 }, { 144,-54857 }, { 145,-54857 }, { 146,-54857 }, + { 147,-54857 }, { 148,-54857 }, { 149,-54857 }, { 150,-54857 }, { 151,-54857 }, + { 152,-54857 }, { 153,-54857 }, { 154,-54857 }, { 155,-54857 }, { 156,-54857 }, + { 157,-54857 }, { 158,-54857 }, { 159,-54857 }, { 160,-54857 }, { 161,-54857 }, + { 162,-54857 }, { 163,-54857 }, { 164,-54857 }, { 165,-54857 }, { 166,-54857 }, + { 167,-54857 }, { 168,-54857 }, { 169,-54857 }, { 170,-54857 }, { 171,-54857 }, + { 172,-54857 }, { 173,-54857 }, { 174,-54857 }, { 175,-54857 }, { 176,-54857 }, + + { 177,-54857 }, { 178,-54857 }, { 179,-54857 }, { 180,-54857 }, { 181,-54857 }, + { 182,-54857 }, { 183,-54857 }, { 184,-54857 }, { 185,-54857 }, { 186,-54857 }, + { 187,-54857 }, { 188,-54857 }, { 189,-54857 }, { 190,-54857 }, { 191,-54857 }, + { 192,-54857 }, { 193,-54857 }, { 194,-54857 }, { 195,-54857 }, { 196,-54857 }, + { 197,-54857 }, { 198,-54857 }, { 199,-54857 }, { 200,-54857 }, { 201,-54857 }, + { 202,-54857 }, { 203,-54857 }, { 204,-54857 }, { 205,-54857 }, { 206,-54857 }, + { 207,-54857 }, { 208,-54857 }, { 209,-54857 }, { 210,-54857 }, { 211,-54857 }, + { 212,-54857 }, { 213,-54857 }, { 214,-54857 }, { 215,-54857 }, { 216,-54857 }, + { 217,-54857 }, { 218,-54857 }, { 219,-54857 }, { 220,-54857 }, { 221,-54857 }, + { 222,-54857 }, { 223,-54857 }, { 224,-54857 }, { 225,-54857 }, { 226,-54857 }, + + { 227,-54857 }, { 228,-54857 }, { 229,-54857 }, { 230,-54857 }, { 231,-54857 }, + { 232,-54857 }, { 233,-54857 }, { 234,-54857 }, { 235,-54857 }, { 236,-54857 }, + { 237,-54857 }, { 238,-54857 }, { 239,-54857 }, { 240,-54857 }, { 241,-54857 }, + { 242,-54857 }, { 243,-54857 }, { 244,-54857 }, { 245,-54857 }, { 246,-54857 }, + { 247,-54857 }, { 248,-54857 }, { 249,-54857 }, { 250,-54857 }, { 251,-54857 }, + { 252,-54857 }, { 253,-54857 }, { 254,-54857 }, { 255,-54857 }, { 0, 37 }, + { 0,37009 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-55114 }, { 49,-55114 }, + { 50,-55114 }, { 51,-55114 }, { 52,-55114 }, { 53,-55114 }, { 54,-55114 }, + { 55,-55114 }, { 56,-55114 }, { 57,-55114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-55114 }, { 66,-55114 }, { 67,-55114 }, { 68,-55114 }, { 69,-55114 }, + + { 70,-55114 }, { 71,-55114 }, { 72,-55114 }, { 73,-55114 }, { 74,-55114 }, + { 75,-55114 }, { 76,-55114 }, { 77,-55114 }, { 78,-55114 }, { 79,-55114 }, + { 80,-55114 }, { 81,-55114 }, { 82,-55114 }, { 83,-55114 }, { 84,-55114 }, + { 85,-55114 }, { 86,-55114 }, { 87,-55114 }, { 88,-55114 }, { 89,-55114 }, + { 90,-55114 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-55114 }, { 0, 0 }, { 97,-55114 }, { 98,-55114 }, { 99,-55114 }, + { 100,-55114 }, { 101,-55114 }, { 102,-55114 }, { 103,-55114 }, { 104,-55114 }, + { 105,-55114 }, { 106,-55114 }, { 107,-55114 }, { 108,-55114 }, { 109,-55114 }, + { 110,-55114 }, { 111,-55114 }, { 112,-55114 }, { 113,-55114 }, { 114,-55114 }, + { 115,-55114 }, { 116,-55114 }, { 117,-55114 }, { 118,-55114 }, { 119,-55114 }, + + { 120,-55114 }, { 121,-55114 }, { 122,-55114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-55114 }, { 128,-55114 }, { 129,-55114 }, + { 130,-55114 }, { 131,-55114 }, { 132,-55114 }, { 133,-55114 }, { 134,-55114 }, + { 135,-55114 }, { 136,-55114 }, { 137,-55114 }, { 138,-55114 }, { 139,-55114 }, + { 140,-55114 }, { 141,-55114 }, { 142,-55114 }, { 143,-55114 }, { 144,-55114 }, + { 145,-55114 }, { 146,-55114 }, { 147,-55114 }, { 148,-55114 }, { 149,-55114 }, + { 150,-55114 }, { 151,-55114 }, { 152,-55114 }, { 153,-55114 }, { 154,-55114 }, + { 155,-55114 }, { 156,-55114 }, { 157,-55114 }, { 158,-55114 }, { 159,-55114 }, + { 160,-55114 }, { 161,-55114 }, { 162,-55114 }, { 163,-55114 }, { 164,-55114 }, + { 165,-55114 }, { 166,-55114 }, { 167,-55114 }, { 168,-55114 }, { 169,-55114 }, + + { 170,-55114 }, { 171,-55114 }, { 172,-55114 }, { 173,-55114 }, { 174,-55114 }, + { 175,-55114 }, { 176,-55114 }, { 177,-55114 }, { 178,-55114 }, { 179,-55114 }, + { 180,-55114 }, { 181,-55114 }, { 182,-55114 }, { 183,-55114 }, { 184,-55114 }, + { 185,-55114 }, { 186,-55114 }, { 187,-55114 }, { 188,-55114 }, { 189,-55114 }, + { 190,-55114 }, { 191,-55114 }, { 192,-55114 }, { 193,-55114 }, { 194,-55114 }, + { 195,-55114 }, { 196,-55114 }, { 197,-55114 }, { 198,-55114 }, { 199,-55114 }, + { 200,-55114 }, { 201,-55114 }, { 202,-55114 }, { 203,-55114 }, { 204,-55114 }, + { 205,-55114 }, { 206,-55114 }, { 207,-55114 }, { 208,-55114 }, { 209,-55114 }, + { 210,-55114 }, { 211,-55114 }, { 212,-55114 }, { 213,-55114 }, { 214,-55114 }, + { 215,-55114 }, { 216,-55114 }, { 217,-55114 }, { 218,-55114 }, { 219,-55114 }, + + { 220,-55114 }, { 221,-55114 }, { 222,-55114 }, { 223,-55114 }, { 224,-55114 }, + { 225,-55114 }, { 226,-55114 }, { 227,-55114 }, { 228,-55114 }, { 229,-55114 }, + { 230,-55114 }, { 231,-55114 }, { 232,-55114 }, { 233,-55114 }, { 234,-55114 }, + { 235,-55114 }, { 236,-55114 }, { 237,-55114 }, { 238,-55114 }, { 239,-55114 }, + { 240,-55114 }, { 241,-55114 }, { 242,-55114 }, { 243,-55114 }, { 244,-55114 }, + { 245,-55114 }, { 246,-55114 }, { 247,-55114 }, { 248,-55114 }, { 249,-55114 }, + { 250,-55114 }, { 251,-55114 }, { 252,-55114 }, { 253,-55114 }, { 254,-55114 }, + { 255,-55114 }, { 0, 90 }, { 0,36752 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-55371 }, { 49,-55371 }, { 50,-55371 }, { 51,-55371 }, { 52,-55371 }, + { 53,-55371 }, { 54,-55371 }, { 55,-55371 }, { 56,-55371 }, { 57,-55371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-55371 }, { 66,-55371 }, { 67,-55371 }, + { 68,-55371 }, { 69,-55371 }, { 70,-55371 }, { 71,-55371 }, { 72,-55371 }, + { 73,-55371 }, { 74,-55371 }, { 75,-55371 }, { 76,-55371 }, { 77,-55371 }, + { 78,-55371 }, { 79,-55371 }, { 80,-55371 }, { 81,-55371 }, { 82,-55371 }, + { 83,-55371 }, { 84,-55371 }, { 85,-55371 }, { 86,-55371 }, { 87,-55371 }, + { 88,-55371 }, { 89,-55371 }, { 90,-55371 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-55371 }, { 0, 0 }, { 97,-55371 }, + { 98,-55371 }, { 99,-55371 }, { 100,-55371 }, { 101,-55371 }, { 102,-55371 }, + { 103,-55371 }, { 104,-55371 }, { 105,-55371 }, { 106,-55371 }, { 107,-55371 }, + { 108,-55371 }, { 109,-55371 }, { 110,-55371 }, { 111,-55371 }, { 112,-55371 }, + + { 113,-55371 }, { 114,-55371 }, { 115,-55371 }, { 116,-55371 }, { 117,-55371 }, + { 118,-55371 }, { 119,-55371 }, { 120,-55371 }, { 121,-55371 }, { 122,-55371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-55371 }, + { 128,-55371 }, { 129,-55371 }, { 130,-55371 }, { 131,-55371 }, { 132,-55371 }, + { 133,-55371 }, { 134,-55371 }, { 135,-55371 }, { 136,-55371 }, { 137,-55371 }, + { 138,-55371 }, { 139,-55371 }, { 140,-55371 }, { 141,-55371 }, { 142,-55371 }, + { 143,-55371 }, { 144,-55371 }, { 145,-55371 }, { 146,-55371 }, { 147,-55371 }, + { 148,-55371 }, { 149,-55371 }, { 150,-55371 }, { 151,-55371 }, { 152,-55371 }, + { 153,-55371 }, { 154,-55371 }, { 155,-55371 }, { 156,-55371 }, { 157,-55371 }, + { 158,-55371 }, { 159,-55371 }, { 160,-55371 }, { 161,-55371 }, { 162,-55371 }, + + { 163,-55371 }, { 164,-55371 }, { 165,-55371 }, { 166,-55371 }, { 167,-55371 }, + { 168,-55371 }, { 169,-55371 }, { 170,-55371 }, { 171,-55371 }, { 172,-55371 }, + { 173,-55371 }, { 174,-55371 }, { 175,-55371 }, { 176,-55371 }, { 177,-55371 }, + { 178,-55371 }, { 179,-55371 }, { 180,-55371 }, { 181,-55371 }, { 182,-55371 }, + { 183,-55371 }, { 184,-55371 }, { 185,-55371 }, { 186,-55371 }, { 187,-55371 }, + { 188,-55371 }, { 189,-55371 }, { 190,-55371 }, { 191,-55371 }, { 192,-55371 }, + { 193,-55371 }, { 194,-55371 }, { 195,-55371 }, { 196,-55371 }, { 197,-55371 }, + { 198,-55371 }, { 199,-55371 }, { 200,-55371 }, { 201,-55371 }, { 202,-55371 }, + { 203,-55371 }, { 204,-55371 }, { 205,-55371 }, { 206,-55371 }, { 207,-55371 }, + { 208,-55371 }, { 209,-55371 }, { 210,-55371 }, { 211,-55371 }, { 212,-55371 }, + + { 213,-55371 }, { 214,-55371 }, { 215,-55371 }, { 216,-55371 }, { 217,-55371 }, + { 218,-55371 }, { 219,-55371 }, { 220,-55371 }, { 221,-55371 }, { 222,-55371 }, + { 223,-55371 }, { 224,-55371 }, { 225,-55371 }, { 226,-55371 }, { 227,-55371 }, + { 228,-55371 }, { 229,-55371 }, { 230,-55371 }, { 231,-55371 }, { 232,-55371 }, + { 233,-55371 }, { 234,-55371 }, { 235,-55371 }, { 236,-55371 }, { 237,-55371 }, + { 238,-55371 }, { 239,-55371 }, { 240,-55371 }, { 241,-55371 }, { 242,-55371 }, + { 243,-55371 }, { 244,-55371 }, { 245,-55371 }, { 246,-55371 }, { 247,-55371 }, + { 248,-55371 }, { 249,-55371 }, { 250,-55371 }, { 251,-55371 }, { 252,-55371 }, + { 253,-55371 }, { 254,-55371 }, { 255,-55371 }, { 0, 131 }, { 0,36495 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-55628 }, { 49,-55628 }, { 50,-55628 }, + { 51,-55628 }, { 52,-55628 }, { 53,-55628 }, { 54,-55628 }, { 55,-55628 }, + + { 56,-55628 }, { 57,-55628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-55628 }, + { 66,-55628 }, { 67,-55628 }, { 68,-55628 }, { 69,-55628 }, { 70,-55628 }, + { 71,-55628 }, { 72,-55628 }, { 73,-55628 }, { 74,-55628 }, { 75,-55628 }, + { 76,-55628 }, { 77,-55628 }, { 78,-55628 }, { 79,-55628 }, { 80,-55628 }, + { 81,-55628 }, { 82,-55628 }, { 83,9509 }, { 84,-55628 }, { 85,-55628 }, + { 86,-55628 }, { 87,-55628 }, { 88,-55628 }, { 89,-55628 }, { 90,-55628 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-55628 }, + { 0, 0 }, { 97,-55628 }, { 98,-55628 }, { 99,-55628 }, { 100,-55628 }, + { 101,-55628 }, { 102,-55628 }, { 103,-55628 }, { 104,-55628 }, { 105,-55628 }, + + { 106,-55628 }, { 107,-55628 }, { 108,-55628 }, { 109,-55628 }, { 110,-55628 }, + { 111,-55628 }, { 112,-55628 }, { 113,-55628 }, { 114,-55628 }, { 115,9509 }, + { 116,-55628 }, { 117,-55628 }, { 118,-55628 }, { 119,-55628 }, { 120,-55628 }, + { 121,-55628 }, { 122,-55628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-55628 }, { 128,-55628 }, { 129,-55628 }, { 130,-55628 }, + { 131,-55628 }, { 132,-55628 }, { 133,-55628 }, { 134,-55628 }, { 135,-55628 }, + { 136,-55628 }, { 137,-55628 }, { 138,-55628 }, { 139,-55628 }, { 140,-55628 }, + { 141,-55628 }, { 142,-55628 }, { 143,-55628 }, { 144,-55628 }, { 145,-55628 }, + { 146,-55628 }, { 147,-55628 }, { 148,-55628 }, { 149,-55628 }, { 150,-55628 }, + { 151,-55628 }, { 152,-55628 }, { 153,-55628 }, { 154,-55628 }, { 155,-55628 }, + + { 156,-55628 }, { 157,-55628 }, { 158,-55628 }, { 159,-55628 }, { 160,-55628 }, + { 161,-55628 }, { 162,-55628 }, { 163,-55628 }, { 164,-55628 }, { 165,-55628 }, + { 166,-55628 }, { 167,-55628 }, { 168,-55628 }, { 169,-55628 }, { 170,-55628 }, + { 171,-55628 }, { 172,-55628 }, { 173,-55628 }, { 174,-55628 }, { 175,-55628 }, + { 176,-55628 }, { 177,-55628 }, { 178,-55628 }, { 179,-55628 }, { 180,-55628 }, + { 181,-55628 }, { 182,-55628 }, { 183,-55628 }, { 184,-55628 }, { 185,-55628 }, + { 186,-55628 }, { 187,-55628 }, { 188,-55628 }, { 189,-55628 }, { 190,-55628 }, + { 191,-55628 }, { 192,-55628 }, { 193,-55628 }, { 194,-55628 }, { 195,-55628 }, + { 196,-55628 }, { 197,-55628 }, { 198,-55628 }, { 199,-55628 }, { 200,-55628 }, + { 201,-55628 }, { 202,-55628 }, { 203,-55628 }, { 204,-55628 }, { 205,-55628 }, + + { 206,-55628 }, { 207,-55628 }, { 208,-55628 }, { 209,-55628 }, { 210,-55628 }, + { 211,-55628 }, { 212,-55628 }, { 213,-55628 }, { 214,-55628 }, { 215,-55628 }, + { 216,-55628 }, { 217,-55628 }, { 218,-55628 }, { 219,-55628 }, { 220,-55628 }, + { 221,-55628 }, { 222,-55628 }, { 223,-55628 }, { 224,-55628 }, { 225,-55628 }, + { 226,-55628 }, { 227,-55628 }, { 228,-55628 }, { 229,-55628 }, { 230,-55628 }, + { 231,-55628 }, { 232,-55628 }, { 233,-55628 }, { 234,-55628 }, { 235,-55628 }, + { 236,-55628 }, { 237,-55628 }, { 238,-55628 }, { 239,-55628 }, { 240,-55628 }, + { 241,-55628 }, { 242,-55628 }, { 243,-55628 }, { 244,-55628 }, { 245,-55628 }, + { 246,-55628 }, { 247,-55628 }, { 248,-55628 }, { 249,-55628 }, { 250,-55628 }, + { 251,-55628 }, { 252,-55628 }, { 253,-55628 }, { 254,-55628 }, { 255,-55628 }, + + { 0, 131 }, { 0,36238 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-55885 }, + + { 49,-55885 }, { 50,-55885 }, { 51,-55885 }, { 52,-55885 }, { 53,-55885 }, + { 54,-55885 }, { 55,-55885 }, { 56,-55885 }, { 57,-55885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-55885 }, { 66,-55885 }, { 67,-55885 }, { 68,-55885 }, + { 69,-55885 }, { 70,-55885 }, { 71,-55885 }, { 72,-55885 }, { 73,-55885 }, + { 74,-55885 }, { 75,-55885 }, { 76,-55885 }, { 77,-55885 }, { 78,-55885 }, + { 79,-55885 }, { 80,-55885 }, { 81,-55885 }, { 82,-55885 }, { 83,-55885 }, + { 84,-55885 }, { 85,-55885 }, { 86,-55885 }, { 87,-55885 }, { 88,-55885 }, + { 89,-55885 }, { 90,-55885 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,9509 }, { 0, 0 }, { 97,-55885 }, { 98,-55885 }, + + { 99,-55885 }, { 100,-55885 }, { 101,-55885 }, { 102,-55885 }, { 103,-55885 }, + { 104,-55885 }, { 105,-55885 }, { 106,-55885 }, { 107,-55885 }, { 108,-55885 }, + { 109,-55885 }, { 110,-55885 }, { 111,-55885 }, { 112,-55885 }, { 113,-55885 }, + { 114,-55885 }, { 115,-55885 }, { 116,-55885 }, { 117,-55885 }, { 118,-55885 }, + { 119,-55885 }, { 120,-55885 }, { 121,-55885 }, { 122,-55885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-55885 }, { 128,-55885 }, + { 129,-55885 }, { 130,-55885 }, { 131,-55885 }, { 132,-55885 }, { 133,-55885 }, + { 134,-55885 }, { 135,-55885 }, { 136,-55885 }, { 137,-55885 }, { 138,-55885 }, + { 139,-55885 }, { 140,-55885 }, { 141,-55885 }, { 142,-55885 }, { 143,-55885 }, + { 144,-55885 }, { 145,-55885 }, { 146,-55885 }, { 147,-55885 }, { 148,-55885 }, + + { 149,-55885 }, { 150,-55885 }, { 151,-55885 }, { 152,-55885 }, { 153,-55885 }, + { 154,-55885 }, { 155,-55885 }, { 156,-55885 }, { 157,-55885 }, { 158,-55885 }, + { 159,-55885 }, { 160,-55885 }, { 161,-55885 }, { 162,-55885 }, { 163,-55885 }, + { 164,-55885 }, { 165,-55885 }, { 166,-55885 }, { 167,-55885 }, { 168,-55885 }, + { 169,-55885 }, { 170,-55885 }, { 171,-55885 }, { 172,-55885 }, { 173,-55885 }, + { 174,-55885 }, { 175,-55885 }, { 176,-55885 }, { 177,-55885 }, { 178,-55885 }, + { 179,-55885 }, { 180,-55885 }, { 181,-55885 }, { 182,-55885 }, { 183,-55885 }, + { 184,-55885 }, { 185,-55885 }, { 186,-55885 }, { 187,-55885 }, { 188,-55885 }, + { 189,-55885 }, { 190,-55885 }, { 191,-55885 }, { 192,-55885 }, { 193,-55885 }, + { 194,-55885 }, { 195,-55885 }, { 196,-55885 }, { 197,-55885 }, { 198,-55885 }, + + { 199,-55885 }, { 200,-55885 }, { 201,-55885 }, { 202,-55885 }, { 203,-55885 }, + { 204,-55885 }, { 205,-55885 }, { 206,-55885 }, { 207,-55885 }, { 208,-55885 }, + { 209,-55885 }, { 210,-55885 }, { 211,-55885 }, { 212,-55885 }, { 213,-55885 }, + { 214,-55885 }, { 215,-55885 }, { 216,-55885 }, { 217,-55885 }, { 218,-55885 }, + { 219,-55885 }, { 220,-55885 }, { 221,-55885 }, { 222,-55885 }, { 223,-55885 }, + { 224,-55885 }, { 225,-55885 }, { 226,-55885 }, { 227,-55885 }, { 228,-55885 }, + { 229,-55885 }, { 230,-55885 }, { 231,-55885 }, { 232,-55885 }, { 233,-55885 }, + { 234,-55885 }, { 235,-55885 }, { 236,-55885 }, { 237,-55885 }, { 238,-55885 }, + { 239,-55885 }, { 240,-55885 }, { 241,-55885 }, { 242,-55885 }, { 243,-55885 }, + { 244,-55885 }, { 245,-55885 }, { 246,-55885 }, { 247,-55885 }, { 248,-55885 }, + + { 249,-55885 }, { 250,-55885 }, { 251,-55885 }, { 252,-55885 }, { 253,-55885 }, + { 254,-55885 }, { 255,-55885 }, { 0, 131 }, { 0,35981 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-56142 }, { 49,-56142 }, { 50,-56142 }, { 51,-56142 }, + { 52,-56142 }, { 53,-56142 }, { 54,-56142 }, { 55,-56142 }, { 56,-56142 }, + { 57,-56142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-56142 }, { 66,-56142 }, + { 67,-56142 }, { 68,-56142 }, { 69,9509 }, { 70,-56142 }, { 71,-56142 }, + { 72,-56142 }, { 73,-56142 }, { 74,-56142 }, { 75,-56142 }, { 76,-56142 }, + { 77,-56142 }, { 78,-56142 }, { 79,-56142 }, { 80,-56142 }, { 81,-56142 }, + { 82,-56142 }, { 83,-56142 }, { 84,-56142 }, { 85,-56142 }, { 86,-56142 }, + { 87,-56142 }, { 88,-56142 }, { 89,-56142 }, { 90,-56142 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-56142 }, { 0, 0 }, + { 97,-56142 }, { 98,-56142 }, { 99,-56142 }, { 100,-56142 }, { 101,9509 }, + { 102,-56142 }, { 103,-56142 }, { 104,-56142 }, { 105,-56142 }, { 106,-56142 }, + { 107,-56142 }, { 108,-56142 }, { 109,-56142 }, { 110,-56142 }, { 111,-56142 }, + { 112,-56142 }, { 113,-56142 }, { 114,-56142 }, { 115,-56142 }, { 116,-56142 }, + { 117,-56142 }, { 118,-56142 }, { 119,-56142 }, { 120,-56142 }, { 121,-56142 }, + { 122,-56142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-56142 }, { 128,-56142 }, { 129,-56142 }, { 130,-56142 }, { 131,-56142 }, + { 132,-56142 }, { 133,-56142 }, { 134,-56142 }, { 135,-56142 }, { 136,-56142 }, + { 137,-56142 }, { 138,-56142 }, { 139,-56142 }, { 140,-56142 }, { 141,-56142 }, + + { 142,-56142 }, { 143,-56142 }, { 144,-56142 }, { 145,-56142 }, { 146,-56142 }, + { 147,-56142 }, { 148,-56142 }, { 149,-56142 }, { 150,-56142 }, { 151,-56142 }, + { 152,-56142 }, { 153,-56142 }, { 154,-56142 }, { 155,-56142 }, { 156,-56142 }, + { 157,-56142 }, { 158,-56142 }, { 159,-56142 }, { 160,-56142 }, { 161,-56142 }, + { 162,-56142 }, { 163,-56142 }, { 164,-56142 }, { 165,-56142 }, { 166,-56142 }, + { 167,-56142 }, { 168,-56142 }, { 169,-56142 }, { 170,-56142 }, { 171,-56142 }, + { 172,-56142 }, { 173,-56142 }, { 174,-56142 }, { 175,-56142 }, { 176,-56142 }, + { 177,-56142 }, { 178,-56142 }, { 179,-56142 }, { 180,-56142 }, { 181,-56142 }, + { 182,-56142 }, { 183,-56142 }, { 184,-56142 }, { 185,-56142 }, { 186,-56142 }, + { 187,-56142 }, { 188,-56142 }, { 189,-56142 }, { 190,-56142 }, { 191,-56142 }, + + { 192,-56142 }, { 193,-56142 }, { 194,-56142 }, { 195,-56142 }, { 196,-56142 }, + { 197,-56142 }, { 198,-56142 }, { 199,-56142 }, { 200,-56142 }, { 201,-56142 }, + { 202,-56142 }, { 203,-56142 }, { 204,-56142 }, { 205,-56142 }, { 206,-56142 }, + { 207,-56142 }, { 208,-56142 }, { 209,-56142 }, { 210,-56142 }, { 211,-56142 }, + { 212,-56142 }, { 213,-56142 }, { 214,-56142 }, { 215,-56142 }, { 216,-56142 }, + { 217,-56142 }, { 218,-56142 }, { 219,-56142 }, { 220,-56142 }, { 221,-56142 }, + { 222,-56142 }, { 223,-56142 }, { 224,-56142 }, { 225,-56142 }, { 226,-56142 }, + { 227,-56142 }, { 228,-56142 }, { 229,-56142 }, { 230,-56142 }, { 231,-56142 }, + { 232,-56142 }, { 233,-56142 }, { 234,-56142 }, { 235,-56142 }, { 236,-56142 }, + { 237,-56142 }, { 238,-56142 }, { 239,-56142 }, { 240,-56142 }, { 241,-56142 }, + + { 242,-56142 }, { 243,-56142 }, { 244,-56142 }, { 245,-56142 }, { 246,-56142 }, + { 247,-56142 }, { 248,-56142 }, { 249,-56142 }, { 250,-56142 }, { 251,-56142 }, + { 252,-56142 }, { 253,-56142 }, { 254,-56142 }, { 255,-56142 }, { 0, 131 }, + { 0,35724 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-56399 }, { 49,-56399 }, + { 50,-56399 }, { 51,-56399 }, { 52,-56399 }, { 53,-56399 }, { 54,-56399 }, + { 55,-56399 }, { 56,-56399 }, { 57,-56399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-56399 }, { 66,-56399 }, { 67,9509 }, { 68,-56399 }, { 69,-56399 }, + { 70,-56399 }, { 71,-56399 }, { 72,-56399 }, { 73,-56399 }, { 74,-56399 }, + { 75,-56399 }, { 76,-56399 }, { 77,-56399 }, { 78,-56399 }, { 79,-56399 }, + { 80,-56399 }, { 81,-56399 }, { 82,-56399 }, { 83,-56399 }, { 84,-56399 }, + + { 85,-56399 }, { 86,-56399 }, { 87,-56399 }, { 88,-56399 }, { 89,-56399 }, + { 90,-56399 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-56399 }, { 0, 0 }, { 97,-56399 }, { 98,-56399 }, { 99,9509 }, + { 100,-56399 }, { 101,-56399 }, { 102,-56399 }, { 103,-56399 }, { 104,-56399 }, + { 105,-56399 }, { 106,-56399 }, { 107,-56399 }, { 108,-56399 }, { 109,-56399 }, + { 110,-56399 }, { 111,-56399 }, { 112,-56399 }, { 113,-56399 }, { 114,-56399 }, + { 115,-56399 }, { 116,-56399 }, { 117,-56399 }, { 118,-56399 }, { 119,-56399 }, + { 120,-56399 }, { 121,-56399 }, { 122,-56399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-56399 }, { 128,-56399 }, { 129,-56399 }, + { 130,-56399 }, { 131,-56399 }, { 132,-56399 }, { 133,-56399 }, { 134,-56399 }, + + { 135,-56399 }, { 136,-56399 }, { 137,-56399 }, { 138,-56399 }, { 139,-56399 }, + { 140,-56399 }, { 141,-56399 }, { 142,-56399 }, { 143,-56399 }, { 144,-56399 }, + { 145,-56399 }, { 146,-56399 }, { 147,-56399 }, { 148,-56399 }, { 149,-56399 }, + { 150,-56399 }, { 151,-56399 }, { 152,-56399 }, { 153,-56399 }, { 154,-56399 }, + { 155,-56399 }, { 156,-56399 }, { 157,-56399 }, { 158,-56399 }, { 159,-56399 }, + { 160,-56399 }, { 161,-56399 }, { 162,-56399 }, { 163,-56399 }, { 164,-56399 }, + { 165,-56399 }, { 166,-56399 }, { 167,-56399 }, { 168,-56399 }, { 169,-56399 }, + { 170,-56399 }, { 171,-56399 }, { 172,-56399 }, { 173,-56399 }, { 174,-56399 }, + { 175,-56399 }, { 176,-56399 }, { 177,-56399 }, { 178,-56399 }, { 179,-56399 }, + { 180,-56399 }, { 181,-56399 }, { 182,-56399 }, { 183,-56399 }, { 184,-56399 }, + + { 185,-56399 }, { 186,-56399 }, { 187,-56399 }, { 188,-56399 }, { 189,-56399 }, + { 190,-56399 }, { 191,-56399 }, { 192,-56399 }, { 193,-56399 }, { 194,-56399 }, + { 195,-56399 }, { 196,-56399 }, { 197,-56399 }, { 198,-56399 }, { 199,-56399 }, + { 200,-56399 }, { 201,-56399 }, { 202,-56399 }, { 203,-56399 }, { 204,-56399 }, + { 205,-56399 }, { 206,-56399 }, { 207,-56399 }, { 208,-56399 }, { 209,-56399 }, + { 210,-56399 }, { 211,-56399 }, { 212,-56399 }, { 213,-56399 }, { 214,-56399 }, + { 215,-56399 }, { 216,-56399 }, { 217,-56399 }, { 218,-56399 }, { 219,-56399 }, + { 220,-56399 }, { 221,-56399 }, { 222,-56399 }, { 223,-56399 }, { 224,-56399 }, + { 225,-56399 }, { 226,-56399 }, { 227,-56399 }, { 228,-56399 }, { 229,-56399 }, + { 230,-56399 }, { 231,-56399 }, { 232,-56399 }, { 233,-56399 }, { 234,-56399 }, + + { 235,-56399 }, { 236,-56399 }, { 237,-56399 }, { 238,-56399 }, { 239,-56399 }, + { 240,-56399 }, { 241,-56399 }, { 242,-56399 }, { 243,-56399 }, { 244,-56399 }, + { 245,-56399 }, { 246,-56399 }, { 247,-56399 }, { 248,-56399 }, { 249,-56399 }, + { 250,-56399 }, { 251,-56399 }, { 252,-56399 }, { 253,-56399 }, { 254,-56399 }, + { 255,-56399 }, { 0, 131 }, { 0,35467 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-56656 }, { 49,-56656 }, { 50,-56656 }, { 51,-56656 }, { 52,-56656 }, + { 53,-56656 }, { 54,-56656 }, { 55,-56656 }, { 56,-56656 }, { 57,-56656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-56656 }, { 66,-56656 }, { 67,-56656 }, + { 68,-56656 }, { 69,-56656 }, { 70,-56656 }, { 71,-56656 }, { 72,-56656 }, + { 73,-56656 }, { 74,-56656 }, { 75,-56656 }, { 76,-56656 }, { 77,-56656 }, + + { 78,-56656 }, { 79,-56656 }, { 80,-56656 }, { 81,-56656 }, { 82,-56656 }, + { 83,-56656 }, { 84,9509 }, { 85,-56656 }, { 86,-56656 }, { 87,-56656 }, + { 88,-56656 }, { 89,-56656 }, { 90,-56656 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-56656 }, { 0, 0 }, { 97,-56656 }, + { 98,-56656 }, { 99,-56656 }, { 100,-56656 }, { 101,-56656 }, { 102,-56656 }, + { 103,-56656 }, { 104,-56656 }, { 105,-56656 }, { 106,-56656 }, { 107,-56656 }, + { 108,-56656 }, { 109,-56656 }, { 110,-56656 }, { 111,-56656 }, { 112,-56656 }, + { 113,-56656 }, { 114,-56656 }, { 115,-56656 }, { 116,9509 }, { 117,-56656 }, + { 118,-56656 }, { 119,-56656 }, { 120,-56656 }, { 121,-56656 }, { 122,-56656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-56656 }, + + { 128,-56656 }, { 129,-56656 }, { 130,-56656 }, { 131,-56656 }, { 132,-56656 }, + { 133,-56656 }, { 134,-56656 }, { 135,-56656 }, { 136,-56656 }, { 137,-56656 }, + { 138,-56656 }, { 139,-56656 }, { 140,-56656 }, { 141,-56656 }, { 142,-56656 }, + { 143,-56656 }, { 144,-56656 }, { 145,-56656 }, { 146,-56656 }, { 147,-56656 }, + { 148,-56656 }, { 149,-56656 }, { 150,-56656 }, { 151,-56656 }, { 152,-56656 }, + { 153,-56656 }, { 154,-56656 }, { 155,-56656 }, { 156,-56656 }, { 157,-56656 }, + { 158,-56656 }, { 159,-56656 }, { 160,-56656 }, { 161,-56656 }, { 162,-56656 }, + { 163,-56656 }, { 164,-56656 }, { 165,-56656 }, { 166,-56656 }, { 167,-56656 }, + { 168,-56656 }, { 169,-56656 }, { 170,-56656 }, { 171,-56656 }, { 172,-56656 }, + { 173,-56656 }, { 174,-56656 }, { 175,-56656 }, { 176,-56656 }, { 177,-56656 }, + + { 178,-56656 }, { 179,-56656 }, { 180,-56656 }, { 181,-56656 }, { 182,-56656 }, + { 183,-56656 }, { 184,-56656 }, { 185,-56656 }, { 186,-56656 }, { 187,-56656 }, + { 188,-56656 }, { 189,-56656 }, { 190,-56656 }, { 191,-56656 }, { 192,-56656 }, + { 193,-56656 }, { 194,-56656 }, { 195,-56656 }, { 196,-56656 }, { 197,-56656 }, + { 198,-56656 }, { 199,-56656 }, { 200,-56656 }, { 201,-56656 }, { 202,-56656 }, + { 203,-56656 }, { 204,-56656 }, { 205,-56656 }, { 206,-56656 }, { 207,-56656 }, + { 208,-56656 }, { 209,-56656 }, { 210,-56656 }, { 211,-56656 }, { 212,-56656 }, + { 213,-56656 }, { 214,-56656 }, { 215,-56656 }, { 216,-56656 }, { 217,-56656 }, + { 218,-56656 }, { 219,-56656 }, { 220,-56656 }, { 221,-56656 }, { 222,-56656 }, + { 223,-56656 }, { 224,-56656 }, { 225,-56656 }, { 226,-56656 }, { 227,-56656 }, + + { 228,-56656 }, { 229,-56656 }, { 230,-56656 }, { 231,-56656 }, { 232,-56656 }, + { 233,-56656 }, { 234,-56656 }, { 235,-56656 }, { 236,-56656 }, { 237,-56656 }, + { 238,-56656 }, { 239,-56656 }, { 240,-56656 }, { 241,-56656 }, { 242,-56656 }, + { 243,-56656 }, { 244,-56656 }, { 245,-56656 }, { 246,-56656 }, { 247,-56656 }, + { 248,-56656 }, { 249,-56656 }, { 250,-56656 }, { 251,-56656 }, { 252,-56656 }, + { 253,-56656 }, { 254,-56656 }, { 255,-56656 }, { 0, 131 }, { 0,35210 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-56913 }, { 49,-56913 }, { 50,-56913 }, + { 51,-56913 }, { 52,-56913 }, { 53,-56913 }, { 54,-56913 }, { 55,-56913 }, + { 56,-56913 }, { 57,-56913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-56913 }, + { 66,-56913 }, { 67,-56913 }, { 68,-56913 }, { 69,9509 }, { 70,-56913 }, + + { 71,-56913 }, { 72,-56913 }, { 73,-56913 }, { 74,-56913 }, { 75,-56913 }, + { 76,-56913 }, { 77,-56913 }, { 78,-56913 }, { 79,-56913 }, { 80,-56913 }, + { 81,-56913 }, { 82,-56913 }, { 83,-56913 }, { 84,-56913 }, { 85,-56913 }, + { 86,-56913 }, { 87,-56913 }, { 88,-56913 }, { 89,-56913 }, { 90,-56913 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-56913 }, + { 0, 0 }, { 97,-56913 }, { 98,-56913 }, { 99,-56913 }, { 100,-56913 }, + { 101,9509 }, { 102,-56913 }, { 103,-56913 }, { 104,-56913 }, { 105,-56913 }, + { 106,-56913 }, { 107,-56913 }, { 108,-56913 }, { 109,-56913 }, { 110,-56913 }, + { 111,-56913 }, { 112,-56913 }, { 113,-56913 }, { 114,-56913 }, { 115,-56913 }, + { 116,-56913 }, { 117,-56913 }, { 118,-56913 }, { 119,-56913 }, { 120,-56913 }, + + { 121,-56913 }, { 122,-56913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-56913 }, { 128,-56913 }, { 129,-56913 }, { 130,-56913 }, + { 131,-56913 }, { 132,-56913 }, { 133,-56913 }, { 134,-56913 }, { 135,-56913 }, + { 136,-56913 }, { 137,-56913 }, { 138,-56913 }, { 139,-56913 }, { 140,-56913 }, + { 141,-56913 }, { 142,-56913 }, { 143,-56913 }, { 144,-56913 }, { 145,-56913 }, + { 146,-56913 }, { 147,-56913 }, { 148,-56913 }, { 149,-56913 }, { 150,-56913 }, + { 151,-56913 }, { 152,-56913 }, { 153,-56913 }, { 154,-56913 }, { 155,-56913 }, + { 156,-56913 }, { 157,-56913 }, { 158,-56913 }, { 159,-56913 }, { 160,-56913 }, + { 161,-56913 }, { 162,-56913 }, { 163,-56913 }, { 164,-56913 }, { 165,-56913 }, + { 166,-56913 }, { 167,-56913 }, { 168,-56913 }, { 169,-56913 }, { 170,-56913 }, + + { 171,-56913 }, { 172,-56913 }, { 173,-56913 }, { 174,-56913 }, { 175,-56913 }, + { 176,-56913 }, { 177,-56913 }, { 178,-56913 }, { 179,-56913 }, { 180,-56913 }, + { 181,-56913 }, { 182,-56913 }, { 183,-56913 }, { 184,-56913 }, { 185,-56913 }, + { 186,-56913 }, { 187,-56913 }, { 188,-56913 }, { 189,-56913 }, { 190,-56913 }, + { 191,-56913 }, { 192,-56913 }, { 193,-56913 }, { 194,-56913 }, { 195,-56913 }, + { 196,-56913 }, { 197,-56913 }, { 198,-56913 }, { 199,-56913 }, { 200,-56913 }, + { 201,-56913 }, { 202,-56913 }, { 203,-56913 }, { 204,-56913 }, { 205,-56913 }, + { 206,-56913 }, { 207,-56913 }, { 208,-56913 }, { 209,-56913 }, { 210,-56913 }, + { 211,-56913 }, { 212,-56913 }, { 213,-56913 }, { 214,-56913 }, { 215,-56913 }, + { 216,-56913 }, { 217,-56913 }, { 218,-56913 }, { 219,-56913 }, { 220,-56913 }, + + { 221,-56913 }, { 222,-56913 }, { 223,-56913 }, { 224,-56913 }, { 225,-56913 }, + { 226,-56913 }, { 227,-56913 }, { 228,-56913 }, { 229,-56913 }, { 230,-56913 }, + { 231,-56913 }, { 232,-56913 }, { 233,-56913 }, { 234,-56913 }, { 235,-56913 }, + { 236,-56913 }, { 237,-56913 }, { 238,-56913 }, { 239,-56913 }, { 240,-56913 }, + { 241,-56913 }, { 242,-56913 }, { 243,-56913 }, { 244,-56913 }, { 245,-56913 }, + { 246,-56913 }, { 247,-56913 }, { 248,-56913 }, { 249,-56913 }, { 250,-56913 }, + { 251,-56913 }, { 252,-56913 }, { 253,-56913 }, { 254,-56913 }, { 255,-56913 }, + { 0, 131 }, { 0,34953 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-57170 }, + { 49,-57170 }, { 50,-57170 }, { 51,-57170 }, { 52,-57170 }, { 53,-57170 }, + { 54,-57170 }, { 55,-57170 }, { 56,-57170 }, { 57,-57170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-57170 }, { 66,-57170 }, { 67,-57170 }, { 68,-57170 }, + { 69,-57170 }, { 70,-57170 }, { 71,-57170 }, { 72,9509 }, { 73,-57170 }, + { 74,-57170 }, { 75,-57170 }, { 76,-57170 }, { 77,-57170 }, { 78,-57170 }, + { 79,-57170 }, { 80,-57170 }, { 81,-57170 }, { 82,-57170 }, { 83,-57170 }, + { 84,-57170 }, { 85,-57170 }, { 86,-57170 }, { 87,-57170 }, { 88,-57170 }, + { 89,-57170 }, { 90,-57170 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-57170 }, { 0, 0 }, { 97,-57170 }, { 98,-57170 }, + { 99,-57170 }, { 100,-57170 }, { 101,-57170 }, { 102,-57170 }, { 103,-57170 }, + { 104,9509 }, { 105,-57170 }, { 106,-57170 }, { 107,-57170 }, { 108,-57170 }, + { 109,-57170 }, { 110,-57170 }, { 111,-57170 }, { 112,-57170 }, { 113,-57170 }, + + { 114,-57170 }, { 115,-57170 }, { 116,-57170 }, { 117,-57170 }, { 118,-57170 }, + { 119,-57170 }, { 120,-57170 }, { 121,-57170 }, { 122,-57170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-57170 }, { 128,-57170 }, + { 129,-57170 }, { 130,-57170 }, { 131,-57170 }, { 132,-57170 }, { 133,-57170 }, + { 134,-57170 }, { 135,-57170 }, { 136,-57170 }, { 137,-57170 }, { 138,-57170 }, + { 139,-57170 }, { 140,-57170 }, { 141,-57170 }, { 142,-57170 }, { 143,-57170 }, + { 144,-57170 }, { 145,-57170 }, { 146,-57170 }, { 147,-57170 }, { 148,-57170 }, + { 149,-57170 }, { 150,-57170 }, { 151,-57170 }, { 152,-57170 }, { 153,-57170 }, + { 154,-57170 }, { 155,-57170 }, { 156,-57170 }, { 157,-57170 }, { 158,-57170 }, + { 159,-57170 }, { 160,-57170 }, { 161,-57170 }, { 162,-57170 }, { 163,-57170 }, + + { 164,-57170 }, { 165,-57170 }, { 166,-57170 }, { 167,-57170 }, { 168,-57170 }, + { 169,-57170 }, { 170,-57170 }, { 171,-57170 }, { 172,-57170 }, { 173,-57170 }, + { 174,-57170 }, { 175,-57170 }, { 176,-57170 }, { 177,-57170 }, { 178,-57170 }, + { 179,-57170 }, { 180,-57170 }, { 181,-57170 }, { 182,-57170 }, { 183,-57170 }, + { 184,-57170 }, { 185,-57170 }, { 186,-57170 }, { 187,-57170 }, { 188,-57170 }, + { 189,-57170 }, { 190,-57170 }, { 191,-57170 }, { 192,-57170 }, { 193,-57170 }, + { 194,-57170 }, { 195,-57170 }, { 196,-57170 }, { 197,-57170 }, { 198,-57170 }, + { 199,-57170 }, { 200,-57170 }, { 201,-57170 }, { 202,-57170 }, { 203,-57170 }, + { 204,-57170 }, { 205,-57170 }, { 206,-57170 }, { 207,-57170 }, { 208,-57170 }, + { 209,-57170 }, { 210,-57170 }, { 211,-57170 }, { 212,-57170 }, { 213,-57170 }, + + { 214,-57170 }, { 215,-57170 }, { 216,-57170 }, { 217,-57170 }, { 218,-57170 }, + { 219,-57170 }, { 220,-57170 }, { 221,-57170 }, { 222,-57170 }, { 223,-57170 }, + { 224,-57170 }, { 225,-57170 }, { 226,-57170 }, { 227,-57170 }, { 228,-57170 }, + { 229,-57170 }, { 230,-57170 }, { 231,-57170 }, { 232,-57170 }, { 233,-57170 }, + { 234,-57170 }, { 235,-57170 }, { 236,-57170 }, { 237,-57170 }, { 238,-57170 }, + { 239,-57170 }, { 240,-57170 }, { 241,-57170 }, { 242,-57170 }, { 243,-57170 }, + { 244,-57170 }, { 245,-57170 }, { 246,-57170 }, { 247,-57170 }, { 248,-57170 }, + { 249,-57170 }, { 250,-57170 }, { 251,-57170 }, { 252,-57170 }, { 253,-57170 }, + { 254,-57170 }, { 255,-57170 }, { 0, 131 }, { 0,34696 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-57427 }, { 49,-57427 }, { 50,-57427 }, { 51,-57427 }, + { 52,-57427 }, { 53,-57427 }, { 54,-57427 }, { 55,-57427 }, { 56,-57427 }, + + { 57,-57427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-57427 }, { 66,-57427 }, + { 67,-57427 }, { 68,-57427 }, { 69,9509 }, { 70,-57427 }, { 71,-57427 }, + { 72,-57427 }, { 73,-57427 }, { 74,-57427 }, { 75,-57427 }, { 76,-57427 }, + { 77,-57427 }, { 78,-57427 }, { 79,-57427 }, { 80,-57427 }, { 81,-57427 }, + { 82,-57427 }, { 83,-57427 }, { 84,-57427 }, { 85,-57427 }, { 86,-57427 }, + { 87,-57427 }, { 88,-57427 }, { 89,-57427 }, { 90,-57427 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-57427 }, { 0, 0 }, + { 97,-57427 }, { 98,-57427 }, { 99,-57427 }, { 100,-57427 }, { 101,9509 }, + { 102,-57427 }, { 103,-57427 }, { 104,-57427 }, { 105,-57427 }, { 106,-57427 }, + + { 107,-57427 }, { 108,-57427 }, { 109,-57427 }, { 110,-57427 }, { 111,-57427 }, + { 112,-57427 }, { 113,-57427 }, { 114,-57427 }, { 115,-57427 }, { 116,-57427 }, + { 117,-57427 }, { 118,-57427 }, { 119,-57427 }, { 120,-57427 }, { 121,-57427 }, + { 122,-57427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-57427 }, { 128,-57427 }, { 129,-57427 }, { 130,-57427 }, { 131,-57427 }, + { 132,-57427 }, { 133,-57427 }, { 134,-57427 }, { 135,-57427 }, { 136,-57427 }, + { 137,-57427 }, { 138,-57427 }, { 139,-57427 }, { 140,-57427 }, { 141,-57427 }, + { 142,-57427 }, { 143,-57427 }, { 144,-57427 }, { 145,-57427 }, { 146,-57427 }, + { 147,-57427 }, { 148,-57427 }, { 149,-57427 }, { 150,-57427 }, { 151,-57427 }, + { 152,-57427 }, { 153,-57427 }, { 154,-57427 }, { 155,-57427 }, { 156,-57427 }, + + { 157,-57427 }, { 158,-57427 }, { 159,-57427 }, { 160,-57427 }, { 161,-57427 }, + { 162,-57427 }, { 163,-57427 }, { 164,-57427 }, { 165,-57427 }, { 166,-57427 }, + { 167,-57427 }, { 168,-57427 }, { 169,-57427 }, { 170,-57427 }, { 171,-57427 }, + { 172,-57427 }, { 173,-57427 }, { 174,-57427 }, { 175,-57427 }, { 176,-57427 }, + { 177,-57427 }, { 178,-57427 }, { 179,-57427 }, { 180,-57427 }, { 181,-57427 }, + { 182,-57427 }, { 183,-57427 }, { 184,-57427 }, { 185,-57427 }, { 186,-57427 }, + { 187,-57427 }, { 188,-57427 }, { 189,-57427 }, { 190,-57427 }, { 191,-57427 }, + { 192,-57427 }, { 193,-57427 }, { 194,-57427 }, { 195,-57427 }, { 196,-57427 }, + { 197,-57427 }, { 198,-57427 }, { 199,-57427 }, { 200,-57427 }, { 201,-57427 }, + { 202,-57427 }, { 203,-57427 }, { 204,-57427 }, { 205,-57427 }, { 206,-57427 }, + + { 207,-57427 }, { 208,-57427 }, { 209,-57427 }, { 210,-57427 }, { 211,-57427 }, + { 212,-57427 }, { 213,-57427 }, { 214,-57427 }, { 215,-57427 }, { 216,-57427 }, + { 217,-57427 }, { 218,-57427 }, { 219,-57427 }, { 220,-57427 }, { 221,-57427 }, + { 222,-57427 }, { 223,-57427 }, { 224,-57427 }, { 225,-57427 }, { 226,-57427 }, + { 227,-57427 }, { 228,-57427 }, { 229,-57427 }, { 230,-57427 }, { 231,-57427 }, + { 232,-57427 }, { 233,-57427 }, { 234,-57427 }, { 235,-57427 }, { 236,-57427 }, + { 237,-57427 }, { 238,-57427 }, { 239,-57427 }, { 240,-57427 }, { 241,-57427 }, + { 242,-57427 }, { 243,-57427 }, { 244,-57427 }, { 245,-57427 }, { 246,-57427 }, + { 247,-57427 }, { 248,-57427 }, { 249,-57427 }, { 250,-57427 }, { 251,-57427 }, + { 252,-57427 }, { 253,-57427 }, { 254,-57427 }, { 255,-57427 }, { 0, 131 }, + + { 0,34439 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-57684 }, { 49,-57684 }, + + { 50,-57684 }, { 51,-57684 }, { 52,-57684 }, { 53,-57684 }, { 54,-57684 }, + { 55,-57684 }, { 56,-57684 }, { 57,-57684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-57684 }, { 66,-57684 }, { 67,-57684 }, { 68,-57684 }, { 69,-57684 }, + { 70,-57684 }, { 71,-57684 }, { 72,-57684 }, { 73,9509 }, { 74,-57684 }, + { 75,-57684 }, { 76,-57684 }, { 77,-57684 }, { 78,-57684 }, { 79,-57684 }, + { 80,-57684 }, { 81,-57684 }, { 82,-57684 }, { 83,-57684 }, { 84,-57684 }, + { 85,-57684 }, { 86,-57684 }, { 87,-57684 }, { 88,-57684 }, { 89,-57684 }, + { 90,-57684 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-57684 }, { 0, 0 }, { 97,-57684 }, { 98,-57684 }, { 99,-57684 }, + + { 100,-57684 }, { 101,-57684 }, { 102,-57684 }, { 103,-57684 }, { 104,-57684 }, + { 105,9509 }, { 106,-57684 }, { 107,-57684 }, { 108,-57684 }, { 109,-57684 }, + { 110,-57684 }, { 111,-57684 }, { 112,-57684 }, { 113,-57684 }, { 114,-57684 }, + { 115,-57684 }, { 116,-57684 }, { 117,-57684 }, { 118,-57684 }, { 119,-57684 }, + { 120,-57684 }, { 121,-57684 }, { 122,-57684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-57684 }, { 128,-57684 }, { 129,-57684 }, + { 130,-57684 }, { 131,-57684 }, { 132,-57684 }, { 133,-57684 }, { 134,-57684 }, + { 135,-57684 }, { 136,-57684 }, { 137,-57684 }, { 138,-57684 }, { 139,-57684 }, + { 140,-57684 }, { 141,-57684 }, { 142,-57684 }, { 143,-57684 }, { 144,-57684 }, + { 145,-57684 }, { 146,-57684 }, { 147,-57684 }, { 148,-57684 }, { 149,-57684 }, + + { 150,-57684 }, { 151,-57684 }, { 152,-57684 }, { 153,-57684 }, { 154,-57684 }, + { 155,-57684 }, { 156,-57684 }, { 157,-57684 }, { 158,-57684 }, { 159,-57684 }, + { 160,-57684 }, { 161,-57684 }, { 162,-57684 }, { 163,-57684 }, { 164,-57684 }, + { 165,-57684 }, { 166,-57684 }, { 167,-57684 }, { 168,-57684 }, { 169,-57684 }, + { 170,-57684 }, { 171,-57684 }, { 172,-57684 }, { 173,-57684 }, { 174,-57684 }, + { 175,-57684 }, { 176,-57684 }, { 177,-57684 }, { 178,-57684 }, { 179,-57684 }, + { 180,-57684 }, { 181,-57684 }, { 182,-57684 }, { 183,-57684 }, { 184,-57684 }, + { 185,-57684 }, { 186,-57684 }, { 187,-57684 }, { 188,-57684 }, { 189,-57684 }, + { 190,-57684 }, { 191,-57684 }, { 192,-57684 }, { 193,-57684 }, { 194,-57684 }, + { 195,-57684 }, { 196,-57684 }, { 197,-57684 }, { 198,-57684 }, { 199,-57684 }, + + { 200,-57684 }, { 201,-57684 }, { 202,-57684 }, { 203,-57684 }, { 204,-57684 }, + { 205,-57684 }, { 206,-57684 }, { 207,-57684 }, { 208,-57684 }, { 209,-57684 }, + { 210,-57684 }, { 211,-57684 }, { 212,-57684 }, { 213,-57684 }, { 214,-57684 }, + { 215,-57684 }, { 216,-57684 }, { 217,-57684 }, { 218,-57684 }, { 219,-57684 }, + { 220,-57684 }, { 221,-57684 }, { 222,-57684 }, { 223,-57684 }, { 224,-57684 }, + { 225,-57684 }, { 226,-57684 }, { 227,-57684 }, { 228,-57684 }, { 229,-57684 }, + { 230,-57684 }, { 231,-57684 }, { 232,-57684 }, { 233,-57684 }, { 234,-57684 }, + { 235,-57684 }, { 236,-57684 }, { 237,-57684 }, { 238,-57684 }, { 239,-57684 }, + { 240,-57684 }, { 241,-57684 }, { 242,-57684 }, { 243,-57684 }, { 244,-57684 }, + { 245,-57684 }, { 246,-57684 }, { 247,-57684 }, { 248,-57684 }, { 249,-57684 }, + + { 250,-57684 }, { 251,-57684 }, { 252,-57684 }, { 253,-57684 }, { 254,-57684 }, + { 255,-57684 }, { 0, 131 }, { 0,34182 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-57941 }, { 49,-57941 }, { 50,-57941 }, { 51,-57941 }, { 52,-57941 }, + { 53,-57941 }, { 54,-57941 }, { 55,-57941 }, { 56,-57941 }, { 57,-57941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-57941 }, { 66,-57941 }, { 67,9509 }, + { 68,-57941 }, { 69,-57941 }, { 70,-57941 }, { 71,-57941 }, { 72,-57941 }, + { 73,-57941 }, { 74,-57941 }, { 75,-57941 }, { 76,-57941 }, { 77,-57941 }, + { 78,-57941 }, { 79,-57941 }, { 80,-57941 }, { 81,-57941 }, { 82,-57941 }, + { 83,-57941 }, { 84,-57941 }, { 85,-57941 }, { 86,-57941 }, { 87,-57941 }, + { 88,-57941 }, { 89,-57941 }, { 90,-57941 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-57941 }, { 0, 0 }, { 97,-57941 }, + { 98,-57941 }, { 99,9509 }, { 100,-57941 }, { 101,-57941 }, { 102,-57941 }, + { 103,-57941 }, { 104,-57941 }, { 105,-57941 }, { 106,-57941 }, { 107,-57941 }, + { 108,-57941 }, { 109,-57941 }, { 110,-57941 }, { 111,-57941 }, { 112,-57941 }, + { 113,-57941 }, { 114,-57941 }, { 115,-57941 }, { 116,-57941 }, { 117,-57941 }, + { 118,-57941 }, { 119,-57941 }, { 120,-57941 }, { 121,-57941 }, { 122,-57941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-57941 }, + { 128,-57941 }, { 129,-57941 }, { 130,-57941 }, { 131,-57941 }, { 132,-57941 }, + { 133,-57941 }, { 134,-57941 }, { 135,-57941 }, { 136,-57941 }, { 137,-57941 }, + { 138,-57941 }, { 139,-57941 }, { 140,-57941 }, { 141,-57941 }, { 142,-57941 }, + + { 143,-57941 }, { 144,-57941 }, { 145,-57941 }, { 146,-57941 }, { 147,-57941 }, + { 148,-57941 }, { 149,-57941 }, { 150,-57941 }, { 151,-57941 }, { 152,-57941 }, + { 153,-57941 }, { 154,-57941 }, { 155,-57941 }, { 156,-57941 }, { 157,-57941 }, + { 158,-57941 }, { 159,-57941 }, { 160,-57941 }, { 161,-57941 }, { 162,-57941 }, + { 163,-57941 }, { 164,-57941 }, { 165,-57941 }, { 166,-57941 }, { 167,-57941 }, + { 168,-57941 }, { 169,-57941 }, { 170,-57941 }, { 171,-57941 }, { 172,-57941 }, + { 173,-57941 }, { 174,-57941 }, { 175,-57941 }, { 176,-57941 }, { 177,-57941 }, + { 178,-57941 }, { 179,-57941 }, { 180,-57941 }, { 181,-57941 }, { 182,-57941 }, + { 183,-57941 }, { 184,-57941 }, { 185,-57941 }, { 186,-57941 }, { 187,-57941 }, + { 188,-57941 }, { 189,-57941 }, { 190,-57941 }, { 191,-57941 }, { 192,-57941 }, + + { 193,-57941 }, { 194,-57941 }, { 195,-57941 }, { 196,-57941 }, { 197,-57941 }, + { 198,-57941 }, { 199,-57941 }, { 200,-57941 }, { 201,-57941 }, { 202,-57941 }, + { 203,-57941 }, { 204,-57941 }, { 205,-57941 }, { 206,-57941 }, { 207,-57941 }, + { 208,-57941 }, { 209,-57941 }, { 210,-57941 }, { 211,-57941 }, { 212,-57941 }, + { 213,-57941 }, { 214,-57941 }, { 215,-57941 }, { 216,-57941 }, { 217,-57941 }, + { 218,-57941 }, { 219,-57941 }, { 220,-57941 }, { 221,-57941 }, { 222,-57941 }, + { 223,-57941 }, { 224,-57941 }, { 225,-57941 }, { 226,-57941 }, { 227,-57941 }, + { 228,-57941 }, { 229,-57941 }, { 230,-57941 }, { 231,-57941 }, { 232,-57941 }, + { 233,-57941 }, { 234,-57941 }, { 235,-57941 }, { 236,-57941 }, { 237,-57941 }, + { 238,-57941 }, { 239,-57941 }, { 240,-57941 }, { 241,-57941 }, { 242,-57941 }, + + { 243,-57941 }, { 244,-57941 }, { 245,-57941 }, { 246,-57941 }, { 247,-57941 }, + { 248,-57941 }, { 249,-57941 }, { 250,-57941 }, { 251,-57941 }, { 252,-57941 }, + { 253,-57941 }, { 254,-57941 }, { 255,-57941 }, { 0, 131 }, { 0,33925 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-58198 }, { 49,-58198 }, { 50,-58198 }, + { 51,-58198 }, { 52,-58198 }, { 53,-58198 }, { 54,-58198 }, { 55,-58198 }, + { 56,-58198 }, { 57,-58198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-58198 }, + { 66,-58198 }, { 67,-58198 }, { 68,-58198 }, { 69,-58198 }, { 70,-58198 }, + { 71,-58198 }, { 72,-58198 }, { 73,-58198 }, { 74,-58198 }, { 75,-58198 }, + { 76,9509 }, { 77,-58198 }, { 78,-58198 }, { 79,-58198 }, { 80,-58198 }, + { 81,-58198 }, { 82,-58198 }, { 83,-58198 }, { 84,-58198 }, { 85,-58198 }, + + { 86,-58198 }, { 87,-58198 }, { 88,-58198 }, { 89,-58198 }, { 90,-58198 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-58198 }, + { 0, 0 }, { 97,-58198 }, { 98,-58198 }, { 99,-58198 }, { 100,-58198 }, + { 101,-58198 }, { 102,-58198 }, { 103,-58198 }, { 104,-58198 }, { 105,-58198 }, + { 106,-58198 }, { 107,-58198 }, { 108,9509 }, { 109,-58198 }, { 110,-58198 }, + { 111,-58198 }, { 112,-58198 }, { 113,-58198 }, { 114,-58198 }, { 115,-58198 }, + { 116,-58198 }, { 117,-58198 }, { 118,-58198 }, { 119,-58198 }, { 120,-58198 }, + { 121,-58198 }, { 122,-58198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-58198 }, { 128,-58198 }, { 129,-58198 }, { 130,-58198 }, + { 131,-58198 }, { 132,-58198 }, { 133,-58198 }, { 134,-58198 }, { 135,-58198 }, + + { 136,-58198 }, { 137,-58198 }, { 138,-58198 }, { 139,-58198 }, { 140,-58198 }, + { 141,-58198 }, { 142,-58198 }, { 143,-58198 }, { 144,-58198 }, { 145,-58198 }, + { 146,-58198 }, { 147,-58198 }, { 148,-58198 }, { 149,-58198 }, { 150,-58198 }, + { 151,-58198 }, { 152,-58198 }, { 153,-58198 }, { 154,-58198 }, { 155,-58198 }, + { 156,-58198 }, { 157,-58198 }, { 158,-58198 }, { 159,-58198 }, { 160,-58198 }, + { 161,-58198 }, { 162,-58198 }, { 163,-58198 }, { 164,-58198 }, { 165,-58198 }, + { 166,-58198 }, { 167,-58198 }, { 168,-58198 }, { 169,-58198 }, { 170,-58198 }, + { 171,-58198 }, { 172,-58198 }, { 173,-58198 }, { 174,-58198 }, { 175,-58198 }, + { 176,-58198 }, { 177,-58198 }, { 178,-58198 }, { 179,-58198 }, { 180,-58198 }, + { 181,-58198 }, { 182,-58198 }, { 183,-58198 }, { 184,-58198 }, { 185,-58198 }, + + { 186,-58198 }, { 187,-58198 }, { 188,-58198 }, { 189,-58198 }, { 190,-58198 }, + { 191,-58198 }, { 192,-58198 }, { 193,-58198 }, { 194,-58198 }, { 195,-58198 }, + { 196,-58198 }, { 197,-58198 }, { 198,-58198 }, { 199,-58198 }, { 200,-58198 }, + { 201,-58198 }, { 202,-58198 }, { 203,-58198 }, { 204,-58198 }, { 205,-58198 }, + { 206,-58198 }, { 207,-58198 }, { 208,-58198 }, { 209,-58198 }, { 210,-58198 }, + { 211,-58198 }, { 212,-58198 }, { 213,-58198 }, { 214,-58198 }, { 215,-58198 }, + { 216,-58198 }, { 217,-58198 }, { 218,-58198 }, { 219,-58198 }, { 220,-58198 }, + { 221,-58198 }, { 222,-58198 }, { 223,-58198 }, { 224,-58198 }, { 225,-58198 }, + { 226,-58198 }, { 227,-58198 }, { 228,-58198 }, { 229,-58198 }, { 230,-58198 }, + { 231,-58198 }, { 232,-58198 }, { 233,-58198 }, { 234,-58198 }, { 235,-58198 }, + + { 236,-58198 }, { 237,-58198 }, { 238,-58198 }, { 239,-58198 }, { 240,-58198 }, + { 241,-58198 }, { 242,-58198 }, { 243,-58198 }, { 244,-58198 }, { 245,-58198 }, + { 246,-58198 }, { 247,-58198 }, { 248,-58198 }, { 249,-58198 }, { 250,-58198 }, + { 251,-58198 }, { 252,-58198 }, { 253,-58198 }, { 254,-58198 }, { 255,-58198 }, + { 0, 131 }, { 0,33668 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-58455 }, + { 49,-58455 }, { 50,-58455 }, { 51,-58455 }, { 52,-58455 }, { 53,-58455 }, + { 54,-58455 }, { 55,-58455 }, { 56,-58455 }, { 57,-58455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-58455 }, { 66,-58455 }, { 67,-58455 }, { 68,-58455 }, + { 69,-58455 }, { 70,-58455 }, { 71,-58455 }, { 72,-58455 }, { 73,-58455 }, + { 74,-58455 }, { 75,-58455 }, { 76,-58455 }, { 77,-58455 }, { 78,-58455 }, + + { 79,-58455 }, { 80,-58455 }, { 81,-58455 }, { 82,-58455 }, { 83,-58455 }, + { 84,-58455 }, { 85,9509 }, { 86,-58455 }, { 87,-58455 }, { 88,-58455 }, + { 89,-58455 }, { 90,-58455 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-58455 }, { 0, 0 }, { 97,-58455 }, { 98,-58455 }, + { 99,-58455 }, { 100,-58455 }, { 101,-58455 }, { 102,-58455 }, { 103,-58455 }, + { 104,-58455 }, { 105,-58455 }, { 106,-58455 }, { 107,-58455 }, { 108,-58455 }, + { 109,-58455 }, { 110,-58455 }, { 111,-58455 }, { 112,-58455 }, { 113,-58455 }, + { 114,-58455 }, { 115,-58455 }, { 116,-58455 }, { 117,9509 }, { 118,-58455 }, + { 119,-58455 }, { 120,-58455 }, { 121,-58455 }, { 122,-58455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-58455 }, { 128,-58455 }, + + { 129,-58455 }, { 130,-58455 }, { 131,-58455 }, { 132,-58455 }, { 133,-58455 }, + { 134,-58455 }, { 135,-58455 }, { 136,-58455 }, { 137,-58455 }, { 138,-58455 }, + { 139,-58455 }, { 140,-58455 }, { 141,-58455 }, { 142,-58455 }, { 143,-58455 }, + { 144,-58455 }, { 145,-58455 }, { 146,-58455 }, { 147,-58455 }, { 148,-58455 }, + { 149,-58455 }, { 150,-58455 }, { 151,-58455 }, { 152,-58455 }, { 153,-58455 }, + { 154,-58455 }, { 155,-58455 }, { 156,-58455 }, { 157,-58455 }, { 158,-58455 }, + { 159,-58455 }, { 160,-58455 }, { 161,-58455 }, { 162,-58455 }, { 163,-58455 }, + { 164,-58455 }, { 165,-58455 }, { 166,-58455 }, { 167,-58455 }, { 168,-58455 }, + { 169,-58455 }, { 170,-58455 }, { 171,-58455 }, { 172,-58455 }, { 173,-58455 }, + { 174,-58455 }, { 175,-58455 }, { 176,-58455 }, { 177,-58455 }, { 178,-58455 }, + + { 179,-58455 }, { 180,-58455 }, { 181,-58455 }, { 182,-58455 }, { 183,-58455 }, + { 184,-58455 }, { 185,-58455 }, { 186,-58455 }, { 187,-58455 }, { 188,-58455 }, + { 189,-58455 }, { 190,-58455 }, { 191,-58455 }, { 192,-58455 }, { 193,-58455 }, + { 194,-58455 }, { 195,-58455 }, { 196,-58455 }, { 197,-58455 }, { 198,-58455 }, + { 199,-58455 }, { 200,-58455 }, { 201,-58455 }, { 202,-58455 }, { 203,-58455 }, + { 204,-58455 }, { 205,-58455 }, { 206,-58455 }, { 207,-58455 }, { 208,-58455 }, + { 209,-58455 }, { 210,-58455 }, { 211,-58455 }, { 212,-58455 }, { 213,-58455 }, + { 214,-58455 }, { 215,-58455 }, { 216,-58455 }, { 217,-58455 }, { 218,-58455 }, + { 219,-58455 }, { 220,-58455 }, { 221,-58455 }, { 222,-58455 }, { 223,-58455 }, + { 224,-58455 }, { 225,-58455 }, { 226,-58455 }, { 227,-58455 }, { 228,-58455 }, + + { 229,-58455 }, { 230,-58455 }, { 231,-58455 }, { 232,-58455 }, { 233,-58455 }, + { 234,-58455 }, { 235,-58455 }, { 236,-58455 }, { 237,-58455 }, { 238,-58455 }, + { 239,-58455 }, { 240,-58455 }, { 241,-58455 }, { 242,-58455 }, { 243,-58455 }, + { 244,-58455 }, { 245,-58455 }, { 246,-58455 }, { 247,-58455 }, { 248,-58455 }, + { 249,-58455 }, { 250,-58455 }, { 251,-58455 }, { 252,-58455 }, { 253,-58455 }, + { 254,-58455 }, { 255,-58455 }, { 0, 131 }, { 0,33411 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-58712 }, { 49,-58712 }, { 50,-58712 }, { 51,-58712 }, + { 52,-58712 }, { 53,-58712 }, { 54,-58712 }, { 55,-58712 }, { 56,-58712 }, + { 57,-58712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-58712 }, { 66,-58712 }, + { 67,-58712 }, { 68,-58712 }, { 69,9509 }, { 70,-58712 }, { 71,-58712 }, + + { 72,-58712 }, { 73,-58712 }, { 74,-58712 }, { 75,-58712 }, { 76,-58712 }, + { 77,-58712 }, { 78,-58712 }, { 79,-58712 }, { 80,-58712 }, { 81,-58712 }, + { 82,-58712 }, { 83,-58712 }, { 84,-58712 }, { 85,-58712 }, { 86,-58712 }, + { 87,-58712 }, { 88,-58712 }, { 89,-58712 }, { 90,-58712 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-58712 }, { 0, 0 }, + { 97,-58712 }, { 98,-58712 }, { 99,-58712 }, { 100,-58712 }, { 101,9509 }, + { 102,-58712 }, { 103,-58712 }, { 104,-58712 }, { 105,-58712 }, { 106,-58712 }, + { 107,-58712 }, { 108,-58712 }, { 109,-58712 }, { 110,-58712 }, { 111,-58712 }, + { 112,-58712 }, { 113,-58712 }, { 114,-58712 }, { 115,-58712 }, { 116,-58712 }, + { 117,-58712 }, { 118,-58712 }, { 119,-58712 }, { 120,-58712 }, { 121,-58712 }, + + { 122,-58712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-58712 }, { 128,-58712 }, { 129,-58712 }, { 130,-58712 }, { 131,-58712 }, + { 132,-58712 }, { 133,-58712 }, { 134,-58712 }, { 135,-58712 }, { 136,-58712 }, + { 137,-58712 }, { 138,-58712 }, { 139,-58712 }, { 140,-58712 }, { 141,-58712 }, + { 142,-58712 }, { 143,-58712 }, { 144,-58712 }, { 145,-58712 }, { 146,-58712 }, + { 147,-58712 }, { 148,-58712 }, { 149,-58712 }, { 150,-58712 }, { 151,-58712 }, + { 152,-58712 }, { 153,-58712 }, { 154,-58712 }, { 155,-58712 }, { 156,-58712 }, + { 157,-58712 }, { 158,-58712 }, { 159,-58712 }, { 160,-58712 }, { 161,-58712 }, + { 162,-58712 }, { 163,-58712 }, { 164,-58712 }, { 165,-58712 }, { 166,-58712 }, + { 167,-58712 }, { 168,-58712 }, { 169,-58712 }, { 170,-58712 }, { 171,-58712 }, + + { 172,-58712 }, { 173,-58712 }, { 174,-58712 }, { 175,-58712 }, { 176,-58712 }, + { 177,-58712 }, { 178,-58712 }, { 179,-58712 }, { 180,-58712 }, { 181,-58712 }, + { 182,-58712 }, { 183,-58712 }, { 184,-58712 }, { 185,-58712 }, { 186,-58712 }, + { 187,-58712 }, { 188,-58712 }, { 189,-58712 }, { 190,-58712 }, { 191,-58712 }, + { 192,-58712 }, { 193,-58712 }, { 194,-58712 }, { 195,-58712 }, { 196,-58712 }, + { 197,-58712 }, { 198,-58712 }, { 199,-58712 }, { 200,-58712 }, { 201,-58712 }, + { 202,-58712 }, { 203,-58712 }, { 204,-58712 }, { 205,-58712 }, { 206,-58712 }, + { 207,-58712 }, { 208,-58712 }, { 209,-58712 }, { 210,-58712 }, { 211,-58712 }, + { 212,-58712 }, { 213,-58712 }, { 214,-58712 }, { 215,-58712 }, { 216,-58712 }, + { 217,-58712 }, { 218,-58712 }, { 219,-58712 }, { 220,-58712 }, { 221,-58712 }, + + { 222,-58712 }, { 223,-58712 }, { 224,-58712 }, { 225,-58712 }, { 226,-58712 }, + { 227,-58712 }, { 228,-58712 }, { 229,-58712 }, { 230,-58712 }, { 231,-58712 }, + { 232,-58712 }, { 233,-58712 }, { 234,-58712 }, { 235,-58712 }, { 236,-58712 }, + { 237,-58712 }, { 238,-58712 }, { 239,-58712 }, { 240,-58712 }, { 241,-58712 }, + { 242,-58712 }, { 243,-58712 }, { 244,-58712 }, { 245,-58712 }, { 246,-58712 }, + { 247,-58712 }, { 248,-58712 }, { 249,-58712 }, { 250,-58712 }, { 251,-58712 }, + { 252,-58712 }, { 253,-58712 }, { 254,-58712 }, { 255,-58712 }, { 0, 131 }, + { 0,33154 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-58969 }, { 49,-58969 }, + { 50,-58969 }, { 51,-58969 }, { 52,-58969 }, { 53,-58969 }, { 54,-58969 }, + { 55,-58969 }, { 56,-58969 }, { 57,-58969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-58969 }, { 66,-58969 }, { 67,-58969 }, { 68,-58969 }, { 69,-58969 }, + { 70,-58969 }, { 71,-58969 }, { 72,-58969 }, { 73,-58969 }, { 74,-58969 }, + { 75,-58969 }, { 76,-58969 }, { 77,-58969 }, { 78,-58969 }, { 79,-58969 }, + { 80,-58969 }, { 81,-58969 }, { 82,-58969 }, { 83,-58969 }, { 84,9509 }, + { 85,-58969 }, { 86,-58969 }, { 87,-58969 }, { 88,-58969 }, { 89,-58969 }, + { 90,-58969 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-58969 }, { 0, 0 }, { 97,-58969 }, { 98,-58969 }, { 99,-58969 }, + { 100,-58969 }, { 101,-58969 }, { 102,-58969 }, { 103,-58969 }, { 104,-58969 }, + { 105,-58969 }, { 106,-58969 }, { 107,-58969 }, { 108,-58969 }, { 109,-58969 }, + { 110,-58969 }, { 111,-58969 }, { 112,-58969 }, { 113,-58969 }, { 114,-58969 }, + + { 115,-58969 }, { 116,9509 }, { 117,-58969 }, { 118,-58969 }, { 119,-58969 }, + { 120,-58969 }, { 121,-58969 }, { 122,-58969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-58969 }, { 128,-58969 }, { 129,-58969 }, + { 130,-58969 }, { 131,-58969 }, { 132,-58969 }, { 133,-58969 }, { 134,-58969 }, + { 135,-58969 }, { 136,-58969 }, { 137,-58969 }, { 138,-58969 }, { 139,-58969 }, + { 140,-58969 }, { 141,-58969 }, { 142,-58969 }, { 143,-58969 }, { 144,-58969 }, + { 145,-58969 }, { 146,-58969 }, { 147,-58969 }, { 148,-58969 }, { 149,-58969 }, + { 150,-58969 }, { 151,-58969 }, { 152,-58969 }, { 153,-58969 }, { 154,-58969 }, + { 155,-58969 }, { 156,-58969 }, { 157,-58969 }, { 158,-58969 }, { 159,-58969 }, + { 160,-58969 }, { 161,-58969 }, { 162,-58969 }, { 163,-58969 }, { 164,-58969 }, + + { 165,-58969 }, { 166,-58969 }, { 167,-58969 }, { 168,-58969 }, { 169,-58969 }, + { 170,-58969 }, { 171,-58969 }, { 172,-58969 }, { 173,-58969 }, { 174,-58969 }, + { 175,-58969 }, { 176,-58969 }, { 177,-58969 }, { 178,-58969 }, { 179,-58969 }, + { 180,-58969 }, { 181,-58969 }, { 182,-58969 }, { 183,-58969 }, { 184,-58969 }, + { 185,-58969 }, { 186,-58969 }, { 187,-58969 }, { 188,-58969 }, { 189,-58969 }, + { 190,-58969 }, { 191,-58969 }, { 192,-58969 }, { 193,-58969 }, { 194,-58969 }, + { 195,-58969 }, { 196,-58969 }, { 197,-58969 }, { 198,-58969 }, { 199,-58969 }, + { 200,-58969 }, { 201,-58969 }, { 202,-58969 }, { 203,-58969 }, { 204,-58969 }, + { 205,-58969 }, { 206,-58969 }, { 207,-58969 }, { 208,-58969 }, { 209,-58969 }, + { 210,-58969 }, { 211,-58969 }, { 212,-58969 }, { 213,-58969 }, { 214,-58969 }, + + { 215,-58969 }, { 216,-58969 }, { 217,-58969 }, { 218,-58969 }, { 219,-58969 }, + { 220,-58969 }, { 221,-58969 }, { 222,-58969 }, { 223,-58969 }, { 224,-58969 }, + { 225,-58969 }, { 226,-58969 }, { 227,-58969 }, { 228,-58969 }, { 229,-58969 }, + { 230,-58969 }, { 231,-58969 }, { 232,-58969 }, { 233,-58969 }, { 234,-58969 }, + { 235,-58969 }, { 236,-58969 }, { 237,-58969 }, { 238,-58969 }, { 239,-58969 }, + { 240,-58969 }, { 241,-58969 }, { 242,-58969 }, { 243,-58969 }, { 244,-58969 }, + { 245,-58969 }, { 246,-58969 }, { 247,-58969 }, { 248,-58969 }, { 249,-58969 }, + { 250,-58969 }, { 251,-58969 }, { 252,-58969 }, { 253,-58969 }, { 254,-58969 }, + { 255,-58969 }, { 0, 32 }, { 0,32897 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-59226 }, { 49,-59226 }, { 50,-59226 }, { 51,-59226 }, { 52,-59226 }, + { 53,-59226 }, { 54,-59226 }, { 55,-59226 }, { 56,-59226 }, { 57,-59226 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-59226 }, { 66,-59226 }, { 67,-59226 }, + { 68,-59226 }, { 69,-59226 }, { 70,-59226 }, { 71,-59226 }, { 72,-59226 }, + { 73,-59226 }, { 74,-59226 }, { 75,-59226 }, { 76,-59226 }, { 77,-59226 }, + { 78,-59226 }, { 79,-59226 }, { 80,-59226 }, { 81,-59226 }, { 82,-59226 }, + { 83,-59226 }, { 84,-59226 }, { 85,-59226 }, { 86,-59226 }, { 87,-59226 }, + { 88,-59226 }, { 89,-59226 }, { 90,-59226 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-59226 }, { 0, 0 }, { 97,-59226 }, + { 98,-59226 }, { 99,-59226 }, { 100,-59226 }, { 101,-59226 }, { 102,-59226 }, + { 103,-59226 }, { 104,-59226 }, { 105,-59226 }, { 106,-59226 }, { 107,-59226 }, + + { 108,-59226 }, { 109,-59226 }, { 110,-59226 }, { 111,-59226 }, { 112,-59226 }, + { 113,-59226 }, { 114,-59226 }, { 115,-59226 }, { 116,-59226 }, { 117,-59226 }, + { 118,-59226 }, { 119,-59226 }, { 120,-59226 }, { 121,-59226 }, { 122,-59226 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-59226 }, + { 128,-59226 }, { 129,-59226 }, { 130,-59226 }, { 131,-59226 }, { 132,-59226 }, + { 133,-59226 }, { 134,-59226 }, { 135,-59226 }, { 136,-59226 }, { 137,-59226 }, + { 138,-59226 }, { 139,-59226 }, { 140,-59226 }, { 141,-59226 }, { 142,-59226 }, + { 143,-59226 }, { 144,-59226 }, { 145,-59226 }, { 146,-59226 }, { 147,-59226 }, + { 148,-59226 }, { 149,-59226 }, { 150,-59226 }, { 151,-59226 }, { 152,-59226 }, + { 153,-59226 }, { 154,-59226 }, { 155,-59226 }, { 156,-59226 }, { 157,-59226 }, + + { 158,-59226 }, { 159,-59226 }, { 160,-59226 }, { 161,-59226 }, { 162,-59226 }, + { 163,-59226 }, { 164,-59226 }, { 165,-59226 }, { 166,-59226 }, { 167,-59226 }, + { 168,-59226 }, { 169,-59226 }, { 170,-59226 }, { 171,-59226 }, { 172,-59226 }, + { 173,-59226 }, { 174,-59226 }, { 175,-59226 }, { 176,-59226 }, { 177,-59226 }, + { 178,-59226 }, { 179,-59226 }, { 180,-59226 }, { 181,-59226 }, { 182,-59226 }, + { 183,-59226 }, { 184,-59226 }, { 185,-59226 }, { 186,-59226 }, { 187,-59226 }, + { 188,-59226 }, { 189,-59226 }, { 190,-59226 }, { 191,-59226 }, { 192,-59226 }, + { 193,-59226 }, { 194,-59226 }, { 195,-59226 }, { 196,-59226 }, { 197,-59226 }, + { 198,-59226 }, { 199,-59226 }, { 200,-59226 }, { 201,-59226 }, { 202,-59226 }, + { 203,-59226 }, { 204,-59226 }, { 205,-59226 }, { 206,-59226 }, { 207,-59226 }, + + { 208,-59226 }, { 209,-59226 }, { 210,-59226 }, { 211,-59226 }, { 212,-59226 }, + { 213,-59226 }, { 214,-59226 }, { 215,-59226 }, { 216,-59226 }, { 217,-59226 }, + { 218,-59226 }, { 219,-59226 }, { 220,-59226 }, { 221,-59226 }, { 222,-59226 }, + { 223,-59226 }, { 224,-59226 }, { 225,-59226 }, { 226,-59226 }, { 227,-59226 }, + { 228,-59226 }, { 229,-59226 }, { 230,-59226 }, { 231,-59226 }, { 232,-59226 }, + { 233,-59226 }, { 234,-59226 }, { 235,-59226 }, { 236,-59226 }, { 237,-59226 }, + { 238,-59226 }, { 239,-59226 }, { 240,-59226 }, { 241,-59226 }, { 242,-59226 }, + { 243,-59226 }, { 244,-59226 }, { 245,-59226 }, { 246,-59226 }, { 247,-59226 }, + { 248,-59226 }, { 249,-59226 }, { 250,-59226 }, { 251,-59226 }, { 252,-59226 }, + { 253,-59226 }, { 254,-59226 }, { 255,-59226 }, { 0, 131 }, { 0,32640 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-59483 }, { 49,-59483 }, { 50,-59483 }, + + { 51,-59483 }, { 52,-59483 }, { 53,-59483 }, { 54,-59483 }, { 55,-59483 }, + { 56,-59483 }, { 57,-59483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-59483 }, + { 66,-59483 }, { 67,-59483 }, { 68,-59483 }, { 69,-59483 }, { 70,-59483 }, + { 71,-59483 }, { 72,-59483 }, { 73,-59483 }, { 74,-59483 }, { 75,-59483 }, + { 76,9252 }, { 77,-59483 }, { 78,-59483 }, { 79,-59483 }, { 80,-59483 }, + { 81,-59483 }, { 82,-59483 }, { 83,-59483 }, { 84,-59483 }, { 85,-59483 }, + { 86,-59483 }, { 87,-59483 }, { 88,-59483 }, { 89,-59483 }, { 90,-59483 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-59483 }, + { 0, 0 }, { 97,-59483 }, { 98,-59483 }, { 99,-59483 }, { 100,-59483 }, + + { 101,-59483 }, { 102,-59483 }, { 103,-59483 }, { 104,-59483 }, { 105,-59483 }, + { 106,-59483 }, { 107,-59483 }, { 108,9252 }, { 109,-59483 }, { 110,-59483 }, + { 111,-59483 }, { 112,-59483 }, { 113,-59483 }, { 114,-59483 }, { 115,-59483 }, + { 116,-59483 }, { 117,-59483 }, { 118,-59483 }, { 119,-59483 }, { 120,-59483 }, + { 121,-59483 }, { 122,-59483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-59483 }, { 128,-59483 }, { 129,-59483 }, { 130,-59483 }, + { 131,-59483 }, { 132,-59483 }, { 133,-59483 }, { 134,-59483 }, { 135,-59483 }, + { 136,-59483 }, { 137,-59483 }, { 138,-59483 }, { 139,-59483 }, { 140,-59483 }, + { 141,-59483 }, { 142,-59483 }, { 143,-59483 }, { 144,-59483 }, { 145,-59483 }, + { 146,-59483 }, { 147,-59483 }, { 148,-59483 }, { 149,-59483 }, { 150,-59483 }, + + { 151,-59483 }, { 152,-59483 }, { 153,-59483 }, { 154,-59483 }, { 155,-59483 }, + { 156,-59483 }, { 157,-59483 }, { 158,-59483 }, { 159,-59483 }, { 160,-59483 }, + { 161,-59483 }, { 162,-59483 }, { 163,-59483 }, { 164,-59483 }, { 165,-59483 }, + { 166,-59483 }, { 167,-59483 }, { 168,-59483 }, { 169,-59483 }, { 170,-59483 }, + { 171,-59483 }, { 172,-59483 }, { 173,-59483 }, { 174,-59483 }, { 175,-59483 }, + { 176,-59483 }, { 177,-59483 }, { 178,-59483 }, { 179,-59483 }, { 180,-59483 }, + { 181,-59483 }, { 182,-59483 }, { 183,-59483 }, { 184,-59483 }, { 185,-59483 }, + { 186,-59483 }, { 187,-59483 }, { 188,-59483 }, { 189,-59483 }, { 190,-59483 }, + { 191,-59483 }, { 192,-59483 }, { 193,-59483 }, { 194,-59483 }, { 195,-59483 }, + { 196,-59483 }, { 197,-59483 }, { 198,-59483 }, { 199,-59483 }, { 200,-59483 }, + + { 201,-59483 }, { 202,-59483 }, { 203,-59483 }, { 204,-59483 }, { 205,-59483 }, + { 206,-59483 }, { 207,-59483 }, { 208,-59483 }, { 209,-59483 }, { 210,-59483 }, + { 211,-59483 }, { 212,-59483 }, { 213,-59483 }, { 214,-59483 }, { 215,-59483 }, + { 216,-59483 }, { 217,-59483 }, { 218,-59483 }, { 219,-59483 }, { 220,-59483 }, + { 221,-59483 }, { 222,-59483 }, { 223,-59483 }, { 224,-59483 }, { 225,-59483 }, + { 226,-59483 }, { 227,-59483 }, { 228,-59483 }, { 229,-59483 }, { 230,-59483 }, + { 231,-59483 }, { 232,-59483 }, { 233,-59483 }, { 234,-59483 }, { 235,-59483 }, + { 236,-59483 }, { 237,-59483 }, { 238,-59483 }, { 239,-59483 }, { 240,-59483 }, + { 241,-59483 }, { 242,-59483 }, { 243,-59483 }, { 244,-59483 }, { 245,-59483 }, + { 246,-59483 }, { 247,-59483 }, { 248,-59483 }, { 249,-59483 }, { 250,-59483 }, + + { 251,-59483 }, { 252,-59483 }, { 253,-59483 }, { 254,-59483 }, { 255,-59483 }, + { 0, 40 }, { 0,32383 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-59740 }, + { 49,-59740 }, { 50,-59740 }, { 51,-59740 }, { 52,-59740 }, { 53,-59740 }, + { 54,-59740 }, { 55,-59740 }, { 56,-59740 }, { 57,-59740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-59740 }, { 66,-59740 }, { 67,-59740 }, { 68,-59740 }, + { 69,9252 }, { 70,-59740 }, { 71,-59740 }, { 72,-59740 }, { 73,-59740 }, + { 74,-59740 }, { 75,-59740 }, { 76,-59740 }, { 77,-59740 }, { 78,-59740 }, + { 79,-59740 }, { 80,-59740 }, { 81,-59740 }, { 82,-59740 }, { 83,-59740 }, + { 84,-59740 }, { 85,-59740 }, { 86,-59740 }, { 87,-59740 }, { 88,-59740 }, + { 89,-59740 }, { 90,-59740 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-59740 }, { 0, 0 }, { 97,-59740 }, { 98,-59740 }, + { 99,-59740 }, { 100,-59740 }, { 101,9252 }, { 102,-59740 }, { 103,-59740 }, + { 104,-59740 }, { 105,-59740 }, { 106,-59740 }, { 107,-59740 }, { 108,-59740 }, + { 109,-59740 }, { 110,-59740 }, { 111,-59740 }, { 112,-59740 }, { 113,-59740 }, + { 114,-59740 }, { 115,-59740 }, { 116,-59740 }, { 117,-59740 }, { 118,-59740 }, + { 119,-59740 }, { 120,-59740 }, { 121,-59740 }, { 122,-59740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-59740 }, { 128,-59740 }, + { 129,-59740 }, { 130,-59740 }, { 131,-59740 }, { 132,-59740 }, { 133,-59740 }, + { 134,-59740 }, { 135,-59740 }, { 136,-59740 }, { 137,-59740 }, { 138,-59740 }, + { 139,-59740 }, { 140,-59740 }, { 141,-59740 }, { 142,-59740 }, { 143,-59740 }, + + { 144,-59740 }, { 145,-59740 }, { 146,-59740 }, { 147,-59740 }, { 148,-59740 }, + { 149,-59740 }, { 150,-59740 }, { 151,-59740 }, { 152,-59740 }, { 153,-59740 }, + { 154,-59740 }, { 155,-59740 }, { 156,-59740 }, { 157,-59740 }, { 158,-59740 }, + { 159,-59740 }, { 160,-59740 }, { 161,-59740 }, { 162,-59740 }, { 163,-59740 }, + { 164,-59740 }, { 165,-59740 }, { 166,-59740 }, { 167,-59740 }, { 168,-59740 }, + { 169,-59740 }, { 170,-59740 }, { 171,-59740 }, { 172,-59740 }, { 173,-59740 }, + { 174,-59740 }, { 175,-59740 }, { 176,-59740 }, { 177,-59740 }, { 178,-59740 }, + { 179,-59740 }, { 180,-59740 }, { 181,-59740 }, { 182,-59740 }, { 183,-59740 }, + { 184,-59740 }, { 185,-59740 }, { 186,-59740 }, { 187,-59740 }, { 188,-59740 }, + { 189,-59740 }, { 190,-59740 }, { 191,-59740 }, { 192,-59740 }, { 193,-59740 }, + + { 194,-59740 }, { 195,-59740 }, { 196,-59740 }, { 197,-59740 }, { 198,-59740 }, + { 199,-59740 }, { 200,-59740 }, { 201,-59740 }, { 202,-59740 }, { 203,-59740 }, + { 204,-59740 }, { 205,-59740 }, { 206,-59740 }, { 207,-59740 }, { 208,-59740 }, + { 209,-59740 }, { 210,-59740 }, { 211,-59740 }, { 212,-59740 }, { 213,-59740 }, + { 214,-59740 }, { 215,-59740 }, { 216,-59740 }, { 217,-59740 }, { 218,-59740 }, + { 219,-59740 }, { 220,-59740 }, { 221,-59740 }, { 222,-59740 }, { 223,-59740 }, + { 224,-59740 }, { 225,-59740 }, { 226,-59740 }, { 227,-59740 }, { 228,-59740 }, + { 229,-59740 }, { 230,-59740 }, { 231,-59740 }, { 232,-59740 }, { 233,-59740 }, + { 234,-59740 }, { 235,-59740 }, { 236,-59740 }, { 237,-59740 }, { 238,-59740 }, + { 239,-59740 }, { 240,-59740 }, { 241,-59740 }, { 242,-59740 }, { 243,-59740 }, + + { 244,-59740 }, { 245,-59740 }, { 246,-59740 }, { 247,-59740 }, { 248,-59740 }, + { 249,-59740 }, { 250,-59740 }, { 251,-59740 }, { 252,-59740 }, { 253,-59740 }, + { 254,-59740 }, { 255,-59740 }, { 0, 131 }, { 0,32126 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-59997 }, { 49,-59997 }, { 50,-59997 }, { 51,-59997 }, + { 52,-59997 }, { 53,-59997 }, { 54,-59997 }, { 55,-59997 }, { 56,-59997 }, + { 57,-59997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-59997 }, { 66,-59997 }, + { 67,-59997 }, { 68,-59997 }, { 69,-59997 }, { 70,-59997 }, { 71,-59997 }, + { 72,-59997 }, { 73,-59997 }, { 74,-59997 }, { 75,-59997 }, { 76,-59997 }, + { 77,-59997 }, { 78,-59997 }, { 79,-59997 }, { 80,-59997 }, { 81,-59997 }, + { 82,-59997 }, { 83,-59997 }, { 84,9252 }, { 85,-59997 }, { 86,-59997 }, + + { 87,-59997 }, { 88,-59997 }, { 89,-59997 }, { 90,-59997 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-59997 }, { 0, 0 }, + { 97,-59997 }, { 98,-59997 }, { 99,-59997 }, { 100,-59997 }, { 101,-59997 }, + { 102,-59997 }, { 103,-59997 }, { 104,-59997 }, { 105,-59997 }, { 106,-59997 }, + { 107,-59997 }, { 108,-59997 }, { 109,-59997 }, { 110,-59997 }, { 111,-59997 }, + { 112,-59997 }, { 113,-59997 }, { 114,-59997 }, { 115,-59997 }, { 116,9252 }, + { 117,-59997 }, { 118,-59997 }, { 119,-59997 }, { 120,-59997 }, { 121,-59997 }, + { 122,-59997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-59997 }, { 128,-59997 }, { 129,-59997 }, { 130,-59997 }, { 131,-59997 }, + { 132,-59997 }, { 133,-59997 }, { 134,-59997 }, { 135,-59997 }, { 136,-59997 }, + + { 137,-59997 }, { 138,-59997 }, { 139,-59997 }, { 140,-59997 }, { 141,-59997 }, + { 142,-59997 }, { 143,-59997 }, { 144,-59997 }, { 145,-59997 }, { 146,-59997 }, + { 147,-59997 }, { 148,-59997 }, { 149,-59997 }, { 150,-59997 }, { 151,-59997 }, + { 152,-59997 }, { 153,-59997 }, { 154,-59997 }, { 155,-59997 }, { 156,-59997 }, + { 157,-59997 }, { 158,-59997 }, { 159,-59997 }, { 160,-59997 }, { 161,-59997 }, + { 162,-59997 }, { 163,-59997 }, { 164,-59997 }, { 165,-59997 }, { 166,-59997 }, + { 167,-59997 }, { 168,-59997 }, { 169,-59997 }, { 170,-59997 }, { 171,-59997 }, + { 172,-59997 }, { 173,-59997 }, { 174,-59997 }, { 175,-59997 }, { 176,-59997 }, + { 177,-59997 }, { 178,-59997 }, { 179,-59997 }, { 180,-59997 }, { 181,-59997 }, + { 182,-59997 }, { 183,-59997 }, { 184,-59997 }, { 185,-59997 }, { 186,-59997 }, + + { 187,-59997 }, { 188,-59997 }, { 189,-59997 }, { 190,-59997 }, { 191,-59997 }, + { 192,-59997 }, { 193,-59997 }, { 194,-59997 }, { 195,-59997 }, { 196,-59997 }, + { 197,-59997 }, { 198,-59997 }, { 199,-59997 }, { 200,-59997 }, { 201,-59997 }, + { 202,-59997 }, { 203,-59997 }, { 204,-59997 }, { 205,-59997 }, { 206,-59997 }, + { 207,-59997 }, { 208,-59997 }, { 209,-59997 }, { 210,-59997 }, { 211,-59997 }, + { 212,-59997 }, { 213,-59997 }, { 214,-59997 }, { 215,-59997 }, { 216,-59997 }, + { 217,-59997 }, { 218,-59997 }, { 219,-59997 }, { 220,-59997 }, { 221,-59997 }, + { 222,-59997 }, { 223,-59997 }, { 224,-59997 }, { 225,-59997 }, { 226,-59997 }, + { 227,-59997 }, { 228,-59997 }, { 229,-59997 }, { 230,-59997 }, { 231,-59997 }, + { 232,-59997 }, { 233,-59997 }, { 234,-59997 }, { 235,-59997 }, { 236,-59997 }, + + { 237,-59997 }, { 238,-59997 }, { 239,-59997 }, { 240,-59997 }, { 241,-59997 }, + { 242,-59997 }, { 243,-59997 }, { 244,-59997 }, { 245,-59997 }, { 246,-59997 }, + { 247,-59997 }, { 248,-59997 }, { 249,-59997 }, { 250,-59997 }, { 251,-59997 }, + { 252,-59997 }, { 253,-59997 }, { 254,-59997 }, { 255,-59997 }, { 0, 131 }, + { 0,31869 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-60254 }, { 49,-60254 }, + { 50,-60254 }, { 51,-60254 }, { 52,-60254 }, { 53,-60254 }, { 54,-60254 }, + { 55,-60254 }, { 56,-60254 }, { 57,-60254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-60254 }, { 66,-60254 }, { 67,-60254 }, { 68,-60254 }, { 69,-60254 }, + { 70,-60254 }, { 71,-60254 }, { 72,-60254 }, { 73,-60254 }, { 74,-60254 }, + { 75,-60254 }, { 76,9252 }, { 77,-60254 }, { 78,-60254 }, { 79,-60254 }, + + { 80,-60254 }, { 81,-60254 }, { 82,-60254 }, { 83,-60254 }, { 84,-60254 }, + { 85,-60254 }, { 86,-60254 }, { 87,-60254 }, { 88,-60254 }, { 89,-60254 }, + { 90,-60254 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-60254 }, { 0, 0 }, { 97,-60254 }, { 98,-60254 }, { 99,-60254 }, + { 100,-60254 }, { 101,-60254 }, { 102,-60254 }, { 103,-60254 }, { 104,-60254 }, + { 105,-60254 }, { 106,-60254 }, { 107,-60254 }, { 108,9252 }, { 109,-60254 }, + { 110,-60254 }, { 111,-60254 }, { 112,-60254 }, { 113,-60254 }, { 114,-60254 }, + { 115,-60254 }, { 116,-60254 }, { 117,-60254 }, { 118,-60254 }, { 119,-60254 }, + { 120,-60254 }, { 121,-60254 }, { 122,-60254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-60254 }, { 128,-60254 }, { 129,-60254 }, + + { 130,-60254 }, { 131,-60254 }, { 132,-60254 }, { 133,-60254 }, { 134,-60254 }, + { 135,-60254 }, { 136,-60254 }, { 137,-60254 }, { 138,-60254 }, { 139,-60254 }, + { 140,-60254 }, { 141,-60254 }, { 142,-60254 }, { 143,-60254 }, { 144,-60254 }, + { 145,-60254 }, { 146,-60254 }, { 147,-60254 }, { 148,-60254 }, { 149,-60254 }, + { 150,-60254 }, { 151,-60254 }, { 152,-60254 }, { 153,-60254 }, { 154,-60254 }, + { 155,-60254 }, { 156,-60254 }, { 157,-60254 }, { 158,-60254 }, { 159,-60254 }, + { 160,-60254 }, { 161,-60254 }, { 162,-60254 }, { 163,-60254 }, { 164,-60254 }, + { 165,-60254 }, { 166,-60254 }, { 167,-60254 }, { 168,-60254 }, { 169,-60254 }, + { 170,-60254 }, { 171,-60254 }, { 172,-60254 }, { 173,-60254 }, { 174,-60254 }, + { 175,-60254 }, { 176,-60254 }, { 177,-60254 }, { 178,-60254 }, { 179,-60254 }, + + { 180,-60254 }, { 181,-60254 }, { 182,-60254 }, { 183,-60254 }, { 184,-60254 }, + { 185,-60254 }, { 186,-60254 }, { 187,-60254 }, { 188,-60254 }, { 189,-60254 }, + { 190,-60254 }, { 191,-60254 }, { 192,-60254 }, { 193,-60254 }, { 194,-60254 }, + { 195,-60254 }, { 196,-60254 }, { 197,-60254 }, { 198,-60254 }, { 199,-60254 }, + { 200,-60254 }, { 201,-60254 }, { 202,-60254 }, { 203,-60254 }, { 204,-60254 }, + { 205,-60254 }, { 206,-60254 }, { 207,-60254 }, { 208,-60254 }, { 209,-60254 }, + { 210,-60254 }, { 211,-60254 }, { 212,-60254 }, { 213,-60254 }, { 214,-60254 }, + { 215,-60254 }, { 216,-60254 }, { 217,-60254 }, { 218,-60254 }, { 219,-60254 }, + { 220,-60254 }, { 221,-60254 }, { 222,-60254 }, { 223,-60254 }, { 224,-60254 }, + { 225,-60254 }, { 226,-60254 }, { 227,-60254 }, { 228,-60254 }, { 229,-60254 }, + + { 230,-60254 }, { 231,-60254 }, { 232,-60254 }, { 233,-60254 }, { 234,-60254 }, + { 235,-60254 }, { 236,-60254 }, { 237,-60254 }, { 238,-60254 }, { 239,-60254 }, + { 240,-60254 }, { 241,-60254 }, { 242,-60254 }, { 243,-60254 }, { 244,-60254 }, + { 245,-60254 }, { 246,-60254 }, { 247,-60254 }, { 248,-60254 }, { 249,-60254 }, + { 250,-60254 }, { 251,-60254 }, { 252,-60254 }, { 253,-60254 }, { 254,-60254 }, + { 255,-60254 }, { 0, 131 }, { 0,31612 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-60511 }, { 49,-60511 }, { 50,-60511 }, { 51,-60511 }, { 52,-60511 }, + { 53,-60511 }, { 54,-60511 }, { 55,-60511 }, { 56,-60511 }, { 57,-60511 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-60511 }, { 66,-60511 }, { 67,-60511 }, + { 68,-60511 }, { 69,-60511 }, { 70,-60511 }, { 71,-60511 }, { 72,-60511 }, + + { 73,-60511 }, { 74,-60511 }, { 75,-60511 }, { 76,-60511 }, { 77,-60511 }, + { 78,-60511 }, { 79,-60511 }, { 80,-60511 }, { 81,-60511 }, { 82,-60511 }, + { 83,9252 }, { 84,-60511 }, { 85,-60511 }, { 86,-60511 }, { 87,-60511 }, + { 88,-60511 }, { 89,-60511 }, { 90,-60511 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-60511 }, { 0, 0 }, { 97,-60511 }, + { 98,-60511 }, { 99,-60511 }, { 100,-60511 }, { 101,-60511 }, { 102,-60511 }, + { 103,-60511 }, { 104,-60511 }, { 105,-60511 }, { 106,-60511 }, { 107,-60511 }, + { 108,-60511 }, { 109,-60511 }, { 110,-60511 }, { 111,-60511 }, { 112,-60511 }, + { 113,-60511 }, { 114,-60511 }, { 115,9252 }, { 116,-60511 }, { 117,-60511 }, + { 118,-60511 }, { 119,-60511 }, { 120,-60511 }, { 121,-60511 }, { 122,-60511 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-60511 }, + { 128,-60511 }, { 129,-60511 }, { 130,-60511 }, { 131,-60511 }, { 132,-60511 }, + { 133,-60511 }, { 134,-60511 }, { 135,-60511 }, { 136,-60511 }, { 137,-60511 }, + { 138,-60511 }, { 139,-60511 }, { 140,-60511 }, { 141,-60511 }, { 142,-60511 }, + { 143,-60511 }, { 144,-60511 }, { 145,-60511 }, { 146,-60511 }, { 147,-60511 }, + { 148,-60511 }, { 149,-60511 }, { 150,-60511 }, { 151,-60511 }, { 152,-60511 }, + { 153,-60511 }, { 154,-60511 }, { 155,-60511 }, { 156,-60511 }, { 157,-60511 }, + { 158,-60511 }, { 159,-60511 }, { 160,-60511 }, { 161,-60511 }, { 162,-60511 }, + { 163,-60511 }, { 164,-60511 }, { 165,-60511 }, { 166,-60511 }, { 167,-60511 }, + { 168,-60511 }, { 169,-60511 }, { 170,-60511 }, { 171,-60511 }, { 172,-60511 }, + + { 173,-60511 }, { 174,-60511 }, { 175,-60511 }, { 176,-60511 }, { 177,-60511 }, + { 178,-60511 }, { 179,-60511 }, { 180,-60511 }, { 181,-60511 }, { 182,-60511 }, + { 183,-60511 }, { 184,-60511 }, { 185,-60511 }, { 186,-60511 }, { 187,-60511 }, + { 188,-60511 }, { 189,-60511 }, { 190,-60511 }, { 191,-60511 }, { 192,-60511 }, + { 193,-60511 }, { 194,-60511 }, { 195,-60511 }, { 196,-60511 }, { 197,-60511 }, + { 198,-60511 }, { 199,-60511 }, { 200,-60511 }, { 201,-60511 }, { 202,-60511 }, + { 203,-60511 }, { 204,-60511 }, { 205,-60511 }, { 206,-60511 }, { 207,-60511 }, + { 208,-60511 }, { 209,-60511 }, { 210,-60511 }, { 211,-60511 }, { 212,-60511 }, + { 213,-60511 }, { 214,-60511 }, { 215,-60511 }, { 216,-60511 }, { 217,-60511 }, + { 218,-60511 }, { 219,-60511 }, { 220,-60511 }, { 221,-60511 }, { 222,-60511 }, + + { 223,-60511 }, { 224,-60511 }, { 225,-60511 }, { 226,-60511 }, { 227,-60511 }, + { 228,-60511 }, { 229,-60511 }, { 230,-60511 }, { 231,-60511 }, { 232,-60511 }, + { 233,-60511 }, { 234,-60511 }, { 235,-60511 }, { 236,-60511 }, { 237,-60511 }, + { 238,-60511 }, { 239,-60511 }, { 240,-60511 }, { 241,-60511 }, { 242,-60511 }, + { 243,-60511 }, { 244,-60511 }, { 245,-60511 }, { 246,-60511 }, { 247,-60511 }, + { 248,-60511 }, { 249,-60511 }, { 250,-60511 }, { 251,-60511 }, { 252,-60511 }, + { 253,-60511 }, { 254,-60511 }, { 255,-60511 }, { 0, 131 }, { 0,31355 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-60768 }, { 49,-60768 }, { 50,-60768 }, + { 51,-60768 }, { 52,-60768 }, { 53,-60768 }, { 54,-60768 }, { 55,-60768 }, + { 56,-60768 }, { 57,-60768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-60768 }, + + { 66,-60768 }, { 67,-60768 }, { 68,-60768 }, { 69,-60768 }, { 70,-60768 }, + { 71,-60768 }, { 72,-60768 }, { 73,-60768 }, { 74,-60768 }, { 75,-60768 }, + { 76,-60768 }, { 77,-60768 }, { 78,-60768 }, { 79,-60768 }, { 80,-60768 }, + { 81,-60768 }, { 82,-60768 }, { 83,-60768 }, { 84,-60768 }, { 85,-60768 }, + { 86,-60768 }, { 87,-60768 }, { 88,-60768 }, { 89,9252 }, { 90,-60768 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-60768 }, + { 0, 0 }, { 97,-60768 }, { 98,-60768 }, { 99,-60768 }, { 100,-60768 }, + { 101,-60768 }, { 102,-60768 }, { 103,-60768 }, { 104,-60768 }, { 105,-60768 }, + { 106,-60768 }, { 107,-60768 }, { 108,-60768 }, { 109,-60768 }, { 110,-60768 }, + { 111,-60768 }, { 112,-60768 }, { 113,-60768 }, { 114,-60768 }, { 115,-60768 }, + + { 116,-60768 }, { 117,-60768 }, { 118,-60768 }, { 119,-60768 }, { 120,-60768 }, + { 121,9252 }, { 122,-60768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-60768 }, { 128,-60768 }, { 129,-60768 }, { 130,-60768 }, + { 131,-60768 }, { 132,-60768 }, { 133,-60768 }, { 134,-60768 }, { 135,-60768 }, + { 136,-60768 }, { 137,-60768 }, { 138,-60768 }, { 139,-60768 }, { 140,-60768 }, + { 141,-60768 }, { 142,-60768 }, { 143,-60768 }, { 144,-60768 }, { 145,-60768 }, + { 146,-60768 }, { 147,-60768 }, { 148,-60768 }, { 149,-60768 }, { 150,-60768 }, + { 151,-60768 }, { 152,-60768 }, { 153,-60768 }, { 154,-60768 }, { 155,-60768 }, + { 156,-60768 }, { 157,-60768 }, { 158,-60768 }, { 159,-60768 }, { 160,-60768 }, + { 161,-60768 }, { 162,-60768 }, { 163,-60768 }, { 164,-60768 }, { 165,-60768 }, + + { 166,-60768 }, { 167,-60768 }, { 168,-60768 }, { 169,-60768 }, { 170,-60768 }, + { 171,-60768 }, { 172,-60768 }, { 173,-60768 }, { 174,-60768 }, { 175,-60768 }, + { 176,-60768 }, { 177,-60768 }, { 178,-60768 }, { 179,-60768 }, { 180,-60768 }, + { 181,-60768 }, { 182,-60768 }, { 183,-60768 }, { 184,-60768 }, { 185,-60768 }, + { 186,-60768 }, { 187,-60768 }, { 188,-60768 }, { 189,-60768 }, { 190,-60768 }, + { 191,-60768 }, { 192,-60768 }, { 193,-60768 }, { 194,-60768 }, { 195,-60768 }, + { 196,-60768 }, { 197,-60768 }, { 198,-60768 }, { 199,-60768 }, { 200,-60768 }, + { 201,-60768 }, { 202,-60768 }, { 203,-60768 }, { 204,-60768 }, { 205,-60768 }, + { 206,-60768 }, { 207,-60768 }, { 208,-60768 }, { 209,-60768 }, { 210,-60768 }, + { 211,-60768 }, { 212,-60768 }, { 213,-60768 }, { 214,-60768 }, { 215,-60768 }, + + { 216,-60768 }, { 217,-60768 }, { 218,-60768 }, { 219,-60768 }, { 220,-60768 }, + { 221,-60768 }, { 222,-60768 }, { 223,-60768 }, { 224,-60768 }, { 225,-60768 }, + { 226,-60768 }, { 227,-60768 }, { 228,-60768 }, { 229,-60768 }, { 230,-60768 }, + { 231,-60768 }, { 232,-60768 }, { 233,-60768 }, { 234,-60768 }, { 235,-60768 }, + { 236,-60768 }, { 237,-60768 }, { 238,-60768 }, { 239,-60768 }, { 240,-60768 }, + { 241,-60768 }, { 242,-60768 }, { 243,-60768 }, { 244,-60768 }, { 245,-60768 }, + { 246,-60768 }, { 247,-60768 }, { 248,-60768 }, { 249,-60768 }, { 250,-60768 }, + { 251,-60768 }, { 252,-60768 }, { 253,-60768 }, { 254,-60768 }, { 255,-60768 }, + { 0, 131 }, { 0,31098 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-61025 }, + { 49,-61025 }, { 50,-61025 }, { 51,-61025 }, { 52,-61025 }, { 53,-61025 }, + { 54,-61025 }, { 55,-61025 }, { 56,-61025 }, { 57,-61025 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-61025 }, { 66,-61025 }, { 67,-61025 }, { 68,-61025 }, + { 69,-61025 }, { 70,-61025 }, { 71,-61025 }, { 72,9252 }, { 73,-61025 }, + { 74,-61025 }, { 75,-61025 }, { 76,-61025 }, { 77,-61025 }, { 78,-61025 }, + { 79,-61025 }, { 80,-61025 }, { 81,-61025 }, { 82,-61025 }, { 83,-61025 }, + { 84,-61025 }, { 85,-61025 }, { 86,-61025 }, { 87,-61025 }, { 88,-61025 }, + { 89,-61025 }, { 90,-61025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-61025 }, { 0, 0 }, { 97,-61025 }, { 98,-61025 }, + { 99,-61025 }, { 100,-61025 }, { 101,-61025 }, { 102,-61025 }, { 103,-61025 }, + { 104,9252 }, { 105,-61025 }, { 106,-61025 }, { 107,-61025 }, { 108,-61025 }, + + { 109,-61025 }, { 110,-61025 }, { 111,-61025 }, { 112,-61025 }, { 113,-61025 }, + { 114,-61025 }, { 115,-61025 }, { 116,-61025 }, { 117,-61025 }, { 118,-61025 }, + { 119,-61025 }, { 120,-61025 }, { 121,-61025 }, { 122,-61025 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-61025 }, { 128,-61025 }, + { 129,-61025 }, { 130,-61025 }, { 131,-61025 }, { 132,-61025 }, { 133,-61025 }, + { 134,-61025 }, { 135,-61025 }, { 136,-61025 }, { 137,-61025 }, { 138,-61025 }, + { 139,-61025 }, { 140,-61025 }, { 141,-61025 }, { 142,-61025 }, { 143,-61025 }, + { 144,-61025 }, { 145,-61025 }, { 146,-61025 }, { 147,-61025 }, { 148,-61025 }, + { 149,-61025 }, { 150,-61025 }, { 151,-61025 }, { 152,-61025 }, { 153,-61025 }, + { 154,-61025 }, { 155,-61025 }, { 156,-61025 }, { 157,-61025 }, { 158,-61025 }, + + { 159,-61025 }, { 160,-61025 }, { 161,-61025 }, { 162,-61025 }, { 163,-61025 }, + { 164,-61025 }, { 165,-61025 }, { 166,-61025 }, { 167,-61025 }, { 168,-61025 }, + { 169,-61025 }, { 170,-61025 }, { 171,-61025 }, { 172,-61025 }, { 173,-61025 }, + { 174,-61025 }, { 175,-61025 }, { 176,-61025 }, { 177,-61025 }, { 178,-61025 }, + { 179,-61025 }, { 180,-61025 }, { 181,-61025 }, { 182,-61025 }, { 183,-61025 }, + { 184,-61025 }, { 185,-61025 }, { 186,-61025 }, { 187,-61025 }, { 188,-61025 }, + { 189,-61025 }, { 190,-61025 }, { 191,-61025 }, { 192,-61025 }, { 193,-61025 }, + { 194,-61025 }, { 195,-61025 }, { 196,-61025 }, { 197,-61025 }, { 198,-61025 }, + { 199,-61025 }, { 200,-61025 }, { 201,-61025 }, { 202,-61025 }, { 203,-61025 }, + { 204,-61025 }, { 205,-61025 }, { 206,-61025 }, { 207,-61025 }, { 208,-61025 }, + + { 209,-61025 }, { 210,-61025 }, { 211,-61025 }, { 212,-61025 }, { 213,-61025 }, + { 214,-61025 }, { 215,-61025 }, { 216,-61025 }, { 217,-61025 }, { 218,-61025 }, + { 219,-61025 }, { 220,-61025 }, { 221,-61025 }, { 222,-61025 }, { 223,-61025 }, + { 224,-61025 }, { 225,-61025 }, { 226,-61025 }, { 227,-61025 }, { 228,-61025 }, + { 229,-61025 }, { 230,-61025 }, { 231,-61025 }, { 232,-61025 }, { 233,-61025 }, + { 234,-61025 }, { 235,-61025 }, { 236,-61025 }, { 237,-61025 }, { 238,-61025 }, + { 239,-61025 }, { 240,-61025 }, { 241,-61025 }, { 242,-61025 }, { 243,-61025 }, + { 244,-61025 }, { 245,-61025 }, { 246,-61025 }, { 247,-61025 }, { 248,-61025 }, + { 249,-61025 }, { 250,-61025 }, { 251,-61025 }, { 252,-61025 }, { 253,-61025 }, + { 254,-61025 }, { 255,-61025 }, { 0, 131 }, { 0,30841 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-61282 }, { 49,-61282 }, { 50,-61282 }, { 51,-61282 }, + + { 52,-61282 }, { 53,-61282 }, { 54,-61282 }, { 55,-61282 }, { 56,-61282 }, + { 57,-61282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-61282 }, { 66,-61282 }, + { 67,-61282 }, { 68,-61282 }, { 69,-61282 }, { 70,-61282 }, { 71,-61282 }, + { 72,-61282 }, { 73,-61282 }, { 74,-61282 }, { 75,-61282 }, { 76,-61282 }, + { 77,-61282 }, { 78,-61282 }, { 79,9252 }, { 80,-61282 }, { 81,-61282 }, + { 82,-61282 }, { 83,-61282 }, { 84,-61282 }, { 85,-61282 }, { 86,-61282 }, + { 87,-61282 }, { 88,-61282 }, { 89,-61282 }, { 90,-61282 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-61282 }, { 0, 0 }, + { 97,-61282 }, { 98,-61282 }, { 99,-61282 }, { 100,-61282 }, { 101,-61282 }, + + { 102,-61282 }, { 103,-61282 }, { 104,-61282 }, { 105,-61282 }, { 106,-61282 }, + { 107,-61282 }, { 108,-61282 }, { 109,-61282 }, { 110,-61282 }, { 111,9252 }, + { 112,-61282 }, { 113,-61282 }, { 114,-61282 }, { 115,-61282 }, { 116,-61282 }, + { 117,-61282 }, { 118,-61282 }, { 119,-61282 }, { 120,-61282 }, { 121,-61282 }, + { 122,-61282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-61282 }, { 128,-61282 }, { 129,-61282 }, { 130,-61282 }, { 131,-61282 }, + { 132,-61282 }, { 133,-61282 }, { 134,-61282 }, { 135,-61282 }, { 136,-61282 }, + { 137,-61282 }, { 138,-61282 }, { 139,-61282 }, { 140,-61282 }, { 141,-61282 }, + { 142,-61282 }, { 143,-61282 }, { 144,-61282 }, { 145,-61282 }, { 146,-61282 }, + { 147,-61282 }, { 148,-61282 }, { 149,-61282 }, { 150,-61282 }, { 151,-61282 }, + + { 152,-61282 }, { 153,-61282 }, { 154,-61282 }, { 155,-61282 }, { 156,-61282 }, + { 157,-61282 }, { 158,-61282 }, { 159,-61282 }, { 160,-61282 }, { 161,-61282 }, + { 162,-61282 }, { 163,-61282 }, { 164,-61282 }, { 165,-61282 }, { 166,-61282 }, + { 167,-61282 }, { 168,-61282 }, { 169,-61282 }, { 170,-61282 }, { 171,-61282 }, + { 172,-61282 }, { 173,-61282 }, { 174,-61282 }, { 175,-61282 }, { 176,-61282 }, + { 177,-61282 }, { 178,-61282 }, { 179,-61282 }, { 180,-61282 }, { 181,-61282 }, + { 182,-61282 }, { 183,-61282 }, { 184,-61282 }, { 185,-61282 }, { 186,-61282 }, + { 187,-61282 }, { 188,-61282 }, { 189,-61282 }, { 190,-61282 }, { 191,-61282 }, + { 192,-61282 }, { 193,-61282 }, { 194,-61282 }, { 195,-61282 }, { 196,-61282 }, + { 197,-61282 }, { 198,-61282 }, { 199,-61282 }, { 200,-61282 }, { 201,-61282 }, + + { 202,-61282 }, { 203,-61282 }, { 204,-61282 }, { 205,-61282 }, { 206,-61282 }, + { 207,-61282 }, { 208,-61282 }, { 209,-61282 }, { 210,-61282 }, { 211,-61282 }, + { 212,-61282 }, { 213,-61282 }, { 214,-61282 }, { 215,-61282 }, { 216,-61282 }, + { 217,-61282 }, { 218,-61282 }, { 219,-61282 }, { 220,-61282 }, { 221,-61282 }, + { 222,-61282 }, { 223,-61282 }, { 224,-61282 }, { 225,-61282 }, { 226,-61282 }, + { 227,-61282 }, { 228,-61282 }, { 229,-61282 }, { 230,-61282 }, { 231,-61282 }, + { 232,-61282 }, { 233,-61282 }, { 234,-61282 }, { 235,-61282 }, { 236,-61282 }, + { 237,-61282 }, { 238,-61282 }, { 239,-61282 }, { 240,-61282 }, { 241,-61282 }, + { 242,-61282 }, { 243,-61282 }, { 244,-61282 }, { 245,-61282 }, { 246,-61282 }, + { 247,-61282 }, { 248,-61282 }, { 249,-61282 }, { 250,-61282 }, { 251,-61282 }, + + { 252,-61282 }, { 253,-61282 }, { 254,-61282 }, { 255,-61282 }, { 0, 60 }, + { 0,30584 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-61539 }, { 49,-61539 }, + { 50,-61539 }, { 51,-61539 }, { 52,-61539 }, { 53,-61539 }, { 54,-61539 }, + { 55,-61539 }, { 56,-61539 }, { 57,-61539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-61539 }, { 66,-61539 }, { 67,-61539 }, { 68,-61539 }, { 69,-61539 }, + { 70,-61539 }, { 71,-61539 }, { 72,-61539 }, { 73,-61539 }, { 74,-61539 }, + { 75,-61539 }, { 76,-61539 }, { 77,-61539 }, { 78,-61539 }, { 79,-61539 }, + { 80,-61539 }, { 81,-61539 }, { 82,-61539 }, { 83,-61539 }, { 84,-61539 }, + { 85,-61539 }, { 86,-61539 }, { 87,-61539 }, { 88,-61539 }, { 89,-61539 }, + { 90,-61539 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-61539 }, { 0, 0 }, { 97,-61539 }, { 98,-61539 }, { 99,-61539 }, + { 100,-61539 }, { 101,-61539 }, { 102,-61539 }, { 103,-61539 }, { 104,-61539 }, + { 105,-61539 }, { 106,-61539 }, { 107,-61539 }, { 108,-61539 }, { 109,-61539 }, + { 110,-61539 }, { 111,-61539 }, { 112,-61539 }, { 113,-61539 }, { 114,-61539 }, + { 115,-61539 }, { 116,-61539 }, { 117,-61539 }, { 118,-61539 }, { 119,-61539 }, + { 120,-61539 }, { 121,-61539 }, { 122,-61539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-61539 }, { 128,-61539 }, { 129,-61539 }, + { 130,-61539 }, { 131,-61539 }, { 132,-61539 }, { 133,-61539 }, { 134,-61539 }, + { 135,-61539 }, { 136,-61539 }, { 137,-61539 }, { 138,-61539 }, { 139,-61539 }, + { 140,-61539 }, { 141,-61539 }, { 142,-61539 }, { 143,-61539 }, { 144,-61539 }, + + { 145,-61539 }, { 146,-61539 }, { 147,-61539 }, { 148,-61539 }, { 149,-61539 }, + { 150,-61539 }, { 151,-61539 }, { 152,-61539 }, { 153,-61539 }, { 154,-61539 }, + { 155,-61539 }, { 156,-61539 }, { 157,-61539 }, { 158,-61539 }, { 159,-61539 }, + { 160,-61539 }, { 161,-61539 }, { 162,-61539 }, { 163,-61539 }, { 164,-61539 }, + { 165,-61539 }, { 166,-61539 }, { 167,-61539 }, { 168,-61539 }, { 169,-61539 }, + { 170,-61539 }, { 171,-61539 }, { 172,-61539 }, { 173,-61539 }, { 174,-61539 }, + { 175,-61539 }, { 176,-61539 }, { 177,-61539 }, { 178,-61539 }, { 179,-61539 }, + { 180,-61539 }, { 181,-61539 }, { 182,-61539 }, { 183,-61539 }, { 184,-61539 }, + { 185,-61539 }, { 186,-61539 }, { 187,-61539 }, { 188,-61539 }, { 189,-61539 }, + { 190,-61539 }, { 191,-61539 }, { 192,-61539 }, { 193,-61539 }, { 194,-61539 }, + + { 195,-61539 }, { 196,-61539 }, { 197,-61539 }, { 198,-61539 }, { 199,-61539 }, + { 200,-61539 }, { 201,-61539 }, { 202,-61539 }, { 203,-61539 }, { 204,-61539 }, + { 205,-61539 }, { 206,-61539 }, { 207,-61539 }, { 208,-61539 }, { 209,-61539 }, + { 210,-61539 }, { 211,-61539 }, { 212,-61539 }, { 213,-61539 }, { 214,-61539 }, + { 215,-61539 }, { 216,-61539 }, { 217,-61539 }, { 218,-61539 }, { 219,-61539 }, + { 220,-61539 }, { 221,-61539 }, { 222,-61539 }, { 223,-61539 }, { 224,-61539 }, + { 225,-61539 }, { 226,-61539 }, { 227,-61539 }, { 228,-61539 }, { 229,-61539 }, + { 230,-61539 }, { 231,-61539 }, { 232,-61539 }, { 233,-61539 }, { 234,-61539 }, + { 235,-61539 }, { 236,-61539 }, { 237,-61539 }, { 238,-61539 }, { 239,-61539 }, + { 240,-61539 }, { 241,-61539 }, { 242,-61539 }, { 243,-61539 }, { 244,-61539 }, + + { 245,-61539 }, { 246,-61539 }, { 247,-61539 }, { 248,-61539 }, { 249,-61539 }, + { 250,-61539 }, { 251,-61539 }, { 252,-61539 }, { 253,-61539 }, { 254,-61539 }, + { 255,-61539 }, { 0, 131 }, { 0,30327 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-61796 }, { 49,-61796 }, { 50,-61796 }, { 51,-61796 }, { 52,-61796 }, + { 53,-61796 }, { 54,-61796 }, { 55,-61796 }, { 56,-61796 }, { 57,-61796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-61796 }, { 66,-61796 }, { 67,-61796 }, + { 68,-61796 }, { 69,8995 }, { 70,-61796 }, { 71,-61796 }, { 72,-61796 }, + { 73,-61796 }, { 74,-61796 }, { 75,-61796 }, { 76,-61796 }, { 77,-61796 }, + { 78,-61796 }, { 79,-61796 }, { 80,-61796 }, { 81,-61796 }, { 82,-61796 }, + { 83,-61796 }, { 84,-61796 }, { 85,-61796 }, { 86,-61796 }, { 87,-61796 }, + + { 88,-61796 }, { 89,-61796 }, { 90,-61796 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-61796 }, { 0, 0 }, { 97,-61796 }, + { 98,-61796 }, { 99,-61796 }, { 100,-61796 }, { 101,8995 }, { 102,-61796 }, + { 103,-61796 }, { 104,-61796 }, { 105,-61796 }, { 106,-61796 }, { 107,-61796 }, + { 108,-61796 }, { 109,-61796 }, { 110,-61796 }, { 111,-61796 }, { 112,-61796 }, + { 113,-61796 }, { 114,-61796 }, { 115,-61796 }, { 116,-61796 }, { 117,-61796 }, + { 118,-61796 }, { 119,-61796 }, { 120,-61796 }, { 121,-61796 }, { 122,-61796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-61796 }, + { 128,-61796 }, { 129,-61796 }, { 130,-61796 }, { 131,-61796 }, { 132,-61796 }, + { 133,-61796 }, { 134,-61796 }, { 135,-61796 }, { 136,-61796 }, { 137,-61796 }, + + { 138,-61796 }, { 139,-61796 }, { 140,-61796 }, { 141,-61796 }, { 142,-61796 }, + { 143,-61796 }, { 144,-61796 }, { 145,-61796 }, { 146,-61796 }, { 147,-61796 }, + { 148,-61796 }, { 149,-61796 }, { 150,-61796 }, { 151,-61796 }, { 152,-61796 }, + { 153,-61796 }, { 154,-61796 }, { 155,-61796 }, { 156,-61796 }, { 157,-61796 }, + { 158,-61796 }, { 159,-61796 }, { 160,-61796 }, { 161,-61796 }, { 162,-61796 }, + { 163,-61796 }, { 164,-61796 }, { 165,-61796 }, { 166,-61796 }, { 167,-61796 }, + { 168,-61796 }, { 169,-61796 }, { 170,-61796 }, { 171,-61796 }, { 172,-61796 }, + { 173,-61796 }, { 174,-61796 }, { 175,-61796 }, { 176,-61796 }, { 177,-61796 }, + { 178,-61796 }, { 179,-61796 }, { 180,-61796 }, { 181,-61796 }, { 182,-61796 }, + { 183,-61796 }, { 184,-61796 }, { 185,-61796 }, { 186,-61796 }, { 187,-61796 }, + + { 188,-61796 }, { 189,-61796 }, { 190,-61796 }, { 191,-61796 }, { 192,-61796 }, + { 193,-61796 }, { 194,-61796 }, { 195,-61796 }, { 196,-61796 }, { 197,-61796 }, + { 198,-61796 }, { 199,-61796 }, { 200,-61796 }, { 201,-61796 }, { 202,-61796 }, + { 203,-61796 }, { 204,-61796 }, { 205,-61796 }, { 206,-61796 }, { 207,-61796 }, + { 208,-61796 }, { 209,-61796 }, { 210,-61796 }, { 211,-61796 }, { 212,-61796 }, + { 213,-61796 }, { 214,-61796 }, { 215,-61796 }, { 216,-61796 }, { 217,-61796 }, + { 218,-61796 }, { 219,-61796 }, { 220,-61796 }, { 221,-61796 }, { 222,-61796 }, + { 223,-61796 }, { 224,-61796 }, { 225,-61796 }, { 226,-61796 }, { 227,-61796 }, + { 228,-61796 }, { 229,-61796 }, { 230,-61796 }, { 231,-61796 }, { 232,-61796 }, + { 233,-61796 }, { 234,-61796 }, { 235,-61796 }, { 236,-61796 }, { 237,-61796 }, + + { 238,-61796 }, { 239,-61796 }, { 240,-61796 }, { 241,-61796 }, { 242,-61796 }, + { 243,-61796 }, { 244,-61796 }, { 245,-61796 }, { 246,-61796 }, { 247,-61796 }, + { 248,-61796 }, { 249,-61796 }, { 250,-61796 }, { 251,-61796 }, { 252,-61796 }, + { 253,-61796 }, { 254,-61796 }, { 255,-61796 }, { 0, 131 }, { 0,30070 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-62053 }, { 49,-62053 }, { 50,-62053 }, + { 51,-62053 }, { 52,-62053 }, { 53,-62053 }, { 54,-62053 }, { 55,-62053 }, + { 56,-62053 }, { 57,-62053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-62053 }, + { 66,-62053 }, { 67,-62053 }, { 68,-62053 }, { 69,8995 }, { 70,-62053 }, + { 71,-62053 }, { 72,-62053 }, { 73,-62053 }, { 74,-62053 }, { 75,-62053 }, + { 76,-62053 }, { 77,-62053 }, { 78,-62053 }, { 79,-62053 }, { 80,-62053 }, + + { 81,-62053 }, { 82,-62053 }, { 83,-62053 }, { 84,-62053 }, { 85,-62053 }, + { 86,-62053 }, { 87,-62053 }, { 88,-62053 }, { 89,-62053 }, { 90,-62053 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-62053 }, + { 0, 0 }, { 97,-62053 }, { 98,-62053 }, { 99,-62053 }, { 100,-62053 }, + { 101,8995 }, { 102,-62053 }, { 103,-62053 }, { 104,-62053 }, { 105,-62053 }, + { 106,-62053 }, { 107,-62053 }, { 108,-62053 }, { 109,-62053 }, { 110,-62053 }, + { 111,-62053 }, { 112,-62053 }, { 113,-62053 }, { 114,-62053 }, { 115,-62053 }, + { 116,-62053 }, { 117,-62053 }, { 118,-62053 }, { 119,-62053 }, { 120,-62053 }, + { 121,-62053 }, { 122,-62053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-62053 }, { 128,-62053 }, { 129,-62053 }, { 130,-62053 }, + + { 131,-62053 }, { 132,-62053 }, { 133,-62053 }, { 134,-62053 }, { 135,-62053 }, + { 136,-62053 }, { 137,-62053 }, { 138,-62053 }, { 139,-62053 }, { 140,-62053 }, + { 141,-62053 }, { 142,-62053 }, { 143,-62053 }, { 144,-62053 }, { 145,-62053 }, + { 146,-62053 }, { 147,-62053 }, { 148,-62053 }, { 149,-62053 }, { 150,-62053 }, + { 151,-62053 }, { 152,-62053 }, { 153,-62053 }, { 154,-62053 }, { 155,-62053 }, + { 156,-62053 }, { 157,-62053 }, { 158,-62053 }, { 159,-62053 }, { 160,-62053 }, + { 161,-62053 }, { 162,-62053 }, { 163,-62053 }, { 164,-62053 }, { 165,-62053 }, + { 166,-62053 }, { 167,-62053 }, { 168,-62053 }, { 169,-62053 }, { 170,-62053 }, + { 171,-62053 }, { 172,-62053 }, { 173,-62053 }, { 174,-62053 }, { 175,-62053 }, + { 176,-62053 }, { 177,-62053 }, { 178,-62053 }, { 179,-62053 }, { 180,-62053 }, + + { 181,-62053 }, { 182,-62053 }, { 183,-62053 }, { 184,-62053 }, { 185,-62053 }, + { 186,-62053 }, { 187,-62053 }, { 188,-62053 }, { 189,-62053 }, { 190,-62053 }, + { 191,-62053 }, { 192,-62053 }, { 193,-62053 }, { 194,-62053 }, { 195,-62053 }, + { 196,-62053 }, { 197,-62053 }, { 198,-62053 }, { 199,-62053 }, { 200,-62053 }, + { 201,-62053 }, { 202,-62053 }, { 203,-62053 }, { 204,-62053 }, { 205,-62053 }, + { 206,-62053 }, { 207,-62053 }, { 208,-62053 }, { 209,-62053 }, { 210,-62053 }, + { 211,-62053 }, { 212,-62053 }, { 213,-62053 }, { 214,-62053 }, { 215,-62053 }, + { 216,-62053 }, { 217,-62053 }, { 218,-62053 }, { 219,-62053 }, { 220,-62053 }, + { 221,-62053 }, { 222,-62053 }, { 223,-62053 }, { 224,-62053 }, { 225,-62053 }, + { 226,-62053 }, { 227,-62053 }, { 228,-62053 }, { 229,-62053 }, { 230,-62053 }, + + { 231,-62053 }, { 232,-62053 }, { 233,-62053 }, { 234,-62053 }, { 235,-62053 }, + { 236,-62053 }, { 237,-62053 }, { 238,-62053 }, { 239,-62053 }, { 240,-62053 }, + { 241,-62053 }, { 242,-62053 }, { 243,-62053 }, { 244,-62053 }, { 245,-62053 }, + { 246,-62053 }, { 247,-62053 }, { 248,-62053 }, { 249,-62053 }, { 250,-62053 }, + { 251,-62053 }, { 252,-62053 }, { 253,-62053 }, { 254,-62053 }, { 255,-62053 }, + { 0, 131 }, { 0,29813 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-62310 }, + { 49,-62310 }, { 50,-62310 }, { 51,-62310 }, { 52,-62310 }, { 53,-62310 }, + { 54,-62310 }, { 55,-62310 }, { 56,-62310 }, { 57,-62310 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-62310 }, { 66,-62310 }, { 67,8995 }, { 68,-62310 }, + { 69,-62310 }, { 70,-62310 }, { 71,-62310 }, { 72,-62310 }, { 73,-62310 }, + + { 74,-62310 }, { 75,-62310 }, { 76,-62310 }, { 77,-62310 }, { 78,-62310 }, + { 79,-62310 }, { 80,-62310 }, { 81,-62310 }, { 82,-62310 }, { 83,-62310 }, + { 84,-62310 }, { 85,-62310 }, { 86,-62310 }, { 87,-62310 }, { 88,-62310 }, + { 89,-62310 }, { 90,-62310 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-62310 }, { 0, 0 }, { 97,-62310 }, { 98,-62310 }, + { 99,8995 }, { 100,-62310 }, { 101,-62310 }, { 102,-62310 }, { 103,-62310 }, + { 104,-62310 }, { 105,-62310 }, { 106,-62310 }, { 107,-62310 }, { 108,-62310 }, + { 109,-62310 }, { 110,-62310 }, { 111,-62310 }, { 112,-62310 }, { 113,-62310 }, + { 114,-62310 }, { 115,-62310 }, { 116,-62310 }, { 117,-62310 }, { 118,-62310 }, + { 119,-62310 }, { 120,-62310 }, { 121,-62310 }, { 122,-62310 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-62310 }, { 128,-62310 }, + { 129,-62310 }, { 130,-62310 }, { 131,-62310 }, { 132,-62310 }, { 133,-62310 }, + { 134,-62310 }, { 135,-62310 }, { 136,-62310 }, { 137,-62310 }, { 138,-62310 }, + { 139,-62310 }, { 140,-62310 }, { 141,-62310 }, { 142,-62310 }, { 143,-62310 }, + { 144,-62310 }, { 145,-62310 }, { 146,-62310 }, { 147,-62310 }, { 148,-62310 }, + { 149,-62310 }, { 150,-62310 }, { 151,-62310 }, { 152,-62310 }, { 153,-62310 }, + { 154,-62310 }, { 155,-62310 }, { 156,-62310 }, { 157,-62310 }, { 158,-62310 }, + { 159,-62310 }, { 160,-62310 }, { 161,-62310 }, { 162,-62310 }, { 163,-62310 }, + { 164,-62310 }, { 165,-62310 }, { 166,-62310 }, { 167,-62310 }, { 168,-62310 }, + { 169,-62310 }, { 170,-62310 }, { 171,-62310 }, { 172,-62310 }, { 173,-62310 }, + + { 174,-62310 }, { 175,-62310 }, { 176,-62310 }, { 177,-62310 }, { 178,-62310 }, + { 179,-62310 }, { 180,-62310 }, { 181,-62310 }, { 182,-62310 }, { 183,-62310 }, + { 184,-62310 }, { 185,-62310 }, { 186,-62310 }, { 187,-62310 }, { 188,-62310 }, + { 189,-62310 }, { 190,-62310 }, { 191,-62310 }, { 192,-62310 }, { 193,-62310 }, + { 194,-62310 }, { 195,-62310 }, { 196,-62310 }, { 197,-62310 }, { 198,-62310 }, + { 199,-62310 }, { 200,-62310 }, { 201,-62310 }, { 202,-62310 }, { 203,-62310 }, + { 204,-62310 }, { 205,-62310 }, { 206,-62310 }, { 207,-62310 }, { 208,-62310 }, + { 209,-62310 }, { 210,-62310 }, { 211,-62310 }, { 212,-62310 }, { 213,-62310 }, + { 214,-62310 }, { 215,-62310 }, { 216,-62310 }, { 217,-62310 }, { 218,-62310 }, + { 219,-62310 }, { 220,-62310 }, { 221,-62310 }, { 222,-62310 }, { 223,-62310 }, + + { 224,-62310 }, { 225,-62310 }, { 226,-62310 }, { 227,-62310 }, { 228,-62310 }, + { 229,-62310 }, { 230,-62310 }, { 231,-62310 }, { 232,-62310 }, { 233,-62310 }, + { 234,-62310 }, { 235,-62310 }, { 236,-62310 }, { 237,-62310 }, { 238,-62310 }, + { 239,-62310 }, { 240,-62310 }, { 241,-62310 }, { 242,-62310 }, { 243,-62310 }, + { 244,-62310 }, { 245,-62310 }, { 246,-62310 }, { 247,-62310 }, { 248,-62310 }, + { 249,-62310 }, { 250,-62310 }, { 251,-62310 }, { 252,-62310 }, { 253,-62310 }, + { 254,-62310 }, { 255,-62310 }, { 0, 131 }, { 0,29556 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-62567 }, { 49,-62567 }, { 50,-62567 }, { 51,-62567 }, + { 52,-62567 }, { 53,-62567 }, { 54,-62567 }, { 55,-62567 }, { 56,-62567 }, + { 57,-62567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-62567 }, { 66,-62567 }, + + { 67,-62567 }, { 68,8995 }, { 69,-62567 }, { 70,-62567 }, { 71,-62567 }, + { 72,-62567 }, { 73,-62567 }, { 74,-62567 }, { 75,-62567 }, { 76,-62567 }, + { 77,-62567 }, { 78,-62567 }, { 79,-62567 }, { 80,-62567 }, { 81,-62567 }, + { 82,-62567 }, { 83,-62567 }, { 84,-62567 }, { 85,-62567 }, { 86,-62567 }, + { 87,-62567 }, { 88,-62567 }, { 89,-62567 }, { 90,-62567 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-62567 }, { 0, 0 }, + { 97,-62567 }, { 98,-62567 }, { 99,-62567 }, { 100,8995 }, { 101,-62567 }, + { 102,-62567 }, { 103,-62567 }, { 104,-62567 }, { 105,-62567 }, { 106,-62567 }, + { 107,-62567 }, { 108,-62567 }, { 109,-62567 }, { 110,-62567 }, { 111,-62567 }, + { 112,-62567 }, { 113,-62567 }, { 114,-62567 }, { 115,-62567 }, { 116,-62567 }, + + { 117,-62567 }, { 118,-62567 }, { 119,-62567 }, { 120,-62567 }, { 121,-62567 }, + { 122,-62567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-62567 }, { 128,-62567 }, { 129,-62567 }, { 130,-62567 }, { 131,-62567 }, + { 132,-62567 }, { 133,-62567 }, { 134,-62567 }, { 135,-62567 }, { 136,-62567 }, + { 137,-62567 }, { 138,-62567 }, { 139,-62567 }, { 140,-62567 }, { 141,-62567 }, + { 142,-62567 }, { 143,-62567 }, { 144,-62567 }, { 145,-62567 }, { 146,-62567 }, + { 147,-62567 }, { 148,-62567 }, { 149,-62567 }, { 150,-62567 }, { 151,-62567 }, + { 152,-62567 }, { 153,-62567 }, { 154,-62567 }, { 155,-62567 }, { 156,-62567 }, + { 157,-62567 }, { 158,-62567 }, { 159,-62567 }, { 160,-62567 }, { 161,-62567 }, + { 162,-62567 }, { 163,-62567 }, { 164,-62567 }, { 165,-62567 }, { 166,-62567 }, + + { 167,-62567 }, { 168,-62567 }, { 169,-62567 }, { 170,-62567 }, { 171,-62567 }, + { 172,-62567 }, { 173,-62567 }, { 174,-62567 }, { 175,-62567 }, { 176,-62567 }, + { 177,-62567 }, { 178,-62567 }, { 179,-62567 }, { 180,-62567 }, { 181,-62567 }, + { 182,-62567 }, { 183,-62567 }, { 184,-62567 }, { 185,-62567 }, { 186,-62567 }, + { 187,-62567 }, { 188,-62567 }, { 189,-62567 }, { 190,-62567 }, { 191,-62567 }, + { 192,-62567 }, { 193,-62567 }, { 194,-62567 }, { 195,-62567 }, { 196,-62567 }, + { 197,-62567 }, { 198,-62567 }, { 199,-62567 }, { 200,-62567 }, { 201,-62567 }, + { 202,-62567 }, { 203,-62567 }, { 204,-62567 }, { 205,-62567 }, { 206,-62567 }, + { 207,-62567 }, { 208,-62567 }, { 209,-62567 }, { 210,-62567 }, { 211,-62567 }, + { 212,-62567 }, { 213,-62567 }, { 214,-62567 }, { 215,-62567 }, { 216,-62567 }, + + { 217,-62567 }, { 218,-62567 }, { 219,-62567 }, { 220,-62567 }, { 221,-62567 }, + { 222,-62567 }, { 223,-62567 }, { 224,-62567 }, { 225,-62567 }, { 226,-62567 }, + { 227,-62567 }, { 228,-62567 }, { 229,-62567 }, { 230,-62567 }, { 231,-62567 }, + { 232,-62567 }, { 233,-62567 }, { 234,-62567 }, { 235,-62567 }, { 236,-62567 }, + { 237,-62567 }, { 238,-62567 }, { 239,-62567 }, { 240,-62567 }, { 241,-62567 }, + { 242,-62567 }, { 243,-62567 }, { 244,-62567 }, { 245,-62567 }, { 246,-62567 }, + { 247,-62567 }, { 248,-62567 }, { 249,-62567 }, { 250,-62567 }, { 251,-62567 }, + { 252,-62567 }, { 253,-62567 }, { 254,-62567 }, { 255,-62567 }, { 0, 131 }, + { 0,29299 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-62824 }, { 49,-62824 }, + { 50,-62824 }, { 51,-62824 }, { 52,-62824 }, { 53,-62824 }, { 54,-62824 }, + { 55,-62824 }, { 56,-62824 }, { 57,-62824 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,8995 }, { 66,-62824 }, { 67,-62824 }, { 68,-62824 }, { 69,-62824 }, + { 70,-62824 }, { 71,-62824 }, { 72,-62824 }, { 73,-62824 }, { 74,-62824 }, + { 75,-62824 }, { 76,-62824 }, { 77,-62824 }, { 78,-62824 }, { 79,-62824 }, + { 80,-62824 }, { 81,-62824 }, { 82,-62824 }, { 83,-62824 }, { 84,-62824 }, + { 85,-62824 }, { 86,-62824 }, { 87,-62824 }, { 88,-62824 }, { 89,-62824 }, + { 90,-62824 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-62824 }, { 0, 0 }, { 97,8995 }, { 98,-62824 }, { 99,-62824 }, + { 100,-62824 }, { 101,-62824 }, { 102,-62824 }, { 103,-62824 }, { 104,-62824 }, + { 105,-62824 }, { 106,-62824 }, { 107,-62824 }, { 108,-62824 }, { 109,-62824 }, + + { 110,-62824 }, { 111,-62824 }, { 112,-62824 }, { 113,-62824 }, { 114,-62824 }, + { 115,-62824 }, { 116,-62824 }, { 117,-62824 }, { 118,-62824 }, { 119,-62824 }, + { 120,-62824 }, { 121,-62824 }, { 122,-62824 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-62824 }, { 128,-62824 }, { 129,-62824 }, + { 130,-62824 }, { 131,-62824 }, { 132,-62824 }, { 133,-62824 }, { 134,-62824 }, + { 135,-62824 }, { 136,-62824 }, { 137,-62824 }, { 138,-62824 }, { 139,-62824 }, + { 140,-62824 }, { 141,-62824 }, { 142,-62824 }, { 143,-62824 }, { 144,-62824 }, + { 145,-62824 }, { 146,-62824 }, { 147,-62824 }, { 148,-62824 }, { 149,-62824 }, + { 150,-62824 }, { 151,-62824 }, { 152,-62824 }, { 153,-62824 }, { 154,-62824 }, + { 155,-62824 }, { 156,-62824 }, { 157,-62824 }, { 158,-62824 }, { 159,-62824 }, + + { 160,-62824 }, { 161,-62824 }, { 162,-62824 }, { 163,-62824 }, { 164,-62824 }, + { 165,-62824 }, { 166,-62824 }, { 167,-62824 }, { 168,-62824 }, { 169,-62824 }, + { 170,-62824 }, { 171,-62824 }, { 172,-62824 }, { 173,-62824 }, { 174,-62824 }, + { 175,-62824 }, { 176,-62824 }, { 177,-62824 }, { 178,-62824 }, { 179,-62824 }, + { 180,-62824 }, { 181,-62824 }, { 182,-62824 }, { 183,-62824 }, { 184,-62824 }, + { 185,-62824 }, { 186,-62824 }, { 187,-62824 }, { 188,-62824 }, { 189,-62824 }, + { 190,-62824 }, { 191,-62824 }, { 192,-62824 }, { 193,-62824 }, { 194,-62824 }, + { 195,-62824 }, { 196,-62824 }, { 197,-62824 }, { 198,-62824 }, { 199,-62824 }, + { 200,-62824 }, { 201,-62824 }, { 202,-62824 }, { 203,-62824 }, { 204,-62824 }, + { 205,-62824 }, { 206,-62824 }, { 207,-62824 }, { 208,-62824 }, { 209,-62824 }, + + { 210,-62824 }, { 211,-62824 }, { 212,-62824 }, { 213,-62824 }, { 214,-62824 }, + { 215,-62824 }, { 216,-62824 }, { 217,-62824 }, { 218,-62824 }, { 219,-62824 }, + { 220,-62824 }, { 221,-62824 }, { 222,-62824 }, { 223,-62824 }, { 224,-62824 }, + { 225,-62824 }, { 226,-62824 }, { 227,-62824 }, { 228,-62824 }, { 229,-62824 }, + { 230,-62824 }, { 231,-62824 }, { 232,-62824 }, { 233,-62824 }, { 234,-62824 }, + { 235,-62824 }, { 236,-62824 }, { 237,-62824 }, { 238,-62824 }, { 239,-62824 }, + { 240,-62824 }, { 241,-62824 }, { 242,-62824 }, { 243,-62824 }, { 244,-62824 }, + { 245,-62824 }, { 246,-62824 }, { 247,-62824 }, { 248,-62824 }, { 249,-62824 }, + { 250,-62824 }, { 251,-62824 }, { 252,-62824 }, { 253,-62824 }, { 254,-62824 }, + { 255,-62824 }, { 0, 131 }, { 0,29042 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-63081 }, { 49,-63081 }, { 50,-63081 }, { 51,-63081 }, { 52,-63081 }, + + { 53,-63081 }, { 54,-63081 }, { 55,-63081 }, { 56,-63081 }, { 57,-63081 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,8995 }, { 66,-63081 }, { 67,-63081 }, + { 68,-63081 }, { 69,-63081 }, { 70,-63081 }, { 71,-63081 }, { 72,-63081 }, + { 73,-63081 }, { 74,-63081 }, { 75,-63081 }, { 76,-63081 }, { 77,-63081 }, + { 78,-63081 }, { 79,-63081 }, { 80,-63081 }, { 81,-63081 }, { 82,-63081 }, + { 83,-63081 }, { 84,-63081 }, { 85,-63081 }, { 86,-63081 }, { 87,-63081 }, + { 88,-63081 }, { 89,-63081 }, { 90,-63081 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-63081 }, { 0, 0 }, { 97,8995 }, + { 98,-63081 }, { 99,-63081 }, { 100,-63081 }, { 101,-63081 }, { 102,-63081 }, + + { 103,-63081 }, { 104,-63081 }, { 105,-63081 }, { 106,-63081 }, { 107,-63081 }, + { 108,-63081 }, { 109,-63081 }, { 110,-63081 }, { 111,-63081 }, { 112,-63081 }, + { 113,-63081 }, { 114,-63081 }, { 115,-63081 }, { 116,-63081 }, { 117,-63081 }, + { 118,-63081 }, { 119,-63081 }, { 120,-63081 }, { 121,-63081 }, { 122,-63081 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-63081 }, + { 128,-63081 }, { 129,-63081 }, { 130,-63081 }, { 131,-63081 }, { 132,-63081 }, + { 133,-63081 }, { 134,-63081 }, { 135,-63081 }, { 136,-63081 }, { 137,-63081 }, + { 138,-63081 }, { 139,-63081 }, { 140,-63081 }, { 141,-63081 }, { 142,-63081 }, + { 143,-63081 }, { 144,-63081 }, { 145,-63081 }, { 146,-63081 }, { 147,-63081 }, + { 148,-63081 }, { 149,-63081 }, { 150,-63081 }, { 151,-63081 }, { 152,-63081 }, + + { 153,-63081 }, { 154,-63081 }, { 155,-63081 }, { 156,-63081 }, { 157,-63081 }, + { 158,-63081 }, { 159,-63081 }, { 160,-63081 }, { 161,-63081 }, { 162,-63081 }, + { 163,-63081 }, { 164,-63081 }, { 165,-63081 }, { 166,-63081 }, { 167,-63081 }, + { 168,-63081 }, { 169,-63081 }, { 170,-63081 }, { 171,-63081 }, { 172,-63081 }, + { 173,-63081 }, { 174,-63081 }, { 175,-63081 }, { 176,-63081 }, { 177,-63081 }, + { 178,-63081 }, { 179,-63081 }, { 180,-63081 }, { 181,-63081 }, { 182,-63081 }, + { 183,-63081 }, { 184,-63081 }, { 185,-63081 }, { 186,-63081 }, { 187,-63081 }, + { 188,-63081 }, { 189,-63081 }, { 190,-63081 }, { 191,-63081 }, { 192,-63081 }, + { 193,-63081 }, { 194,-63081 }, { 195,-63081 }, { 196,-63081 }, { 197,-63081 }, + { 198,-63081 }, { 199,-63081 }, { 200,-63081 }, { 201,-63081 }, { 202,-63081 }, + + { 203,-63081 }, { 204,-63081 }, { 205,-63081 }, { 206,-63081 }, { 207,-63081 }, + { 208,-63081 }, { 209,-63081 }, { 210,-63081 }, { 211,-63081 }, { 212,-63081 }, + { 213,-63081 }, { 214,-63081 }, { 215,-63081 }, { 216,-63081 }, { 217,-63081 }, + { 218,-63081 }, { 219,-63081 }, { 220,-63081 }, { 221,-63081 }, { 222,-63081 }, + { 223,-63081 }, { 224,-63081 }, { 225,-63081 }, { 226,-63081 }, { 227,-63081 }, + { 228,-63081 }, { 229,-63081 }, { 230,-63081 }, { 231,-63081 }, { 232,-63081 }, + { 233,-63081 }, { 234,-63081 }, { 235,-63081 }, { 236,-63081 }, { 237,-63081 }, + { 238,-63081 }, { 239,-63081 }, { 240,-63081 }, { 241,-63081 }, { 242,-63081 }, + { 243,-63081 }, { 244,-63081 }, { 245,-63081 }, { 246,-63081 }, { 247,-63081 }, + { 248,-63081 }, { 249,-63081 }, { 250,-63081 }, { 251,-63081 }, { 252,-63081 }, + + { 253,-63081 }, { 254,-63081 }, { 255,-63081 }, { 0, 131 }, { 0,28785 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-63338 }, { 49,-63338 }, { 50,-63338 }, + { 51,-63338 }, { 52,-63338 }, { 53,-63338 }, { 54,-63338 }, { 55,-63338 }, + { 56,-63338 }, { 57,-63338 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-63338 }, + { 66,-63338 }, { 67,-63338 }, { 68,-63338 }, { 69,8995 }, { 70,-63338 }, + { 71,-63338 }, { 72,-63338 }, { 73,-63338 }, { 74,-63338 }, { 75,-63338 }, + { 76,-63338 }, { 77,-63338 }, { 78,-63338 }, { 79,-63338 }, { 80,-63338 }, + { 81,-63338 }, { 82,-63338 }, { 83,-63338 }, { 84,-63338 }, { 85,-63338 }, + { 86,-63338 }, { 87,-63338 }, { 88,-63338 }, { 89,-63338 }, { 90,-63338 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-63338 }, + + { 0, 0 }, { 97,-63338 }, { 98,-63338 }, { 99,-63338 }, { 100,-63338 }, + { 101,8995 }, { 102,-63338 }, { 103,-63338 }, { 104,-63338 }, { 105,-63338 }, + { 106,-63338 }, { 107,-63338 }, { 108,-63338 }, { 109,-63338 }, { 110,-63338 }, + { 111,-63338 }, { 112,-63338 }, { 113,-63338 }, { 114,-63338 }, { 115,-63338 }, + { 116,-63338 }, { 117,-63338 }, { 118,-63338 }, { 119,-63338 }, { 120,-63338 }, + { 121,-63338 }, { 122,-63338 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-63338 }, { 128,-63338 }, { 129,-63338 }, { 130,-63338 }, + { 131,-63338 }, { 132,-63338 }, { 133,-63338 }, { 134,-63338 }, { 135,-63338 }, + { 136,-63338 }, { 137,-63338 }, { 138,-63338 }, { 139,-63338 }, { 140,-63338 }, + { 141,-63338 }, { 142,-63338 }, { 143,-63338 }, { 144,-63338 }, { 145,-63338 }, + + { 146,-63338 }, { 147,-63338 }, { 148,-63338 }, { 149,-63338 }, { 150,-63338 }, + { 151,-63338 }, { 152,-63338 }, { 153,-63338 }, { 154,-63338 }, { 155,-63338 }, + { 156,-63338 }, { 157,-63338 }, { 158,-63338 }, { 159,-63338 }, { 160,-63338 }, + { 161,-63338 }, { 162,-63338 }, { 163,-63338 }, { 164,-63338 }, { 165,-63338 }, + { 166,-63338 }, { 167,-63338 }, { 168,-63338 }, { 169,-63338 }, { 170,-63338 }, + { 171,-63338 }, { 172,-63338 }, { 173,-63338 }, { 174,-63338 }, { 175,-63338 }, + { 176,-63338 }, { 177,-63338 }, { 178,-63338 }, { 179,-63338 }, { 180,-63338 }, + { 181,-63338 }, { 182,-63338 }, { 183,-63338 }, { 184,-63338 }, { 185,-63338 }, + { 186,-63338 }, { 187,-63338 }, { 188,-63338 }, { 189,-63338 }, { 190,-63338 }, + { 191,-63338 }, { 192,-63338 }, { 193,-63338 }, { 194,-63338 }, { 195,-63338 }, + + { 196,-63338 }, { 197,-63338 }, { 198,-63338 }, { 199,-63338 }, { 200,-63338 }, + { 201,-63338 }, { 202,-63338 }, { 203,-63338 }, { 204,-63338 }, { 205,-63338 }, + { 206,-63338 }, { 207,-63338 }, { 208,-63338 }, { 209,-63338 }, { 210,-63338 }, + { 211,-63338 }, { 212,-63338 }, { 213,-63338 }, { 214,-63338 }, { 215,-63338 }, + { 216,-63338 }, { 217,-63338 }, { 218,-63338 }, { 219,-63338 }, { 220,-63338 }, + { 221,-63338 }, { 222,-63338 }, { 223,-63338 }, { 224,-63338 }, { 225,-63338 }, + { 226,-63338 }, { 227,-63338 }, { 228,-63338 }, { 229,-63338 }, { 230,-63338 }, + { 231,-63338 }, { 232,-63338 }, { 233,-63338 }, { 234,-63338 }, { 235,-63338 }, + { 236,-63338 }, { 237,-63338 }, { 238,-63338 }, { 239,-63338 }, { 240,-63338 }, + { 241,-63338 }, { 242,-63338 }, { 243,-63338 }, { 244,-63338 }, { 245,-63338 }, + + { 246,-63338 }, { 247,-63338 }, { 248,-63338 }, { 249,-63338 }, { 250,-63338 }, + { 251,-63338 }, { 252,-63338 }, { 253,-63338 }, { 254,-63338 }, { 255,-63338 }, + { 0, 131 }, { 0,28528 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-63595 }, + { 49,-63595 }, { 50,-63595 }, { 51,-63595 }, { 52,-63595 }, { 53,-63595 }, + { 54,-63595 }, { 55,-63595 }, { 56,-63595 }, { 57,-63595 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-63595 }, { 66,-63595 }, { 67,-63595 }, { 68,-63595 }, + { 69,-63595 }, { 70,-63595 }, { 71,-63595 }, { 72,-63595 }, { 73,-63595 }, + { 74,-63595 }, { 75,-63595 }, { 76,-63595 }, { 77,-63595 }, { 78,-63595 }, + { 79,-63595 }, { 80,-63595 }, { 81,-63595 }, { 82,-63595 }, { 83,-63595 }, + { 84,8995 }, { 85,-63595 }, { 86,-63595 }, { 87,-63595 }, { 88,-63595 }, + + { 89,-63595 }, { 90,-63595 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-63595 }, { 0, 0 }, { 97,-63595 }, { 98,-63595 }, + { 99,-63595 }, { 100,-63595 }, { 101,-63595 }, { 102,-63595 }, { 103,-63595 }, + { 104,-63595 }, { 105,-63595 }, { 106,-63595 }, { 107,-63595 }, { 108,-63595 }, + { 109,-63595 }, { 110,-63595 }, { 111,-63595 }, { 112,-63595 }, { 113,-63595 }, + { 114,-63595 }, { 115,-63595 }, { 116,8995 }, { 117,-63595 }, { 118,-63595 }, + { 119,-63595 }, { 120,-63595 }, { 121,-63595 }, { 122,-63595 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-63595 }, { 128,-63595 }, + { 129,-63595 }, { 130,-63595 }, { 131,-63595 }, { 132,-63595 }, { 133,-63595 }, + { 134,-63595 }, { 135,-63595 }, { 136,-63595 }, { 137,-63595 }, { 138,-63595 }, + + { 139,-63595 }, { 140,-63595 }, { 141,-63595 }, { 142,-63595 }, { 143,-63595 }, + { 144,-63595 }, { 145,-63595 }, { 146,-63595 }, { 147,-63595 }, { 148,-63595 }, + { 149,-63595 }, { 150,-63595 }, { 151,-63595 }, { 152,-63595 }, { 153,-63595 }, + { 154,-63595 }, { 155,-63595 }, { 156,-63595 }, { 157,-63595 }, { 158,-63595 }, + { 159,-63595 }, { 160,-63595 }, { 161,-63595 }, { 162,-63595 }, { 163,-63595 }, + { 164,-63595 }, { 165,-63595 }, { 166,-63595 }, { 167,-63595 }, { 168,-63595 }, + { 169,-63595 }, { 170,-63595 }, { 171,-63595 }, { 172,-63595 }, { 173,-63595 }, + { 174,-63595 }, { 175,-63595 }, { 176,-63595 }, { 177,-63595 }, { 178,-63595 }, + { 179,-63595 }, { 180,-63595 }, { 181,-63595 }, { 182,-63595 }, { 183,-63595 }, + { 184,-63595 }, { 185,-63595 }, { 186,-63595 }, { 187,-63595 }, { 188,-63595 }, + + { 189,-63595 }, { 190,-63595 }, { 191,-63595 }, { 192,-63595 }, { 193,-63595 }, + { 194,-63595 }, { 195,-63595 }, { 196,-63595 }, { 197,-63595 }, { 198,-63595 }, + { 199,-63595 }, { 200,-63595 }, { 201,-63595 }, { 202,-63595 }, { 203,-63595 }, + { 204,-63595 }, { 205,-63595 }, { 206,-63595 }, { 207,-63595 }, { 208,-63595 }, + { 209,-63595 }, { 210,-63595 }, { 211,-63595 }, { 212,-63595 }, { 213,-63595 }, + { 214,-63595 }, { 215,-63595 }, { 216,-63595 }, { 217,-63595 }, { 218,-63595 }, + { 219,-63595 }, { 220,-63595 }, { 221,-63595 }, { 222,-63595 }, { 223,-63595 }, + { 224,-63595 }, { 225,-63595 }, { 226,-63595 }, { 227,-63595 }, { 228,-63595 }, + { 229,-63595 }, { 230,-63595 }, { 231,-63595 }, { 232,-63595 }, { 233,-63595 }, + { 234,-63595 }, { 235,-63595 }, { 236,-63595 }, { 237,-63595 }, { 238,-63595 }, + + { 239,-63595 }, { 240,-63595 }, { 241,-63595 }, { 242,-63595 }, { 243,-63595 }, + { 244,-63595 }, { 245,-63595 }, { 246,-63595 }, { 247,-63595 }, { 248,-63595 }, + { 249,-63595 }, { 250,-63595 }, { 251,-63595 }, { 252,-63595 }, { 253,-63595 }, + { 254,-63595 }, { 255,-63595 }, { 0, 66 }, { 0,28271 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-63852 }, { 49,-63852 }, { 50,-63852 }, { 51,-63852 }, + { 52,-63852 }, { 53,-63852 }, { 54,-63852 }, { 55,-63852 }, { 56,-63852 }, + { 57,-63852 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-63852 }, { 66,-63852 }, + { 67,-63852 }, { 68,-63852 }, { 69,-63852 }, { 70,-63852 }, { 71,-63852 }, + { 72,-63852 }, { 73,-63852 }, { 74,-63852 }, { 75,-63852 }, { 76,-63852 }, + { 77,-63852 }, { 78,-63852 }, { 79,-63852 }, { 80,-63852 }, { 81,-63852 }, + + { 82,-63852 }, { 83,-63852 }, { 84,-63852 }, { 85,-63852 }, { 86,-63852 }, + { 87,-63852 }, { 88,-63852 }, { 89,-63852 }, { 90,-63852 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-63852 }, { 0, 0 }, + { 97,-63852 }, { 98,-63852 }, { 99,-63852 }, { 100,-63852 }, { 101,-63852 }, + { 102,-63852 }, { 103,-63852 }, { 104,-63852 }, { 105,-63852 }, { 106,-63852 }, + { 107,-63852 }, { 108,-63852 }, { 109,-63852 }, { 110,-63852 }, { 111,-63852 }, + { 112,-63852 }, { 113,-63852 }, { 114,-63852 }, { 115,-63852 }, { 116,-63852 }, + { 117,-63852 }, { 118,-63852 }, { 119,-63852 }, { 120,-63852 }, { 121,-63852 }, + { 122,-63852 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-63852 }, { 128,-63852 }, { 129,-63852 }, { 130,-63852 }, { 131,-63852 }, + + { 132,-63852 }, { 133,-63852 }, { 134,-63852 }, { 135,-63852 }, { 136,-63852 }, + { 137,-63852 }, { 138,-63852 }, { 139,-63852 }, { 140,-63852 }, { 141,-63852 }, + { 142,-63852 }, { 143,-63852 }, { 144,-63852 }, { 145,-63852 }, { 146,-63852 }, + { 147,-63852 }, { 148,-63852 }, { 149,-63852 }, { 150,-63852 }, { 151,-63852 }, + { 152,-63852 }, { 153,-63852 }, { 154,-63852 }, { 155,-63852 }, { 156,-63852 }, + { 157,-63852 }, { 158,-63852 }, { 159,-63852 }, { 160,-63852 }, { 161,-63852 }, + { 162,-63852 }, { 163,-63852 }, { 164,-63852 }, { 165,-63852 }, { 166,-63852 }, + { 167,-63852 }, { 168,-63852 }, { 169,-63852 }, { 170,-63852 }, { 171,-63852 }, + { 172,-63852 }, { 173,-63852 }, { 174,-63852 }, { 175,-63852 }, { 176,-63852 }, + { 177,-63852 }, { 178,-63852 }, { 179,-63852 }, { 180,-63852 }, { 181,-63852 }, + + { 182,-63852 }, { 183,-63852 }, { 184,-63852 }, { 185,-63852 }, { 186,-63852 }, + { 187,-63852 }, { 188,-63852 }, { 189,-63852 }, { 190,-63852 }, { 191,-63852 }, + { 192,-63852 }, { 193,-63852 }, { 194,-63852 }, { 195,-63852 }, { 196,-63852 }, + { 197,-63852 }, { 198,-63852 }, { 199,-63852 }, { 200,-63852 }, { 201,-63852 }, + { 202,-63852 }, { 203,-63852 }, { 204,-63852 }, { 205,-63852 }, { 206,-63852 }, + { 207,-63852 }, { 208,-63852 }, { 209,-63852 }, { 210,-63852 }, { 211,-63852 }, + { 212,-63852 }, { 213,-63852 }, { 214,-63852 }, { 215,-63852 }, { 216,-63852 }, + { 217,-63852 }, { 218,-63852 }, { 219,-63852 }, { 220,-63852 }, { 221,-63852 }, + { 222,-63852 }, { 223,-63852 }, { 224,-63852 }, { 225,-63852 }, { 226,-63852 }, + { 227,-63852 }, { 228,-63852 }, { 229,-63852 }, { 230,-63852 }, { 231,-63852 }, + + { 232,-63852 }, { 233,-63852 }, { 234,-63852 }, { 235,-63852 }, { 236,-63852 }, + { 237,-63852 }, { 238,-63852 }, { 239,-63852 }, { 240,-63852 }, { 241,-63852 }, + { 242,-63852 }, { 243,-63852 }, { 244,-63852 }, { 245,-63852 }, { 246,-63852 }, + { 247,-63852 }, { 248,-63852 }, { 249,-63852 }, { 250,-63852 }, { 251,-63852 }, + { 252,-63852 }, { 253,-63852 }, { 254,-63852 }, { 255,-63852 }, { 0, 131 }, + { 0,28014 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-64109 }, { 49,-64109 }, + { 50,-64109 }, { 51,-64109 }, { 52,-64109 }, { 53,-64109 }, { 54,-64109 }, + { 55,-64109 }, { 56,-64109 }, { 57,-64109 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-64109 }, { 66,-64109 }, { 67,-64109 }, { 68,-64109 }, { 69,8738 }, + { 70,-64109 }, { 71,-64109 }, { 72,-64109 }, { 73,-64109 }, { 74,-64109 }, + + { 75,-64109 }, { 76,-64109 }, { 77,-64109 }, { 78,-64109 }, { 79,-64109 }, + { 80,-64109 }, { 81,-64109 }, { 82,-64109 }, { 83,-64109 }, { 84,-64109 }, + { 85,-64109 }, { 86,-64109 }, { 87,-64109 }, { 88,-64109 }, { 89,-64109 }, + { 90,-64109 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-64109 }, { 0, 0 }, { 97,-64109 }, { 98,-64109 }, { 99,-64109 }, + { 100,-64109 }, { 101,8738 }, { 102,-64109 }, { 103,-64109 }, { 104,-64109 }, + { 105,-64109 }, { 106,-64109 }, { 107,-64109 }, { 108,-64109 }, { 109,-64109 }, + { 110,-64109 }, { 111,-64109 }, { 112,-64109 }, { 113,-64109 }, { 114,-64109 }, + { 115,-64109 }, { 116,-64109 }, { 117,-64109 }, { 118,-64109 }, { 119,-64109 }, + { 120,-64109 }, { 121,-64109 }, { 122,-64109 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-64109 }, { 128,-64109 }, { 129,-64109 }, + { 130,-64109 }, { 131,-64109 }, { 132,-64109 }, { 133,-64109 }, { 134,-64109 }, + { 135,-64109 }, { 136,-64109 }, { 137,-64109 }, { 138,-64109 }, { 139,-64109 }, + { 140,-64109 }, { 141,-64109 }, { 142,-64109 }, { 143,-64109 }, { 144,-64109 }, + { 145,-64109 }, { 146,-64109 }, { 147,-64109 }, { 148,-64109 }, { 149,-64109 }, + { 150,-64109 }, { 151,-64109 }, { 152,-64109 }, { 153,-64109 }, { 154,-64109 }, + { 155,-64109 }, { 156,-64109 }, { 157,-64109 }, { 158,-64109 }, { 159,-64109 }, + { 160,-64109 }, { 161,-64109 }, { 162,-64109 }, { 163,-64109 }, { 164,-64109 }, + { 165,-64109 }, { 166,-64109 }, { 167,-64109 }, { 168,-64109 }, { 169,-64109 }, + { 170,-64109 }, { 171,-64109 }, { 172,-64109 }, { 173,-64109 }, { 174,-64109 }, + + { 175,-64109 }, { 176,-64109 }, { 177,-64109 }, { 178,-64109 }, { 179,-64109 }, + { 180,-64109 }, { 181,-64109 }, { 182,-64109 }, { 183,-64109 }, { 184,-64109 }, + { 185,-64109 }, { 186,-64109 }, { 187,-64109 }, { 188,-64109 }, { 189,-64109 }, + { 190,-64109 }, { 191,-64109 }, { 192,-64109 }, { 193,-64109 }, { 194,-64109 }, + { 195,-64109 }, { 196,-64109 }, { 197,-64109 }, { 198,-64109 }, { 199,-64109 }, + { 200,-64109 }, { 201,-64109 }, { 202,-64109 }, { 203,-64109 }, { 204,-64109 }, + { 205,-64109 }, { 206,-64109 }, { 207,-64109 }, { 208,-64109 }, { 209,-64109 }, + { 210,-64109 }, { 211,-64109 }, { 212,-64109 }, { 213,-64109 }, { 214,-64109 }, + { 215,-64109 }, { 216,-64109 }, { 217,-64109 }, { 218,-64109 }, { 219,-64109 }, + { 220,-64109 }, { 221,-64109 }, { 222,-64109 }, { 223,-64109 }, { 224,-64109 }, + + { 225,-64109 }, { 226,-64109 }, { 227,-64109 }, { 228,-64109 }, { 229,-64109 }, + { 230,-64109 }, { 231,-64109 }, { 232,-64109 }, { 233,-64109 }, { 234,-64109 }, + { 235,-64109 }, { 236,-64109 }, { 237,-64109 }, { 238,-64109 }, { 239,-64109 }, + { 240,-64109 }, { 241,-64109 }, { 242,-64109 }, { 243,-64109 }, { 244,-64109 }, + { 245,-64109 }, { 246,-64109 }, { 247,-64109 }, { 248,-64109 }, { 249,-64109 }, + { 250,-64109 }, { 251,-64109 }, { 252,-64109 }, { 253,-64109 }, { 254,-64109 }, + { 255,-64109 }, { 0, 55 }, { 0,27757 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-64366 }, { 49,-64366 }, { 50,-64366 }, { 51,-64366 }, { 52,-64366 }, + { 53,-64366 }, { 54,-64366 }, { 55,-64366 }, { 56,-64366 }, { 57,-64366 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-64366 }, { 66,-64366 }, { 67,-64366 }, + + { 68,-64366 }, { 69,-64366 }, { 70,-64366 }, { 71,-64366 }, { 72,-64366 }, + { 73,-64366 }, { 74,-64366 }, { 75,-64366 }, { 76,-64366 }, { 77,-64366 }, + { 78,-64366 }, { 79,-64366 }, { 80,-64366 }, { 81,-64366 }, { 82,-64366 }, + { 83,-64366 }, { 84,-64366 }, { 85,-64366 }, { 86,-64366 }, { 87,-64366 }, + { 88,-64366 }, { 89,-64366 }, { 90,-64366 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-64366 }, { 0, 0 }, { 97,-64366 }, + { 98,-64366 }, { 99,-64366 }, { 100,-64366 }, { 101,-64366 }, { 102,-64366 }, + { 103,-64366 }, { 104,-64366 }, { 105,-64366 }, { 106,-64366 }, { 107,-64366 }, + { 108,-64366 }, { 109,-64366 }, { 110,-64366 }, { 111,-64366 }, { 112,-64366 }, + { 113,-64366 }, { 114,-64366 }, { 115,-64366 }, { 116,-64366 }, { 117,-64366 }, + + { 118,-64366 }, { 119,-64366 }, { 120,-64366 }, { 121,-64366 }, { 122,-64366 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-64366 }, + { 128,-64366 }, { 129,-64366 }, { 130,-64366 }, { 131,-64366 }, { 132,-64366 }, + { 133,-64366 }, { 134,-64366 }, { 135,-64366 }, { 136,-64366 }, { 137,-64366 }, + { 138,-64366 }, { 139,-64366 }, { 140,-64366 }, { 141,-64366 }, { 142,-64366 }, + { 143,-64366 }, { 144,-64366 }, { 145,-64366 }, { 146,-64366 }, { 147,-64366 }, + { 148,-64366 }, { 149,-64366 }, { 150,-64366 }, { 151,-64366 }, { 152,-64366 }, + { 153,-64366 }, { 154,-64366 }, { 155,-64366 }, { 156,-64366 }, { 157,-64366 }, + { 158,-64366 }, { 159,-64366 }, { 160,-64366 }, { 161,-64366 }, { 162,-64366 }, + { 163,-64366 }, { 164,-64366 }, { 165,-64366 }, { 166,-64366 }, { 167,-64366 }, + + { 168,-64366 }, { 169,-64366 }, { 170,-64366 }, { 171,-64366 }, { 172,-64366 }, + { 173,-64366 }, { 174,-64366 }, { 175,-64366 }, { 176,-64366 }, { 177,-64366 }, + { 178,-64366 }, { 179,-64366 }, { 180,-64366 }, { 181,-64366 }, { 182,-64366 }, + { 183,-64366 }, { 184,-64366 }, { 185,-64366 }, { 186,-64366 }, { 187,-64366 }, + { 188,-64366 }, { 189,-64366 }, { 190,-64366 }, { 191,-64366 }, { 192,-64366 }, + { 193,-64366 }, { 194,-64366 }, { 195,-64366 }, { 196,-64366 }, { 197,-64366 }, + { 198,-64366 }, { 199,-64366 }, { 200,-64366 }, { 201,-64366 }, { 202,-64366 }, + { 203,-64366 }, { 204,-64366 }, { 205,-64366 }, { 206,-64366 }, { 207,-64366 }, + { 208,-64366 }, { 209,-64366 }, { 210,-64366 }, { 211,-64366 }, { 212,-64366 }, + { 213,-64366 }, { 214,-64366 }, { 215,-64366 }, { 216,-64366 }, { 217,-64366 }, + + { 218,-64366 }, { 219,-64366 }, { 220,-64366 }, { 221,-64366 }, { 222,-64366 }, + { 223,-64366 }, { 224,-64366 }, { 225,-64366 }, { 226,-64366 }, { 227,-64366 }, + { 228,-64366 }, { 229,-64366 }, { 230,-64366 }, { 231,-64366 }, { 232,-64366 }, + { 233,-64366 }, { 234,-64366 }, { 235,-64366 }, { 236,-64366 }, { 237,-64366 }, + { 238,-64366 }, { 239,-64366 }, { 240,-64366 }, { 241,-64366 }, { 242,-64366 }, + { 243,-64366 }, { 244,-64366 }, { 245,-64366 }, { 246,-64366 }, { 247,-64366 }, + { 248,-64366 }, { 249,-64366 }, { 250,-64366 }, { 251,-64366 }, { 252,-64366 }, + { 253,-64366 }, { 254,-64366 }, { 255,-64366 }, { 0, 61 }, { 0,27500 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-64623 }, { 49,-64623 }, { 50,-64623 }, + { 51,-64623 }, { 52,-64623 }, { 53,-64623 }, { 54,-64623 }, { 55,-64623 }, + { 56,-64623 }, { 57,-64623 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-64623 }, + { 66,-64623 }, { 67,-64623 }, { 68,-64623 }, { 69,-64623 }, { 70,-64623 }, + { 71,-64623 }, { 72,-64623 }, { 73,-64623 }, { 74,-64623 }, { 75,-64623 }, + { 76,-64623 }, { 77,-64623 }, { 78,-64623 }, { 79,-64623 }, { 80,-64623 }, + { 81,-64623 }, { 82,-64623 }, { 83,-64623 }, { 84,-64623 }, { 85,-64623 }, + { 86,-64623 }, { 87,-64623 }, { 88,-64623 }, { 89,-64623 }, { 90,-64623 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-64623 }, + { 0, 0 }, { 97,-64623 }, { 98,-64623 }, { 99,-64623 }, { 100,-64623 }, + { 101,-64623 }, { 102,-64623 }, { 103,-64623 }, { 104,-64623 }, { 105,-64623 }, + { 106,-64623 }, { 107,-64623 }, { 108,-64623 }, { 109,-64623 }, { 110,-64623 }, + + { 111,-64623 }, { 112,-64623 }, { 113,-64623 }, { 114,-64623 }, { 115,-64623 }, + { 116,-64623 }, { 117,-64623 }, { 118,-64623 }, { 119,-64623 }, { 120,-64623 }, + { 121,-64623 }, { 122,-64623 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-64623 }, { 128,-64623 }, { 129,-64623 }, { 130,-64623 }, + { 131,-64623 }, { 132,-64623 }, { 133,-64623 }, { 134,-64623 }, { 135,-64623 }, + { 136,-64623 }, { 137,-64623 }, { 138,-64623 }, { 139,-64623 }, { 140,-64623 }, + { 141,-64623 }, { 142,-64623 }, { 143,-64623 }, { 144,-64623 }, { 145,-64623 }, + { 146,-64623 }, { 147,-64623 }, { 148,-64623 }, { 149,-64623 }, { 150,-64623 }, + { 151,-64623 }, { 152,-64623 }, { 153,-64623 }, { 154,-64623 }, { 155,-64623 }, + { 156,-64623 }, { 157,-64623 }, { 158,-64623 }, { 159,-64623 }, { 160,-64623 }, + + { 161,-64623 }, { 162,-64623 }, { 163,-64623 }, { 164,-64623 }, { 165,-64623 }, + { 166,-64623 }, { 167,-64623 }, { 168,-64623 }, { 169,-64623 }, { 170,-64623 }, + { 171,-64623 }, { 172,-64623 }, { 173,-64623 }, { 174,-64623 }, { 175,-64623 }, + { 176,-64623 }, { 177,-64623 }, { 178,-64623 }, { 179,-64623 }, { 180,-64623 }, + { 181,-64623 }, { 182,-64623 }, { 183,-64623 }, { 184,-64623 }, { 185,-64623 }, + { 186,-64623 }, { 187,-64623 }, { 188,-64623 }, { 189,-64623 }, { 190,-64623 }, + { 191,-64623 }, { 192,-64623 }, { 193,-64623 }, { 194,-64623 }, { 195,-64623 }, + { 196,-64623 }, { 197,-64623 }, { 198,-64623 }, { 199,-64623 }, { 200,-64623 }, + { 201,-64623 }, { 202,-64623 }, { 203,-64623 }, { 204,-64623 }, { 205,-64623 }, + { 206,-64623 }, { 207,-64623 }, { 208,-64623 }, { 209,-64623 }, { 210,-64623 }, + + { 211,-64623 }, { 212,-64623 }, { 213,-64623 }, { 214,-64623 }, { 215,-64623 }, + { 216,-64623 }, { 217,-64623 }, { 218,-64623 }, { 219,-64623 }, { 220,-64623 }, + { 221,-64623 }, { 222,-64623 }, { 223,-64623 }, { 224,-64623 }, { 225,-64623 }, + { 226,-64623 }, { 227,-64623 }, { 228,-64623 }, { 229,-64623 }, { 230,-64623 }, + { 231,-64623 }, { 232,-64623 }, { 233,-64623 }, { 234,-64623 }, { 235,-64623 }, + { 236,-64623 }, { 237,-64623 }, { 238,-64623 }, { 239,-64623 }, { 240,-64623 }, + { 241,-64623 }, { 242,-64623 }, { 243,-64623 }, { 244,-64623 }, { 245,-64623 }, + { 246,-64623 }, { 247,-64623 }, { 248,-64623 }, { 249,-64623 }, { 250,-64623 }, + { 251,-64623 }, { 252,-64623 }, { 253,-64623 }, { 254,-64623 }, { 255,-64623 }, + { 0, 46 }, { 0,27243 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-64880 }, + { 49,-64880 }, { 50,-64880 }, { 51,-64880 }, { 52,-64880 }, { 53,-64880 }, + + { 54,-64880 }, { 55,-64880 }, { 56,-64880 }, { 57,-64880 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-64880 }, { 66,-64880 }, { 67,-64880 }, { 68,-64880 }, + { 69,-64880 }, { 70,-64880 }, { 71,-64880 }, { 72,-64880 }, { 73,-64880 }, + { 74,-64880 }, { 75,-64880 }, { 76,-64880 }, { 77,-64880 }, { 78,-64880 }, + { 79,-64880 }, { 80,-64880 }, { 81,-64880 }, { 82,-64880 }, { 83,-64880 }, + { 84,-64880 }, { 85,-64880 }, { 86,-64880 }, { 87,-64880 }, { 88,-64880 }, + { 89,-64880 }, { 90,-64880 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-64880 }, { 0, 0 }, { 97,-64880 }, { 98,-64880 }, + { 99,-64880 }, { 100,-64880 }, { 101,-64880 }, { 102,-64880 }, { 103,-64880 }, + + { 104,-64880 }, { 105,-64880 }, { 106,-64880 }, { 107,-64880 }, { 108,-64880 }, + { 109,-64880 }, { 110,-64880 }, { 111,-64880 }, { 112,-64880 }, { 113,-64880 }, + { 114,-64880 }, { 115,-64880 }, { 116,-64880 }, { 117,-64880 }, { 118,-64880 }, + { 119,-64880 }, { 120,-64880 }, { 121,-64880 }, { 122,-64880 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-64880 }, { 128,-64880 }, + { 129,-64880 }, { 130,-64880 }, { 131,-64880 }, { 132,-64880 }, { 133,-64880 }, + { 134,-64880 }, { 135,-64880 }, { 136,-64880 }, { 137,-64880 }, { 138,-64880 }, + { 139,-64880 }, { 140,-64880 }, { 141,-64880 }, { 142,-64880 }, { 143,-64880 }, + { 144,-64880 }, { 145,-64880 }, { 146,-64880 }, { 147,-64880 }, { 148,-64880 }, + { 149,-64880 }, { 150,-64880 }, { 151,-64880 }, { 152,-64880 }, { 153,-64880 }, + + { 154,-64880 }, { 155,-64880 }, { 156,-64880 }, { 157,-64880 }, { 158,-64880 }, + { 159,-64880 }, { 160,-64880 }, { 161,-64880 }, { 162,-64880 }, { 163,-64880 }, + { 164,-64880 }, { 165,-64880 }, { 166,-64880 }, { 167,-64880 }, { 168,-64880 }, + { 169,-64880 }, { 170,-64880 }, { 171,-64880 }, { 172,-64880 }, { 173,-64880 }, + { 174,-64880 }, { 175,-64880 }, { 176,-64880 }, { 177,-64880 }, { 178,-64880 }, + { 179,-64880 }, { 180,-64880 }, { 181,-64880 }, { 182,-64880 }, { 183,-64880 }, + { 184,-64880 }, { 185,-64880 }, { 186,-64880 }, { 187,-64880 }, { 188,-64880 }, + { 189,-64880 }, { 190,-64880 }, { 191,-64880 }, { 192,-64880 }, { 193,-64880 }, + { 194,-64880 }, { 195,-64880 }, { 196,-64880 }, { 197,-64880 }, { 198,-64880 }, + { 199,-64880 }, { 200,-64880 }, { 201,-64880 }, { 202,-64880 }, { 203,-64880 }, + + { 204,-64880 }, { 205,-64880 }, { 206,-64880 }, { 207,-64880 }, { 208,-64880 }, + { 209,-64880 }, { 210,-64880 }, { 211,-64880 }, { 212,-64880 }, { 213,-64880 }, + { 214,-64880 }, { 215,-64880 }, { 216,-64880 }, { 217,-64880 }, { 218,-64880 }, + { 219,-64880 }, { 220,-64880 }, { 221,-64880 }, { 222,-64880 }, { 223,-64880 }, + { 224,-64880 }, { 225,-64880 }, { 226,-64880 }, { 227,-64880 }, { 228,-64880 }, + { 229,-64880 }, { 230,-64880 }, { 231,-64880 }, { 232,-64880 }, { 233,-64880 }, + { 234,-64880 }, { 235,-64880 }, { 236,-64880 }, { 237,-64880 }, { 238,-64880 }, + { 239,-64880 }, { 240,-64880 }, { 241,-64880 }, { 242,-64880 }, { 243,-64880 }, + { 244,-64880 }, { 245,-64880 }, { 246,-64880 }, { 247,-64880 }, { 248,-64880 }, + { 249,-64880 }, { 250,-64880 }, { 251,-64880 }, { 252,-64880 }, { 253,-64880 }, + + { 254,-64880 }, { 255,-64880 }, { 0, 131 }, { 0,26986 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-65137 }, { 49,-65137 }, { 50,-65137 }, { 51,-65137 }, + { 52,-65137 }, { 53,-65137 }, { 54,-65137 }, { 55,-65137 }, { 56,-65137 }, + { 57,-65137 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-65137 }, { 66,-65137 }, + { 67,-65137 }, { 68,-65137 }, { 69,-65137 }, { 70,-65137 }, { 71,-65137 }, + { 72,-65137 }, { 73,-65137 }, { 74,-65137 }, { 75,-65137 }, { 76,-65137 }, + { 77,-65137 }, { 78,-65137 }, { 79,-65137 }, { 80,-65137 }, { 81,-65137 }, + { 82,-65137 }, { 83,7967 }, { 84,-65137 }, { 85,-65137 }, { 86,-65137 }, + { 87,-65137 }, { 88,-65137 }, { 89,-65137 }, { 90,-65137 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-65137 }, { 0, 0 }, + + { 97,-65137 }, { 98,-65137 }, { 99,-65137 }, { 100,-65137 }, { 101,-65137 }, + { 102,-65137 }, { 103,-65137 }, { 104,-65137 }, { 105,-65137 }, { 106,-65137 }, + { 107,-65137 }, { 108,-65137 }, { 109,-65137 }, { 110,-65137 }, { 111,-65137 }, + { 112,-65137 }, { 113,-65137 }, { 114,-65137 }, { 115,7967 }, { 116,-65137 }, + { 117,-65137 }, { 118,-65137 }, { 119,-65137 }, { 120,-65137 }, { 121,-65137 }, + { 122,-65137 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-65137 }, { 128,-65137 }, { 129,-65137 }, { 130,-65137 }, { 131,-65137 }, + { 132,-65137 }, { 133,-65137 }, { 134,-65137 }, { 135,-65137 }, { 136,-65137 }, + { 137,-65137 }, { 138,-65137 }, { 139,-65137 }, { 140,-65137 }, { 141,-65137 }, + { 142,-65137 }, { 143,-65137 }, { 144,-65137 }, { 145,-65137 }, { 146,-65137 }, + + { 147,-65137 }, { 148,-65137 }, { 149,-65137 }, { 150,-65137 }, { 151,-65137 }, + { 152,-65137 }, { 153,-65137 }, { 154,-65137 }, { 155,-65137 }, { 156,-65137 }, + { 157,-65137 }, { 158,-65137 }, { 159,-65137 }, { 160,-65137 }, { 161,-65137 }, + { 162,-65137 }, { 163,-65137 }, { 164,-65137 }, { 165,-65137 }, { 166,-65137 }, + { 167,-65137 }, { 168,-65137 }, { 169,-65137 }, { 170,-65137 }, { 171,-65137 }, + { 172,-65137 }, { 173,-65137 }, { 174,-65137 }, { 175,-65137 }, { 176,-65137 }, + { 177,-65137 }, { 178,-65137 }, { 179,-65137 }, { 180,-65137 }, { 181,-65137 }, + { 182,-65137 }, { 183,-65137 }, { 184,-65137 }, { 185,-65137 }, { 186,-65137 }, + { 187,-65137 }, { 188,-65137 }, { 189,-65137 }, { 190,-65137 }, { 191,-65137 }, + { 192,-65137 }, { 193,-65137 }, { 194,-65137 }, { 195,-65137 }, { 196,-65137 }, + + { 197,-65137 }, { 198,-65137 }, { 199,-65137 }, { 200,-65137 }, { 201,-65137 }, + { 202,-65137 }, { 203,-65137 }, { 204,-65137 }, { 205,-65137 }, { 206,-65137 }, + { 207,-65137 }, { 208,-65137 }, { 209,-65137 }, { 210,-65137 }, { 211,-65137 }, + { 212,-65137 }, { 213,-65137 }, { 214,-65137 }, { 215,-65137 }, { 216,-65137 }, + { 217,-65137 }, { 218,-65137 }, { 219,-65137 }, { 220,-65137 }, { 221,-65137 }, + { 222,-65137 }, { 223,-65137 }, { 224,-65137 }, { 225,-65137 }, { 226,-65137 }, + { 227,-65137 }, { 228,-65137 }, { 229,-65137 }, { 230,-65137 }, { 231,-65137 }, + { 232,-65137 }, { 233,-65137 }, { 234,-65137 }, { 235,-65137 }, { 236,-65137 }, + { 237,-65137 }, { 238,-65137 }, { 239,-65137 }, { 240,-65137 }, { 241,-65137 }, + { 242,-65137 }, { 243,-65137 }, { 244,-65137 }, { 245,-65137 }, { 246,-65137 }, + + { 247,-65137 }, { 248,-65137 }, { 249,-65137 }, { 250,-65137 }, { 251,-65137 }, + { 252,-65137 }, { 253,-65137 }, { 254,-65137 }, { 255,-65137 }, { 0, 131 }, + { 0,26729 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-65394 }, { 49,-65394 }, + { 50,-65394 }, { 51,-65394 }, { 52,-65394 }, { 53,-65394 }, { 54,-65394 }, + { 55,-65394 }, { 56,-65394 }, { 57,-65394 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-65394 }, { 66,-65394 }, { 67,-65394 }, { 68,-65394 }, { 69,-65394 }, + { 70,-65394 }, { 71,-65394 }, { 72,-65394 }, { 73,-65394 }, { 74,-65394 }, + { 75,-65394 }, { 76,-65394 }, { 77,-65394 }, { 78,-65394 }, { 79,-65394 }, + { 80,-65394 }, { 81,-65394 }, { 82,-65394 }, { 83,-65394 }, { 84,-65394 }, + { 85,-65394 }, { 86,-65394 }, { 87,-65394 }, { 88,-65394 }, { 89,-65394 }, + + { 90,-65394 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,7967 }, { 0, 0 }, { 97,-65394 }, { 98,-65394 }, { 99,-65394 }, + { 100,-65394 }, { 101,-65394 }, { 102,-65394 }, { 103,-65394 }, { 104,-65394 }, + { 105,-65394 }, { 106,-65394 }, { 107,-65394 }, { 108,-65394 }, { 109,-65394 }, + { 110,-65394 }, { 111,-65394 }, { 112,-65394 }, { 113,-65394 }, { 114,-65394 }, + { 115,-65394 }, { 116,-65394 }, { 117,-65394 }, { 118,-65394 }, { 119,-65394 }, + { 120,-65394 }, { 121,-65394 }, { 122,-65394 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-65394 }, { 128,-65394 }, { 129,-65394 }, + { 130,-65394 }, { 131,-65394 }, { 132,-65394 }, { 133,-65394 }, { 134,-65394 }, + { 135,-65394 }, { 136,-65394 }, { 137,-65394 }, { 138,-65394 }, { 139,-65394 }, + + { 140,-65394 }, { 141,-65394 }, { 142,-65394 }, { 143,-65394 }, { 144,-65394 }, + { 145,-65394 }, { 146,-65394 }, { 147,-65394 }, { 148,-65394 }, { 149,-65394 }, + { 150,-65394 }, { 151,-65394 }, { 152,-65394 }, { 153,-65394 }, { 154,-65394 }, + { 155,-65394 }, { 156,-65394 }, { 157,-65394 }, { 158,-65394 }, { 159,-65394 }, + { 160,-65394 }, { 161,-65394 }, { 162,-65394 }, { 163,-65394 }, { 164,-65394 }, + { 165,-65394 }, { 166,-65394 }, { 167,-65394 }, { 168,-65394 }, { 169,-65394 }, + { 170,-65394 }, { 171,-65394 }, { 172,-65394 }, { 173,-65394 }, { 174,-65394 }, + { 175,-65394 }, { 176,-65394 }, { 177,-65394 }, { 178,-65394 }, { 179,-65394 }, + { 180,-65394 }, { 181,-65394 }, { 182,-65394 }, { 183,-65394 }, { 184,-65394 }, + { 185,-65394 }, { 186,-65394 }, { 187,-65394 }, { 188,-65394 }, { 189,-65394 }, + + { 190,-65394 }, { 191,-65394 }, { 192,-65394 }, { 193,-65394 }, { 194,-65394 }, + { 195,-65394 }, { 196,-65394 }, { 197,-65394 }, { 198,-65394 }, { 199,-65394 }, + { 200,-65394 }, { 201,-65394 }, { 202,-65394 }, { 203,-65394 }, { 204,-65394 }, + { 205,-65394 }, { 206,-65394 }, { 207,-65394 }, { 208,-65394 }, { 209,-65394 }, + { 210,-65394 }, { 211,-65394 }, { 212,-65394 }, { 213,-65394 }, { 214,-65394 }, + { 215,-65394 }, { 216,-65394 }, { 217,-65394 }, { 218,-65394 }, { 219,-65394 }, + { 220,-65394 }, { 221,-65394 }, { 222,-65394 }, { 223,-65394 }, { 224,-65394 }, + { 225,-65394 }, { 226,-65394 }, { 227,-65394 }, { 228,-65394 }, { 229,-65394 }, + { 230,-65394 }, { 231,-65394 }, { 232,-65394 }, { 233,-65394 }, { 234,-65394 }, + { 235,-65394 }, { 236,-65394 }, { 237,-65394 }, { 238,-65394 }, { 239,-65394 }, + + { 240,-65394 }, { 241,-65394 }, { 242,-65394 }, { 243,-65394 }, { 244,-65394 }, + { 245,-65394 }, { 246,-65394 }, { 247,-65394 }, { 248,-65394 }, { 249,-65394 }, + { 250,-65394 }, { 251,-65394 }, { 252,-65394 }, { 253,-65394 }, { 254,-65394 }, + { 255,-65394 }, { 0, 131 }, { 0,26472 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-65651 }, { 49,-65651 }, { 50,-65651 }, { 51,-65651 }, { 52,-65651 }, + { 53,-65651 }, { 54,-65651 }, { 55,-65651 }, { 56,-65651 }, { 57,-65651 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-65651 }, { 66,-65651 }, { 67,-65651 }, + { 68,-65651 }, { 69,-65651 }, { 70,-65651 }, { 71,-65651 }, { 72,-65651 }, + { 73,-65651 }, { 74,-65651 }, { 75,-65651 }, { 76,-65651 }, { 77,-65651 }, + { 78,-65651 }, { 79,-65651 }, { 80,-65651 }, { 81,-65651 }, { 82,-65651 }, + + { 83,-65651 }, { 84,-65651 }, { 85,-65651 }, { 86,-65651 }, { 87,-65651 }, + { 88,-65651 }, { 89,-65651 }, { 90,-65651 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,7967 }, { 0, 0 }, { 97,-65651 }, + { 98,-65651 }, { 99,-65651 }, { 100,-65651 }, { 101,-65651 }, { 102,-65651 }, + { 103,-65651 }, { 104,-65651 }, { 105,-65651 }, { 106,-65651 }, { 107,-65651 }, + { 108,-65651 }, { 109,-65651 }, { 110,-65651 }, { 111,-65651 }, { 112,-65651 }, + { 113,-65651 }, { 114,-65651 }, { 115,-65651 }, { 116,-65651 }, { 117,-65651 }, + { 118,-65651 }, { 119,-65651 }, { 120,-65651 }, { 121,-65651 }, { 122,-65651 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-65651 }, + { 128,-65651 }, { 129,-65651 }, { 130,-65651 }, { 131,-65651 }, { 132,-65651 }, + + { 133,-65651 }, { 134,-65651 }, { 135,-65651 }, { 136,-65651 }, { 137,-65651 }, + { 138,-65651 }, { 139,-65651 }, { 140,-65651 }, { 141,-65651 }, { 142,-65651 }, + { 143,-65651 }, { 144,-65651 }, { 145,-65651 }, { 146,-65651 }, { 147,-65651 }, + { 148,-65651 }, { 149,-65651 }, { 150,-65651 }, { 151,-65651 }, { 152,-65651 }, + { 153,-65651 }, { 154,-65651 }, { 155,-65651 }, { 156,-65651 }, { 157,-65651 }, + { 158,-65651 }, { 159,-65651 }, { 160,-65651 }, { 161,-65651 }, { 162,-65651 }, + { 163,-65651 }, { 164,-65651 }, { 165,-65651 }, { 166,-65651 }, { 167,-65651 }, + { 168,-65651 }, { 169,-65651 }, { 170,-65651 }, { 171,-65651 }, { 172,-65651 }, + { 173,-65651 }, { 174,-65651 }, { 175,-65651 }, { 176,-65651 }, { 177,-65651 }, + { 178,-65651 }, { 179,-65651 }, { 180,-65651 }, { 181,-65651 }, { 182,-65651 }, + + { 183,-65651 }, { 184,-65651 }, { 185,-65651 }, { 186,-65651 }, { 187,-65651 }, + { 188,-65651 }, { 189,-65651 }, { 190,-65651 }, { 191,-65651 }, { 192,-65651 }, + { 193,-65651 }, { 194,-65651 }, { 195,-65651 }, { 196,-65651 }, { 197,-65651 }, + { 198,-65651 }, { 199,-65651 }, { 200,-65651 }, { 201,-65651 }, { 202,-65651 }, + { 203,-65651 }, { 204,-65651 }, { 205,-65651 }, { 206,-65651 }, { 207,-65651 }, + { 208,-65651 }, { 209,-65651 }, { 210,-65651 }, { 211,-65651 }, { 212,-65651 }, + { 213,-65651 }, { 214,-65651 }, { 215,-65651 }, { 216,-65651 }, { 217,-65651 }, + { 218,-65651 }, { 219,-65651 }, { 220,-65651 }, { 221,-65651 }, { 222,-65651 }, + { 223,-65651 }, { 224,-65651 }, { 225,-65651 }, { 226,-65651 }, { 227,-65651 }, + { 228,-65651 }, { 229,-65651 }, { 230,-65651 }, { 231,-65651 }, { 232,-65651 }, + + { 233,-65651 }, { 234,-65651 }, { 235,-65651 }, { 236,-65651 }, { 237,-65651 }, + { 238,-65651 }, { 239,-65651 }, { 240,-65651 }, { 241,-65651 }, { 242,-65651 }, + { 243,-65651 }, { 244,-65651 }, { 245,-65651 }, { 246,-65651 }, { 247,-65651 }, + { 248,-65651 }, { 249,-65651 }, { 250,-65651 }, { 251,-65651 }, { 252,-65651 }, + { 253,-65651 }, { 254,-65651 }, { 255,-65651 }, { 0, 131 }, { 0,26215 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-65908 }, { 49,-65908 }, { 50,-65908 }, + { 51,-65908 }, { 52,-65908 }, { 53,-65908 }, { 54,-65908 }, { 55,-65908 }, + { 56,-65908 }, { 57,-65908 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-65908 }, + { 66,-65908 }, { 67,-65908 }, { 68,-65908 }, { 69,-65908 }, { 70,-65908 }, + { 71,-65908 }, { 72,-65908 }, { 73,-65908 }, { 74,-65908 }, { 75,-65908 }, + + { 76,-65908 }, { 77,-65908 }, { 78,-65908 }, { 79,-65908 }, { 80,-65908 }, + { 81,-65908 }, { 82,-65908 }, { 83,-65908 }, { 84,7967 }, { 85,-65908 }, + { 86,-65908 }, { 87,-65908 }, { 88,-65908 }, { 89,-65908 }, { 90,-65908 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-65908 }, + { 0, 0 }, { 97,-65908 }, { 98,-65908 }, { 99,-65908 }, { 100,-65908 }, + { 101,-65908 }, { 102,-65908 }, { 103,-65908 }, { 104,-65908 }, { 105,-65908 }, + { 106,-65908 }, { 107,-65908 }, { 108,-65908 }, { 109,-65908 }, { 110,-65908 }, + { 111,-65908 }, { 112,-65908 }, { 113,-65908 }, { 114,-65908 }, { 115,-65908 }, + { 116,7967 }, { 117,-65908 }, { 118,-65908 }, { 119,-65908 }, { 120,-65908 }, + { 121,-65908 }, { 122,-65908 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-65908 }, { 128,-65908 }, { 129,-65908 }, { 130,-65908 }, + { 131,-65908 }, { 132,-65908 }, { 133,-65908 }, { 134,-65908 }, { 135,-65908 }, + { 136,-65908 }, { 137,-65908 }, { 138,-65908 }, { 139,-65908 }, { 140,-65908 }, + { 141,-65908 }, { 142,-65908 }, { 143,-65908 }, { 144,-65908 }, { 145,-65908 }, + { 146,-65908 }, { 147,-65908 }, { 148,-65908 }, { 149,-65908 }, { 150,-65908 }, + { 151,-65908 }, { 152,-65908 }, { 153,-65908 }, { 154,-65908 }, { 155,-65908 }, + { 156,-65908 }, { 157,-65908 }, { 158,-65908 }, { 159,-65908 }, { 160,-65908 }, + { 161,-65908 }, { 162,-65908 }, { 163,-65908 }, { 164,-65908 }, { 165,-65908 }, + { 166,-65908 }, { 167,-65908 }, { 168,-65908 }, { 169,-65908 }, { 170,-65908 }, + { 171,-65908 }, { 172,-65908 }, { 173,-65908 }, { 174,-65908 }, { 175,-65908 }, + + { 176,-65908 }, { 177,-65908 }, { 178,-65908 }, { 179,-65908 }, { 180,-65908 }, + { 181,-65908 }, { 182,-65908 }, { 183,-65908 }, { 184,-65908 }, { 185,-65908 }, + { 186,-65908 }, { 187,-65908 }, { 188,-65908 }, { 189,-65908 }, { 190,-65908 }, + { 191,-65908 }, { 192,-65908 }, { 193,-65908 }, { 194,-65908 }, { 195,-65908 }, + { 196,-65908 }, { 197,-65908 }, { 198,-65908 }, { 199,-65908 }, { 200,-65908 }, + { 201,-65908 }, { 202,-65908 }, { 203,-65908 }, { 204,-65908 }, { 205,-65908 }, + { 206,-65908 }, { 207,-65908 }, { 208,-65908 }, { 209,-65908 }, { 210,-65908 }, + { 211,-65908 }, { 212,-65908 }, { 213,-65908 }, { 214,-65908 }, { 215,-65908 }, + { 216,-65908 }, { 217,-65908 }, { 218,-65908 }, { 219,-65908 }, { 220,-65908 }, + { 221,-65908 }, { 222,-65908 }, { 223,-65908 }, { 224,-65908 }, { 225,-65908 }, + + { 226,-65908 }, { 227,-65908 }, { 228,-65908 }, { 229,-65908 }, { 230,-65908 }, + { 231,-65908 }, { 232,-65908 }, { 233,-65908 }, { 234,-65908 }, { 235,-65908 }, + { 236,-65908 }, { 237,-65908 }, { 238,-65908 }, { 239,-65908 }, { 240,-65908 }, + { 241,-65908 }, { 242,-65908 }, { 243,-65908 }, { 244,-65908 }, { 245,-65908 }, + { 246,-65908 }, { 247,-65908 }, { 248,-65908 }, { 249,-65908 }, { 250,-65908 }, + { 251,-65908 }, { 252,-65908 }, { 253,-65908 }, { 254,-65908 }, { 255,-65908 }, + { 0, 131 }, { 0,25958 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-66165 }, + { 49,-66165 }, { 50,-66165 }, { 51,-66165 }, { 52,-66165 }, { 53,-66165 }, + { 54,-66165 }, { 55,-66165 }, { 56,-66165 }, { 57,-66165 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-66165 }, { 66,-66165 }, { 67,-66165 }, { 68,-66165 }, + + { 69,-66165 }, { 70,-66165 }, { 71,-66165 }, { 72,-66165 }, { 73,-66165 }, + { 74,-66165 }, { 75,-66165 }, { 76,-66165 }, { 77,-66165 }, { 78,-66165 }, + { 79,-66165 }, { 80,-66165 }, { 81,-66165 }, { 82,-66165 }, { 83,-66165 }, + { 84,-66165 }, { 85,-66165 }, { 86,-66165 }, { 87,-66165 }, { 88,-66165 }, + { 89,-66165 }, { 90,-66165 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,7967 }, { 0, 0 }, { 97,-66165 }, { 98,-66165 }, + { 99,-66165 }, { 100,-66165 }, { 101,-66165 }, { 102,-66165 }, { 103,-66165 }, + { 104,-66165 }, { 105,-66165 }, { 106,-66165 }, { 107,-66165 }, { 108,-66165 }, + { 109,-66165 }, { 110,-66165 }, { 111,-66165 }, { 112,-66165 }, { 113,-66165 }, + { 114,-66165 }, { 115,-66165 }, { 116,-66165 }, { 117,-66165 }, { 118,-66165 }, + + { 119,-66165 }, { 120,-66165 }, { 121,-66165 }, { 122,-66165 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-66165 }, { 128,-66165 }, + { 129,-66165 }, { 130,-66165 }, { 131,-66165 }, { 132,-66165 }, { 133,-66165 }, + { 134,-66165 }, { 135,-66165 }, { 136,-66165 }, { 137,-66165 }, { 138,-66165 }, + { 139,-66165 }, { 140,-66165 }, { 141,-66165 }, { 142,-66165 }, { 143,-66165 }, + { 144,-66165 }, { 145,-66165 }, { 146,-66165 }, { 147,-66165 }, { 148,-66165 }, + { 149,-66165 }, { 150,-66165 }, { 151,-66165 }, { 152,-66165 }, { 153,-66165 }, + { 154,-66165 }, { 155,-66165 }, { 156,-66165 }, { 157,-66165 }, { 158,-66165 }, + { 159,-66165 }, { 160,-66165 }, { 161,-66165 }, { 162,-66165 }, { 163,-66165 }, + { 164,-66165 }, { 165,-66165 }, { 166,-66165 }, { 167,-66165 }, { 168,-66165 }, + + { 169,-66165 }, { 170,-66165 }, { 171,-66165 }, { 172,-66165 }, { 173,-66165 }, + { 174,-66165 }, { 175,-66165 }, { 176,-66165 }, { 177,-66165 }, { 178,-66165 }, + { 179,-66165 }, { 180,-66165 }, { 181,-66165 }, { 182,-66165 }, { 183,-66165 }, + { 184,-66165 }, { 185,-66165 }, { 186,-66165 }, { 187,-66165 }, { 188,-66165 }, + { 189,-66165 }, { 190,-66165 }, { 191,-66165 }, { 192,-66165 }, { 193,-66165 }, + { 194,-66165 }, { 195,-66165 }, { 196,-66165 }, { 197,-66165 }, { 198,-66165 }, + { 199,-66165 }, { 200,-66165 }, { 201,-66165 }, { 202,-66165 }, { 203,-66165 }, + { 204,-66165 }, { 205,-66165 }, { 206,-66165 }, { 207,-66165 }, { 208,-66165 }, + { 209,-66165 }, { 210,-66165 }, { 211,-66165 }, { 212,-66165 }, { 213,-66165 }, + { 214,-66165 }, { 215,-66165 }, { 216,-66165 }, { 217,-66165 }, { 218,-66165 }, + + { 219,-66165 }, { 220,-66165 }, { 221,-66165 }, { 222,-66165 }, { 223,-66165 }, + { 224,-66165 }, { 225,-66165 }, { 226,-66165 }, { 227,-66165 }, { 228,-66165 }, + { 229,-66165 }, { 230,-66165 }, { 231,-66165 }, { 232,-66165 }, { 233,-66165 }, + { 234,-66165 }, { 235,-66165 }, { 236,-66165 }, { 237,-66165 }, { 238,-66165 }, + { 239,-66165 }, { 240,-66165 }, { 241,-66165 }, { 242,-66165 }, { 243,-66165 }, + { 244,-66165 }, { 245,-66165 }, { 246,-66165 }, { 247,-66165 }, { 248,-66165 }, + { 249,-66165 }, { 250,-66165 }, { 251,-66165 }, { 252,-66165 }, { 253,-66165 }, + { 254,-66165 }, { 255,-66165 }, { 0, 131 }, { 0,25701 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-66422 }, { 49,-66422 }, { 50,-66422 }, { 51,-66422 }, + { 52,-66422 }, { 53,-66422 }, { 54,-66422 }, { 55,-66422 }, { 56,-66422 }, + { 57,-66422 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-66422 }, { 66,-66422 }, + { 67,-66422 }, { 68,-66422 }, { 69,-66422 }, { 70,-66422 }, { 71,-66422 }, + { 72,-66422 }, { 73,-66422 }, { 74,-66422 }, { 75,-66422 }, { 76,-66422 }, + { 77,-66422 }, { 78,-66422 }, { 79,-66422 }, { 80,-66422 }, { 81,-66422 }, + { 82,-66422 }, { 83,-66422 }, { 84,-66422 }, { 85,-66422 }, { 86,-66422 }, + { 87,-66422 }, { 88,-66422 }, { 89,-66422 }, { 90,-66422 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7967 }, { 0, 0 }, + { 97,-66422 }, { 98,-66422 }, { 99,-66422 }, { 100,-66422 }, { 101,-66422 }, + { 102,-66422 }, { 103,-66422 }, { 104,-66422 }, { 105,-66422 }, { 106,-66422 }, + { 107,-66422 }, { 108,-66422 }, { 109,-66422 }, { 110,-66422 }, { 111,-66422 }, + + { 112,-66422 }, { 113,-66422 }, { 114,-66422 }, { 115,-66422 }, { 116,-66422 }, + { 117,-66422 }, { 118,-66422 }, { 119,-66422 }, { 120,-66422 }, { 121,-66422 }, + { 122,-66422 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-66422 }, { 128,-66422 }, { 129,-66422 }, { 130,-66422 }, { 131,-66422 }, + { 132,-66422 }, { 133,-66422 }, { 134,-66422 }, { 135,-66422 }, { 136,-66422 }, + { 137,-66422 }, { 138,-66422 }, { 139,-66422 }, { 140,-66422 }, { 141,-66422 }, + { 142,-66422 }, { 143,-66422 }, { 144,-66422 }, { 145,-66422 }, { 146,-66422 }, + { 147,-66422 }, { 148,-66422 }, { 149,-66422 }, { 150,-66422 }, { 151,-66422 }, + { 152,-66422 }, { 153,-66422 }, { 154,-66422 }, { 155,-66422 }, { 156,-66422 }, + { 157,-66422 }, { 158,-66422 }, { 159,-66422 }, { 160,-66422 }, { 161,-66422 }, + + { 162,-66422 }, { 163,-66422 }, { 164,-66422 }, { 165,-66422 }, { 166,-66422 }, + { 167,-66422 }, { 168,-66422 }, { 169,-66422 }, { 170,-66422 }, { 171,-66422 }, + { 172,-66422 }, { 173,-66422 }, { 174,-66422 }, { 175,-66422 }, { 176,-66422 }, + { 177,-66422 }, { 178,-66422 }, { 179,-66422 }, { 180,-66422 }, { 181,-66422 }, + { 182,-66422 }, { 183,-66422 }, { 184,-66422 }, { 185,-66422 }, { 186,-66422 }, + { 187,-66422 }, { 188,-66422 }, { 189,-66422 }, { 190,-66422 }, { 191,-66422 }, + { 192,-66422 }, { 193,-66422 }, { 194,-66422 }, { 195,-66422 }, { 196,-66422 }, + { 197,-66422 }, { 198,-66422 }, { 199,-66422 }, { 200,-66422 }, { 201,-66422 }, + { 202,-66422 }, { 203,-66422 }, { 204,-66422 }, { 205,-66422 }, { 206,-66422 }, + { 207,-66422 }, { 208,-66422 }, { 209,-66422 }, { 210,-66422 }, { 211,-66422 }, + + { 212,-66422 }, { 213,-66422 }, { 214,-66422 }, { 215,-66422 }, { 216,-66422 }, + { 217,-66422 }, { 218,-66422 }, { 219,-66422 }, { 220,-66422 }, { 221,-66422 }, + { 222,-66422 }, { 223,-66422 }, { 224,-66422 }, { 225,-66422 }, { 226,-66422 }, + { 227,-66422 }, { 228,-66422 }, { 229,-66422 }, { 230,-66422 }, { 231,-66422 }, + { 232,-66422 }, { 233,-66422 }, { 234,-66422 }, { 235,-66422 }, { 236,-66422 }, + { 237,-66422 }, { 238,-66422 }, { 239,-66422 }, { 240,-66422 }, { 241,-66422 }, + { 242,-66422 }, { 243,-66422 }, { 244,-66422 }, { 245,-66422 }, { 246,-66422 }, + { 247,-66422 }, { 248,-66422 }, { 249,-66422 }, { 250,-66422 }, { 251,-66422 }, + { 252,-66422 }, { 253,-66422 }, { 254,-66422 }, { 255,-66422 }, { 0, 131 }, + { 0,25444 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-66679 }, { 49,-66679 }, + { 50,-66679 }, { 51,-66679 }, { 52,-66679 }, { 53,-66679 }, { 54,-66679 }, + + { 55,-66679 }, { 56,-66679 }, { 57,-66679 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-66679 }, { 66,-66679 }, { 67,-66679 }, { 68,-66679 }, { 69,-66679 }, + { 70,-66679 }, { 71,-66679 }, { 72,-66679 }, { 73,-66679 }, { 74,-66679 }, + { 75,-66679 }, { 76,-66679 }, { 77,-66679 }, { 78,-66679 }, { 79,7967 }, + { 80,-66679 }, { 81,-66679 }, { 82,-66679 }, { 83,-66679 }, { 84,-66679 }, + { 85,-66679 }, { 86,-66679 }, { 87,-66679 }, { 88,-66679 }, { 89,-66679 }, + { 90,-66679 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-66679 }, { 0, 0 }, { 97,-66679 }, { 98,-66679 }, { 99,-66679 }, + { 100,-66679 }, { 101,-66679 }, { 102,-66679 }, { 103,-66679 }, { 104,-66679 }, + + { 105,-66679 }, { 106,-66679 }, { 107,-66679 }, { 108,-66679 }, { 109,-66679 }, + { 110,-66679 }, { 111,7967 }, { 112,-66679 }, { 113,-66679 }, { 114,-66679 }, + { 115,-66679 }, { 116,-66679 }, { 117,-66679 }, { 118,-66679 }, { 119,-66679 }, + { 120,-66679 }, { 121,-66679 }, { 122,-66679 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-66679 }, { 128,-66679 }, { 129,-66679 }, + { 130,-66679 }, { 131,-66679 }, { 132,-66679 }, { 133,-66679 }, { 134,-66679 }, + { 135,-66679 }, { 136,-66679 }, { 137,-66679 }, { 138,-66679 }, { 139,-66679 }, + { 140,-66679 }, { 141,-66679 }, { 142,-66679 }, { 143,-66679 }, { 144,-66679 }, + { 145,-66679 }, { 146,-66679 }, { 147,-66679 }, { 148,-66679 }, { 149,-66679 }, + { 150,-66679 }, { 151,-66679 }, { 152,-66679 }, { 153,-66679 }, { 154,-66679 }, + + { 155,-66679 }, { 156,-66679 }, { 157,-66679 }, { 158,-66679 }, { 159,-66679 }, + { 160,-66679 }, { 161,-66679 }, { 162,-66679 }, { 163,-66679 }, { 164,-66679 }, + { 165,-66679 }, { 166,-66679 }, { 167,-66679 }, { 168,-66679 }, { 169,-66679 }, + { 170,-66679 }, { 171,-66679 }, { 172,-66679 }, { 173,-66679 }, { 174,-66679 }, + { 175,-66679 }, { 176,-66679 }, { 177,-66679 }, { 178,-66679 }, { 179,-66679 }, + { 180,-66679 }, { 181,-66679 }, { 182,-66679 }, { 183,-66679 }, { 184,-66679 }, + { 185,-66679 }, { 186,-66679 }, { 187,-66679 }, { 188,-66679 }, { 189,-66679 }, + { 190,-66679 }, { 191,-66679 }, { 192,-66679 }, { 193,-66679 }, { 194,-66679 }, + { 195,-66679 }, { 196,-66679 }, { 197,-66679 }, { 198,-66679 }, { 199,-66679 }, + { 200,-66679 }, { 201,-66679 }, { 202,-66679 }, { 203,-66679 }, { 204,-66679 }, + + { 205,-66679 }, { 206,-66679 }, { 207,-66679 }, { 208,-66679 }, { 209,-66679 }, + { 210,-66679 }, { 211,-66679 }, { 212,-66679 }, { 213,-66679 }, { 214,-66679 }, + { 215,-66679 }, { 216,-66679 }, { 217,-66679 }, { 218,-66679 }, { 219,-66679 }, + { 220,-66679 }, { 221,-66679 }, { 222,-66679 }, { 223,-66679 }, { 224,-66679 }, + { 225,-66679 }, { 226,-66679 }, { 227,-66679 }, { 228,-66679 }, { 229,-66679 }, + { 230,-66679 }, { 231,-66679 }, { 232,-66679 }, { 233,-66679 }, { 234,-66679 }, + { 235,-66679 }, { 236,-66679 }, { 237,-66679 }, { 238,-66679 }, { 239,-66679 }, + { 240,-66679 }, { 241,-66679 }, { 242,-66679 }, { 243,-66679 }, { 244,-66679 }, + { 245,-66679 }, { 246,-66679 }, { 247,-66679 }, { 248,-66679 }, { 249,-66679 }, + { 250,-66679 }, { 251,-66679 }, { 252,-66679 }, { 253,-66679 }, { 254,-66679 }, + + { 255,-66679 }, { 0, 131 }, { 0,25187 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-66936 }, { 49,-66936 }, { 50,-66936 }, { 51,-66936 }, { 52,-66936 }, + { 53,-66936 }, { 54,-66936 }, { 55,-66936 }, { 56,-66936 }, { 57,-66936 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-66936 }, { 66,-66936 }, { 67,-66936 }, + { 68,-66936 }, { 69,-66936 }, { 70,-66936 }, { 71,-66936 }, { 72,-66936 }, + { 73,-66936 }, { 74,-66936 }, { 75,-66936 }, { 76,-66936 }, { 77,-66936 }, + { 78,-66936 }, { 79,-66936 }, { 80,-66936 }, { 81,-66936 }, { 82,-66936 }, + { 83,7967 }, { 84,-66936 }, { 85,-66936 }, { 86,-66936 }, { 87,-66936 }, + { 88,-66936 }, { 89,-66936 }, { 90,-66936 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-66936 }, { 0, 0 }, { 97,-66936 }, + + { 98,-66936 }, { 99,-66936 }, { 100,-66936 }, { 101,-66936 }, { 102,-66936 }, + { 103,-66936 }, { 104,-66936 }, { 105,-66936 }, { 106,-66936 }, { 107,-66936 }, + { 108,-66936 }, { 109,-66936 }, { 110,-66936 }, { 111,-66936 }, { 112,-66936 }, + { 113,-66936 }, { 114,-66936 }, { 115,7967 }, { 116,-66936 }, { 117,-66936 }, + { 118,-66936 }, { 119,-66936 }, { 120,-66936 }, { 121,-66936 }, { 122,-66936 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-66936 }, + { 128,-66936 }, { 129,-66936 }, { 130,-66936 }, { 131,-66936 }, { 132,-66936 }, + { 133,-66936 }, { 134,-66936 }, { 135,-66936 }, { 136,-66936 }, { 137,-66936 }, + { 138,-66936 }, { 139,-66936 }, { 140,-66936 }, { 141,-66936 }, { 142,-66936 }, + { 143,-66936 }, { 144,-66936 }, { 145,-66936 }, { 146,-66936 }, { 147,-66936 }, + + { 148,-66936 }, { 149,-66936 }, { 150,-66936 }, { 151,-66936 }, { 152,-66936 }, + { 153,-66936 }, { 154,-66936 }, { 155,-66936 }, { 156,-66936 }, { 157,-66936 }, + { 158,-66936 }, { 159,-66936 }, { 160,-66936 }, { 161,-66936 }, { 162,-66936 }, + { 163,-66936 }, { 164,-66936 }, { 165,-66936 }, { 166,-66936 }, { 167,-66936 }, + { 168,-66936 }, { 169,-66936 }, { 170,-66936 }, { 171,-66936 }, { 172,-66936 }, + { 173,-66936 }, { 174,-66936 }, { 175,-66936 }, { 176,-66936 }, { 177,-66936 }, + { 178,-66936 }, { 179,-66936 }, { 180,-66936 }, { 181,-66936 }, { 182,-66936 }, + { 183,-66936 }, { 184,-66936 }, { 185,-66936 }, { 186,-66936 }, { 187,-66936 }, + { 188,-66936 }, { 189,-66936 }, { 190,-66936 }, { 191,-66936 }, { 192,-66936 }, + { 193,-66936 }, { 194,-66936 }, { 195,-66936 }, { 196,-66936 }, { 197,-66936 }, + + { 198,-66936 }, { 199,-66936 }, { 200,-66936 }, { 201,-66936 }, { 202,-66936 }, + { 203,-66936 }, { 204,-66936 }, { 205,-66936 }, { 206,-66936 }, { 207,-66936 }, + { 208,-66936 }, { 209,-66936 }, { 210,-66936 }, { 211,-66936 }, { 212,-66936 }, + { 213,-66936 }, { 214,-66936 }, { 215,-66936 }, { 216,-66936 }, { 217,-66936 }, + { 218,-66936 }, { 219,-66936 }, { 220,-66936 }, { 221,-66936 }, { 222,-66936 }, + { 223,-66936 }, { 224,-66936 }, { 225,-66936 }, { 226,-66936 }, { 227,-66936 }, + { 228,-66936 }, { 229,-66936 }, { 230,-66936 }, { 231,-66936 }, { 232,-66936 }, + { 233,-66936 }, { 234,-66936 }, { 235,-66936 }, { 236,-66936 }, { 237,-66936 }, + { 238,-66936 }, { 239,-66936 }, { 240,-66936 }, { 241,-66936 }, { 242,-66936 }, + { 243,-66936 }, { 244,-66936 }, { 245,-66936 }, { 246,-66936 }, { 247,-66936 }, + + { 248,-66936 }, { 249,-66936 }, { 250,-66936 }, { 251,-66936 }, { 252,-66936 }, + { 253,-66936 }, { 254,-66936 }, { 255,-66936 }, { 0, 131 }, { 0,24930 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-67193 }, { 49,-67193 }, { 50,-67193 }, + { 51,-67193 }, { 52,-67193 }, { 53,-67193 }, { 54,-67193 }, { 55,-67193 }, + { 56,-67193 }, { 57,-67193 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-67193 }, + { 66,-67193 }, { 67,-67193 }, { 68,-67193 }, { 69,-67193 }, { 70,-67193 }, + { 71,-67193 }, { 72,-67193 }, { 73,-67193 }, { 74,-67193 }, { 75,-67193 }, + { 76,-67193 }, { 77,-67193 }, { 78,-67193 }, { 79,-67193 }, { 80,-67193 }, + { 81,-67193 }, { 82,-67193 }, { 83,-67193 }, { 84,7967 }, { 85,-67193 }, + { 86,-67193 }, { 87,-67193 }, { 88,-67193 }, { 89,-67193 }, { 90,-67193 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-67193 }, + { 0, 0 }, { 97,-67193 }, { 98,-67193 }, { 99,-67193 }, { 100,-67193 }, + { 101,-67193 }, { 102,-67193 }, { 103,-67193 }, { 104,-67193 }, { 105,-67193 }, + { 106,-67193 }, { 107,-67193 }, { 108,-67193 }, { 109,-67193 }, { 110,-67193 }, + { 111,-67193 }, { 112,-67193 }, { 113,-67193 }, { 114,-67193 }, { 115,-67193 }, + { 116,7967 }, { 117,-67193 }, { 118,-67193 }, { 119,-67193 }, { 120,-67193 }, + { 121,-67193 }, { 122,-67193 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-67193 }, { 128,-67193 }, { 129,-67193 }, { 130,-67193 }, + { 131,-67193 }, { 132,-67193 }, { 133,-67193 }, { 134,-67193 }, { 135,-67193 }, + { 136,-67193 }, { 137,-67193 }, { 138,-67193 }, { 139,-67193 }, { 140,-67193 }, + + { 141,-67193 }, { 142,-67193 }, { 143,-67193 }, { 144,-67193 }, { 145,-67193 }, + { 146,-67193 }, { 147,-67193 }, { 148,-67193 }, { 149,-67193 }, { 150,-67193 }, + { 151,-67193 }, { 152,-67193 }, { 153,-67193 }, { 154,-67193 }, { 155,-67193 }, + { 156,-67193 }, { 157,-67193 }, { 158,-67193 }, { 159,-67193 }, { 160,-67193 }, + { 161,-67193 }, { 162,-67193 }, { 163,-67193 }, { 164,-67193 }, { 165,-67193 }, + { 166,-67193 }, { 167,-67193 }, { 168,-67193 }, { 169,-67193 }, { 170,-67193 }, + { 171,-67193 }, { 172,-67193 }, { 173,-67193 }, { 174,-67193 }, { 175,-67193 }, + { 176,-67193 }, { 177,-67193 }, { 178,-67193 }, { 179,-67193 }, { 180,-67193 }, + { 181,-67193 }, { 182,-67193 }, { 183,-67193 }, { 184,-67193 }, { 185,-67193 }, + { 186,-67193 }, { 187,-67193 }, { 188,-67193 }, { 189,-67193 }, { 190,-67193 }, + + { 191,-67193 }, { 192,-67193 }, { 193,-67193 }, { 194,-67193 }, { 195,-67193 }, + { 196,-67193 }, { 197,-67193 }, { 198,-67193 }, { 199,-67193 }, { 200,-67193 }, + { 201,-67193 }, { 202,-67193 }, { 203,-67193 }, { 204,-67193 }, { 205,-67193 }, + { 206,-67193 }, { 207,-67193 }, { 208,-67193 }, { 209,-67193 }, { 210,-67193 }, + { 211,-67193 }, { 212,-67193 }, { 213,-67193 }, { 214,-67193 }, { 215,-67193 }, + { 216,-67193 }, { 217,-67193 }, { 218,-67193 }, { 219,-67193 }, { 220,-67193 }, + { 221,-67193 }, { 222,-67193 }, { 223,-67193 }, { 224,-67193 }, { 225,-67193 }, + { 226,-67193 }, { 227,-67193 }, { 228,-67193 }, { 229,-67193 }, { 230,-67193 }, + { 231,-67193 }, { 232,-67193 }, { 233,-67193 }, { 234,-67193 }, { 235,-67193 }, + { 236,-67193 }, { 237,-67193 }, { 238,-67193 }, { 239,-67193 }, { 240,-67193 }, + + { 241,-67193 }, { 242,-67193 }, { 243,-67193 }, { 244,-67193 }, { 245,-67193 }, + { 246,-67193 }, { 247,-67193 }, { 248,-67193 }, { 249,-67193 }, { 250,-67193 }, + { 251,-67193 }, { 252,-67193 }, { 253,-67193 }, { 254,-67193 }, { 255,-67193 }, + { 0, 131 }, { 0,24673 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-67450 }, + { 49,-67450 }, { 50,-67450 }, { 51,-67450 }, { 52,-67450 }, { 53,-67450 }, + { 54,-67450 }, { 55,-67450 }, { 56,-67450 }, { 57,-67450 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-67450 }, { 66,-67450 }, { 67,-67450 }, { 68,-67450 }, + { 69,-67450 }, { 70,-67450 }, { 71,-67450 }, { 72,-67450 }, { 73,-67450 }, + { 74,-67450 }, { 75,-67450 }, { 76,-67450 }, { 77,-67450 }, { 78,-67450 }, + { 79,-67450 }, { 80,-67450 }, { 81,-67450 }, { 82,-67450 }, { 83,-67450 }, + + { 84,7967 }, { 85,-67450 }, { 86,-67450 }, { 87,-67450 }, { 88,-67450 }, + { 89,-67450 }, { 90,-67450 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-67450 }, { 0, 0 }, { 97,-67450 }, { 98,-67450 }, + { 99,-67450 }, { 100,-67450 }, { 101,-67450 }, { 102,-67450 }, { 103,-67450 }, + { 104,-67450 }, { 105,-67450 }, { 106,-67450 }, { 107,-67450 }, { 108,-67450 }, + { 109,-67450 }, { 110,-67450 }, { 111,-67450 }, { 112,-67450 }, { 113,-67450 }, + { 114,-67450 }, { 115,-67450 }, { 116,7967 }, { 117,-67450 }, { 118,-67450 }, + { 119,-67450 }, { 120,-67450 }, { 121,-67450 }, { 122,-67450 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-67450 }, { 128,-67450 }, + { 129,-67450 }, { 130,-67450 }, { 131,-67450 }, { 132,-67450 }, { 133,-67450 }, + + { 134,-67450 }, { 135,-67450 }, { 136,-67450 }, { 137,-67450 }, { 138,-67450 }, + { 139,-67450 }, { 140,-67450 }, { 141,-67450 }, { 142,-67450 }, { 143,-67450 }, + { 144,-67450 }, { 145,-67450 }, { 146,-67450 }, { 147,-67450 }, { 148,-67450 }, + { 149,-67450 }, { 150,-67450 }, { 151,-67450 }, { 152,-67450 }, { 153,-67450 }, + { 154,-67450 }, { 155,-67450 }, { 156,-67450 }, { 157,-67450 }, { 158,-67450 }, + { 159,-67450 }, { 160,-67450 }, { 161,-67450 }, { 162,-67450 }, { 163,-67450 }, + { 164,-67450 }, { 165,-67450 }, { 166,-67450 }, { 167,-67450 }, { 168,-67450 }, + { 169,-67450 }, { 170,-67450 }, { 171,-67450 }, { 172,-67450 }, { 173,-67450 }, + { 174,-67450 }, { 175,-67450 }, { 176,-67450 }, { 177,-67450 }, { 178,-67450 }, + { 179,-67450 }, { 180,-67450 }, { 181,-67450 }, { 182,-67450 }, { 183,-67450 }, + + { 184,-67450 }, { 185,-67450 }, { 186,-67450 }, { 187,-67450 }, { 188,-67450 }, + { 189,-67450 }, { 190,-67450 }, { 191,-67450 }, { 192,-67450 }, { 193,-67450 }, + { 194,-67450 }, { 195,-67450 }, { 196,-67450 }, { 197,-67450 }, { 198,-67450 }, + { 199,-67450 }, { 200,-67450 }, { 201,-67450 }, { 202,-67450 }, { 203,-67450 }, + { 204,-67450 }, { 205,-67450 }, { 206,-67450 }, { 207,-67450 }, { 208,-67450 }, + { 209,-67450 }, { 210,-67450 }, { 211,-67450 }, { 212,-67450 }, { 213,-67450 }, + { 214,-67450 }, { 215,-67450 }, { 216,-67450 }, { 217,-67450 }, { 218,-67450 }, + { 219,-67450 }, { 220,-67450 }, { 221,-67450 }, { 222,-67450 }, { 223,-67450 }, + { 224,-67450 }, { 225,-67450 }, { 226,-67450 }, { 227,-67450 }, { 228,-67450 }, + { 229,-67450 }, { 230,-67450 }, { 231,-67450 }, { 232,-67450 }, { 233,-67450 }, + + { 234,-67450 }, { 235,-67450 }, { 236,-67450 }, { 237,-67450 }, { 238,-67450 }, + { 239,-67450 }, { 240,-67450 }, { 241,-67450 }, { 242,-67450 }, { 243,-67450 }, + { 244,-67450 }, { 245,-67450 }, { 246,-67450 }, { 247,-67450 }, { 248,-67450 }, + { 249,-67450 }, { 250,-67450 }, { 251,-67450 }, { 252,-67450 }, { 253,-67450 }, + { 254,-67450 }, { 255,-67450 }, { 0, 131 }, { 0,24416 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-67707 }, { 49,-67707 }, { 50,-67707 }, { 51,-67707 }, + { 52,-67707 }, { 53,-67707 }, { 54,-67707 }, { 55,-67707 }, { 56,-67707 }, + { 57,-67707 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-67707 }, { 66,-67707 }, + { 67,-67707 }, { 68,-67707 }, { 69,7967 }, { 70,-67707 }, { 71,-67707 }, + { 72,-67707 }, { 73,-67707 }, { 74,-67707 }, { 75,-67707 }, { 76,-67707 }, + + { 77,-67707 }, { 78,-67707 }, { 79,-67707 }, { 80,-67707 }, { 81,-67707 }, + { 82,-67707 }, { 83,-67707 }, { 84,-67707 }, { 85,-67707 }, { 86,-67707 }, + { 87,-67707 }, { 88,-67707 }, { 89,-67707 }, { 90,-67707 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-67707 }, { 0, 0 }, + { 97,-67707 }, { 98,-67707 }, { 99,-67707 }, { 100,-67707 }, { 101,7967 }, + { 102,-67707 }, { 103,-67707 }, { 104,-67707 }, { 105,-67707 }, { 106,-67707 }, + { 107,-67707 }, { 108,-67707 }, { 109,-67707 }, { 110,-67707 }, { 111,-67707 }, + { 112,-67707 }, { 113,-67707 }, { 114,-67707 }, { 115,-67707 }, { 116,-67707 }, + { 117,-67707 }, { 118,-67707 }, { 119,-67707 }, { 120,-67707 }, { 121,-67707 }, + { 122,-67707 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-67707 }, { 128,-67707 }, { 129,-67707 }, { 130,-67707 }, { 131,-67707 }, + { 132,-67707 }, { 133,-67707 }, { 134,-67707 }, { 135,-67707 }, { 136,-67707 }, + { 137,-67707 }, { 138,-67707 }, { 139,-67707 }, { 140,-67707 }, { 141,-67707 }, + { 142,-67707 }, { 143,-67707 }, { 144,-67707 }, { 145,-67707 }, { 146,-67707 }, + { 147,-67707 }, { 148,-67707 }, { 149,-67707 }, { 150,-67707 }, { 151,-67707 }, + { 152,-67707 }, { 153,-67707 }, { 154,-67707 }, { 155,-67707 }, { 156,-67707 }, + { 157,-67707 }, { 158,-67707 }, { 159,-67707 }, { 160,-67707 }, { 161,-67707 }, + { 162,-67707 }, { 163,-67707 }, { 164,-67707 }, { 165,-67707 }, { 166,-67707 }, + { 167,-67707 }, { 168,-67707 }, { 169,-67707 }, { 170,-67707 }, { 171,-67707 }, + { 172,-67707 }, { 173,-67707 }, { 174,-67707 }, { 175,-67707 }, { 176,-67707 }, + + { 177,-67707 }, { 178,-67707 }, { 179,-67707 }, { 180,-67707 }, { 181,-67707 }, + { 182,-67707 }, { 183,-67707 }, { 184,-67707 }, { 185,-67707 }, { 186,-67707 }, + { 187,-67707 }, { 188,-67707 }, { 189,-67707 }, { 190,-67707 }, { 191,-67707 }, + { 192,-67707 }, { 193,-67707 }, { 194,-67707 }, { 195,-67707 }, { 196,-67707 }, + { 197,-67707 }, { 198,-67707 }, { 199,-67707 }, { 200,-67707 }, { 201,-67707 }, + { 202,-67707 }, { 203,-67707 }, { 204,-67707 }, { 205,-67707 }, { 206,-67707 }, + { 207,-67707 }, { 208,-67707 }, { 209,-67707 }, { 210,-67707 }, { 211,-67707 }, + { 212,-67707 }, { 213,-67707 }, { 214,-67707 }, { 215,-67707 }, { 216,-67707 }, + { 217,-67707 }, { 218,-67707 }, { 219,-67707 }, { 220,-67707 }, { 221,-67707 }, + { 222,-67707 }, { 223,-67707 }, { 224,-67707 }, { 225,-67707 }, { 226,-67707 }, + + { 227,-67707 }, { 228,-67707 }, { 229,-67707 }, { 230,-67707 }, { 231,-67707 }, + { 232,-67707 }, { 233,-67707 }, { 234,-67707 }, { 235,-67707 }, { 236,-67707 }, + { 237,-67707 }, { 238,-67707 }, { 239,-67707 }, { 240,-67707 }, { 241,-67707 }, + { 242,-67707 }, { 243,-67707 }, { 244,-67707 }, { 245,-67707 }, { 246,-67707 }, + { 247,-67707 }, { 248,-67707 }, { 249,-67707 }, { 250,-67707 }, { 251,-67707 }, + { 252,-67707 }, { 253,-67707 }, { 254,-67707 }, { 255,-67707 }, { 0, 131 }, + { 0,24159 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-67964 }, { 49,-67964 }, + { 50,-67964 }, { 51,-67964 }, { 52,-67964 }, { 53,-67964 }, { 54,-67964 }, + { 55,-67964 }, { 56,-67964 }, { 57,-67964 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-67964 }, { 66,-67964 }, { 67,-67964 }, { 68,-67964 }, { 69,7967 }, + + { 70,-67964 }, { 71,-67964 }, { 72,-67964 }, { 73,-67964 }, { 74,-67964 }, + { 75,-67964 }, { 76,-67964 }, { 77,-67964 }, { 78,-67964 }, { 79,-67964 }, + { 80,-67964 }, { 81,-67964 }, { 82,-67964 }, { 83,-67964 }, { 84,-67964 }, + { 85,-67964 }, { 86,-67964 }, { 87,-67964 }, { 88,-67964 }, { 89,-67964 }, + { 90,-67964 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-67964 }, { 0, 0 }, { 97,-67964 }, { 98,-67964 }, { 99,-67964 }, + { 100,-67964 }, { 101,7967 }, { 102,-67964 }, { 103,-67964 }, { 104,-67964 }, + { 105,-67964 }, { 106,-67964 }, { 107,-67964 }, { 108,-67964 }, { 109,-67964 }, + { 110,-67964 }, { 111,-67964 }, { 112,-67964 }, { 113,-67964 }, { 114,-67964 }, + { 115,-67964 }, { 116,-67964 }, { 117,-67964 }, { 118,-67964 }, { 119,-67964 }, + + { 120,-67964 }, { 121,-67964 }, { 122,-67964 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-67964 }, { 128,-67964 }, { 129,-67964 }, + { 130,-67964 }, { 131,-67964 }, { 132,-67964 }, { 133,-67964 }, { 134,-67964 }, + { 135,-67964 }, { 136,-67964 }, { 137,-67964 }, { 138,-67964 }, { 139,-67964 }, + { 140,-67964 }, { 141,-67964 }, { 142,-67964 }, { 143,-67964 }, { 144,-67964 }, + { 145,-67964 }, { 146,-67964 }, { 147,-67964 }, { 148,-67964 }, { 149,-67964 }, + { 150,-67964 }, { 151,-67964 }, { 152,-67964 }, { 153,-67964 }, { 154,-67964 }, + { 155,-67964 }, { 156,-67964 }, { 157,-67964 }, { 158,-67964 }, { 159,-67964 }, + { 160,-67964 }, { 161,-67964 }, { 162,-67964 }, { 163,-67964 }, { 164,-67964 }, + { 165,-67964 }, { 166,-67964 }, { 167,-67964 }, { 168,-67964 }, { 169,-67964 }, + + { 170,-67964 }, { 171,-67964 }, { 172,-67964 }, { 173,-67964 }, { 174,-67964 }, + { 175,-67964 }, { 176,-67964 }, { 177,-67964 }, { 178,-67964 }, { 179,-67964 }, + { 180,-67964 }, { 181,-67964 }, { 182,-67964 }, { 183,-67964 }, { 184,-67964 }, + { 185,-67964 }, { 186,-67964 }, { 187,-67964 }, { 188,-67964 }, { 189,-67964 }, + { 190,-67964 }, { 191,-67964 }, { 192,-67964 }, { 193,-67964 }, { 194,-67964 }, + { 195,-67964 }, { 196,-67964 }, { 197,-67964 }, { 198,-67964 }, { 199,-67964 }, + { 200,-67964 }, { 201,-67964 }, { 202,-67964 }, { 203,-67964 }, { 204,-67964 }, + { 205,-67964 }, { 206,-67964 }, { 207,-67964 }, { 208,-67964 }, { 209,-67964 }, + { 210,-67964 }, { 211,-67964 }, { 212,-67964 }, { 213,-67964 }, { 214,-67964 }, + { 215,-67964 }, { 216,-67964 }, { 217,-67964 }, { 218,-67964 }, { 219,-67964 }, + + { 220,-67964 }, { 221,-67964 }, { 222,-67964 }, { 223,-67964 }, { 224,-67964 }, + { 225,-67964 }, { 226,-67964 }, { 227,-67964 }, { 228,-67964 }, { 229,-67964 }, + { 230,-67964 }, { 231,-67964 }, { 232,-67964 }, { 233,-67964 }, { 234,-67964 }, + { 235,-67964 }, { 236,-67964 }, { 237,-67964 }, { 238,-67964 }, { 239,-67964 }, + { 240,-67964 }, { 241,-67964 }, { 242,-67964 }, { 243,-67964 }, { 244,-67964 }, + { 245,-67964 }, { 246,-67964 }, { 247,-67964 }, { 248,-67964 }, { 249,-67964 }, + { 250,-67964 }, { 251,-67964 }, { 252,-67964 }, { 253,-67964 }, { 254,-67964 }, + { 255,-67964 }, { 0, 43 }, { 0,23902 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-68221 }, { 49,-68221 }, { 50,-68221 }, { 51,-68221 }, { 52,-68221 }, + { 53,-68221 }, { 54,-68221 }, { 55,-68221 }, { 56,-68221 }, { 57,-68221 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-68221 }, { 66,-68221 }, { 67,-68221 }, + { 68,-68221 }, { 69,-68221 }, { 70,-68221 }, { 71,-68221 }, { 72,-68221 }, + { 73,-68221 }, { 74,-68221 }, { 75,-68221 }, { 76,-68221 }, { 77,-68221 }, + { 78,-68221 }, { 79,-68221 }, { 80,-68221 }, { 81,-68221 }, { 82,-68221 }, + { 83,-68221 }, { 84,-68221 }, { 85,-68221 }, { 86,-68221 }, { 87,-68221 }, + { 88,-68221 }, { 89,-68221 }, { 90,-68221 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-68221 }, { 0, 0 }, { 97,-68221 }, + { 98,-68221 }, { 99,-68221 }, { 100,-68221 }, { 101,-68221 }, { 102,-68221 }, + { 103,-68221 }, { 104,-68221 }, { 105,-68221 }, { 106,-68221 }, { 107,-68221 }, + { 108,-68221 }, { 109,-68221 }, { 110,-68221 }, { 111,-68221 }, { 112,-68221 }, + + { 113,-68221 }, { 114,-68221 }, { 115,-68221 }, { 116,-68221 }, { 117,-68221 }, + { 118,-68221 }, { 119,-68221 }, { 120,-68221 }, { 121,-68221 }, { 122,-68221 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-68221 }, + { 128,-68221 }, { 129,-68221 }, { 130,-68221 }, { 131,-68221 }, { 132,-68221 }, + { 133,-68221 }, { 134,-68221 }, { 135,-68221 }, { 136,-68221 }, { 137,-68221 }, + { 138,-68221 }, { 139,-68221 }, { 140,-68221 }, { 141,-68221 }, { 142,-68221 }, + { 143,-68221 }, { 144,-68221 }, { 145,-68221 }, { 146,-68221 }, { 147,-68221 }, + { 148,-68221 }, { 149,-68221 }, { 150,-68221 }, { 151,-68221 }, { 152,-68221 }, + { 153,-68221 }, { 154,-68221 }, { 155,-68221 }, { 156,-68221 }, { 157,-68221 }, + { 158,-68221 }, { 159,-68221 }, { 160,-68221 }, { 161,-68221 }, { 162,-68221 }, + + { 163,-68221 }, { 164,-68221 }, { 165,-68221 }, { 166,-68221 }, { 167,-68221 }, + { 168,-68221 }, { 169,-68221 }, { 170,-68221 }, { 171,-68221 }, { 172,-68221 }, + { 173,-68221 }, { 174,-68221 }, { 175,-68221 }, { 176,-68221 }, { 177,-68221 }, + { 178,-68221 }, { 179,-68221 }, { 180,-68221 }, { 181,-68221 }, { 182,-68221 }, + { 183,-68221 }, { 184,-68221 }, { 185,-68221 }, { 186,-68221 }, { 187,-68221 }, + { 188,-68221 }, { 189,-68221 }, { 190,-68221 }, { 191,-68221 }, { 192,-68221 }, + { 193,-68221 }, { 194,-68221 }, { 195,-68221 }, { 196,-68221 }, { 197,-68221 }, + { 198,-68221 }, { 199,-68221 }, { 200,-68221 }, { 201,-68221 }, { 202,-68221 }, + { 203,-68221 }, { 204,-68221 }, { 205,-68221 }, { 206,-68221 }, { 207,-68221 }, + { 208,-68221 }, { 209,-68221 }, { 210,-68221 }, { 211,-68221 }, { 212,-68221 }, + + { 213,-68221 }, { 214,-68221 }, { 215,-68221 }, { 216,-68221 }, { 217,-68221 }, + { 218,-68221 }, { 219,-68221 }, { 220,-68221 }, { 221,-68221 }, { 222,-68221 }, + { 223,-68221 }, { 224,-68221 }, { 225,-68221 }, { 226,-68221 }, { 227,-68221 }, + { 228,-68221 }, { 229,-68221 }, { 230,-68221 }, { 231,-68221 }, { 232,-68221 }, + { 233,-68221 }, { 234,-68221 }, { 235,-68221 }, { 236,-68221 }, { 237,-68221 }, + { 238,-68221 }, { 239,-68221 }, { 240,-68221 }, { 241,-68221 }, { 242,-68221 }, + { 243,-68221 }, { 244,-68221 }, { 245,-68221 }, { 246,-68221 }, { 247,-68221 }, + { 248,-68221 }, { 249,-68221 }, { 250,-68221 }, { 251,-68221 }, { 252,-68221 }, + { 253,-68221 }, { 254,-68221 }, { 255,-68221 }, { 0, 49 }, { 0,23645 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-68478 }, { 49,-68478 }, { 50,-68478 }, + { 51,-68478 }, { 52,-68478 }, { 53,-68478 }, { 54,-68478 }, { 55,-68478 }, + + { 56,-68478 }, { 57,-68478 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-68478 }, + { 66,-68478 }, { 67,-68478 }, { 68,-68478 }, { 69,-68478 }, { 70,-68478 }, + { 71,-68478 }, { 72,-68478 }, { 73,-68478 }, { 74,-68478 }, { 75,-68478 }, + { 76,-68478 }, { 77,-68478 }, { 78,-68478 }, { 79,-68478 }, { 80,-68478 }, + { 81,-68478 }, { 82,-68478 }, { 83,-68478 }, { 84,-68478 }, { 85,-68478 }, + { 86,-68478 }, { 87,-68478 }, { 88,-68478 }, { 89,-68478 }, { 90,-68478 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-68478 }, + { 0, 0 }, { 97,-68478 }, { 98,-68478 }, { 99,-68478 }, { 100,-68478 }, + { 101,-68478 }, { 102,-68478 }, { 103,-68478 }, { 104,-68478 }, { 105,-68478 }, + + { 106,-68478 }, { 107,-68478 }, { 108,-68478 }, { 109,-68478 }, { 110,-68478 }, + { 111,-68478 }, { 112,-68478 }, { 113,-68478 }, { 114,-68478 }, { 115,-68478 }, + { 116,-68478 }, { 117,-68478 }, { 118,-68478 }, { 119,-68478 }, { 120,-68478 }, + { 121,-68478 }, { 122,-68478 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-68478 }, { 128,-68478 }, { 129,-68478 }, { 130,-68478 }, + { 131,-68478 }, { 132,-68478 }, { 133,-68478 }, { 134,-68478 }, { 135,-68478 }, + { 136,-68478 }, { 137,-68478 }, { 138,-68478 }, { 139,-68478 }, { 140,-68478 }, + { 141,-68478 }, { 142,-68478 }, { 143,-68478 }, { 144,-68478 }, { 145,-68478 }, + { 146,-68478 }, { 147,-68478 }, { 148,-68478 }, { 149,-68478 }, { 150,-68478 }, + { 151,-68478 }, { 152,-68478 }, { 153,-68478 }, { 154,-68478 }, { 155,-68478 }, + + { 156,-68478 }, { 157,-68478 }, { 158,-68478 }, { 159,-68478 }, { 160,-68478 }, + { 161,-68478 }, { 162,-68478 }, { 163,-68478 }, { 164,-68478 }, { 165,-68478 }, + { 166,-68478 }, { 167,-68478 }, { 168,-68478 }, { 169,-68478 }, { 170,-68478 }, + { 171,-68478 }, { 172,-68478 }, { 173,-68478 }, { 174,-68478 }, { 175,-68478 }, + { 176,-68478 }, { 177,-68478 }, { 178,-68478 }, { 179,-68478 }, { 180,-68478 }, + { 181,-68478 }, { 182,-68478 }, { 183,-68478 }, { 184,-68478 }, { 185,-68478 }, + { 186,-68478 }, { 187,-68478 }, { 188,-68478 }, { 189,-68478 }, { 190,-68478 }, + { 191,-68478 }, { 192,-68478 }, { 193,-68478 }, { 194,-68478 }, { 195,-68478 }, + { 196,-68478 }, { 197,-68478 }, { 198,-68478 }, { 199,-68478 }, { 200,-68478 }, + { 201,-68478 }, { 202,-68478 }, { 203,-68478 }, { 204,-68478 }, { 205,-68478 }, + + { 206,-68478 }, { 207,-68478 }, { 208,-68478 }, { 209,-68478 }, { 210,-68478 }, + { 211,-68478 }, { 212,-68478 }, { 213,-68478 }, { 214,-68478 }, { 215,-68478 }, + { 216,-68478 }, { 217,-68478 }, { 218,-68478 }, { 219,-68478 }, { 220,-68478 }, + { 221,-68478 }, { 222,-68478 }, { 223,-68478 }, { 224,-68478 }, { 225,-68478 }, + { 226,-68478 }, { 227,-68478 }, { 228,-68478 }, { 229,-68478 }, { 230,-68478 }, + { 231,-68478 }, { 232,-68478 }, { 233,-68478 }, { 234,-68478 }, { 235,-68478 }, + { 236,-68478 }, { 237,-68478 }, { 238,-68478 }, { 239,-68478 }, { 240,-68478 }, + { 241,-68478 }, { 242,-68478 }, { 243,-68478 }, { 244,-68478 }, { 245,-68478 }, + { 246,-68478 }, { 247,-68478 }, { 248,-68478 }, { 249,-68478 }, { 250,-68478 }, + { 251,-68478 }, { 252,-68478 }, { 253,-68478 }, { 254,-68478 }, { 255,-68478 }, + + { 0, 131 }, { 0,23388 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-68735 }, + + { 49,-68735 }, { 50,-68735 }, { 51,-68735 }, { 52,-68735 }, { 53,-68735 }, + { 54,-68735 }, { 55,-68735 }, { 56,-68735 }, { 57,-68735 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,7453 }, { 66,-68735 }, { 67,-68735 }, { 68,-68735 }, + { 69,-68735 }, { 70,-68735 }, { 71,-68735 }, { 72,-68735 }, { 73,-68735 }, + { 74,-68735 }, { 75,-68735 }, { 76,-68735 }, { 77,-68735 }, { 78,-68735 }, + { 79,-68735 }, { 80,-68735 }, { 81,-68735 }, { 82,-68735 }, { 83,-68735 }, + { 84,-68735 }, { 85,-68735 }, { 86,-68735 }, { 87,-68735 }, { 88,-68735 }, + { 89,-68735 }, { 90,-68735 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-68735 }, { 0, 0 }, { 97,7453 }, { 98,-68735 }, + + { 99,-68735 }, { 100,-68735 }, { 101,-68735 }, { 102,-68735 }, { 103,-68735 }, + { 104,-68735 }, { 105,-68735 }, { 106,-68735 }, { 107,-68735 }, { 108,-68735 }, + { 109,-68735 }, { 110,-68735 }, { 111,-68735 }, { 112,-68735 }, { 113,-68735 }, + { 114,-68735 }, { 115,-68735 }, { 116,-68735 }, { 117,-68735 }, { 118,-68735 }, + { 119,-68735 }, { 120,-68735 }, { 121,-68735 }, { 122,-68735 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-68735 }, { 128,-68735 }, + { 129,-68735 }, { 130,-68735 }, { 131,-68735 }, { 132,-68735 }, { 133,-68735 }, + { 134,-68735 }, { 135,-68735 }, { 136,-68735 }, { 137,-68735 }, { 138,-68735 }, + { 139,-68735 }, { 140,-68735 }, { 141,-68735 }, { 142,-68735 }, { 143,-68735 }, + { 144,-68735 }, { 145,-68735 }, { 146,-68735 }, { 147,-68735 }, { 148,-68735 }, + + { 149,-68735 }, { 150,-68735 }, { 151,-68735 }, { 152,-68735 }, { 153,-68735 }, + { 154,-68735 }, { 155,-68735 }, { 156,-68735 }, { 157,-68735 }, { 158,-68735 }, + { 159,-68735 }, { 160,-68735 }, { 161,-68735 }, { 162,-68735 }, { 163,-68735 }, + { 164,-68735 }, { 165,-68735 }, { 166,-68735 }, { 167,-68735 }, { 168,-68735 }, + { 169,-68735 }, { 170,-68735 }, { 171,-68735 }, { 172,-68735 }, { 173,-68735 }, + { 174,-68735 }, { 175,-68735 }, { 176,-68735 }, { 177,-68735 }, { 178,-68735 }, + { 179,-68735 }, { 180,-68735 }, { 181,-68735 }, { 182,-68735 }, { 183,-68735 }, + { 184,-68735 }, { 185,-68735 }, { 186,-68735 }, { 187,-68735 }, { 188,-68735 }, + { 189,-68735 }, { 190,-68735 }, { 191,-68735 }, { 192,-68735 }, { 193,-68735 }, + { 194,-68735 }, { 195,-68735 }, { 196,-68735 }, { 197,-68735 }, { 198,-68735 }, + + { 199,-68735 }, { 200,-68735 }, { 201,-68735 }, { 202,-68735 }, { 203,-68735 }, + { 204,-68735 }, { 205,-68735 }, { 206,-68735 }, { 207,-68735 }, { 208,-68735 }, + { 209,-68735 }, { 210,-68735 }, { 211,-68735 }, { 212,-68735 }, { 213,-68735 }, + { 214,-68735 }, { 215,-68735 }, { 216,-68735 }, { 217,-68735 }, { 218,-68735 }, + { 219,-68735 }, { 220,-68735 }, { 221,-68735 }, { 222,-68735 }, { 223,-68735 }, + { 224,-68735 }, { 225,-68735 }, { 226,-68735 }, { 227,-68735 }, { 228,-68735 }, + { 229,-68735 }, { 230,-68735 }, { 231,-68735 }, { 232,-68735 }, { 233,-68735 }, + { 234,-68735 }, { 235,-68735 }, { 236,-68735 }, { 237,-68735 }, { 238,-68735 }, + { 239,-68735 }, { 240,-68735 }, { 241,-68735 }, { 242,-68735 }, { 243,-68735 }, + { 244,-68735 }, { 245,-68735 }, { 246,-68735 }, { 247,-68735 }, { 248,-68735 }, + + { 249,-68735 }, { 250,-68735 }, { 251,-68735 }, { 252,-68735 }, { 253,-68735 }, + { 254,-68735 }, { 255,-68735 }, { 0, 131 }, { 0,23131 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-68992 }, { 49,-68992 }, { 50,-68992 }, { 51,-68992 }, + { 52,-68992 }, { 53,-68992 }, { 54,-68992 }, { 55,-68992 }, { 56,-68992 }, + { 57,-68992 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7453 }, { 66,-68992 }, + { 67,-68992 }, { 68,-68992 }, { 69,-68992 }, { 70,-68992 }, { 71,-68992 }, + { 72,-68992 }, { 73,-68992 }, { 74,-68992 }, { 75,-68992 }, { 76,-68992 }, + { 77,-68992 }, { 78,-68992 }, { 79,-68992 }, { 80,-68992 }, { 81,-68992 }, + { 82,-68992 }, { 83,-68992 }, { 84,-68992 }, { 85,-68992 }, { 86,-68992 }, + { 87,-68992 }, { 88,-68992 }, { 89,-68992 }, { 90,-68992 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-68992 }, { 0, 0 }, + { 97,7453 }, { 98,-68992 }, { 99,-68992 }, { 100,-68992 }, { 101,-68992 }, + { 102,-68992 }, { 103,-68992 }, { 104,-68992 }, { 105,-68992 }, { 106,-68992 }, + { 107,-68992 }, { 108,-68992 }, { 109,-68992 }, { 110,-68992 }, { 111,-68992 }, + { 112,-68992 }, { 113,-68992 }, { 114,-68992 }, { 115,-68992 }, { 116,-68992 }, + { 117,-68992 }, { 118,-68992 }, { 119,-68992 }, { 120,-68992 }, { 121,-68992 }, + { 122,-68992 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-68992 }, { 128,-68992 }, { 129,-68992 }, { 130,-68992 }, { 131,-68992 }, + { 132,-68992 }, { 133,-68992 }, { 134,-68992 }, { 135,-68992 }, { 136,-68992 }, + { 137,-68992 }, { 138,-68992 }, { 139,-68992 }, { 140,-68992 }, { 141,-68992 }, + + { 142,-68992 }, { 143,-68992 }, { 144,-68992 }, { 145,-68992 }, { 146,-68992 }, + { 147,-68992 }, { 148,-68992 }, { 149,-68992 }, { 150,-68992 }, { 151,-68992 }, + { 152,-68992 }, { 153,-68992 }, { 154,-68992 }, { 155,-68992 }, { 156,-68992 }, + { 157,-68992 }, { 158,-68992 }, { 159,-68992 }, { 160,-68992 }, { 161,-68992 }, + { 162,-68992 }, { 163,-68992 }, { 164,-68992 }, { 165,-68992 }, { 166,-68992 }, + { 167,-68992 }, { 168,-68992 }, { 169,-68992 }, { 170,-68992 }, { 171,-68992 }, + { 172,-68992 }, { 173,-68992 }, { 174,-68992 }, { 175,-68992 }, { 176,-68992 }, + { 177,-68992 }, { 178,-68992 }, { 179,-68992 }, { 180,-68992 }, { 181,-68992 }, + { 182,-68992 }, { 183,-68992 }, { 184,-68992 }, { 185,-68992 }, { 186,-68992 }, + { 187,-68992 }, { 188,-68992 }, { 189,-68992 }, { 190,-68992 }, { 191,-68992 }, + + { 192,-68992 }, { 193,-68992 }, { 194,-68992 }, { 195,-68992 }, { 196,-68992 }, + { 197,-68992 }, { 198,-68992 }, { 199,-68992 }, { 200,-68992 }, { 201,-68992 }, + { 202,-68992 }, { 203,-68992 }, { 204,-68992 }, { 205,-68992 }, { 206,-68992 }, + { 207,-68992 }, { 208,-68992 }, { 209,-68992 }, { 210,-68992 }, { 211,-68992 }, + { 212,-68992 }, { 213,-68992 }, { 214,-68992 }, { 215,-68992 }, { 216,-68992 }, + { 217,-68992 }, { 218,-68992 }, { 219,-68992 }, { 220,-68992 }, { 221,-68992 }, + { 222,-68992 }, { 223,-68992 }, { 224,-68992 }, { 225,-68992 }, { 226,-68992 }, + { 227,-68992 }, { 228,-68992 }, { 229,-68992 }, { 230,-68992 }, { 231,-68992 }, + { 232,-68992 }, { 233,-68992 }, { 234,-68992 }, { 235,-68992 }, { 236,-68992 }, + { 237,-68992 }, { 238,-68992 }, { 239,-68992 }, { 240,-68992 }, { 241,-68992 }, + + { 242,-68992 }, { 243,-68992 }, { 244,-68992 }, { 245,-68992 }, { 246,-68992 }, + { 247,-68992 }, { 248,-68992 }, { 249,-68992 }, { 250,-68992 }, { 251,-68992 }, + { 252,-68992 }, { 253,-68992 }, { 254,-68992 }, { 255,-68992 }, { 0, 131 }, + { 0,22874 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-69249 }, { 49,-69249 }, + { 50,-69249 }, { 51,-69249 }, { 52,-69249 }, { 53,-69249 }, { 54,-69249 }, + { 55,-69249 }, { 56,-69249 }, { 57,-69249 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-69249 }, { 66,-69249 }, { 67,7453 }, { 68,-69249 }, { 69,-69249 }, + { 70,-69249 }, { 71,-69249 }, { 72,-69249 }, { 73,-69249 }, { 74,-69249 }, + { 75,-69249 }, { 76,-69249 }, { 77,-69249 }, { 78,-69249 }, { 79,-69249 }, + { 80,-69249 }, { 81,-69249 }, { 82,-69249 }, { 83,-69249 }, { 84,-69249 }, + + { 85,-69249 }, { 86,-69249 }, { 87,-69249 }, { 88,-69249 }, { 89,-69249 }, + { 90,-69249 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-69249 }, { 0, 0 }, { 97,-69249 }, { 98,-69249 }, { 99,7453 }, + { 100,-69249 }, { 101,-69249 }, { 102,-69249 }, { 103,-69249 }, { 104,-69249 }, + { 105,-69249 }, { 106,-69249 }, { 107,-69249 }, { 108,-69249 }, { 109,-69249 }, + { 110,-69249 }, { 111,-69249 }, { 112,-69249 }, { 113,-69249 }, { 114,-69249 }, + { 115,-69249 }, { 116,-69249 }, { 117,-69249 }, { 118,-69249 }, { 119,-69249 }, + { 120,-69249 }, { 121,-69249 }, { 122,-69249 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-69249 }, { 128,-69249 }, { 129,-69249 }, + { 130,-69249 }, { 131,-69249 }, { 132,-69249 }, { 133,-69249 }, { 134,-69249 }, + + { 135,-69249 }, { 136,-69249 }, { 137,-69249 }, { 138,-69249 }, { 139,-69249 }, + { 140,-69249 }, { 141,-69249 }, { 142,-69249 }, { 143,-69249 }, { 144,-69249 }, + { 145,-69249 }, { 146,-69249 }, { 147,-69249 }, { 148,-69249 }, { 149,-69249 }, + { 150,-69249 }, { 151,-69249 }, { 152,-69249 }, { 153,-69249 }, { 154,-69249 }, + { 155,-69249 }, { 156,-69249 }, { 157,-69249 }, { 158,-69249 }, { 159,-69249 }, + { 160,-69249 }, { 161,-69249 }, { 162,-69249 }, { 163,-69249 }, { 164,-69249 }, + { 165,-69249 }, { 166,-69249 }, { 167,-69249 }, { 168,-69249 }, { 169,-69249 }, + { 170,-69249 }, { 171,-69249 }, { 172,-69249 }, { 173,-69249 }, { 174,-69249 }, + { 175,-69249 }, { 176,-69249 }, { 177,-69249 }, { 178,-69249 }, { 179,-69249 }, + { 180,-69249 }, { 181,-69249 }, { 182,-69249 }, { 183,-69249 }, { 184,-69249 }, + + { 185,-69249 }, { 186,-69249 }, { 187,-69249 }, { 188,-69249 }, { 189,-69249 }, + { 190,-69249 }, { 191,-69249 }, { 192,-69249 }, { 193,-69249 }, { 194,-69249 }, + { 195,-69249 }, { 196,-69249 }, { 197,-69249 }, { 198,-69249 }, { 199,-69249 }, + { 200,-69249 }, { 201,-69249 }, { 202,-69249 }, { 203,-69249 }, { 204,-69249 }, + { 205,-69249 }, { 206,-69249 }, { 207,-69249 }, { 208,-69249 }, { 209,-69249 }, + { 210,-69249 }, { 211,-69249 }, { 212,-69249 }, { 213,-69249 }, { 214,-69249 }, + { 215,-69249 }, { 216,-69249 }, { 217,-69249 }, { 218,-69249 }, { 219,-69249 }, + { 220,-69249 }, { 221,-69249 }, { 222,-69249 }, { 223,-69249 }, { 224,-69249 }, + { 225,-69249 }, { 226,-69249 }, { 227,-69249 }, { 228,-69249 }, { 229,-69249 }, + { 230,-69249 }, { 231,-69249 }, { 232,-69249 }, { 233,-69249 }, { 234,-69249 }, + + { 235,-69249 }, { 236,-69249 }, { 237,-69249 }, { 238,-69249 }, { 239,-69249 }, + { 240,-69249 }, { 241,-69249 }, { 242,-69249 }, { 243,-69249 }, { 244,-69249 }, + { 245,-69249 }, { 246,-69249 }, { 247,-69249 }, { 248,-69249 }, { 249,-69249 }, + { 250,-69249 }, { 251,-69249 }, { 252,-69249 }, { 253,-69249 }, { 254,-69249 }, + { 255,-69249 }, { 0, 131 }, { 0,22617 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-69506 }, { 49,-69506 }, { 50,-69506 }, { 51,-69506 }, { 52,-69506 }, + { 53,-69506 }, { 54,-69506 }, { 55,-69506 }, { 56,-69506 }, { 57,-69506 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-69506 }, { 66,-69506 }, { 67,-69506 }, + { 68,-69506 }, { 69,7453 }, { 70,-69506 }, { 71,-69506 }, { 72,-69506 }, + { 73,-69506 }, { 74,-69506 }, { 75,-69506 }, { 76,-69506 }, { 77,-69506 }, + + { 78,-69506 }, { 79,-69506 }, { 80,-69506 }, { 81,-69506 }, { 82,-69506 }, + { 83,-69506 }, { 84,-69506 }, { 85,-69506 }, { 86,-69506 }, { 87,-69506 }, + { 88,-69506 }, { 89,-69506 }, { 90,-69506 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-69506 }, { 0, 0 }, { 97,-69506 }, + { 98,-69506 }, { 99,-69506 }, { 100,-69506 }, { 101,7453 }, { 102,-69506 }, + { 103,-69506 }, { 104,-69506 }, { 105,-69506 }, { 106,-69506 }, { 107,-69506 }, + { 108,-69506 }, { 109,-69506 }, { 110,-69506 }, { 111,-69506 }, { 112,-69506 }, + { 113,-69506 }, { 114,-69506 }, { 115,-69506 }, { 116,-69506 }, { 117,-69506 }, + { 118,-69506 }, { 119,-69506 }, { 120,-69506 }, { 121,-69506 }, { 122,-69506 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-69506 }, + + { 128,-69506 }, { 129,-69506 }, { 130,-69506 }, { 131,-69506 }, { 132,-69506 }, + { 133,-69506 }, { 134,-69506 }, { 135,-69506 }, { 136,-69506 }, { 137,-69506 }, + { 138,-69506 }, { 139,-69506 }, { 140,-69506 }, { 141,-69506 }, { 142,-69506 }, + { 143,-69506 }, { 144,-69506 }, { 145,-69506 }, { 146,-69506 }, { 147,-69506 }, + { 148,-69506 }, { 149,-69506 }, { 150,-69506 }, { 151,-69506 }, { 152,-69506 }, + { 153,-69506 }, { 154,-69506 }, { 155,-69506 }, { 156,-69506 }, { 157,-69506 }, + { 158,-69506 }, { 159,-69506 }, { 160,-69506 }, { 161,-69506 }, { 162,-69506 }, + { 163,-69506 }, { 164,-69506 }, { 165,-69506 }, { 166,-69506 }, { 167,-69506 }, + { 168,-69506 }, { 169,-69506 }, { 170,-69506 }, { 171,-69506 }, { 172,-69506 }, + { 173,-69506 }, { 174,-69506 }, { 175,-69506 }, { 176,-69506 }, { 177,-69506 }, + + { 178,-69506 }, { 179,-69506 }, { 180,-69506 }, { 181,-69506 }, { 182,-69506 }, + { 183,-69506 }, { 184,-69506 }, { 185,-69506 }, { 186,-69506 }, { 187,-69506 }, + { 188,-69506 }, { 189,-69506 }, { 190,-69506 }, { 191,-69506 }, { 192,-69506 }, + { 193,-69506 }, { 194,-69506 }, { 195,-69506 }, { 196,-69506 }, { 197,-69506 }, + { 198,-69506 }, { 199,-69506 }, { 200,-69506 }, { 201,-69506 }, { 202,-69506 }, + { 203,-69506 }, { 204,-69506 }, { 205,-69506 }, { 206,-69506 }, { 207,-69506 }, + { 208,-69506 }, { 209,-69506 }, { 210,-69506 }, { 211,-69506 }, { 212,-69506 }, + { 213,-69506 }, { 214,-69506 }, { 215,-69506 }, { 216,-69506 }, { 217,-69506 }, + { 218,-69506 }, { 219,-69506 }, { 220,-69506 }, { 221,-69506 }, { 222,-69506 }, + { 223,-69506 }, { 224,-69506 }, { 225,-69506 }, { 226,-69506 }, { 227,-69506 }, + + { 228,-69506 }, { 229,-69506 }, { 230,-69506 }, { 231,-69506 }, { 232,-69506 }, + { 233,-69506 }, { 234,-69506 }, { 235,-69506 }, { 236,-69506 }, { 237,-69506 }, + { 238,-69506 }, { 239,-69506 }, { 240,-69506 }, { 241,-69506 }, { 242,-69506 }, + { 243,-69506 }, { 244,-69506 }, { 245,-69506 }, { 246,-69506 }, { 247,-69506 }, + { 248,-69506 }, { 249,-69506 }, { 250,-69506 }, { 251,-69506 }, { 252,-69506 }, + { 253,-69506 }, { 254,-69506 }, { 255,-69506 }, { 0, 74 }, { 0,22360 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-69763 }, { 49,-69763 }, { 50,-69763 }, + { 51,-69763 }, { 52,-69763 }, { 53,-69763 }, { 54,-69763 }, { 55,-69763 }, + { 56,-69763 }, { 57,-69763 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-69763 }, + { 66,-69763 }, { 67,-69763 }, { 68,-69763 }, { 69,-69763 }, { 70,-69763 }, + + { 71,-69763 }, { 72,-69763 }, { 73,-69763 }, { 74,-69763 }, { 75,-69763 }, + { 76,-69763 }, { 77,-69763 }, { 78,-69763 }, { 79,-69763 }, { 80,-69763 }, + { 81,-69763 }, { 82,-69763 }, { 83,-69763 }, { 84,-69763 }, { 85,-69763 }, + { 86,-69763 }, { 87,-69763 }, { 88,-69763 }, { 89,-69763 }, { 90,-69763 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-69763 }, + { 0, 0 }, { 97,-69763 }, { 98,-69763 }, { 99,-69763 }, { 100,-69763 }, + { 101,-69763 }, { 102,-69763 }, { 103,-69763 }, { 104,-69763 }, { 105,-69763 }, + { 106,-69763 }, { 107,-69763 }, { 108,-69763 }, { 109,-69763 }, { 110,-69763 }, + { 111,-69763 }, { 112,-69763 }, { 113,-69763 }, { 114,-69763 }, { 115,-69763 }, + { 116,-69763 }, { 117,-69763 }, { 118,-69763 }, { 119,-69763 }, { 120,-69763 }, + + { 121,-69763 }, { 122,-69763 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-69763 }, { 128,-69763 }, { 129,-69763 }, { 130,-69763 }, + { 131,-69763 }, { 132,-69763 }, { 133,-69763 }, { 134,-69763 }, { 135,-69763 }, + { 136,-69763 }, { 137,-69763 }, { 138,-69763 }, { 139,-69763 }, { 140,-69763 }, + { 141,-69763 }, { 142,-69763 }, { 143,-69763 }, { 144,-69763 }, { 145,-69763 }, + { 146,-69763 }, { 147,-69763 }, { 148,-69763 }, { 149,-69763 }, { 150,-69763 }, + { 151,-69763 }, { 152,-69763 }, { 153,-69763 }, { 154,-69763 }, { 155,-69763 }, + { 156,-69763 }, { 157,-69763 }, { 158,-69763 }, { 159,-69763 }, { 160,-69763 }, + { 161,-69763 }, { 162,-69763 }, { 163,-69763 }, { 164,-69763 }, { 165,-69763 }, + { 166,-69763 }, { 167,-69763 }, { 168,-69763 }, { 169,-69763 }, { 170,-69763 }, + + { 171,-69763 }, { 172,-69763 }, { 173,-69763 }, { 174,-69763 }, { 175,-69763 }, + { 176,-69763 }, { 177,-69763 }, { 178,-69763 }, { 179,-69763 }, { 180,-69763 }, + { 181,-69763 }, { 182,-69763 }, { 183,-69763 }, { 184,-69763 }, { 185,-69763 }, + { 186,-69763 }, { 187,-69763 }, { 188,-69763 }, { 189,-69763 }, { 190,-69763 }, + { 191,-69763 }, { 192,-69763 }, { 193,-69763 }, { 194,-69763 }, { 195,-69763 }, + { 196,-69763 }, { 197,-69763 }, { 198,-69763 }, { 199,-69763 }, { 200,-69763 }, + { 201,-69763 }, { 202,-69763 }, { 203,-69763 }, { 204,-69763 }, { 205,-69763 }, + { 206,-69763 }, { 207,-69763 }, { 208,-69763 }, { 209,-69763 }, { 210,-69763 }, + { 211,-69763 }, { 212,-69763 }, { 213,-69763 }, { 214,-69763 }, { 215,-69763 }, + { 216,-69763 }, { 217,-69763 }, { 218,-69763 }, { 219,-69763 }, { 220,-69763 }, + + { 221,-69763 }, { 222,-69763 }, { 223,-69763 }, { 224,-69763 }, { 225,-69763 }, + { 226,-69763 }, { 227,-69763 }, { 228,-69763 }, { 229,-69763 }, { 230,-69763 }, + { 231,-69763 }, { 232,-69763 }, { 233,-69763 }, { 234,-69763 }, { 235,-69763 }, + { 236,-69763 }, { 237,-69763 }, { 238,-69763 }, { 239,-69763 }, { 240,-69763 }, + { 241,-69763 }, { 242,-69763 }, { 243,-69763 }, { 244,-69763 }, { 245,-69763 }, + { 246,-69763 }, { 247,-69763 }, { 248,-69763 }, { 249,-69763 }, { 250,-69763 }, + { 251,-69763 }, { 252,-69763 }, { 253,-69763 }, { 254,-69763 }, { 255,-69763 }, + { 0, 91 }, { 0,22103 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-70020 }, + { 49,-70020 }, { 50,-70020 }, { 51,-70020 }, { 52,-70020 }, { 53,-70020 }, + { 54,-70020 }, { 55,-70020 }, { 56,-70020 }, { 57,-70020 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-70020 }, { 66,-70020 }, { 67,-70020 }, { 68,-70020 }, + { 69,-70020 }, { 70,-70020 }, { 71,-70020 }, { 72,-70020 }, { 73,-70020 }, + { 74,-70020 }, { 75,-70020 }, { 76,-70020 }, { 77,-70020 }, { 78,-70020 }, + { 79,-70020 }, { 80,-70020 }, { 81,-70020 }, { 82,-70020 }, { 83,-70020 }, + { 84,-70020 }, { 85,-70020 }, { 86,-70020 }, { 87,-70020 }, { 88,-70020 }, + { 89,-70020 }, { 90,-70020 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-70020 }, { 0, 0 }, { 97,-70020 }, { 98,-70020 }, + { 99,-70020 }, { 100,-70020 }, { 101,-70020 }, { 102,-70020 }, { 103,-70020 }, + { 104,-70020 }, { 105,-70020 }, { 106,-70020 }, { 107,-70020 }, { 108,-70020 }, + { 109,-70020 }, { 110,-70020 }, { 111,-70020 }, { 112,-70020 }, { 113,-70020 }, + + { 114,-70020 }, { 115,-70020 }, { 116,-70020 }, { 117,-70020 }, { 118,-70020 }, + { 119,-70020 }, { 120,-70020 }, { 121,-70020 }, { 122,-70020 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-70020 }, { 128,-70020 }, + { 129,-70020 }, { 130,-70020 }, { 131,-70020 }, { 132,-70020 }, { 133,-70020 }, + { 134,-70020 }, { 135,-70020 }, { 136,-70020 }, { 137,-70020 }, { 138,-70020 }, + { 139,-70020 }, { 140,-70020 }, { 141,-70020 }, { 142,-70020 }, { 143,-70020 }, + { 144,-70020 }, { 145,-70020 }, { 146,-70020 }, { 147,-70020 }, { 148,-70020 }, + { 149,-70020 }, { 150,-70020 }, { 151,-70020 }, { 152,-70020 }, { 153,-70020 }, + { 154,-70020 }, { 155,-70020 }, { 156,-70020 }, { 157,-70020 }, { 158,-70020 }, + { 159,-70020 }, { 160,-70020 }, { 161,-70020 }, { 162,-70020 }, { 163,-70020 }, + + { 164,-70020 }, { 165,-70020 }, { 166,-70020 }, { 167,-70020 }, { 168,-70020 }, + { 169,-70020 }, { 170,-70020 }, { 171,-70020 }, { 172,-70020 }, { 173,-70020 }, + { 174,-70020 }, { 175,-70020 }, { 176,-70020 }, { 177,-70020 }, { 178,-70020 }, + { 179,-70020 }, { 180,-70020 }, { 181,-70020 }, { 182,-70020 }, { 183,-70020 }, + { 184,-70020 }, { 185,-70020 }, { 186,-70020 }, { 187,-70020 }, { 188,-70020 }, + { 189,-70020 }, { 190,-70020 }, { 191,-70020 }, { 192,-70020 }, { 193,-70020 }, + { 194,-70020 }, { 195,-70020 }, { 196,-70020 }, { 197,-70020 }, { 198,-70020 }, + { 199,-70020 }, { 200,-70020 }, { 201,-70020 }, { 202,-70020 }, { 203,-70020 }, + { 204,-70020 }, { 205,-70020 }, { 206,-70020 }, { 207,-70020 }, { 208,-70020 }, + { 209,-70020 }, { 210,-70020 }, { 211,-70020 }, { 212,-70020 }, { 213,-70020 }, + + { 214,-70020 }, { 215,-70020 }, { 216,-70020 }, { 217,-70020 }, { 218,-70020 }, + { 219,-70020 }, { 220,-70020 }, { 221,-70020 }, { 222,-70020 }, { 223,-70020 }, + { 224,-70020 }, { 225,-70020 }, { 226,-70020 }, { 227,-70020 }, { 228,-70020 }, + { 229,-70020 }, { 230,-70020 }, { 231,-70020 }, { 232,-70020 }, { 233,-70020 }, + { 234,-70020 }, { 235,-70020 }, { 236,-70020 }, { 237,-70020 }, { 238,-70020 }, + { 239,-70020 }, { 240,-70020 }, { 241,-70020 }, { 242,-70020 }, { 243,-70020 }, + { 244,-70020 }, { 245,-70020 }, { 246,-70020 }, { 247,-70020 }, { 248,-70020 }, + { 249,-70020 }, { 250,-70020 }, { 251,-70020 }, { 252,-70020 }, { 253,-70020 }, + { 254,-70020 }, { 255,-70020 }, { 0, 41 }, { 0,21846 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-70277 }, { 49,-70277 }, { 50,-70277 }, { 51,-70277 }, + { 52,-70277 }, { 53,-70277 }, { 54,-70277 }, { 55,-70277 }, { 56,-70277 }, + + { 57,-70277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-70277 }, { 66,-70277 }, + { 67,-70277 }, { 68,-70277 }, { 69,-70277 }, { 70,-70277 }, { 71,-70277 }, + { 72,-70277 }, { 73,-70277 }, { 74,-70277 }, { 75,-70277 }, { 76,-70277 }, + { 77,-70277 }, { 78,-70277 }, { 79,-70277 }, { 80,-70277 }, { 81,-70277 }, + { 82,-70277 }, { 83,-70277 }, { 84,-70277 }, { 85,-70277 }, { 86,-70277 }, + { 87,-70277 }, { 88,-70277 }, { 89,-70277 }, { 90,-70277 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-70277 }, { 0, 0 }, + { 97,-70277 }, { 98,-70277 }, { 99,-70277 }, { 100,-70277 }, { 101,-70277 }, + { 102,-70277 }, { 103,-70277 }, { 104,-70277 }, { 105,-70277 }, { 106,-70277 }, + + { 107,-70277 }, { 108,-70277 }, { 109,-70277 }, { 110,-70277 }, { 111,-70277 }, + { 112,-70277 }, { 113,-70277 }, { 114,-70277 }, { 115,-70277 }, { 116,-70277 }, + { 117,-70277 }, { 118,-70277 }, { 119,-70277 }, { 120,-70277 }, { 121,-70277 }, + { 122,-70277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-70277 }, { 128,-70277 }, { 129,-70277 }, { 130,-70277 }, { 131,-70277 }, + { 132,-70277 }, { 133,-70277 }, { 134,-70277 }, { 135,-70277 }, { 136,-70277 }, + { 137,-70277 }, { 138,-70277 }, { 139,-70277 }, { 140,-70277 }, { 141,-70277 }, + { 142,-70277 }, { 143,-70277 }, { 144,-70277 }, { 145,-70277 }, { 146,-70277 }, + { 147,-70277 }, { 148,-70277 }, { 149,-70277 }, { 150,-70277 }, { 151,-70277 }, + { 152,-70277 }, { 153,-70277 }, { 154,-70277 }, { 155,-70277 }, { 156,-70277 }, + + { 157,-70277 }, { 158,-70277 }, { 159,-70277 }, { 160,-70277 }, { 161,-70277 }, + { 162,-70277 }, { 163,-70277 }, { 164,-70277 }, { 165,-70277 }, { 166,-70277 }, + { 167,-70277 }, { 168,-70277 }, { 169,-70277 }, { 170,-70277 }, { 171,-70277 }, + { 172,-70277 }, { 173,-70277 }, { 174,-70277 }, { 175,-70277 }, { 176,-70277 }, + { 177,-70277 }, { 178,-70277 }, { 179,-70277 }, { 180,-70277 }, { 181,-70277 }, + { 182,-70277 }, { 183,-70277 }, { 184,-70277 }, { 185,-70277 }, { 186,-70277 }, + { 187,-70277 }, { 188,-70277 }, { 189,-70277 }, { 190,-70277 }, { 191,-70277 }, + { 192,-70277 }, { 193,-70277 }, { 194,-70277 }, { 195,-70277 }, { 196,-70277 }, + { 197,-70277 }, { 198,-70277 }, { 199,-70277 }, { 200,-70277 }, { 201,-70277 }, + { 202,-70277 }, { 203,-70277 }, { 204,-70277 }, { 205,-70277 }, { 206,-70277 }, + + { 207,-70277 }, { 208,-70277 }, { 209,-70277 }, { 210,-70277 }, { 211,-70277 }, + { 212,-70277 }, { 213,-70277 }, { 214,-70277 }, { 215,-70277 }, { 216,-70277 }, + { 217,-70277 }, { 218,-70277 }, { 219,-70277 }, { 220,-70277 }, { 221,-70277 }, + { 222,-70277 }, { 223,-70277 }, { 224,-70277 }, { 225,-70277 }, { 226,-70277 }, + { 227,-70277 }, { 228,-70277 }, { 229,-70277 }, { 230,-70277 }, { 231,-70277 }, + { 232,-70277 }, { 233,-70277 }, { 234,-70277 }, { 235,-70277 }, { 236,-70277 }, + { 237,-70277 }, { 238,-70277 }, { 239,-70277 }, { 240,-70277 }, { 241,-70277 }, + { 242,-70277 }, { 243,-70277 }, { 244,-70277 }, { 245,-70277 }, { 246,-70277 }, + { 247,-70277 }, { 248,-70277 }, { 249,-70277 }, { 250,-70277 }, { 251,-70277 }, + { 252,-70277 }, { 253,-70277 }, { 254,-70277 }, { 255,-70277 }, { 0, 131 }, + + { 0,21589 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-70534 }, { 49,-70534 }, + + { 50,-70534 }, { 51,-70534 }, { 52,-70534 }, { 53,-70534 }, { 54,-70534 }, + { 55,-70534 }, { 56,-70534 }, { 57,-70534 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-70534 }, { 66,-70534 }, { 67,-70534 }, { 68,-70534 }, { 69,-70534 }, + { 70,-70534 }, { 71,-70534 }, { 72,-70534 }, { 73,-70534 }, { 74,-70534 }, + { 75,-70534 }, { 76,-70534 }, { 77,-70534 }, { 78,6682 }, { 79,-70534 }, + { 80,-70534 }, { 81,-70534 }, { 82,-70534 }, { 83,-70534 }, { 84,-70534 }, + { 85,-70534 }, { 86,-70534 }, { 87,-70534 }, { 88,-70534 }, { 89,-70534 }, + { 90,-70534 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-70534 }, { 0, 0 }, { 97,-70534 }, { 98,-70534 }, { 99,-70534 }, + + { 100,-70534 }, { 101,-70534 }, { 102,-70534 }, { 103,-70534 }, { 104,-70534 }, + { 105,-70534 }, { 106,-70534 }, { 107,-70534 }, { 108,-70534 }, { 109,-70534 }, + { 110,6682 }, { 111,-70534 }, { 112,-70534 }, { 113,-70534 }, { 114,-70534 }, + { 115,-70534 }, { 116,-70534 }, { 117,-70534 }, { 118,-70534 }, { 119,-70534 }, + { 120,-70534 }, { 121,-70534 }, { 122,-70534 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-70534 }, { 128,-70534 }, { 129,-70534 }, + { 130,-70534 }, { 131,-70534 }, { 132,-70534 }, { 133,-70534 }, { 134,-70534 }, + { 135,-70534 }, { 136,-70534 }, { 137,-70534 }, { 138,-70534 }, { 139,-70534 }, + { 140,-70534 }, { 141,-70534 }, { 142,-70534 }, { 143,-70534 }, { 144,-70534 }, + { 145,-70534 }, { 146,-70534 }, { 147,-70534 }, { 148,-70534 }, { 149,-70534 }, + + { 150,-70534 }, { 151,-70534 }, { 152,-70534 }, { 153,-70534 }, { 154,-70534 }, + { 155,-70534 }, { 156,-70534 }, { 157,-70534 }, { 158,-70534 }, { 159,-70534 }, + { 160,-70534 }, { 161,-70534 }, { 162,-70534 }, { 163,-70534 }, { 164,-70534 }, + { 165,-70534 }, { 166,-70534 }, { 167,-70534 }, { 168,-70534 }, { 169,-70534 }, + { 170,-70534 }, { 171,-70534 }, { 172,-70534 }, { 173,-70534 }, { 174,-70534 }, + { 175,-70534 }, { 176,-70534 }, { 177,-70534 }, { 178,-70534 }, { 179,-70534 }, + { 180,-70534 }, { 181,-70534 }, { 182,-70534 }, { 183,-70534 }, { 184,-70534 }, + { 185,-70534 }, { 186,-70534 }, { 187,-70534 }, { 188,-70534 }, { 189,-70534 }, + { 190,-70534 }, { 191,-70534 }, { 192,-70534 }, { 193,-70534 }, { 194,-70534 }, + { 195,-70534 }, { 196,-70534 }, { 197,-70534 }, { 198,-70534 }, { 199,-70534 }, + + { 200,-70534 }, { 201,-70534 }, { 202,-70534 }, { 203,-70534 }, { 204,-70534 }, + { 205,-70534 }, { 206,-70534 }, { 207,-70534 }, { 208,-70534 }, { 209,-70534 }, + { 210,-70534 }, { 211,-70534 }, { 212,-70534 }, { 213,-70534 }, { 214,-70534 }, + { 215,-70534 }, { 216,-70534 }, { 217,-70534 }, { 218,-70534 }, { 219,-70534 }, + { 220,-70534 }, { 221,-70534 }, { 222,-70534 }, { 223,-70534 }, { 224,-70534 }, + { 225,-70534 }, { 226,-70534 }, { 227,-70534 }, { 228,-70534 }, { 229,-70534 }, + { 230,-70534 }, { 231,-70534 }, { 232,-70534 }, { 233,-70534 }, { 234,-70534 }, + { 235,-70534 }, { 236,-70534 }, { 237,-70534 }, { 238,-70534 }, { 239,-70534 }, + { 240,-70534 }, { 241,-70534 }, { 242,-70534 }, { 243,-70534 }, { 244,-70534 }, + { 245,-70534 }, { 246,-70534 }, { 247,-70534 }, { 248,-70534 }, { 249,-70534 }, + + { 250,-70534 }, { 251,-70534 }, { 252,-70534 }, { 253,-70534 }, { 254,-70534 }, + { 255,-70534 }, { 0, 131 }, { 0,21332 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-70791 }, { 49,-70791 }, { 50,-70791 }, { 51,-70791 }, { 52,-70791 }, + { 53,-70791 }, { 54,-70791 }, { 55,-70791 }, { 56,-70791 }, { 57,-70791 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-70791 }, { 66,-70791 }, { 67,-70791 }, + { 68,-70791 }, { 69,-70791 }, { 70,-70791 }, { 71,-70791 }, { 72,-70791 }, + { 73,-70791 }, { 74,-70791 }, { 75,-70791 }, { 76,-70791 }, { 77,-70791 }, + { 78,6682 }, { 79,-70791 }, { 80,-70791 }, { 81,-70791 }, { 82,-70791 }, + { 83,-70791 }, { 84,-70791 }, { 85,-70791 }, { 86,-70791 }, { 87,-70791 }, + { 88,-70791 }, { 89,-70791 }, { 90,-70791 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-70791 }, { 0, 0 }, { 97,-70791 }, + { 98,-70791 }, { 99,-70791 }, { 100,-70791 }, { 101,-70791 }, { 102,-70791 }, + { 103,-70791 }, { 104,-70791 }, { 105,-70791 }, { 106,-70791 }, { 107,-70791 }, + { 108,-70791 }, { 109,-70791 }, { 110,6682 }, { 111,-70791 }, { 112,-70791 }, + { 113,-70791 }, { 114,-70791 }, { 115,-70791 }, { 116,-70791 }, { 117,-70791 }, + { 118,-70791 }, { 119,-70791 }, { 120,-70791 }, { 121,-70791 }, { 122,-70791 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-70791 }, + { 128,-70791 }, { 129,-70791 }, { 130,-70791 }, { 131,-70791 }, { 132,-70791 }, + { 133,-70791 }, { 134,-70791 }, { 135,-70791 }, { 136,-70791 }, { 137,-70791 }, + { 138,-70791 }, { 139,-70791 }, { 140,-70791 }, { 141,-70791 }, { 142,-70791 }, + + { 143,-70791 }, { 144,-70791 }, { 145,-70791 }, { 146,-70791 }, { 147,-70791 }, + { 148,-70791 }, { 149,-70791 }, { 150,-70791 }, { 151,-70791 }, { 152,-70791 }, + { 153,-70791 }, { 154,-70791 }, { 155,-70791 }, { 156,-70791 }, { 157,-70791 }, + { 158,-70791 }, { 159,-70791 }, { 160,-70791 }, { 161,-70791 }, { 162,-70791 }, + { 163,-70791 }, { 164,-70791 }, { 165,-70791 }, { 166,-70791 }, { 167,-70791 }, + { 168,-70791 }, { 169,-70791 }, { 170,-70791 }, { 171,-70791 }, { 172,-70791 }, + { 173,-70791 }, { 174,-70791 }, { 175,-70791 }, { 176,-70791 }, { 177,-70791 }, + { 178,-70791 }, { 179,-70791 }, { 180,-70791 }, { 181,-70791 }, { 182,-70791 }, + { 183,-70791 }, { 184,-70791 }, { 185,-70791 }, { 186,-70791 }, { 187,-70791 }, + { 188,-70791 }, { 189,-70791 }, { 190,-70791 }, { 191,-70791 }, { 192,-70791 }, + + { 193,-70791 }, { 194,-70791 }, { 195,-70791 }, { 196,-70791 }, { 197,-70791 }, + { 198,-70791 }, { 199,-70791 }, { 200,-70791 }, { 201,-70791 }, { 202,-70791 }, + { 203,-70791 }, { 204,-70791 }, { 205,-70791 }, { 206,-70791 }, { 207,-70791 }, + { 208,-70791 }, { 209,-70791 }, { 210,-70791 }, { 211,-70791 }, { 212,-70791 }, + { 213,-70791 }, { 214,-70791 }, { 215,-70791 }, { 216,-70791 }, { 217,-70791 }, + { 218,-70791 }, { 219,-70791 }, { 220,-70791 }, { 221,-70791 }, { 222,-70791 }, + { 223,-70791 }, { 224,-70791 }, { 225,-70791 }, { 226,-70791 }, { 227,-70791 }, + { 228,-70791 }, { 229,-70791 }, { 230,-70791 }, { 231,-70791 }, { 232,-70791 }, + { 233,-70791 }, { 234,-70791 }, { 235,-70791 }, { 236,-70791 }, { 237,-70791 }, + { 238,-70791 }, { 239,-70791 }, { 240,-70791 }, { 241,-70791 }, { 242,-70791 }, + + { 243,-70791 }, { 244,-70791 }, { 245,-70791 }, { 246,-70791 }, { 247,-70791 }, + { 248,-70791 }, { 249,-70791 }, { 250,-70791 }, { 251,-70791 }, { 252,-70791 }, + { 253,-70791 }, { 254,-70791 }, { 255,-70791 }, { 0, 18 }, { 0,21075 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-71048 }, { 49,-71048 }, { 50,-71048 }, + { 51,-71048 }, { 52,-71048 }, { 53,-71048 }, { 54,-71048 }, { 55,-71048 }, + { 56,-71048 }, { 57,-71048 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-71048 }, + { 66,-71048 }, { 67,-71048 }, { 68,-71048 }, { 69,-71048 }, { 70,-71048 }, + { 71,-71048 }, { 72,-71048 }, { 73,-71048 }, { 74,-71048 }, { 75,-71048 }, + { 76,-71048 }, { 77,-71048 }, { 78,-71048 }, { 79,-71048 }, { 80,-71048 }, + { 81,-71048 }, { 82,-71048 }, { 83,-71048 }, { 84,-71048 }, { 85,-71048 }, + + { 86,-71048 }, { 87,-71048 }, { 88,-71048 }, { 89,-71048 }, { 90,-71048 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6682 }, + { 0, 0 }, { 97,-71048 }, { 98,-71048 }, { 99,-71048 }, { 100,-71048 }, + { 101,-71048 }, { 102,-71048 }, { 103,-71048 }, { 104,-71048 }, { 105,-71048 }, + { 106,-71048 }, { 107,-71048 }, { 108,-71048 }, { 109,-71048 }, { 110,-71048 }, + { 111,-71048 }, { 112,-71048 }, { 113,-71048 }, { 114,-71048 }, { 115,-71048 }, + { 116,-71048 }, { 117,-71048 }, { 118,-71048 }, { 119,-71048 }, { 120,-71048 }, + { 121,-71048 }, { 122,-71048 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-71048 }, { 128,-71048 }, { 129,-71048 }, { 130,-71048 }, + { 131,-71048 }, { 132,-71048 }, { 133,-71048 }, { 134,-71048 }, { 135,-71048 }, + + { 136,-71048 }, { 137,-71048 }, { 138,-71048 }, { 139,-71048 }, { 140,-71048 }, + { 141,-71048 }, { 142,-71048 }, { 143,-71048 }, { 144,-71048 }, { 145,-71048 }, + { 146,-71048 }, { 147,-71048 }, { 148,-71048 }, { 149,-71048 }, { 150,-71048 }, + { 151,-71048 }, { 152,-71048 }, { 153,-71048 }, { 154,-71048 }, { 155,-71048 }, + { 156,-71048 }, { 157,-71048 }, { 158,-71048 }, { 159,-71048 }, { 160,-71048 }, + { 161,-71048 }, { 162,-71048 }, { 163,-71048 }, { 164,-71048 }, { 165,-71048 }, + { 166,-71048 }, { 167,-71048 }, { 168,-71048 }, { 169,-71048 }, { 170,-71048 }, + { 171,-71048 }, { 172,-71048 }, { 173,-71048 }, { 174,-71048 }, { 175,-71048 }, + { 176,-71048 }, { 177,-71048 }, { 178,-71048 }, { 179,-71048 }, { 180,-71048 }, + { 181,-71048 }, { 182,-71048 }, { 183,-71048 }, { 184,-71048 }, { 185,-71048 }, + + { 186,-71048 }, { 187,-71048 }, { 188,-71048 }, { 189,-71048 }, { 190,-71048 }, + { 191,-71048 }, { 192,-71048 }, { 193,-71048 }, { 194,-71048 }, { 195,-71048 }, + { 196,-71048 }, { 197,-71048 }, { 198,-71048 }, { 199,-71048 }, { 200,-71048 }, + { 201,-71048 }, { 202,-71048 }, { 203,-71048 }, { 204,-71048 }, { 205,-71048 }, + { 206,-71048 }, { 207,-71048 }, { 208,-71048 }, { 209,-71048 }, { 210,-71048 }, + { 211,-71048 }, { 212,-71048 }, { 213,-71048 }, { 214,-71048 }, { 215,-71048 }, + { 216,-71048 }, { 217,-71048 }, { 218,-71048 }, { 219,-71048 }, { 220,-71048 }, + { 221,-71048 }, { 222,-71048 }, { 223,-71048 }, { 224,-71048 }, { 225,-71048 }, + { 226,-71048 }, { 227,-71048 }, { 228,-71048 }, { 229,-71048 }, { 230,-71048 }, + { 231,-71048 }, { 232,-71048 }, { 233,-71048 }, { 234,-71048 }, { 235,-71048 }, + + { 236,-71048 }, { 237,-71048 }, { 238,-71048 }, { 239,-71048 }, { 240,-71048 }, + { 241,-71048 }, { 242,-71048 }, { 243,-71048 }, { 244,-71048 }, { 245,-71048 }, + { 246,-71048 }, { 247,-71048 }, { 248,-71048 }, { 249,-71048 }, { 250,-71048 }, + { 251,-71048 }, { 252,-71048 }, { 253,-71048 }, { 254,-71048 }, { 255,-71048 }, + { 0, 131 }, { 0,20818 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-71305 }, + { 49,-71305 }, { 50,-71305 }, { 51,-71305 }, { 52,-71305 }, { 53,-71305 }, + { 54,-71305 }, { 55,-71305 }, { 56,-71305 }, { 57,-71305 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-71305 }, { 66,-71305 }, { 67,-71305 }, { 68,-71305 }, + { 69,6682 }, { 70,-71305 }, { 71,-71305 }, { 72,-71305 }, { 73,-71305 }, + { 74,-71305 }, { 75,-71305 }, { 76,-71305 }, { 77,-71305 }, { 78,-71305 }, + + { 79,-71305 }, { 80,-71305 }, { 81,-71305 }, { 82,-71305 }, { 83,-71305 }, + { 84,-71305 }, { 85,-71305 }, { 86,-71305 }, { 87,-71305 }, { 88,-71305 }, + { 89,-71305 }, { 90,-71305 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-71305 }, { 0, 0 }, { 97,-71305 }, { 98,-71305 }, + { 99,-71305 }, { 100,-71305 }, { 101,6682 }, { 102,-71305 }, { 103,-71305 }, + { 104,-71305 }, { 105,-71305 }, { 106,-71305 }, { 107,-71305 }, { 108,-71305 }, + { 109,-71305 }, { 110,-71305 }, { 111,-71305 }, { 112,-71305 }, { 113,-71305 }, + { 114,-71305 }, { 115,-71305 }, { 116,-71305 }, { 117,-71305 }, { 118,-71305 }, + { 119,-71305 }, { 120,-71305 }, { 121,-71305 }, { 122,-71305 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-71305 }, { 128,-71305 }, + + { 129,-71305 }, { 130,-71305 }, { 131,-71305 }, { 132,-71305 }, { 133,-71305 }, + { 134,-71305 }, { 135,-71305 }, { 136,-71305 }, { 137,-71305 }, { 138,-71305 }, + { 139,-71305 }, { 140,-71305 }, { 141,-71305 }, { 142,-71305 }, { 143,-71305 }, + { 144,-71305 }, { 145,-71305 }, { 146,-71305 }, { 147,-71305 }, { 148,-71305 }, + { 149,-71305 }, { 150,-71305 }, { 151,-71305 }, { 152,-71305 }, { 153,-71305 }, + { 154,-71305 }, { 155,-71305 }, { 156,-71305 }, { 157,-71305 }, { 158,-71305 }, + { 159,-71305 }, { 160,-71305 }, { 161,-71305 }, { 162,-71305 }, { 163,-71305 }, + { 164,-71305 }, { 165,-71305 }, { 166,-71305 }, { 167,-71305 }, { 168,-71305 }, + { 169,-71305 }, { 170,-71305 }, { 171,-71305 }, { 172,-71305 }, { 173,-71305 }, + { 174,-71305 }, { 175,-71305 }, { 176,-71305 }, { 177,-71305 }, { 178,-71305 }, + + { 179,-71305 }, { 180,-71305 }, { 181,-71305 }, { 182,-71305 }, { 183,-71305 }, + { 184,-71305 }, { 185,-71305 }, { 186,-71305 }, { 187,-71305 }, { 188,-71305 }, + { 189,-71305 }, { 190,-71305 }, { 191,-71305 }, { 192,-71305 }, { 193,-71305 }, + { 194,-71305 }, { 195,-71305 }, { 196,-71305 }, { 197,-71305 }, { 198,-71305 }, + { 199,-71305 }, { 200,-71305 }, { 201,-71305 }, { 202,-71305 }, { 203,-71305 }, + { 204,-71305 }, { 205,-71305 }, { 206,-71305 }, { 207,-71305 }, { 208,-71305 }, + { 209,-71305 }, { 210,-71305 }, { 211,-71305 }, { 212,-71305 }, { 213,-71305 }, + { 214,-71305 }, { 215,-71305 }, { 216,-71305 }, { 217,-71305 }, { 218,-71305 }, + { 219,-71305 }, { 220,-71305 }, { 221,-71305 }, { 222,-71305 }, { 223,-71305 }, + { 224,-71305 }, { 225,-71305 }, { 226,-71305 }, { 227,-71305 }, { 228,-71305 }, + + { 229,-71305 }, { 230,-71305 }, { 231,-71305 }, { 232,-71305 }, { 233,-71305 }, + { 234,-71305 }, { 235,-71305 }, { 236,-71305 }, { 237,-71305 }, { 238,-71305 }, + { 239,-71305 }, { 240,-71305 }, { 241,-71305 }, { 242,-71305 }, { 243,-71305 }, + { 244,-71305 }, { 245,-71305 }, { 246,-71305 }, { 247,-71305 }, { 248,-71305 }, + { 249,-71305 }, { 250,-71305 }, { 251,-71305 }, { 252,-71305 }, { 253,-71305 }, + { 254,-71305 }, { 255,-71305 }, { 0, 131 }, { 0,20561 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-71562 }, { 49,-71562 }, { 50,-71562 }, { 51,-71562 }, + { 52,-71562 }, { 53,-71562 }, { 54,-71562 }, { 55,-71562 }, { 56,-71562 }, + { 57,-71562 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-71562 }, { 66,-71562 }, + { 67,-71562 }, { 68,-71562 }, { 69,-71562 }, { 70,-71562 }, { 71,-71562 }, + + { 72,-71562 }, { 73,-71562 }, { 74,-71562 }, { 75,-71562 }, { 76,-71562 }, + { 77,-71562 }, { 78,-71562 }, { 79,6682 }, { 80,-71562 }, { 81,-71562 }, + { 82,-71562 }, { 83,-71562 }, { 84,-71562 }, { 85,-71562 }, { 86,-71562 }, + { 87,-71562 }, { 88,-71562 }, { 89,-71562 }, { 90,-71562 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-71562 }, { 0, 0 }, + { 97,-71562 }, { 98,-71562 }, { 99,-71562 }, { 100,-71562 }, { 101,-71562 }, + { 102,-71562 }, { 103,-71562 }, { 104,-71562 }, { 105,-71562 }, { 106,-71562 }, + { 107,-71562 }, { 108,-71562 }, { 109,-71562 }, { 110,-71562 }, { 111,6682 }, + { 112,-71562 }, { 113,-71562 }, { 114,-71562 }, { 115,-71562 }, { 116,-71562 }, + { 117,-71562 }, { 118,-71562 }, { 119,-71562 }, { 120,-71562 }, { 121,-71562 }, + + { 122,-71562 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-71562 }, { 128,-71562 }, { 129,-71562 }, { 130,-71562 }, { 131,-71562 }, + { 132,-71562 }, { 133,-71562 }, { 134,-71562 }, { 135,-71562 }, { 136,-71562 }, + { 137,-71562 }, { 138,-71562 }, { 139,-71562 }, { 140,-71562 }, { 141,-71562 }, + { 142,-71562 }, { 143,-71562 }, { 144,-71562 }, { 145,-71562 }, { 146,-71562 }, + { 147,-71562 }, { 148,-71562 }, { 149,-71562 }, { 150,-71562 }, { 151,-71562 }, + { 152,-71562 }, { 153,-71562 }, { 154,-71562 }, { 155,-71562 }, { 156,-71562 }, + { 157,-71562 }, { 158,-71562 }, { 159,-71562 }, { 160,-71562 }, { 161,-71562 }, + { 162,-71562 }, { 163,-71562 }, { 164,-71562 }, { 165,-71562 }, { 166,-71562 }, + { 167,-71562 }, { 168,-71562 }, { 169,-71562 }, { 170,-71562 }, { 171,-71562 }, + + { 172,-71562 }, { 173,-71562 }, { 174,-71562 }, { 175,-71562 }, { 176,-71562 }, + { 177,-71562 }, { 178,-71562 }, { 179,-71562 }, { 180,-71562 }, { 181,-71562 }, + { 182,-71562 }, { 183,-71562 }, { 184,-71562 }, { 185,-71562 }, { 186,-71562 }, + { 187,-71562 }, { 188,-71562 }, { 189,-71562 }, { 190,-71562 }, { 191,-71562 }, + { 192,-71562 }, { 193,-71562 }, { 194,-71562 }, { 195,-71562 }, { 196,-71562 }, + { 197,-71562 }, { 198,-71562 }, { 199,-71562 }, { 200,-71562 }, { 201,-71562 }, + { 202,-71562 }, { 203,-71562 }, { 204,-71562 }, { 205,-71562 }, { 206,-71562 }, + { 207,-71562 }, { 208,-71562 }, { 209,-71562 }, { 210,-71562 }, { 211,-71562 }, + { 212,-71562 }, { 213,-71562 }, { 214,-71562 }, { 215,-71562 }, { 216,-71562 }, + { 217,-71562 }, { 218,-71562 }, { 219,-71562 }, { 220,-71562 }, { 221,-71562 }, + + { 222,-71562 }, { 223,-71562 }, { 224,-71562 }, { 225,-71562 }, { 226,-71562 }, + { 227,-71562 }, { 228,-71562 }, { 229,-71562 }, { 230,-71562 }, { 231,-71562 }, + { 232,-71562 }, { 233,-71562 }, { 234,-71562 }, { 235,-71562 }, { 236,-71562 }, + { 237,-71562 }, { 238,-71562 }, { 239,-71562 }, { 240,-71562 }, { 241,-71562 }, + { 242,-71562 }, { 243,-71562 }, { 244,-71562 }, { 245,-71562 }, { 246,-71562 }, + { 247,-71562 }, { 248,-71562 }, { 249,-71562 }, { 250,-71562 }, { 251,-71562 }, + { 252,-71562 }, { 253,-71562 }, { 254,-71562 }, { 255,-71562 }, { 0, 131 }, + { 0,20304 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-71819 }, { 49,-71819 }, + { 50,-71819 }, { 51,-71819 }, { 52,-71819 }, { 53,-71819 }, { 54,-71819 }, + { 55,-71819 }, { 56,-71819 }, { 57,-71819 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-71819 }, { 66,-71819 }, { 67,6682 }, { 68,-71819 }, { 69,-71819 }, + { 70,-71819 }, { 71,-71819 }, { 72,-71819 }, { 73,-71819 }, { 74,-71819 }, + { 75,-71819 }, { 76,-71819 }, { 77,-71819 }, { 78,-71819 }, { 79,-71819 }, + { 80,-71819 }, { 81,-71819 }, { 82,-71819 }, { 83,-71819 }, { 84,-71819 }, + { 85,-71819 }, { 86,-71819 }, { 87,-71819 }, { 88,-71819 }, { 89,-71819 }, + { 90,-71819 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-71819 }, { 0, 0 }, { 97,-71819 }, { 98,-71819 }, { 99,6682 }, + { 100,-71819 }, { 101,-71819 }, { 102,-71819 }, { 103,-71819 }, { 104,-71819 }, + { 105,-71819 }, { 106,-71819 }, { 107,-71819 }, { 108,-71819 }, { 109,-71819 }, + { 110,-71819 }, { 111,-71819 }, { 112,-71819 }, { 113,-71819 }, { 114,-71819 }, + + { 115,-71819 }, { 116,-71819 }, { 117,-71819 }, { 118,-71819 }, { 119,-71819 }, + { 120,-71819 }, { 121,-71819 }, { 122,-71819 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-71819 }, { 128,-71819 }, { 129,-71819 }, + { 130,-71819 }, { 131,-71819 }, { 132,-71819 }, { 133,-71819 }, { 134,-71819 }, + { 135,-71819 }, { 136,-71819 }, { 137,-71819 }, { 138,-71819 }, { 139,-71819 }, + { 140,-71819 }, { 141,-71819 }, { 142,-71819 }, { 143,-71819 }, { 144,-71819 }, + { 145,-71819 }, { 146,-71819 }, { 147,-71819 }, { 148,-71819 }, { 149,-71819 }, + { 150,-71819 }, { 151,-71819 }, { 152,-71819 }, { 153,-71819 }, { 154,-71819 }, + { 155,-71819 }, { 156,-71819 }, { 157,-71819 }, { 158,-71819 }, { 159,-71819 }, + { 160,-71819 }, { 161,-71819 }, { 162,-71819 }, { 163,-71819 }, { 164,-71819 }, + + { 165,-71819 }, { 166,-71819 }, { 167,-71819 }, { 168,-71819 }, { 169,-71819 }, + { 170,-71819 }, { 171,-71819 }, { 172,-71819 }, { 173,-71819 }, { 174,-71819 }, + { 175,-71819 }, { 176,-71819 }, { 177,-71819 }, { 178,-71819 }, { 179,-71819 }, + { 180,-71819 }, { 181,-71819 }, { 182,-71819 }, { 183,-71819 }, { 184,-71819 }, + { 185,-71819 }, { 186,-71819 }, { 187,-71819 }, { 188,-71819 }, { 189,-71819 }, + { 190,-71819 }, { 191,-71819 }, { 192,-71819 }, { 193,-71819 }, { 194,-71819 }, + { 195,-71819 }, { 196,-71819 }, { 197,-71819 }, { 198,-71819 }, { 199,-71819 }, + { 200,-71819 }, { 201,-71819 }, { 202,-71819 }, { 203,-71819 }, { 204,-71819 }, + { 205,-71819 }, { 206,-71819 }, { 207,-71819 }, { 208,-71819 }, { 209,-71819 }, + { 210,-71819 }, { 211,-71819 }, { 212,-71819 }, { 213,-71819 }, { 214,-71819 }, + + { 215,-71819 }, { 216,-71819 }, { 217,-71819 }, { 218,-71819 }, { 219,-71819 }, + { 220,-71819 }, { 221,-71819 }, { 222,-71819 }, { 223,-71819 }, { 224,-71819 }, + { 225,-71819 }, { 226,-71819 }, { 227,-71819 }, { 228,-71819 }, { 229,-71819 }, + { 230,-71819 }, { 231,-71819 }, { 232,-71819 }, { 233,-71819 }, { 234,-71819 }, + { 235,-71819 }, { 236,-71819 }, { 237,-71819 }, { 238,-71819 }, { 239,-71819 }, + { 240,-71819 }, { 241,-71819 }, { 242,-71819 }, { 243,-71819 }, { 244,-71819 }, + { 245,-71819 }, { 246,-71819 }, { 247,-71819 }, { 248,-71819 }, { 249,-71819 }, + { 250,-71819 }, { 251,-71819 }, { 252,-71819 }, { 253,-71819 }, { 254,-71819 }, + { 255,-71819 }, { 0, 131 }, { 0,20047 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-72076 }, { 49,-72076 }, { 50,-72076 }, { 51,-72076 }, { 52,-72076 }, + { 53,-72076 }, { 54,-72076 }, { 55,-72076 }, { 56,-72076 }, { 57,-72076 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-72076 }, { 66,-72076 }, { 67,6682 }, + { 68,-72076 }, { 69,-72076 }, { 70,-72076 }, { 71,-72076 }, { 72,-72076 }, + { 73,-72076 }, { 74,-72076 }, { 75,-72076 }, { 76,-72076 }, { 77,-72076 }, + { 78,-72076 }, { 79,-72076 }, { 80,-72076 }, { 81,-72076 }, { 82,-72076 }, + { 83,-72076 }, { 84,-72076 }, { 85,-72076 }, { 86,-72076 }, { 87,-72076 }, + { 88,-72076 }, { 89,-72076 }, { 90,-72076 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-72076 }, { 0, 0 }, { 97,-72076 }, + { 98,-72076 }, { 99,6682 }, { 100,-72076 }, { 101,-72076 }, { 102,-72076 }, + { 103,-72076 }, { 104,-72076 }, { 105,-72076 }, { 106,-72076 }, { 107,-72076 }, + + { 108,-72076 }, { 109,-72076 }, { 110,-72076 }, { 111,-72076 }, { 112,-72076 }, + { 113,-72076 }, { 114,-72076 }, { 115,-72076 }, { 116,-72076 }, { 117,-72076 }, + { 118,-72076 }, { 119,-72076 }, { 120,-72076 }, { 121,-72076 }, { 122,-72076 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-72076 }, + { 128,-72076 }, { 129,-72076 }, { 130,-72076 }, { 131,-72076 }, { 132,-72076 }, + { 133,-72076 }, { 134,-72076 }, { 135,-72076 }, { 136,-72076 }, { 137,-72076 }, + { 138,-72076 }, { 139,-72076 }, { 140,-72076 }, { 141,-72076 }, { 142,-72076 }, + { 143,-72076 }, { 144,-72076 }, { 145,-72076 }, { 146,-72076 }, { 147,-72076 }, + { 148,-72076 }, { 149,-72076 }, { 150,-72076 }, { 151,-72076 }, { 152,-72076 }, + { 153,-72076 }, { 154,-72076 }, { 155,-72076 }, { 156,-72076 }, { 157,-72076 }, + + { 158,-72076 }, { 159,-72076 }, { 160,-72076 }, { 161,-72076 }, { 162,-72076 }, + { 163,-72076 }, { 164,-72076 }, { 165,-72076 }, { 166,-72076 }, { 167,-72076 }, + { 168,-72076 }, { 169,-72076 }, { 170,-72076 }, { 171,-72076 }, { 172,-72076 }, + { 173,-72076 }, { 174,-72076 }, { 175,-72076 }, { 176,-72076 }, { 177,-72076 }, + { 178,-72076 }, { 179,-72076 }, { 180,-72076 }, { 181,-72076 }, { 182,-72076 }, + { 183,-72076 }, { 184,-72076 }, { 185,-72076 }, { 186,-72076 }, { 187,-72076 }, + { 188,-72076 }, { 189,-72076 }, { 190,-72076 }, { 191,-72076 }, { 192,-72076 }, + { 193,-72076 }, { 194,-72076 }, { 195,-72076 }, { 196,-72076 }, { 197,-72076 }, + { 198,-72076 }, { 199,-72076 }, { 200,-72076 }, { 201,-72076 }, { 202,-72076 }, + { 203,-72076 }, { 204,-72076 }, { 205,-72076 }, { 206,-72076 }, { 207,-72076 }, + + { 208,-72076 }, { 209,-72076 }, { 210,-72076 }, { 211,-72076 }, { 212,-72076 }, + { 213,-72076 }, { 214,-72076 }, { 215,-72076 }, { 216,-72076 }, { 217,-72076 }, + { 218,-72076 }, { 219,-72076 }, { 220,-72076 }, { 221,-72076 }, { 222,-72076 }, + { 223,-72076 }, { 224,-72076 }, { 225,-72076 }, { 226,-72076 }, { 227,-72076 }, + { 228,-72076 }, { 229,-72076 }, { 230,-72076 }, { 231,-72076 }, { 232,-72076 }, + { 233,-72076 }, { 234,-72076 }, { 235,-72076 }, { 236,-72076 }, { 237,-72076 }, + { 238,-72076 }, { 239,-72076 }, { 240,-72076 }, { 241,-72076 }, { 242,-72076 }, + { 243,-72076 }, { 244,-72076 }, { 245,-72076 }, { 246,-72076 }, { 247,-72076 }, + { 248,-72076 }, { 249,-72076 }, { 250,-72076 }, { 251,-72076 }, { 252,-72076 }, + { 253,-72076 }, { 254,-72076 }, { 255,-72076 }, { 0, 64 }, { 0,19790 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-72333 }, { 49,-72333 }, { 50,-72333 }, + + { 51,-72333 }, { 52,-72333 }, { 53,-72333 }, { 54,-72333 }, { 55,-72333 }, + { 56,-72333 }, { 57,-72333 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-72333 }, + { 66,-72333 }, { 67,-72333 }, { 68,-72333 }, { 69,-72333 }, { 70,-72333 }, + { 71,-72333 }, { 72,-72333 }, { 73,-72333 }, { 74,-72333 }, { 75,-72333 }, + { 76,-72333 }, { 77,-72333 }, { 78,-72333 }, { 79,-72333 }, { 80,-72333 }, + { 81,-72333 }, { 82,-72333 }, { 83,-72333 }, { 84,-72333 }, { 85,-72333 }, + { 86,-72333 }, { 87,-72333 }, { 88,-72333 }, { 89,-72333 }, { 90,-72333 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-72333 }, + { 0, 0 }, { 97,-72333 }, { 98,-72333 }, { 99,-72333 }, { 100,-72333 }, + + { 101,-72333 }, { 102,-72333 }, { 103,-72333 }, { 104,-72333 }, { 105,-72333 }, + { 106,-72333 }, { 107,-72333 }, { 108,-72333 }, { 109,-72333 }, { 110,-72333 }, + { 111,-72333 }, { 112,-72333 }, { 113,-72333 }, { 114,-72333 }, { 115,-72333 }, + { 116,-72333 }, { 117,-72333 }, { 118,-72333 }, { 119,-72333 }, { 120,-72333 }, + { 121,-72333 }, { 122,-72333 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-72333 }, { 128,-72333 }, { 129,-72333 }, { 130,-72333 }, + { 131,-72333 }, { 132,-72333 }, { 133,-72333 }, { 134,-72333 }, { 135,-72333 }, + { 136,-72333 }, { 137,-72333 }, { 138,-72333 }, { 139,-72333 }, { 140,-72333 }, + { 141,-72333 }, { 142,-72333 }, { 143,-72333 }, { 144,-72333 }, { 145,-72333 }, + { 146,-72333 }, { 147,-72333 }, { 148,-72333 }, { 149,-72333 }, { 150,-72333 }, + + { 151,-72333 }, { 152,-72333 }, { 153,-72333 }, { 154,-72333 }, { 155,-72333 }, + { 156,-72333 }, { 157,-72333 }, { 158,-72333 }, { 159,-72333 }, { 160,-72333 }, + { 161,-72333 }, { 162,-72333 }, { 163,-72333 }, { 164,-72333 }, { 165,-72333 }, + { 166,-72333 }, { 167,-72333 }, { 168,-72333 }, { 169,-72333 }, { 170,-72333 }, + { 171,-72333 }, { 172,-72333 }, { 173,-72333 }, { 174,-72333 }, { 175,-72333 }, + { 176,-72333 }, { 177,-72333 }, { 178,-72333 }, { 179,-72333 }, { 180,-72333 }, + { 181,-72333 }, { 182,-72333 }, { 183,-72333 }, { 184,-72333 }, { 185,-72333 }, + { 186,-72333 }, { 187,-72333 }, { 188,-72333 }, { 189,-72333 }, { 190,-72333 }, + { 191,-72333 }, { 192,-72333 }, { 193,-72333 }, { 194,-72333 }, { 195,-72333 }, + { 196,-72333 }, { 197,-72333 }, { 198,-72333 }, { 199,-72333 }, { 200,-72333 }, + + { 201,-72333 }, { 202,-72333 }, { 203,-72333 }, { 204,-72333 }, { 205,-72333 }, + { 206,-72333 }, { 207,-72333 }, { 208,-72333 }, { 209,-72333 }, { 210,-72333 }, + { 211,-72333 }, { 212,-72333 }, { 213,-72333 }, { 214,-72333 }, { 215,-72333 }, + { 216,-72333 }, { 217,-72333 }, { 218,-72333 }, { 219,-72333 }, { 220,-72333 }, + { 221,-72333 }, { 222,-72333 }, { 223,-72333 }, { 224,-72333 }, { 225,-72333 }, + { 226,-72333 }, { 227,-72333 }, { 228,-72333 }, { 229,-72333 }, { 230,-72333 }, + { 231,-72333 }, { 232,-72333 }, { 233,-72333 }, { 234,-72333 }, { 235,-72333 }, + { 236,-72333 }, { 237,-72333 }, { 238,-72333 }, { 239,-72333 }, { 240,-72333 }, + { 241,-72333 }, { 242,-72333 }, { 243,-72333 }, { 244,-72333 }, { 245,-72333 }, + { 246,-72333 }, { 247,-72333 }, { 248,-72333 }, { 249,-72333 }, { 250,-72333 }, + + { 251,-72333 }, { 252,-72333 }, { 253,-72333 }, { 254,-72333 }, { 255,-72333 }, + { 0, 131 }, { 0,19533 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-72590 }, + { 49,-72590 }, { 50,-72590 }, { 51,-72590 }, { 52,-72590 }, { 53,-72590 }, + { 54,-72590 }, { 55,-72590 }, { 56,-72590 }, { 57,-72590 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-72590 }, { 66,-72590 }, { 67,-72590 }, { 68,-72590 }, + { 69,6425 }, { 70,-72590 }, { 71,-72590 }, { 72,-72590 }, { 73,-72590 }, + { 74,-72590 }, { 75,-72590 }, { 76,-72590 }, { 77,-72590 }, { 78,-72590 }, + { 79,-72590 }, { 80,-72590 }, { 81,-72590 }, { 82,-72590 }, { 83,-72590 }, + { 84,-72590 }, { 85,-72590 }, { 86,-72590 }, { 87,-72590 }, { 88,-72590 }, + { 89,-72590 }, { 90,-72590 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-72590 }, { 0, 0 }, { 97,-72590 }, { 98,-72590 }, + { 99,-72590 }, { 100,-72590 }, { 101,6425 }, { 102,-72590 }, { 103,-72590 }, + { 104,-72590 }, { 105,-72590 }, { 106,-72590 }, { 107,-72590 }, { 108,-72590 }, + { 109,-72590 }, { 110,-72590 }, { 111,-72590 }, { 112,-72590 }, { 113,-72590 }, + { 114,-72590 }, { 115,-72590 }, { 116,-72590 }, { 117,-72590 }, { 118,-72590 }, + { 119,-72590 }, { 120,-72590 }, { 121,-72590 }, { 122,-72590 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-72590 }, { 128,-72590 }, + { 129,-72590 }, { 130,-72590 }, { 131,-72590 }, { 132,-72590 }, { 133,-72590 }, + { 134,-72590 }, { 135,-72590 }, { 136,-72590 }, { 137,-72590 }, { 138,-72590 }, + { 139,-72590 }, { 140,-72590 }, { 141,-72590 }, { 142,-72590 }, { 143,-72590 }, + + { 144,-72590 }, { 145,-72590 }, { 146,-72590 }, { 147,-72590 }, { 148,-72590 }, + { 149,-72590 }, { 150,-72590 }, { 151,-72590 }, { 152,-72590 }, { 153,-72590 }, + { 154,-72590 }, { 155,-72590 }, { 156,-72590 }, { 157,-72590 }, { 158,-72590 }, + { 159,-72590 }, { 160,-72590 }, { 161,-72590 }, { 162,-72590 }, { 163,-72590 }, + { 164,-72590 }, { 165,-72590 }, { 166,-72590 }, { 167,-72590 }, { 168,-72590 }, + { 169,-72590 }, { 170,-72590 }, { 171,-72590 }, { 172,-72590 }, { 173,-72590 }, + { 174,-72590 }, { 175,-72590 }, { 176,-72590 }, { 177,-72590 }, { 178,-72590 }, + { 179,-72590 }, { 180,-72590 }, { 181,-72590 }, { 182,-72590 }, { 183,-72590 }, + { 184,-72590 }, { 185,-72590 }, { 186,-72590 }, { 187,-72590 }, { 188,-72590 }, + { 189,-72590 }, { 190,-72590 }, { 191,-72590 }, { 192,-72590 }, { 193,-72590 }, + + { 194,-72590 }, { 195,-72590 }, { 196,-72590 }, { 197,-72590 }, { 198,-72590 }, + { 199,-72590 }, { 200,-72590 }, { 201,-72590 }, { 202,-72590 }, { 203,-72590 }, + { 204,-72590 }, { 205,-72590 }, { 206,-72590 }, { 207,-72590 }, { 208,-72590 }, + { 209,-72590 }, { 210,-72590 }, { 211,-72590 }, { 212,-72590 }, { 213,-72590 }, + { 214,-72590 }, { 215,-72590 }, { 216,-72590 }, { 217,-72590 }, { 218,-72590 }, + { 219,-72590 }, { 220,-72590 }, { 221,-72590 }, { 222,-72590 }, { 223,-72590 }, + { 224,-72590 }, { 225,-72590 }, { 226,-72590 }, { 227,-72590 }, { 228,-72590 }, + { 229,-72590 }, { 230,-72590 }, { 231,-72590 }, { 232,-72590 }, { 233,-72590 }, + { 234,-72590 }, { 235,-72590 }, { 236,-72590 }, { 237,-72590 }, { 238,-72590 }, + { 239,-72590 }, { 240,-72590 }, { 241,-72590 }, { 242,-72590 }, { 243,-72590 }, + + { 244,-72590 }, { 245,-72590 }, { 246,-72590 }, { 247,-72590 }, { 248,-72590 }, + { 249,-72590 }, { 250,-72590 }, { 251,-72590 }, { 252,-72590 }, { 253,-72590 }, + { 254,-72590 }, { 255,-72590 }, { 0, 21 }, { 0,19276 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-72847 }, { 49,-72847 }, { 50,-72847 }, { 51,-72847 }, + { 52,-72847 }, { 53,-72847 }, { 54,-72847 }, { 55,-72847 }, { 56,-72847 }, + { 57,-72847 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-72847 }, { 66,-72847 }, + { 67,-72847 }, { 68,-72847 }, { 69,-72847 }, { 70,-72847 }, { 71,-72847 }, + { 72,-72847 }, { 73,-72847 }, { 74,-72847 }, { 75,-72847 }, { 76,-72847 }, + { 77,-72847 }, { 78,-72847 }, { 79,-72847 }, { 80,-72847 }, { 81,-72847 }, + { 82,-72847 }, { 83,-72847 }, { 84,-72847 }, { 85,-72847 }, { 86,-72847 }, + + { 87,-72847 }, { 88,-72847 }, { 89,-72847 }, { 90,-72847 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6425 }, { 0, 0 }, + { 97,-72847 }, { 98,-72847 }, { 99,-72847 }, { 100,-72847 }, { 101,-72847 }, + { 102,-72847 }, { 103,-72847 }, { 104,-72847 }, { 105,-72847 }, { 106,-72847 }, + { 107,-72847 }, { 108,-72847 }, { 109,-72847 }, { 110,-72847 }, { 111,-72847 }, + { 112,-72847 }, { 113,-72847 }, { 114,-72847 }, { 115,-72847 }, { 116,-72847 }, + { 117,-72847 }, { 118,-72847 }, { 119,-72847 }, { 120,-72847 }, { 121,-72847 }, + { 122,-72847 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-72847 }, { 128,-72847 }, { 129,-72847 }, { 130,-72847 }, { 131,-72847 }, + { 132,-72847 }, { 133,-72847 }, { 134,-72847 }, { 135,-72847 }, { 136,-72847 }, + + { 137,-72847 }, { 138,-72847 }, { 139,-72847 }, { 140,-72847 }, { 141,-72847 }, + { 142,-72847 }, { 143,-72847 }, { 144,-72847 }, { 145,-72847 }, { 146,-72847 }, + { 147,-72847 }, { 148,-72847 }, { 149,-72847 }, { 150,-72847 }, { 151,-72847 }, + { 152,-72847 }, { 153,-72847 }, { 154,-72847 }, { 155,-72847 }, { 156,-72847 }, + { 157,-72847 }, { 158,-72847 }, { 159,-72847 }, { 160,-72847 }, { 161,-72847 }, + { 162,-72847 }, { 163,-72847 }, { 164,-72847 }, { 165,-72847 }, { 166,-72847 }, + { 167,-72847 }, { 168,-72847 }, { 169,-72847 }, { 170,-72847 }, { 171,-72847 }, + { 172,-72847 }, { 173,-72847 }, { 174,-72847 }, { 175,-72847 }, { 176,-72847 }, + { 177,-72847 }, { 178,-72847 }, { 179,-72847 }, { 180,-72847 }, { 181,-72847 }, + { 182,-72847 }, { 183,-72847 }, { 184,-72847 }, { 185,-72847 }, { 186,-72847 }, + + { 187,-72847 }, { 188,-72847 }, { 189,-72847 }, { 190,-72847 }, { 191,-72847 }, + { 192,-72847 }, { 193,-72847 }, { 194,-72847 }, { 195,-72847 }, { 196,-72847 }, + { 197,-72847 }, { 198,-72847 }, { 199,-72847 }, { 200,-72847 }, { 201,-72847 }, + { 202,-72847 }, { 203,-72847 }, { 204,-72847 }, { 205,-72847 }, { 206,-72847 }, + { 207,-72847 }, { 208,-72847 }, { 209,-72847 }, { 210,-72847 }, { 211,-72847 }, + { 212,-72847 }, { 213,-72847 }, { 214,-72847 }, { 215,-72847 }, { 216,-72847 }, + { 217,-72847 }, { 218,-72847 }, { 219,-72847 }, { 220,-72847 }, { 221,-72847 }, + { 222,-72847 }, { 223,-72847 }, { 224,-72847 }, { 225,-72847 }, { 226,-72847 }, + { 227,-72847 }, { 228,-72847 }, { 229,-72847 }, { 230,-72847 }, { 231,-72847 }, + { 232,-72847 }, { 233,-72847 }, { 234,-72847 }, { 235,-72847 }, { 236,-72847 }, + + { 237,-72847 }, { 238,-72847 }, { 239,-72847 }, { 240,-72847 }, { 241,-72847 }, + { 242,-72847 }, { 243,-72847 }, { 244,-72847 }, { 245,-72847 }, { 246,-72847 }, + { 247,-72847 }, { 248,-72847 }, { 249,-72847 }, { 250,-72847 }, { 251,-72847 }, + { 252,-72847 }, { 253,-72847 }, { 254,-72847 }, { 255,-72847 }, { 0, 131 }, + { 0,19019 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-73104 }, { 49,-73104 }, + { 50,-73104 }, { 51,-73104 }, { 52,-73104 }, { 53,-73104 }, { 54,-73104 }, + { 55,-73104 }, { 56,-73104 }, { 57,-73104 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-73104 }, { 66,-73104 }, { 67,-73104 }, { 68,-73104 }, { 69,-73104 }, + { 70,-73104 }, { 71,-73104 }, { 72,-73104 }, { 73,-73104 }, { 74,-73104 }, + { 75,-73104 }, { 76,-73104 }, { 77,-73104 }, { 78,-73104 }, { 79,-73104 }, + + { 80,-73104 }, { 81,-73104 }, { 82,-73104 }, { 83,-73104 }, { 84,-73104 }, + { 85,-73104 }, { 86,-73104 }, { 87,-73104 }, { 88,-73104 }, { 89,-73104 }, + { 90,-73104 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,6425 }, { 0, 0 }, { 97,-73104 }, { 98,-73104 }, { 99,-73104 }, + { 100,-73104 }, { 101,-73104 }, { 102,-73104 }, { 103,-73104 }, { 104,-73104 }, + { 105,-73104 }, { 106,-73104 }, { 107,-73104 }, { 108,-73104 }, { 109,-73104 }, + { 110,-73104 }, { 111,-73104 }, { 112,-73104 }, { 113,-73104 }, { 114,-73104 }, + { 115,-73104 }, { 116,-73104 }, { 117,-73104 }, { 118,-73104 }, { 119,-73104 }, + { 120,-73104 }, { 121,-73104 }, { 122,-73104 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-73104 }, { 128,-73104 }, { 129,-73104 }, + + { 130,-73104 }, { 131,-73104 }, { 132,-73104 }, { 133,-73104 }, { 134,-73104 }, + { 135,-73104 }, { 136,-73104 }, { 137,-73104 }, { 138,-73104 }, { 139,-73104 }, + { 140,-73104 }, { 141,-73104 }, { 142,-73104 }, { 143,-73104 }, { 144,-73104 }, + { 145,-73104 }, { 146,-73104 }, { 147,-73104 }, { 148,-73104 }, { 149,-73104 }, + { 150,-73104 }, { 151,-73104 }, { 152,-73104 }, { 153,-73104 }, { 154,-73104 }, + { 155,-73104 }, { 156,-73104 }, { 157,-73104 }, { 158,-73104 }, { 159,-73104 }, + { 160,-73104 }, { 161,-73104 }, { 162,-73104 }, { 163,-73104 }, { 164,-73104 }, + { 165,-73104 }, { 166,-73104 }, { 167,-73104 }, { 168,-73104 }, { 169,-73104 }, + { 170,-73104 }, { 171,-73104 }, { 172,-73104 }, { 173,-73104 }, { 174,-73104 }, + { 175,-73104 }, { 176,-73104 }, { 177,-73104 }, { 178,-73104 }, { 179,-73104 }, + + { 180,-73104 }, { 181,-73104 }, { 182,-73104 }, { 183,-73104 }, { 184,-73104 }, + { 185,-73104 }, { 186,-73104 }, { 187,-73104 }, { 188,-73104 }, { 189,-73104 }, + { 190,-73104 }, { 191,-73104 }, { 192,-73104 }, { 193,-73104 }, { 194,-73104 }, + { 195,-73104 }, { 196,-73104 }, { 197,-73104 }, { 198,-73104 }, { 199,-73104 }, + { 200,-73104 }, { 201,-73104 }, { 202,-73104 }, { 203,-73104 }, { 204,-73104 }, + { 205,-73104 }, { 206,-73104 }, { 207,-73104 }, { 208,-73104 }, { 209,-73104 }, + { 210,-73104 }, { 211,-73104 }, { 212,-73104 }, { 213,-73104 }, { 214,-73104 }, + { 215,-73104 }, { 216,-73104 }, { 217,-73104 }, { 218,-73104 }, { 219,-73104 }, + { 220,-73104 }, { 221,-73104 }, { 222,-73104 }, { 223,-73104 }, { 224,-73104 }, + { 225,-73104 }, { 226,-73104 }, { 227,-73104 }, { 228,-73104 }, { 229,-73104 }, + + { 230,-73104 }, { 231,-73104 }, { 232,-73104 }, { 233,-73104 }, { 234,-73104 }, + { 235,-73104 }, { 236,-73104 }, { 237,-73104 }, { 238,-73104 }, { 239,-73104 }, + { 240,-73104 }, { 241,-73104 }, { 242,-73104 }, { 243,-73104 }, { 244,-73104 }, + { 245,-73104 }, { 246,-73104 }, { 247,-73104 }, { 248,-73104 }, { 249,-73104 }, + { 250,-73104 }, { 251,-73104 }, { 252,-73104 }, { 253,-73104 }, { 254,-73104 }, + { 255,-73104 }, { 0, 85 }, { 0,18762 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-73361 }, { 49,-73361 }, { 50,-73361 }, { 51,-73361 }, { 52,-73361 }, + { 53,-73361 }, { 54,-73361 }, { 55,-73361 }, { 56,-73361 }, { 57,-73361 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-73361 }, { 66,-73361 }, { 67,-73361 }, + { 68,-73361 }, { 69,-73361 }, { 70,-73361 }, { 71,-73361 }, { 72,-73361 }, + + { 73,-73361 }, { 74,-73361 }, { 75,-73361 }, { 76,-73361 }, { 77,-73361 }, + { 78,-73361 }, { 79,-73361 }, { 80,-73361 }, { 81,-73361 }, { 82,-73361 }, + { 83,-73361 }, { 84,-73361 }, { 85,-73361 }, { 86,-73361 }, { 87,-73361 }, + { 88,-73361 }, { 89,-73361 }, { 90,-73361 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-73361 }, { 0, 0 }, { 97,-73361 }, + { 98,-73361 }, { 99,-73361 }, { 100,-73361 }, { 101,-73361 }, { 102,-73361 }, + { 103,-73361 }, { 104,-73361 }, { 105,-73361 }, { 106,-73361 }, { 107,-73361 }, + { 108,-73361 }, { 109,-73361 }, { 110,-73361 }, { 111,-73361 }, { 112,-73361 }, + { 113,-73361 }, { 114,-73361 }, { 115,-73361 }, { 116,-73361 }, { 117,-73361 }, + { 118,-73361 }, { 119,-73361 }, { 120,-73361 }, { 121,-73361 }, { 122,-73361 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-73361 }, + { 128,-73361 }, { 129,-73361 }, { 130,-73361 }, { 131,-73361 }, { 132,-73361 }, + { 133,-73361 }, { 134,-73361 }, { 135,-73361 }, { 136,-73361 }, { 137,-73361 }, + { 138,-73361 }, { 139,-73361 }, { 140,-73361 }, { 141,-73361 }, { 142,-73361 }, + { 143,-73361 }, { 144,-73361 }, { 145,-73361 }, { 146,-73361 }, { 147,-73361 }, + { 148,-73361 }, { 149,-73361 }, { 150,-73361 }, { 151,-73361 }, { 152,-73361 }, + { 153,-73361 }, { 154,-73361 }, { 155,-73361 }, { 156,-73361 }, { 157,-73361 }, + { 158,-73361 }, { 159,-73361 }, { 160,-73361 }, { 161,-73361 }, { 162,-73361 }, + { 163,-73361 }, { 164,-73361 }, { 165,-73361 }, { 166,-73361 }, { 167,-73361 }, + { 168,-73361 }, { 169,-73361 }, { 170,-73361 }, { 171,-73361 }, { 172,-73361 }, + + { 173,-73361 }, { 174,-73361 }, { 175,-73361 }, { 176,-73361 }, { 177,-73361 }, + { 178,-73361 }, { 179,-73361 }, { 180,-73361 }, { 181,-73361 }, { 182,-73361 }, + { 183,-73361 }, { 184,-73361 }, { 185,-73361 }, { 186,-73361 }, { 187,-73361 }, + { 188,-73361 }, { 189,-73361 }, { 190,-73361 }, { 191,-73361 }, { 192,-73361 }, + { 193,-73361 }, { 194,-73361 }, { 195,-73361 }, { 196,-73361 }, { 197,-73361 }, + { 198,-73361 }, { 199,-73361 }, { 200,-73361 }, { 201,-73361 }, { 202,-73361 }, + { 203,-73361 }, { 204,-73361 }, { 205,-73361 }, { 206,-73361 }, { 207,-73361 }, + { 208,-73361 }, { 209,-73361 }, { 210,-73361 }, { 211,-73361 }, { 212,-73361 }, + { 213,-73361 }, { 214,-73361 }, { 215,-73361 }, { 216,-73361 }, { 217,-73361 }, + { 218,-73361 }, { 219,-73361 }, { 220,-73361 }, { 221,-73361 }, { 222,-73361 }, + + { 223,-73361 }, { 224,-73361 }, { 225,-73361 }, { 226,-73361 }, { 227,-73361 }, + { 228,-73361 }, { 229,-73361 }, { 230,-73361 }, { 231,-73361 }, { 232,-73361 }, + { 233,-73361 }, { 234,-73361 }, { 235,-73361 }, { 236,-73361 }, { 237,-73361 }, + { 238,-73361 }, { 239,-73361 }, { 240,-73361 }, { 241,-73361 }, { 242,-73361 }, + { 243,-73361 }, { 244,-73361 }, { 245,-73361 }, { 246,-73361 }, { 247,-73361 }, + { 248,-73361 }, { 249,-73361 }, { 250,-73361 }, { 251,-73361 }, { 252,-73361 }, + { 253,-73361 }, { 254,-73361 }, { 255,-73361 }, { 0, 131 }, { 0,18505 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-73618 }, { 49,-73618 }, { 50,-73618 }, + { 51,-73618 }, { 52,-73618 }, { 53,-73618 }, { 54,-73618 }, { 55,-73618 }, + { 56,-73618 }, { 57,-73618 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-73618 }, + + { 66,-73618 }, { 67,-73618 }, { 68,-73618 }, { 69,-73618 }, { 70,-73618 }, + { 71,-73618 }, { 72,-73618 }, { 73,-73618 }, { 74,-73618 }, { 75,-73618 }, + { 76,-73618 }, { 77,-73618 }, { 78,-73618 }, { 79,-73618 }, { 80,-73618 }, + { 81,-73618 }, { 82,-73618 }, { 83,-73618 }, { 84,-73618 }, { 85,-73618 }, + { 86,-73618 }, { 87,-73618 }, { 88,-73618 }, { 89,-73618 }, { 90,-73618 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6168 }, + { 0, 0 }, { 97,-73618 }, { 98,-73618 }, { 99,-73618 }, { 100,-73618 }, + { 101,-73618 }, { 102,-73618 }, { 103,-73618 }, { 104,-73618 }, { 105,-73618 }, + { 106,-73618 }, { 107,-73618 }, { 108,-73618 }, { 109,-73618 }, { 110,-73618 }, + { 111,-73618 }, { 112,-73618 }, { 113,-73618 }, { 114,-73618 }, { 115,-73618 }, + + { 116,-73618 }, { 117,-73618 }, { 118,-73618 }, { 119,-73618 }, { 120,-73618 }, + { 121,-73618 }, { 122,-73618 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-73618 }, { 128,-73618 }, { 129,-73618 }, { 130,-73618 }, + { 131,-73618 }, { 132,-73618 }, { 133,-73618 }, { 134,-73618 }, { 135,-73618 }, + { 136,-73618 }, { 137,-73618 }, { 138,-73618 }, { 139,-73618 }, { 140,-73618 }, + { 141,-73618 }, { 142,-73618 }, { 143,-73618 }, { 144,-73618 }, { 145,-73618 }, + { 146,-73618 }, { 147,-73618 }, { 148,-73618 }, { 149,-73618 }, { 150,-73618 }, + { 151,-73618 }, { 152,-73618 }, { 153,-73618 }, { 154,-73618 }, { 155,-73618 }, + { 156,-73618 }, { 157,-73618 }, { 158,-73618 }, { 159,-73618 }, { 160,-73618 }, + { 161,-73618 }, { 162,-73618 }, { 163,-73618 }, { 164,-73618 }, { 165,-73618 }, + + { 166,-73618 }, { 167,-73618 }, { 168,-73618 }, { 169,-73618 }, { 170,-73618 }, + { 171,-73618 }, { 172,-73618 }, { 173,-73618 }, { 174,-73618 }, { 175,-73618 }, + { 176,-73618 }, { 177,-73618 }, { 178,-73618 }, { 179,-73618 }, { 180,-73618 }, + { 181,-73618 }, { 182,-73618 }, { 183,-73618 }, { 184,-73618 }, { 185,-73618 }, + { 186,-73618 }, { 187,-73618 }, { 188,-73618 }, { 189,-73618 }, { 190,-73618 }, + { 191,-73618 }, { 192,-73618 }, { 193,-73618 }, { 194,-73618 }, { 195,-73618 }, + { 196,-73618 }, { 197,-73618 }, { 198,-73618 }, { 199,-73618 }, { 200,-73618 }, + { 201,-73618 }, { 202,-73618 }, { 203,-73618 }, { 204,-73618 }, { 205,-73618 }, + { 206,-73618 }, { 207,-73618 }, { 208,-73618 }, { 209,-73618 }, { 210,-73618 }, + { 211,-73618 }, { 212,-73618 }, { 213,-73618 }, { 214,-73618 }, { 215,-73618 }, + + { 216,-73618 }, { 217,-73618 }, { 218,-73618 }, { 219,-73618 }, { 220,-73618 }, + { 221,-73618 }, { 222,-73618 }, { 223,-73618 }, { 224,-73618 }, { 225,-73618 }, + { 226,-73618 }, { 227,-73618 }, { 228,-73618 }, { 229,-73618 }, { 230,-73618 }, + { 231,-73618 }, { 232,-73618 }, { 233,-73618 }, { 234,-73618 }, { 235,-73618 }, + { 236,-73618 }, { 237,-73618 }, { 238,-73618 }, { 239,-73618 }, { 240,-73618 }, + { 241,-73618 }, { 242,-73618 }, { 243,-73618 }, { 244,-73618 }, { 245,-73618 }, + { 246,-73618 }, { 247,-73618 }, { 248,-73618 }, { 249,-73618 }, { 250,-73618 }, + { 251,-73618 }, { 252,-73618 }, { 253,-73618 }, { 254,-73618 }, { 255,-73618 }, + { 0, 131 }, { 0,18248 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-73875 }, + { 49,-73875 }, { 50,-73875 }, { 51,-73875 }, { 52,-73875 }, { 53,-73875 }, + { 54,-73875 }, { 55,-73875 }, { 56,-73875 }, { 57,-73875 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-73875 }, { 66,-73875 }, { 67,-73875 }, { 68,-73875 }, + { 69,-73875 }, { 70,-73875 }, { 71,-73875 }, { 72,-73875 }, { 73,6168 }, + { 74,-73875 }, { 75,-73875 }, { 76,-73875 }, { 77,-73875 }, { 78,-73875 }, + { 79,-73875 }, { 80,-73875 }, { 81,-73875 }, { 82,-73875 }, { 83,-73875 }, + { 84,-73875 }, { 85,-73875 }, { 86,-73875 }, { 87,-73875 }, { 88,-73875 }, + { 89,-73875 }, { 90,-73875 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-73875 }, { 0, 0 }, { 97,-73875 }, { 98,-73875 }, + { 99,-73875 }, { 100,-73875 }, { 101,-73875 }, { 102,-73875 }, { 103,-73875 }, + { 104,-73875 }, { 105,6168 }, { 106,-73875 }, { 107,-73875 }, { 108,-73875 }, + + { 109,-73875 }, { 110,-73875 }, { 111,-73875 }, { 112,-73875 }, { 113,-73875 }, + { 114,-73875 }, { 115,-73875 }, { 116,-73875 }, { 117,-73875 }, { 118,-73875 }, + { 119,-73875 }, { 120,-73875 }, { 121,-73875 }, { 122,-73875 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-73875 }, { 128,-73875 }, + { 129,-73875 }, { 130,-73875 }, { 131,-73875 }, { 132,-73875 }, { 133,-73875 }, + { 134,-73875 }, { 135,-73875 }, { 136,-73875 }, { 137,-73875 }, { 138,-73875 }, + { 139,-73875 }, { 140,-73875 }, { 141,-73875 }, { 142,-73875 }, { 143,-73875 }, + { 144,-73875 }, { 145,-73875 }, { 146,-73875 }, { 147,-73875 }, { 148,-73875 }, + { 149,-73875 }, { 150,-73875 }, { 151,-73875 }, { 152,-73875 }, { 153,-73875 }, + { 154,-73875 }, { 155,-73875 }, { 156,-73875 }, { 157,-73875 }, { 158,-73875 }, + + { 159,-73875 }, { 160,-73875 }, { 161,-73875 }, { 162,-73875 }, { 163,-73875 }, + { 164,-73875 }, { 165,-73875 }, { 166,-73875 }, { 167,-73875 }, { 168,-73875 }, + { 169,-73875 }, { 170,-73875 }, { 171,-73875 }, { 172,-73875 }, { 173,-73875 }, + { 174,-73875 }, { 175,-73875 }, { 176,-73875 }, { 177,-73875 }, { 178,-73875 }, + { 179,-73875 }, { 180,-73875 }, { 181,-73875 }, { 182,-73875 }, { 183,-73875 }, + { 184,-73875 }, { 185,-73875 }, { 186,-73875 }, { 187,-73875 }, { 188,-73875 }, + { 189,-73875 }, { 190,-73875 }, { 191,-73875 }, { 192,-73875 }, { 193,-73875 }, + { 194,-73875 }, { 195,-73875 }, { 196,-73875 }, { 197,-73875 }, { 198,-73875 }, + { 199,-73875 }, { 200,-73875 }, { 201,-73875 }, { 202,-73875 }, { 203,-73875 }, + { 204,-73875 }, { 205,-73875 }, { 206,-73875 }, { 207,-73875 }, { 208,-73875 }, + + { 209,-73875 }, { 210,-73875 }, { 211,-73875 }, { 212,-73875 }, { 213,-73875 }, + { 214,-73875 }, { 215,-73875 }, { 216,-73875 }, { 217,-73875 }, { 218,-73875 }, + { 219,-73875 }, { 220,-73875 }, { 221,-73875 }, { 222,-73875 }, { 223,-73875 }, + { 224,-73875 }, { 225,-73875 }, { 226,-73875 }, { 227,-73875 }, { 228,-73875 }, + { 229,-73875 }, { 230,-73875 }, { 231,-73875 }, { 232,-73875 }, { 233,-73875 }, + { 234,-73875 }, { 235,-73875 }, { 236,-73875 }, { 237,-73875 }, { 238,-73875 }, + { 239,-73875 }, { 240,-73875 }, { 241,-73875 }, { 242,-73875 }, { 243,-73875 }, + { 244,-73875 }, { 245,-73875 }, { 246,-73875 }, { 247,-73875 }, { 248,-73875 }, + { 249,-73875 }, { 250,-73875 }, { 251,-73875 }, { 252,-73875 }, { 253,-73875 }, + { 254,-73875 }, { 255,-73875 }, { 0, 131 }, { 0,17991 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-74132 }, { 49,-74132 }, { 50,-74132 }, { 51,-74132 }, + + { 52,-74132 }, { 53,-74132 }, { 54,-74132 }, { 55,-74132 }, { 56,-74132 }, + { 57,-74132 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-74132 }, { 66,-74132 }, + { 67,6168 }, { 68,-74132 }, { 69,-74132 }, { 70,-74132 }, { 71,-74132 }, + { 72,-74132 }, { 73,-74132 }, { 74,-74132 }, { 75,-74132 }, { 76,-74132 }, + { 77,-74132 }, { 78,-74132 }, { 79,-74132 }, { 80,-74132 }, { 81,-74132 }, + { 82,-74132 }, { 83,-74132 }, { 84,-74132 }, { 85,-74132 }, { 86,-74132 }, + { 87,-74132 }, { 88,-74132 }, { 89,-74132 }, { 90,-74132 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-74132 }, { 0, 0 }, + { 97,-74132 }, { 98,-74132 }, { 99,6168 }, { 100,-74132 }, { 101,-74132 }, + + { 102,-74132 }, { 103,-74132 }, { 104,-74132 }, { 105,-74132 }, { 106,-74132 }, + { 107,-74132 }, { 108,-74132 }, { 109,-74132 }, { 110,-74132 }, { 111,-74132 }, + { 112,-74132 }, { 113,-74132 }, { 114,-74132 }, { 115,-74132 }, { 116,-74132 }, + { 117,-74132 }, { 118,-74132 }, { 119,-74132 }, { 120,-74132 }, { 121,-74132 }, + { 122,-74132 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-74132 }, { 128,-74132 }, { 129,-74132 }, { 130,-74132 }, { 131,-74132 }, + { 132,-74132 }, { 133,-74132 }, { 134,-74132 }, { 135,-74132 }, { 136,-74132 }, + { 137,-74132 }, { 138,-74132 }, { 139,-74132 }, { 140,-74132 }, { 141,-74132 }, + { 142,-74132 }, { 143,-74132 }, { 144,-74132 }, { 145,-74132 }, { 146,-74132 }, + { 147,-74132 }, { 148,-74132 }, { 149,-74132 }, { 150,-74132 }, { 151,-74132 }, + + { 152,-74132 }, { 153,-74132 }, { 154,-74132 }, { 155,-74132 }, { 156,-74132 }, + { 157,-74132 }, { 158,-74132 }, { 159,-74132 }, { 160,-74132 }, { 161,-74132 }, + { 162,-74132 }, { 163,-74132 }, { 164,-74132 }, { 165,-74132 }, { 166,-74132 }, + { 167,-74132 }, { 168,-74132 }, { 169,-74132 }, { 170,-74132 }, { 171,-74132 }, + { 172,-74132 }, { 173,-74132 }, { 174,-74132 }, { 175,-74132 }, { 176,-74132 }, + { 177,-74132 }, { 178,-74132 }, { 179,-74132 }, { 180,-74132 }, { 181,-74132 }, + { 182,-74132 }, { 183,-74132 }, { 184,-74132 }, { 185,-74132 }, { 186,-74132 }, + { 187,-74132 }, { 188,-74132 }, { 189,-74132 }, { 190,-74132 }, { 191,-74132 }, + { 192,-74132 }, { 193,-74132 }, { 194,-74132 }, { 195,-74132 }, { 196,-74132 }, + { 197,-74132 }, { 198,-74132 }, { 199,-74132 }, { 200,-74132 }, { 201,-74132 }, + + { 202,-74132 }, { 203,-74132 }, { 204,-74132 }, { 205,-74132 }, { 206,-74132 }, + { 207,-74132 }, { 208,-74132 }, { 209,-74132 }, { 210,-74132 }, { 211,-74132 }, + { 212,-74132 }, { 213,-74132 }, { 214,-74132 }, { 215,-74132 }, { 216,-74132 }, + { 217,-74132 }, { 218,-74132 }, { 219,-74132 }, { 220,-74132 }, { 221,-74132 }, + { 222,-74132 }, { 223,-74132 }, { 224,-74132 }, { 225,-74132 }, { 226,-74132 }, + { 227,-74132 }, { 228,-74132 }, { 229,-74132 }, { 230,-74132 }, { 231,-74132 }, + { 232,-74132 }, { 233,-74132 }, { 234,-74132 }, { 235,-74132 }, { 236,-74132 }, + { 237,-74132 }, { 238,-74132 }, { 239,-74132 }, { 240,-74132 }, { 241,-74132 }, + { 242,-74132 }, { 243,-74132 }, { 244,-74132 }, { 245,-74132 }, { 246,-74132 }, + { 247,-74132 }, { 248,-74132 }, { 249,-74132 }, { 250,-74132 }, { 251,-74132 }, + + { 252,-74132 }, { 253,-74132 }, { 254,-74132 }, { 255,-74132 }, { 0, 131 }, + { 0,17734 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-74389 }, { 49,-74389 }, + { 50,-74389 }, { 51,-74389 }, { 52,-74389 }, { 53,-74389 }, { 54,-74389 }, + { 55,-74389 }, { 56,-74389 }, { 57,-74389 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-74389 }, { 66,-74389 }, { 67,-74389 }, { 68,-74389 }, { 69,-74389 }, + { 70,-74389 }, { 71,-74389 }, { 72,-74389 }, { 73,-74389 }, { 74,-74389 }, + { 75,-74389 }, { 76,-74389 }, { 77,-74389 }, { 78,-74389 }, { 79,-74389 }, + { 80,-74389 }, { 81,-74389 }, { 82,-74389 }, { 83,-74389 }, { 84,-74389 }, + { 85,-74389 }, { 86,-74389 }, { 87,-74389 }, { 88,-74389 }, { 89,-74389 }, + { 90,-74389 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,6168 }, { 0, 0 }, { 97,-74389 }, { 98,-74389 }, { 99,-74389 }, + { 100,-74389 }, { 101,-74389 }, { 102,-74389 }, { 103,-74389 }, { 104,-74389 }, + { 105,-74389 }, { 106,-74389 }, { 107,-74389 }, { 108,-74389 }, { 109,-74389 }, + { 110,-74389 }, { 111,-74389 }, { 112,-74389 }, { 113,-74389 }, { 114,-74389 }, + { 115,-74389 }, { 116,-74389 }, { 117,-74389 }, { 118,-74389 }, { 119,-74389 }, + { 120,-74389 }, { 121,-74389 }, { 122,-74389 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-74389 }, { 128,-74389 }, { 129,-74389 }, + { 130,-74389 }, { 131,-74389 }, { 132,-74389 }, { 133,-74389 }, { 134,-74389 }, + { 135,-74389 }, { 136,-74389 }, { 137,-74389 }, { 138,-74389 }, { 139,-74389 }, + { 140,-74389 }, { 141,-74389 }, { 142,-74389 }, { 143,-74389 }, { 144,-74389 }, + + { 145,-74389 }, { 146,-74389 }, { 147,-74389 }, { 148,-74389 }, { 149,-74389 }, + { 150,-74389 }, { 151,-74389 }, { 152,-74389 }, { 153,-74389 }, { 154,-74389 }, + { 155,-74389 }, { 156,-74389 }, { 157,-74389 }, { 158,-74389 }, { 159,-74389 }, + { 160,-74389 }, { 161,-74389 }, { 162,-74389 }, { 163,-74389 }, { 164,-74389 }, + { 165,-74389 }, { 166,-74389 }, { 167,-74389 }, { 168,-74389 }, { 169,-74389 }, + { 170,-74389 }, { 171,-74389 }, { 172,-74389 }, { 173,-74389 }, { 174,-74389 }, + { 175,-74389 }, { 176,-74389 }, { 177,-74389 }, { 178,-74389 }, { 179,-74389 }, + { 180,-74389 }, { 181,-74389 }, { 182,-74389 }, { 183,-74389 }, { 184,-74389 }, + { 185,-74389 }, { 186,-74389 }, { 187,-74389 }, { 188,-74389 }, { 189,-74389 }, + { 190,-74389 }, { 191,-74389 }, { 192,-74389 }, { 193,-74389 }, { 194,-74389 }, + + { 195,-74389 }, { 196,-74389 }, { 197,-74389 }, { 198,-74389 }, { 199,-74389 }, + { 200,-74389 }, { 201,-74389 }, { 202,-74389 }, { 203,-74389 }, { 204,-74389 }, + { 205,-74389 }, { 206,-74389 }, { 207,-74389 }, { 208,-74389 }, { 209,-74389 }, + { 210,-74389 }, { 211,-74389 }, { 212,-74389 }, { 213,-74389 }, { 214,-74389 }, + { 215,-74389 }, { 216,-74389 }, { 217,-74389 }, { 218,-74389 }, { 219,-74389 }, + { 220,-74389 }, { 221,-74389 }, { 222,-74389 }, { 223,-74389 }, { 224,-74389 }, + { 225,-74389 }, { 226,-74389 }, { 227,-74389 }, { 228,-74389 }, { 229,-74389 }, + { 230,-74389 }, { 231,-74389 }, { 232,-74389 }, { 233,-74389 }, { 234,-74389 }, + { 235,-74389 }, { 236,-74389 }, { 237,-74389 }, { 238,-74389 }, { 239,-74389 }, + { 240,-74389 }, { 241,-74389 }, { 242,-74389 }, { 243,-74389 }, { 244,-74389 }, + + { 245,-74389 }, { 246,-74389 }, { 247,-74389 }, { 248,-74389 }, { 249,-74389 }, + { 250,-74389 }, { 251,-74389 }, { 252,-74389 }, { 253,-74389 }, { 254,-74389 }, + { 255,-74389 }, { 0, 131 }, { 0,17477 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-74646 }, { 49,-74646 }, { 50,-74646 }, { 51,-74646 }, { 52,-74646 }, + { 53,-74646 }, { 54,-74646 }, { 55,-74646 }, { 56,-74646 }, { 57,-74646 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-74646 }, { 66,-74646 }, { 67,-74646 }, + { 68,6168 }, { 69,-74646 }, { 70,-74646 }, { 71,-74646 }, { 72,-74646 }, + { 73,-74646 }, { 74,-74646 }, { 75,-74646 }, { 76,-74646 }, { 77,-74646 }, + { 78,-74646 }, { 79,-74646 }, { 80,-74646 }, { 81,-74646 }, { 82,-74646 }, + { 83,-74646 }, { 84,-74646 }, { 85,-74646 }, { 86,-74646 }, { 87,-74646 }, + + { 88,-74646 }, { 89,-74646 }, { 90,-74646 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-74646 }, { 0, 0 }, { 97,-74646 }, + { 98,-74646 }, { 99,-74646 }, { 100,6168 }, { 101,-74646 }, { 102,-74646 }, + { 103,-74646 }, { 104,-74646 }, { 105,-74646 }, { 106,-74646 }, { 107,-74646 }, + { 108,-74646 }, { 109,-74646 }, { 110,-74646 }, { 111,-74646 }, { 112,-74646 }, + { 113,-74646 }, { 114,-74646 }, { 115,-74646 }, { 116,-74646 }, { 117,-74646 }, + { 118,-74646 }, { 119,-74646 }, { 120,-74646 }, { 121,-74646 }, { 122,-74646 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-74646 }, + { 128,-74646 }, { 129,-74646 }, { 130,-74646 }, { 131,-74646 }, { 132,-74646 }, + { 133,-74646 }, { 134,-74646 }, { 135,-74646 }, { 136,-74646 }, { 137,-74646 }, + + { 138,-74646 }, { 139,-74646 }, { 140,-74646 }, { 141,-74646 }, { 142,-74646 }, + { 143,-74646 }, { 144,-74646 }, { 145,-74646 }, { 146,-74646 }, { 147,-74646 }, + { 148,-74646 }, { 149,-74646 }, { 150,-74646 }, { 151,-74646 }, { 152,-74646 }, + { 153,-74646 }, { 154,-74646 }, { 155,-74646 }, { 156,-74646 }, { 157,-74646 }, + { 158,-74646 }, { 159,-74646 }, { 160,-74646 }, { 161,-74646 }, { 162,-74646 }, + { 163,-74646 }, { 164,-74646 }, { 165,-74646 }, { 166,-74646 }, { 167,-74646 }, + { 168,-74646 }, { 169,-74646 }, { 170,-74646 }, { 171,-74646 }, { 172,-74646 }, + { 173,-74646 }, { 174,-74646 }, { 175,-74646 }, { 176,-74646 }, { 177,-74646 }, + { 178,-74646 }, { 179,-74646 }, { 180,-74646 }, { 181,-74646 }, { 182,-74646 }, + { 183,-74646 }, { 184,-74646 }, { 185,-74646 }, { 186,-74646 }, { 187,-74646 }, + + { 188,-74646 }, { 189,-74646 }, { 190,-74646 }, { 191,-74646 }, { 192,-74646 }, + { 193,-74646 }, { 194,-74646 }, { 195,-74646 }, { 196,-74646 }, { 197,-74646 }, + { 198,-74646 }, { 199,-74646 }, { 200,-74646 }, { 201,-74646 }, { 202,-74646 }, + { 203,-74646 }, { 204,-74646 }, { 205,-74646 }, { 206,-74646 }, { 207,-74646 }, + { 208,-74646 }, { 209,-74646 }, { 210,-74646 }, { 211,-74646 }, { 212,-74646 }, + { 213,-74646 }, { 214,-74646 }, { 215,-74646 }, { 216,-74646 }, { 217,-74646 }, + { 218,-74646 }, { 219,-74646 }, { 220,-74646 }, { 221,-74646 }, { 222,-74646 }, + { 223,-74646 }, { 224,-74646 }, { 225,-74646 }, { 226,-74646 }, { 227,-74646 }, + { 228,-74646 }, { 229,-74646 }, { 230,-74646 }, { 231,-74646 }, { 232,-74646 }, + { 233,-74646 }, { 234,-74646 }, { 235,-74646 }, { 236,-74646 }, { 237,-74646 }, + + { 238,-74646 }, { 239,-74646 }, { 240,-74646 }, { 241,-74646 }, { 242,-74646 }, + { 243,-74646 }, { 244,-74646 }, { 245,-74646 }, { 246,-74646 }, { 247,-74646 }, + { 248,-74646 }, { 249,-74646 }, { 250,-74646 }, { 251,-74646 }, { 252,-74646 }, + { 253,-74646 }, { 254,-74646 }, { 255,-74646 }, { 0, 131 }, { 0,17220 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-74903 }, { 49,-74903 }, { 50,-74903 }, + { 51,-74903 }, { 52,-74903 }, { 53,-74903 }, { 54,-74903 }, { 55,-74903 }, + { 56,-74903 }, { 57,-74903 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-74903 }, + { 66,-74903 }, { 67,-74903 }, { 68,-74903 }, { 69,-74903 }, { 70,-74903 }, + { 71,-74903 }, { 72,-74903 }, { 73,-74903 }, { 74,-74903 }, { 75,-74903 }, + { 76,-74903 }, { 77,-74903 }, { 78,-74903 }, { 79,-74903 }, { 80,6168 }, + + { 81,-74903 }, { 82,-74903 }, { 83,-74903 }, { 84,-74903 }, { 85,-74903 }, + { 86,-74903 }, { 87,-74903 }, { 88,-74903 }, { 89,-74903 }, { 90,-74903 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-74903 }, + { 0, 0 }, { 97,-74903 }, { 98,-74903 }, { 99,-74903 }, { 100,-74903 }, + { 101,-74903 }, { 102,-74903 }, { 103,-74903 }, { 104,-74903 }, { 105,-74903 }, + { 106,-74903 }, { 107,-74903 }, { 108,-74903 }, { 109,-74903 }, { 110,-74903 }, + { 111,-74903 }, { 112,6168 }, { 113,-74903 }, { 114,-74903 }, { 115,-74903 }, + { 116,-74903 }, { 117,-74903 }, { 118,-74903 }, { 119,-74903 }, { 120,-74903 }, + { 121,-74903 }, { 122,-74903 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-74903 }, { 128,-74903 }, { 129,-74903 }, { 130,-74903 }, + + { 131,-74903 }, { 132,-74903 }, { 133,-74903 }, { 134,-74903 }, { 135,-74903 }, + { 136,-74903 }, { 137,-74903 }, { 138,-74903 }, { 139,-74903 }, { 140,-74903 }, + { 141,-74903 }, { 142,-74903 }, { 143,-74903 }, { 144,-74903 }, { 145,-74903 }, + { 146,-74903 }, { 147,-74903 }, { 148,-74903 }, { 149,-74903 }, { 150,-74903 }, + { 151,-74903 }, { 152,-74903 }, { 153,-74903 }, { 154,-74903 }, { 155,-74903 }, + { 156,-74903 }, { 157,-74903 }, { 158,-74903 }, { 159,-74903 }, { 160,-74903 }, + { 161,-74903 }, { 162,-74903 }, { 163,-74903 }, { 164,-74903 }, { 165,-74903 }, + { 166,-74903 }, { 167,-74903 }, { 168,-74903 }, { 169,-74903 }, { 170,-74903 }, + { 171,-74903 }, { 172,-74903 }, { 173,-74903 }, { 174,-74903 }, { 175,-74903 }, + { 176,-74903 }, { 177,-74903 }, { 178,-74903 }, { 179,-74903 }, { 180,-74903 }, + + { 181,-74903 }, { 182,-74903 }, { 183,-74903 }, { 184,-74903 }, { 185,-74903 }, + { 186,-74903 }, { 187,-74903 }, { 188,-74903 }, { 189,-74903 }, { 190,-74903 }, + { 191,-74903 }, { 192,-74903 }, { 193,-74903 }, { 194,-74903 }, { 195,-74903 }, + { 196,-74903 }, { 197,-74903 }, { 198,-74903 }, { 199,-74903 }, { 200,-74903 }, + { 201,-74903 }, { 202,-74903 }, { 203,-74903 }, { 204,-74903 }, { 205,-74903 }, + { 206,-74903 }, { 207,-74903 }, { 208,-74903 }, { 209,-74903 }, { 210,-74903 }, + { 211,-74903 }, { 212,-74903 }, { 213,-74903 }, { 214,-74903 }, { 215,-74903 }, + { 216,-74903 }, { 217,-74903 }, { 218,-74903 }, { 219,-74903 }, { 220,-74903 }, + { 221,-74903 }, { 222,-74903 }, { 223,-74903 }, { 224,-74903 }, { 225,-74903 }, + { 226,-74903 }, { 227,-74903 }, { 228,-74903 }, { 229,-74903 }, { 230,-74903 }, + + { 231,-74903 }, { 232,-74903 }, { 233,-74903 }, { 234,-74903 }, { 235,-74903 }, + { 236,-74903 }, { 237,-74903 }, { 238,-74903 }, { 239,-74903 }, { 240,-74903 }, + { 241,-74903 }, { 242,-74903 }, { 243,-74903 }, { 244,-74903 }, { 245,-74903 }, + { 246,-74903 }, { 247,-74903 }, { 248,-74903 }, { 249,-74903 }, { 250,-74903 }, + { 251,-74903 }, { 252,-74903 }, { 253,-74903 }, { 254,-74903 }, { 255,-74903 }, + { 0, 131 }, { 0,16963 }, { 0, 0 }, { 0,16961 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9,6168 }, { 10,6168 }, { 0, 0 }, + { 0, 0 }, { 13,6168 }, { 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, 0 }, + { 32,6168 }, { 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 }, { 48,-75160 }, + { 49,-75160 }, { 50,-75160 }, { 51,-75160 }, { 52,-75160 }, { 53,-75160 }, + { 54,-75160 }, { 55,-75160 }, { 56,-75160 }, { 57,-75160 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 62,-75177 }, { 65,-75160 }, { 66,-75160 }, { 67,-75160 }, { 68,-75160 }, + { 69,-75160 }, { 70,-75160 }, { 71,-75160 }, { 72,-75160 }, { 73,-75160 }, + + { 74,-75160 }, { 75,-75160 }, { 76,-75160 }, { 77,-75160 }, { 78,-75160 }, + { 79,-75160 }, { 80,-75160 }, { 81,-75160 }, { 82,-75160 }, { 83,-75160 }, + { 84,-75160 }, { 85,-75160 }, { 86,-75160 }, { 87,-75160 }, { 88,-75160 }, + { 89,-75160 }, { 90,-75160 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,6168 }, { 0, 0 }, { 97,-75160 }, { 98,-75160 }, + { 99,-75160 }, { 100,-75160 }, { 101,-75160 }, { 102,-75160 }, { 103,-75160 }, + { 104,-75160 }, { 105,-75160 }, { 106,-75160 }, { 107,-75160 }, { 108,-75160 }, + { 109,-75160 }, { 110,-75160 }, { 111,-75160 }, { 112,-75160 }, { 113,-75160 }, + { 114,-75160 }, { 115,-75160 }, { 116,-75160 }, { 117,-75160 }, { 118,-75160 }, + { 119,-75160 }, { 120,-75160 }, { 121,-75160 }, { 122,-75160 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-75160 }, { 128,-75160 }, + { 129,-75160 }, { 130,-75160 }, { 131,-75160 }, { 132,-75160 }, { 133,-75160 }, + { 134,-75160 }, { 135,-75160 }, { 136,-75160 }, { 137,-75160 }, { 138,-75160 }, + { 139,-75160 }, { 140,-75160 }, { 141,-75160 }, { 142,-75160 }, { 143,-75160 }, + { 144,-75160 }, { 145,-75160 }, { 146,-75160 }, { 147,-75160 }, { 148,-75160 }, + { 149,-75160 }, { 150,-75160 }, { 151,-75160 }, { 152,-75160 }, { 153,-75160 }, + { 154,-75160 }, { 155,-75160 }, { 156,-75160 }, { 157,-75160 }, { 158,-75160 }, + { 159,-75160 }, { 160,-75160 }, { 161,-75160 }, { 162,-75160 }, { 163,-75160 }, + { 164,-75160 }, { 165,-75160 }, { 166,-75160 }, { 167,-75160 }, { 168,-75160 }, + { 169,-75160 }, { 170,-75160 }, { 171,-75160 }, { 172,-75160 }, { 173,-75160 }, + + { 174,-75160 }, { 175,-75160 }, { 176,-75160 }, { 177,-75160 }, { 178,-75160 }, + { 179,-75160 }, { 180,-75160 }, { 181,-75160 }, { 182,-75160 }, { 183,-75160 }, + { 184,-75160 }, { 185,-75160 }, { 186,-75160 }, { 187,-75160 }, { 188,-75160 }, + { 189,-75160 }, { 190,-75160 }, { 191,-75160 }, { 192,-75160 }, { 193,-75160 }, + { 194,-75160 }, { 195,-75160 }, { 196,-75160 }, { 197,-75160 }, { 198,-75160 }, + { 199,-75160 }, { 200,-75160 }, { 201,-75160 }, { 202,-75160 }, { 203,-75160 }, + { 204,-75160 }, { 205,-75160 }, { 206,-75160 }, { 207,-75160 }, { 208,-75160 }, + { 209,-75160 }, { 210,-75160 }, { 211,-75160 }, { 212,-75160 }, { 213,-75160 }, + { 214,-75160 }, { 215,-75160 }, { 216,-75160 }, { 217,-75160 }, { 218,-75160 }, + { 219,-75160 }, { 220,-75160 }, { 221,-75160 }, { 222,-75160 }, { 223,-75160 }, + + { 224,-75160 }, { 225,-75160 }, { 226,-75160 }, { 227,-75160 }, { 228,-75160 }, + { 229,-75160 }, { 230,-75160 }, { 231,-75160 }, { 232,-75160 }, { 233,-75160 }, + { 234,-75160 }, { 235,-75160 }, { 236,-75160 }, { 237,-75160 }, { 238,-75160 }, + { 239,-75160 }, { 240,-75160 }, { 241,-75160 }, { 242,-75160 }, { 243,-75160 }, + { 244,-75160 }, { 245,-75160 }, { 246,-75160 }, { 247,-75160 }, { 248,-75160 }, + { 249,-75160 }, { 250,-75160 }, { 251,-75160 }, { 252,-75160 }, { 253,-75160 }, + { 254,-75160 }, { 255,-75160 }, { 0, 62 }, { 0,16706 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-75417 }, { 49,-75417 }, { 50,-75417 }, { 51,-75417 }, + { 52,-75417 }, { 53,-75417 }, { 54,-75417 }, { 55,-75417 }, { 56,-75417 }, + { 57,-75417 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-75417 }, { 66,-75417 }, + + { 67,-75417 }, { 68,-75417 }, { 69,-75417 }, { 70,-75417 }, { 71,-75417 }, + { 72,-75417 }, { 73,-75417 }, { 74,-75417 }, { 75,-75417 }, { 76,-75417 }, + { 77,-75417 }, { 78,-75417 }, { 79,-75417 }, { 80,-75417 }, { 81,-75417 }, + { 82,-75417 }, { 83,-75417 }, { 84,-75417 }, { 85,-75417 }, { 86,-75417 }, + { 87,-75417 }, { 88,-75417 }, { 89,-75417 }, { 90,-75417 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-75417 }, { 0, 0 }, + { 97,-75417 }, { 98,-75417 }, { 99,-75417 }, { 100,-75417 }, { 101,-75417 }, + { 102,-75417 }, { 103,-75417 }, { 104,-75417 }, { 105,-75417 }, { 106,-75417 }, + { 107,-75417 }, { 108,-75417 }, { 109,-75417 }, { 110,-75417 }, { 111,-75417 }, + { 112,-75417 }, { 113,-75417 }, { 114,-75417 }, { 115,-75417 }, { 116,-75417 }, + + { 117,-75417 }, { 118,-75417 }, { 119,-75417 }, { 120,-75417 }, { 121,-75417 }, + { 122,-75417 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-75417 }, { 128,-75417 }, { 129,-75417 }, { 130,-75417 }, { 131,-75417 }, + { 132,-75417 }, { 133,-75417 }, { 134,-75417 }, { 135,-75417 }, { 136,-75417 }, + { 137,-75417 }, { 138,-75417 }, { 139,-75417 }, { 140,-75417 }, { 141,-75417 }, + { 142,-75417 }, { 143,-75417 }, { 144,-75417 }, { 145,-75417 }, { 146,-75417 }, + { 147,-75417 }, { 148,-75417 }, { 149,-75417 }, { 150,-75417 }, { 151,-75417 }, + { 152,-75417 }, { 153,-75417 }, { 154,-75417 }, { 155,-75417 }, { 156,-75417 }, + { 157,-75417 }, { 158,-75417 }, { 159,-75417 }, { 160,-75417 }, { 161,-75417 }, + { 162,-75417 }, { 163,-75417 }, { 164,-75417 }, { 165,-75417 }, { 166,-75417 }, + + { 167,-75417 }, { 168,-75417 }, { 169,-75417 }, { 170,-75417 }, { 171,-75417 }, + { 172,-75417 }, { 173,-75417 }, { 174,-75417 }, { 175,-75417 }, { 176,-75417 }, + { 177,-75417 }, { 178,-75417 }, { 179,-75417 }, { 180,-75417 }, { 181,-75417 }, + { 182,-75417 }, { 183,-75417 }, { 184,-75417 }, { 185,-75417 }, { 186,-75417 }, + { 187,-75417 }, { 188,-75417 }, { 189,-75417 }, { 190,-75417 }, { 191,-75417 }, + { 192,-75417 }, { 193,-75417 }, { 194,-75417 }, { 195,-75417 }, { 196,-75417 }, + { 197,-75417 }, { 198,-75417 }, { 199,-75417 }, { 200,-75417 }, { 201,-75417 }, + { 202,-75417 }, { 203,-75417 }, { 204,-75417 }, { 205,-75417 }, { 206,-75417 }, + { 207,-75417 }, { 208,-75417 }, { 209,-75417 }, { 210,-75417 }, { 211,-75417 }, + { 212,-75417 }, { 213,-75417 }, { 214,-75417 }, { 215,-75417 }, { 216,-75417 }, + + { 217,-75417 }, { 218,-75417 }, { 219,-75417 }, { 220,-75417 }, { 221,-75417 }, + { 222,-75417 }, { 223,-75417 }, { 224,-75417 }, { 225,-75417 }, { 226,-75417 }, + { 227,-75417 }, { 228,-75417 }, { 229,-75417 }, { 230,-75417 }, { 231,-75417 }, + { 232,-75417 }, { 233,-75417 }, { 234,-75417 }, { 235,-75417 }, { 236,-75417 }, + { 237,-75417 }, { 238,-75417 }, { 239,-75417 }, { 240,-75417 }, { 241,-75417 }, + { 242,-75417 }, { 243,-75417 }, { 244,-75417 }, { 245,-75417 }, { 246,-75417 }, + { 247,-75417 }, { 248,-75417 }, { 249,-75417 }, { 250,-75417 }, { 251,-75417 }, + { 252,-75417 }, { 253,-75417 }, { 254,-75417 }, { 255,-75417 }, { 0, 87 }, + { 0,16449 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-75674 }, { 49,-75674 }, + { 50,-75674 }, { 51,-75674 }, { 52,-75674 }, { 53,-75674 }, { 54,-75674 }, + { 55,-75674 }, { 56,-75674 }, { 57,-75674 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-75674 }, { 66,-75674 }, { 67,-75674 }, { 68,-75674 }, { 69,-75674 }, + { 70,-75674 }, { 71,-75674 }, { 72,-75674 }, { 73,-75674 }, { 74,-75674 }, + { 75,-75674 }, { 76,-75674 }, { 77,-75674 }, { 78,-75674 }, { 79,-75674 }, + { 80,-75674 }, { 81,-75674 }, { 82,-75674 }, { 83,-75674 }, { 84,-75674 }, + { 85,-75674 }, { 86,-75674 }, { 87,-75674 }, { 88,-75674 }, { 89,-75674 }, + { 90,-75674 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-75674 }, { 0, 0 }, { 97,-75674 }, { 98,-75674 }, { 99,-75674 }, + { 100,-75674 }, { 101,-75674 }, { 102,-75674 }, { 103,-75674 }, { 104,-75674 }, + { 105,-75674 }, { 106,-75674 }, { 107,-75674 }, { 108,-75674 }, { 109,-75674 }, + + { 110,-75674 }, { 111,-75674 }, { 112,-75674 }, { 113,-75674 }, { 114,-75674 }, + { 115,-75674 }, { 116,-75674 }, { 117,-75674 }, { 118,-75674 }, { 119,-75674 }, + { 120,-75674 }, { 121,-75674 }, { 122,-75674 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-75674 }, { 128,-75674 }, { 129,-75674 }, + { 130,-75674 }, { 131,-75674 }, { 132,-75674 }, { 133,-75674 }, { 134,-75674 }, + { 135,-75674 }, { 136,-75674 }, { 137,-75674 }, { 138,-75674 }, { 139,-75674 }, + { 140,-75674 }, { 141,-75674 }, { 142,-75674 }, { 143,-75674 }, { 144,-75674 }, + { 145,-75674 }, { 146,-75674 }, { 147,-75674 }, { 148,-75674 }, { 149,-75674 }, + { 150,-75674 }, { 151,-75674 }, { 152,-75674 }, { 153,-75674 }, { 154,-75674 }, + { 155,-75674 }, { 156,-75674 }, { 157,-75674 }, { 158,-75674 }, { 159,-75674 }, + + { 160,-75674 }, { 161,-75674 }, { 162,-75674 }, { 163,-75674 }, { 164,-75674 }, + { 165,-75674 }, { 166,-75674 }, { 167,-75674 }, { 168,-75674 }, { 169,-75674 }, + { 170,-75674 }, { 171,-75674 }, { 172,-75674 }, { 173,-75674 }, { 174,-75674 }, + { 175,-75674 }, { 176,-75674 }, { 177,-75674 }, { 178,-75674 }, { 179,-75674 }, + { 180,-75674 }, { 181,-75674 }, { 182,-75674 }, { 183,-75674 }, { 184,-75674 }, + { 185,-75674 }, { 186,-75674 }, { 187,-75674 }, { 188,-75674 }, { 189,-75674 }, + { 190,-75674 }, { 191,-75674 }, { 192,-75674 }, { 193,-75674 }, { 194,-75674 }, + { 195,-75674 }, { 196,-75674 }, { 197,-75674 }, { 198,-75674 }, { 199,-75674 }, + { 200,-75674 }, { 201,-75674 }, { 202,-75674 }, { 203,-75674 }, { 204,-75674 }, + { 205,-75674 }, { 206,-75674 }, { 207,-75674 }, { 208,-75674 }, { 209,-75674 }, + + { 210,-75674 }, { 211,-75674 }, { 212,-75674 }, { 213,-75674 }, { 214,-75674 }, + { 215,-75674 }, { 216,-75674 }, { 217,-75674 }, { 218,-75674 }, { 219,-75674 }, + { 220,-75674 }, { 221,-75674 }, { 222,-75674 }, { 223,-75674 }, { 224,-75674 }, + { 225,-75674 }, { 226,-75674 }, { 227,-75674 }, { 228,-75674 }, { 229,-75674 }, + { 230,-75674 }, { 231,-75674 }, { 232,-75674 }, { 233,-75674 }, { 234,-75674 }, + { 235,-75674 }, { 236,-75674 }, { 237,-75674 }, { 238,-75674 }, { 239,-75674 }, + { 240,-75674 }, { 241,-75674 }, { 242,-75674 }, { 243,-75674 }, { 244,-75674 }, + { 245,-75674 }, { 246,-75674 }, { 247,-75674 }, { 248,-75674 }, { 249,-75674 }, + { 250,-75674 }, { 251,-75674 }, { 252,-75674 }, { 253,-75674 }, { 254,-75674 }, + { 255,-75674 }, { 0, 51 }, { 0,16192 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-75931 }, { 49,-75931 }, { 50,-75931 }, { 51,-75931 }, { 52,-75931 }, + + { 53,-75931 }, { 54,-75931 }, { 55,-75931 }, { 56,-75931 }, { 57,-75931 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-75931 }, { 66,-75931 }, { 67,-75931 }, + { 68,-75931 }, { 69,-75931 }, { 70,-75931 }, { 71,-75931 }, { 72,-75931 }, + { 73,-75931 }, { 74,-75931 }, { 75,-75931 }, { 76,-75931 }, { 77,-75931 }, + { 78,-75931 }, { 79,-75931 }, { 80,-75931 }, { 81,-75931 }, { 82,-75931 }, + { 83,-75931 }, { 84,-75931 }, { 85,-75931 }, { 86,-75931 }, { 87,-75931 }, + { 88,-75931 }, { 89,-75931 }, { 90,-75931 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-75931 }, { 0, 0 }, { 97,-75931 }, + { 98,-75931 }, { 99,-75931 }, { 100,-75931 }, { 101,-75931 }, { 102,-75931 }, + + { 103,-75931 }, { 104,-75931 }, { 105,-75931 }, { 106,-75931 }, { 107,-75931 }, + { 108,-75931 }, { 109,-75931 }, { 110,-75931 }, { 111,-75931 }, { 112,-75931 }, + { 113,-75931 }, { 114,-75931 }, { 115,-75931 }, { 116,-75931 }, { 117,-75931 }, + { 118,-75931 }, { 119,-75931 }, { 120,-75931 }, { 121,-75931 }, { 122,-75931 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-75931 }, + { 128,-75931 }, { 129,-75931 }, { 130,-75931 }, { 131,-75931 }, { 132,-75931 }, + { 133,-75931 }, { 134,-75931 }, { 135,-75931 }, { 136,-75931 }, { 137,-75931 }, + { 138,-75931 }, { 139,-75931 }, { 140,-75931 }, { 141,-75931 }, { 142,-75931 }, + { 143,-75931 }, { 144,-75931 }, { 145,-75931 }, { 146,-75931 }, { 147,-75931 }, + { 148,-75931 }, { 149,-75931 }, { 150,-75931 }, { 151,-75931 }, { 152,-75931 }, + + { 153,-75931 }, { 154,-75931 }, { 155,-75931 }, { 156,-75931 }, { 157,-75931 }, + { 158,-75931 }, { 159,-75931 }, { 160,-75931 }, { 161,-75931 }, { 162,-75931 }, + { 163,-75931 }, { 164,-75931 }, { 165,-75931 }, { 166,-75931 }, { 167,-75931 }, + { 168,-75931 }, { 169,-75931 }, { 170,-75931 }, { 171,-75931 }, { 172,-75931 }, + { 173,-75931 }, { 174,-75931 }, { 175,-75931 }, { 176,-75931 }, { 177,-75931 }, + { 178,-75931 }, { 179,-75931 }, { 180,-75931 }, { 181,-75931 }, { 182,-75931 }, + { 183,-75931 }, { 184,-75931 }, { 185,-75931 }, { 186,-75931 }, { 187,-75931 }, + { 188,-75931 }, { 189,-75931 }, { 190,-75931 }, { 191,-75931 }, { 192,-75931 }, + { 193,-75931 }, { 194,-75931 }, { 195,-75931 }, { 196,-75931 }, { 197,-75931 }, + { 198,-75931 }, { 199,-75931 }, { 200,-75931 }, { 201,-75931 }, { 202,-75931 }, + + { 203,-75931 }, { 204,-75931 }, { 205,-75931 }, { 206,-75931 }, { 207,-75931 }, + { 208,-75931 }, { 209,-75931 }, { 210,-75931 }, { 211,-75931 }, { 212,-75931 }, + { 213,-75931 }, { 214,-75931 }, { 215,-75931 }, { 216,-75931 }, { 217,-75931 }, + { 218,-75931 }, { 219,-75931 }, { 220,-75931 }, { 221,-75931 }, { 222,-75931 }, + { 223,-75931 }, { 224,-75931 }, { 225,-75931 }, { 226,-75931 }, { 227,-75931 }, + { 228,-75931 }, { 229,-75931 }, { 230,-75931 }, { 231,-75931 }, { 232,-75931 }, + { 233,-75931 }, { 234,-75931 }, { 235,-75931 }, { 236,-75931 }, { 237,-75931 }, + { 238,-75931 }, { 239,-75931 }, { 240,-75931 }, { 241,-75931 }, { 242,-75931 }, + { 243,-75931 }, { 244,-75931 }, { 245,-75931 }, { 246,-75931 }, { 247,-75931 }, + { 248,-75931 }, { 249,-75931 }, { 250,-75931 }, { 251,-75931 }, { 252,-75931 }, + + { 253,-75931 }, { 254,-75931 }, { 255,-75931 }, { 0, 131 }, { 0,15935 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-76188 }, { 49,-76188 }, { 50,-76188 }, + { 51,-76188 }, { 52,-76188 }, { 53,-76188 }, { 54,-76188 }, { 55,-76188 }, + { 56,-76188 }, { 57,-76188 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-76188 }, + { 66,-76188 }, { 67,-76188 }, { 68,-76188 }, { 69,-76188 }, { 70,-76188 }, + { 71,-76188 }, { 72,-76188 }, { 73,-76188 }, { 74,-76188 }, { 75,-76188 }, + { 76,-76188 }, { 77,-76188 }, { 78,-76188 }, { 79,-76188 }, { 80,-76188 }, + { 81,-76188 }, { 82,5397 }, { 83,-76188 }, { 84,-76188 }, { 85,-76188 }, + { 86,-76188 }, { 87,-76188 }, { 88,-76188 }, { 89,-76188 }, { 90,-76188 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-76188 }, + + { 0, 0 }, { 97,-76188 }, { 98,-76188 }, { 99,-76188 }, { 100,-76188 }, + { 101,-76188 }, { 102,-76188 }, { 103,-76188 }, { 104,-76188 }, { 105,-76188 }, + { 106,-76188 }, { 107,-76188 }, { 108,-76188 }, { 109,-76188 }, { 110,-76188 }, + { 111,-76188 }, { 112,-76188 }, { 113,-76188 }, { 114,5397 }, { 115,-76188 }, + { 116,-76188 }, { 117,-76188 }, { 118,-76188 }, { 119,-76188 }, { 120,-76188 }, + { 121,-76188 }, { 122,-76188 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-76188 }, { 128,-76188 }, { 129,-76188 }, { 130,-76188 }, + { 131,-76188 }, { 132,-76188 }, { 133,-76188 }, { 134,-76188 }, { 135,-76188 }, + { 136,-76188 }, { 137,-76188 }, { 138,-76188 }, { 139,-76188 }, { 140,-76188 }, + { 141,-76188 }, { 142,-76188 }, { 143,-76188 }, { 144,-76188 }, { 145,-76188 }, + + { 146,-76188 }, { 147,-76188 }, { 148,-76188 }, { 149,-76188 }, { 150,-76188 }, + { 151,-76188 }, { 152,-76188 }, { 153,-76188 }, { 154,-76188 }, { 155,-76188 }, + { 156,-76188 }, { 157,-76188 }, { 158,-76188 }, { 159,-76188 }, { 160,-76188 }, + { 161,-76188 }, { 162,-76188 }, { 163,-76188 }, { 164,-76188 }, { 165,-76188 }, + { 166,-76188 }, { 167,-76188 }, { 168,-76188 }, { 169,-76188 }, { 170,-76188 }, + { 171,-76188 }, { 172,-76188 }, { 173,-76188 }, { 174,-76188 }, { 175,-76188 }, + { 176,-76188 }, { 177,-76188 }, { 178,-76188 }, { 179,-76188 }, { 180,-76188 }, + { 181,-76188 }, { 182,-76188 }, { 183,-76188 }, { 184,-76188 }, { 185,-76188 }, + { 186,-76188 }, { 187,-76188 }, { 188,-76188 }, { 189,-76188 }, { 190,-76188 }, + { 191,-76188 }, { 192,-76188 }, { 193,-76188 }, { 194,-76188 }, { 195,-76188 }, + + { 196,-76188 }, { 197,-76188 }, { 198,-76188 }, { 199,-76188 }, { 200,-76188 }, + { 201,-76188 }, { 202,-76188 }, { 203,-76188 }, { 204,-76188 }, { 205,-76188 }, + { 206,-76188 }, { 207,-76188 }, { 208,-76188 }, { 209,-76188 }, { 210,-76188 }, + { 211,-76188 }, { 212,-76188 }, { 213,-76188 }, { 214,-76188 }, { 215,-76188 }, + { 216,-76188 }, { 217,-76188 }, { 218,-76188 }, { 219,-76188 }, { 220,-76188 }, + { 221,-76188 }, { 222,-76188 }, { 223,-76188 }, { 224,-76188 }, { 225,-76188 }, + { 226,-76188 }, { 227,-76188 }, { 228,-76188 }, { 229,-76188 }, { 230,-76188 }, + { 231,-76188 }, { 232,-76188 }, { 233,-76188 }, { 234,-76188 }, { 235,-76188 }, + { 236,-76188 }, { 237,-76188 }, { 238,-76188 }, { 239,-76188 }, { 240,-76188 }, + { 241,-76188 }, { 242,-76188 }, { 243,-76188 }, { 244,-76188 }, { 245,-76188 }, + + { 246,-76188 }, { 247,-76188 }, { 248,-76188 }, { 249,-76188 }, { 250,-76188 }, + { 251,-76188 }, { 252,-76188 }, { 253,-76188 }, { 254,-76188 }, { 255,-76188 }, + { 0, 131 }, { 0,15678 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-76445 }, + { 49,-76445 }, { 50,-76445 }, { 51,-76445 }, { 52,-76445 }, { 53,-76445 }, + { 54,-76445 }, { 55,-76445 }, { 56,-76445 }, { 57,-76445 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-76445 }, { 66,-76445 }, { 67,5397 }, { 68,-76445 }, + { 69,-76445 }, { 70,-76445 }, { 71,-76445 }, { 72,-76445 }, { 73,-76445 }, + { 74,-76445 }, { 75,-76445 }, { 76,-76445 }, { 77,-76445 }, { 78,-76445 }, + { 79,-76445 }, { 80,-76445 }, { 81,-76445 }, { 82,-76445 }, { 83,-76445 }, + { 84,-76445 }, { 85,-76445 }, { 86,-76445 }, { 87,-76445 }, { 88,-76445 }, + + { 89,-76445 }, { 90,-76445 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-76445 }, { 0, 0 }, { 97,-76445 }, { 98,-76445 }, + { 99,5397 }, { 100,-76445 }, { 101,-76445 }, { 102,-76445 }, { 103,-76445 }, + { 104,-76445 }, { 105,-76445 }, { 106,-76445 }, { 107,-76445 }, { 108,-76445 }, + { 109,-76445 }, { 110,-76445 }, { 111,-76445 }, { 112,-76445 }, { 113,-76445 }, + { 114,-76445 }, { 115,-76445 }, { 116,-76445 }, { 117,-76445 }, { 118,-76445 }, + { 119,-76445 }, { 120,-76445 }, { 121,-76445 }, { 122,-76445 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-76445 }, { 128,-76445 }, + { 129,-76445 }, { 130,-76445 }, { 131,-76445 }, { 132,-76445 }, { 133,-76445 }, + { 134,-76445 }, { 135,-76445 }, { 136,-76445 }, { 137,-76445 }, { 138,-76445 }, + + { 139,-76445 }, { 140,-76445 }, { 141,-76445 }, { 142,-76445 }, { 143,-76445 }, + { 144,-76445 }, { 145,-76445 }, { 146,-76445 }, { 147,-76445 }, { 148,-76445 }, + { 149,-76445 }, { 150,-76445 }, { 151,-76445 }, { 152,-76445 }, { 153,-76445 }, + { 154,-76445 }, { 155,-76445 }, { 156,-76445 }, { 157,-76445 }, { 158,-76445 }, + { 159,-76445 }, { 160,-76445 }, { 161,-76445 }, { 162,-76445 }, { 163,-76445 }, + { 164,-76445 }, { 165,-76445 }, { 166,-76445 }, { 167,-76445 }, { 168,-76445 }, + { 169,-76445 }, { 170,-76445 }, { 171,-76445 }, { 172,-76445 }, { 173,-76445 }, + { 174,-76445 }, { 175,-76445 }, { 176,-76445 }, { 177,-76445 }, { 178,-76445 }, + { 179,-76445 }, { 180,-76445 }, { 181,-76445 }, { 182,-76445 }, { 183,-76445 }, + { 184,-76445 }, { 185,-76445 }, { 186,-76445 }, { 187,-76445 }, { 188,-76445 }, + + { 189,-76445 }, { 190,-76445 }, { 191,-76445 }, { 192,-76445 }, { 193,-76445 }, + { 194,-76445 }, { 195,-76445 }, { 196,-76445 }, { 197,-76445 }, { 198,-76445 }, + { 199,-76445 }, { 200,-76445 }, { 201,-76445 }, { 202,-76445 }, { 203,-76445 }, + { 204,-76445 }, { 205,-76445 }, { 206,-76445 }, { 207,-76445 }, { 208,-76445 }, + { 209,-76445 }, { 210,-76445 }, { 211,-76445 }, { 212,-76445 }, { 213,-76445 }, + { 214,-76445 }, { 215,-76445 }, { 216,-76445 }, { 217,-76445 }, { 218,-76445 }, + { 219,-76445 }, { 220,-76445 }, { 221,-76445 }, { 222,-76445 }, { 223,-76445 }, + { 224,-76445 }, { 225,-76445 }, { 226,-76445 }, { 227,-76445 }, { 228,-76445 }, + { 229,-76445 }, { 230,-76445 }, { 231,-76445 }, { 232,-76445 }, { 233,-76445 }, + { 234,-76445 }, { 235,-76445 }, { 236,-76445 }, { 237,-76445 }, { 238,-76445 }, + + { 239,-76445 }, { 240,-76445 }, { 241,-76445 }, { 242,-76445 }, { 243,-76445 }, + { 244,-76445 }, { 245,-76445 }, { 246,-76445 }, { 247,-76445 }, { 248,-76445 }, + { 249,-76445 }, { 250,-76445 }, { 251,-76445 }, { 252,-76445 }, { 253,-76445 }, + { 254,-76445 }, { 255,-76445 }, { 0, 131 }, { 0,15421 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-76702 }, { 49,-76702 }, { 50,-76702 }, { 51,-76702 }, + { 52,-76702 }, { 53,-76702 }, { 54,-76702 }, { 55,-76702 }, { 56,-76702 }, + { 57,-76702 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-76702 }, { 66,-76702 }, + { 67,-76702 }, { 68,-76702 }, { 69,-76702 }, { 70,-76702 }, { 71,-76702 }, + { 72,5397 }, { 73,-76702 }, { 74,-76702 }, { 75,-76702 }, { 76,-76702 }, + { 77,-76702 }, { 78,-76702 }, { 79,-76702 }, { 80,-76702 }, { 81,-76702 }, + + { 82,-76702 }, { 83,-76702 }, { 84,-76702 }, { 85,-76702 }, { 86,-76702 }, + { 87,-76702 }, { 88,-76702 }, { 89,-76702 }, { 90,-76702 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-76702 }, { 0, 0 }, + { 97,-76702 }, { 98,-76702 }, { 99,-76702 }, { 100,-76702 }, { 101,-76702 }, + { 102,-76702 }, { 103,-76702 }, { 104,5397 }, { 105,-76702 }, { 106,-76702 }, + { 107,-76702 }, { 108,-76702 }, { 109,-76702 }, { 110,-76702 }, { 111,-76702 }, + { 112,-76702 }, { 113,-76702 }, { 114,-76702 }, { 115,-76702 }, { 116,-76702 }, + { 117,-76702 }, { 118,-76702 }, { 119,-76702 }, { 120,-76702 }, { 121,-76702 }, + { 122,-76702 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-76702 }, { 128,-76702 }, { 129,-76702 }, { 130,-76702 }, { 131,-76702 }, + + { 132,-76702 }, { 133,-76702 }, { 134,-76702 }, { 135,-76702 }, { 136,-76702 }, + { 137,-76702 }, { 138,-76702 }, { 139,-76702 }, { 140,-76702 }, { 141,-76702 }, + { 142,-76702 }, { 143,-76702 }, { 144,-76702 }, { 145,-76702 }, { 146,-76702 }, + { 147,-76702 }, { 148,-76702 }, { 149,-76702 }, { 150,-76702 }, { 151,-76702 }, + { 152,-76702 }, { 153,-76702 }, { 154,-76702 }, { 155,-76702 }, { 156,-76702 }, + { 157,-76702 }, { 158,-76702 }, { 159,-76702 }, { 160,-76702 }, { 161,-76702 }, + { 162,-76702 }, { 163,-76702 }, { 164,-76702 }, { 165,-76702 }, { 166,-76702 }, + { 167,-76702 }, { 168,-76702 }, { 169,-76702 }, { 170,-76702 }, { 171,-76702 }, + { 172,-76702 }, { 173,-76702 }, { 174,-76702 }, { 175,-76702 }, { 176,-76702 }, + { 177,-76702 }, { 178,-76702 }, { 179,-76702 }, { 180,-76702 }, { 181,-76702 }, + + { 182,-76702 }, { 183,-76702 }, { 184,-76702 }, { 185,-76702 }, { 186,-76702 }, + { 187,-76702 }, { 188,-76702 }, { 189,-76702 }, { 190,-76702 }, { 191,-76702 }, + { 192,-76702 }, { 193,-76702 }, { 194,-76702 }, { 195,-76702 }, { 196,-76702 }, + { 197,-76702 }, { 198,-76702 }, { 199,-76702 }, { 200,-76702 }, { 201,-76702 }, + { 202,-76702 }, { 203,-76702 }, { 204,-76702 }, { 205,-76702 }, { 206,-76702 }, + { 207,-76702 }, { 208,-76702 }, { 209,-76702 }, { 210,-76702 }, { 211,-76702 }, + { 212,-76702 }, { 213,-76702 }, { 214,-76702 }, { 215,-76702 }, { 216,-76702 }, + { 217,-76702 }, { 218,-76702 }, { 219,-76702 }, { 220,-76702 }, { 221,-76702 }, + { 222,-76702 }, { 223,-76702 }, { 224,-76702 }, { 225,-76702 }, { 226,-76702 }, + { 227,-76702 }, { 228,-76702 }, { 229,-76702 }, { 230,-76702 }, { 231,-76702 }, + + { 232,-76702 }, { 233,-76702 }, { 234,-76702 }, { 235,-76702 }, { 236,-76702 }, + { 237,-76702 }, { 238,-76702 }, { 239,-76702 }, { 240,-76702 }, { 241,-76702 }, + { 242,-76702 }, { 243,-76702 }, { 244,-76702 }, { 245,-76702 }, { 246,-76702 }, + { 247,-76702 }, { 248,-76702 }, { 249,-76702 }, { 250,-76702 }, { 251,-76702 }, + { 252,-76702 }, { 253,-76702 }, { 254,-76702 }, { 255,-76702 }, { 0, 38 }, + { 0,15164 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-76959 }, { 49,-76959 }, + { 50,-76959 }, { 51,-76959 }, { 52,-76959 }, { 53,-76959 }, { 54,-76959 }, + { 55,-76959 }, { 56,-76959 }, { 57,-76959 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-76959 }, { 66,-76959 }, { 67,-76959 }, { 68,-76959 }, { 69,-76959 }, + { 70,-76959 }, { 71,-76959 }, { 72,-76959 }, { 73,-76959 }, { 74,-76959 }, + + { 75,-76959 }, { 76,-76959 }, { 77,-76959 }, { 78,-76959 }, { 79,-76959 }, + { 80,-76959 }, { 81,-76959 }, { 82,-76959 }, { 83,-76959 }, { 84,-76959 }, + { 85,-76959 }, { 86,-76959 }, { 87,-76959 }, { 88,-76959 }, { 89,-76959 }, + { 90,-76959 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-76959 }, { 0, 0 }, { 97,-76959 }, { 98,-76959 }, { 99,-76959 }, + { 100,-76959 }, { 101,-76959 }, { 102,-76959 }, { 103,-76959 }, { 104,-76959 }, + { 105,-76959 }, { 106,-76959 }, { 107,-76959 }, { 108,-76959 }, { 109,-76959 }, + { 110,-76959 }, { 111,-76959 }, { 112,-76959 }, { 113,-76959 }, { 114,-76959 }, + { 115,-76959 }, { 116,-76959 }, { 117,-76959 }, { 118,-76959 }, { 119,-76959 }, + { 120,-76959 }, { 121,-76959 }, { 122,-76959 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-76959 }, { 128,-76959 }, { 129,-76959 }, + { 130,-76959 }, { 131,-76959 }, { 132,-76959 }, { 133,-76959 }, { 134,-76959 }, + { 135,-76959 }, { 136,-76959 }, { 137,-76959 }, { 138,-76959 }, { 139,-76959 }, + { 140,-76959 }, { 141,-76959 }, { 142,-76959 }, { 143,-76959 }, { 144,-76959 }, + { 145,-76959 }, { 146,-76959 }, { 147,-76959 }, { 148,-76959 }, { 149,-76959 }, + { 150,-76959 }, { 151,-76959 }, { 152,-76959 }, { 153,-76959 }, { 154,-76959 }, + { 155,-76959 }, { 156,-76959 }, { 157,-76959 }, { 158,-76959 }, { 159,-76959 }, + { 160,-76959 }, { 161,-76959 }, { 162,-76959 }, { 163,-76959 }, { 164,-76959 }, + { 165,-76959 }, { 166,-76959 }, { 167,-76959 }, { 168,-76959 }, { 169,-76959 }, + { 170,-76959 }, { 171,-76959 }, { 172,-76959 }, { 173,-76959 }, { 174,-76959 }, + + { 175,-76959 }, { 176,-76959 }, { 177,-76959 }, { 178,-76959 }, { 179,-76959 }, + { 180,-76959 }, { 181,-76959 }, { 182,-76959 }, { 183,-76959 }, { 184,-76959 }, + { 185,-76959 }, { 186,-76959 }, { 187,-76959 }, { 188,-76959 }, { 189,-76959 }, + { 190,-76959 }, { 191,-76959 }, { 192,-76959 }, { 193,-76959 }, { 194,-76959 }, + { 195,-76959 }, { 196,-76959 }, { 197,-76959 }, { 198,-76959 }, { 199,-76959 }, + { 200,-76959 }, { 201,-76959 }, { 202,-76959 }, { 203,-76959 }, { 204,-76959 }, + { 205,-76959 }, { 206,-76959 }, { 207,-76959 }, { 208,-76959 }, { 209,-76959 }, + { 210,-76959 }, { 211,-76959 }, { 212,-76959 }, { 213,-76959 }, { 214,-76959 }, + { 215,-76959 }, { 216,-76959 }, { 217,-76959 }, { 218,-76959 }, { 219,-76959 }, + { 220,-76959 }, { 221,-76959 }, { 222,-76959 }, { 223,-76959 }, { 224,-76959 }, + + { 225,-76959 }, { 226,-76959 }, { 227,-76959 }, { 228,-76959 }, { 229,-76959 }, + { 230,-76959 }, { 231,-76959 }, { 232,-76959 }, { 233,-76959 }, { 234,-76959 }, + { 235,-76959 }, { 236,-76959 }, { 237,-76959 }, { 238,-76959 }, { 239,-76959 }, + { 240,-76959 }, { 241,-76959 }, { 242,-76959 }, { 243,-76959 }, { 244,-76959 }, + { 245,-76959 }, { 246,-76959 }, { 247,-76959 }, { 248,-76959 }, { 249,-76959 }, + { 250,-76959 }, { 251,-76959 }, { 252,-76959 }, { 253,-76959 }, { 254,-76959 }, + { 255,-76959 }, { 0, 53 }, { 0,14907 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-77216 }, { 49,-77216 }, { 50,-77216 }, { 51,-77216 }, { 52,-77216 }, + { 53,-77216 }, { 54,-77216 }, { 55,-77216 }, { 56,-77216 }, { 57,-77216 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-77216 }, { 66,-77216 }, { 67,-77216 }, + + { 68,-77216 }, { 69,-77216 }, { 70,-77216 }, { 71,-77216 }, { 72,-77216 }, + { 73,-77216 }, { 74,-77216 }, { 75,-77216 }, { 76,-77216 }, { 77,-77216 }, + { 78,-77216 }, { 79,-77216 }, { 80,-77216 }, { 81,-77216 }, { 82,-77216 }, + { 83,-77216 }, { 84,-77216 }, { 85,-77216 }, { 86,-77216 }, { 87,-77216 }, + { 88,-77216 }, { 89,-77216 }, { 90,-77216 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-77216 }, { 0, 0 }, { 97,-77216 }, + { 98,-77216 }, { 99,-77216 }, { 100,-77216 }, { 101,-77216 }, { 102,-77216 }, + { 103,-77216 }, { 104,-77216 }, { 105,-77216 }, { 106,-77216 }, { 107,-77216 }, + { 108,-77216 }, { 109,-77216 }, { 110,-77216 }, { 111,-77216 }, { 112,-77216 }, + { 113,-77216 }, { 114,-77216 }, { 115,-77216 }, { 116,-77216 }, { 117,-77216 }, + + { 118,-77216 }, { 119,-77216 }, { 120,-77216 }, { 121,-77216 }, { 122,-77216 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-77216 }, + { 128,-77216 }, { 129,-77216 }, { 130,-77216 }, { 131,-77216 }, { 132,-77216 }, + { 133,-77216 }, { 134,-77216 }, { 135,-77216 }, { 136,-77216 }, { 137,-77216 }, + { 138,-77216 }, { 139,-77216 }, { 140,-77216 }, { 141,-77216 }, { 142,-77216 }, + { 143,-77216 }, { 144,-77216 }, { 145,-77216 }, { 146,-77216 }, { 147,-77216 }, + { 148,-77216 }, { 149,-77216 }, { 150,-77216 }, { 151,-77216 }, { 152,-77216 }, + { 153,-77216 }, { 154,-77216 }, { 155,-77216 }, { 156,-77216 }, { 157,-77216 }, + { 158,-77216 }, { 159,-77216 }, { 160,-77216 }, { 161,-77216 }, { 162,-77216 }, + { 163,-77216 }, { 164,-77216 }, { 165,-77216 }, { 166,-77216 }, { 167,-77216 }, + + { 168,-77216 }, { 169,-77216 }, { 170,-77216 }, { 171,-77216 }, { 172,-77216 }, + { 173,-77216 }, { 174,-77216 }, { 175,-77216 }, { 176,-77216 }, { 177,-77216 }, + { 178,-77216 }, { 179,-77216 }, { 180,-77216 }, { 181,-77216 }, { 182,-77216 }, + { 183,-77216 }, { 184,-77216 }, { 185,-77216 }, { 186,-77216 }, { 187,-77216 }, + { 188,-77216 }, { 189,-77216 }, { 190,-77216 }, { 191,-77216 }, { 192,-77216 }, + { 193,-77216 }, { 194,-77216 }, { 195,-77216 }, { 196,-77216 }, { 197,-77216 }, + { 198,-77216 }, { 199,-77216 }, { 200,-77216 }, { 201,-77216 }, { 202,-77216 }, + { 203,-77216 }, { 204,-77216 }, { 205,-77216 }, { 206,-77216 }, { 207,-77216 }, + { 208,-77216 }, { 209,-77216 }, { 210,-77216 }, { 211,-77216 }, { 212,-77216 }, + { 213,-77216 }, { 214,-77216 }, { 215,-77216 }, { 216,-77216 }, { 217,-77216 }, + + { 218,-77216 }, { 219,-77216 }, { 220,-77216 }, { 221,-77216 }, { 222,-77216 }, + { 223,-77216 }, { 224,-77216 }, { 225,-77216 }, { 226,-77216 }, { 227,-77216 }, + { 228,-77216 }, { 229,-77216 }, { 230,-77216 }, { 231,-77216 }, { 232,-77216 }, + { 233,-77216 }, { 234,-77216 }, { 235,-77216 }, { 236,-77216 }, { 237,-77216 }, + { 238,-77216 }, { 239,-77216 }, { 240,-77216 }, { 241,-77216 }, { 242,-77216 }, + { 243,-77216 }, { 244,-77216 }, { 245,-77216 }, { 246,-77216 }, { 247,-77216 }, + { 248,-77216 }, { 249,-77216 }, { 250,-77216 }, { 251,-77216 }, { 252,-77216 }, + { 253,-77216 }, { 254,-77216 }, { 255,-77216 }, { 0, 131 }, { 0,14650 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-77473 }, { 49,-77473 }, { 50,-77473 }, + { 51,-77473 }, { 52,-77473 }, { 53,-77473 }, { 54,-77473 }, { 55,-77473 }, + { 56,-77473 }, { 57,-77473 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-77473 }, + { 66,-77473 }, { 67,-77473 }, { 68,-77473 }, { 69,-77473 }, { 70,-77473 }, + { 71,-77473 }, { 72,-77473 }, { 73,-77473 }, { 74,-77473 }, { 75,-77473 }, + { 76,-77473 }, { 77,-77473 }, { 78,-77473 }, { 79,-77473 }, { 80,-77473 }, + { 81,-77473 }, { 82,-77473 }, { 83,-77473 }, { 84,4883 }, { 85,-77473 }, + { 86,-77473 }, { 87,-77473 }, { 88,-77473 }, { 89,-77473 }, { 90,-77473 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-77473 }, + { 0, 0 }, { 97,-77473 }, { 98,-77473 }, { 99,-77473 }, { 100,-77473 }, + { 101,-77473 }, { 102,-77473 }, { 103,-77473 }, { 104,-77473 }, { 105,-77473 }, + { 106,-77473 }, { 107,-77473 }, { 108,-77473 }, { 109,-77473 }, { 110,-77473 }, + + { 111,-77473 }, { 112,-77473 }, { 113,-77473 }, { 114,-77473 }, { 115,-77473 }, + { 116,4883 }, { 117,-77473 }, { 118,-77473 }, { 119,-77473 }, { 120,-77473 }, + { 121,-77473 }, { 122,-77473 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-77473 }, { 128,-77473 }, { 129,-77473 }, { 130,-77473 }, + { 131,-77473 }, { 132,-77473 }, { 133,-77473 }, { 134,-77473 }, { 135,-77473 }, + { 136,-77473 }, { 137,-77473 }, { 138,-77473 }, { 139,-77473 }, { 140,-77473 }, + { 141,-77473 }, { 142,-77473 }, { 143,-77473 }, { 144,-77473 }, { 145,-77473 }, + { 146,-77473 }, { 147,-77473 }, { 148,-77473 }, { 149,-77473 }, { 150,-77473 }, + { 151,-77473 }, { 152,-77473 }, { 153,-77473 }, { 154,-77473 }, { 155,-77473 }, + { 156,-77473 }, { 157,-77473 }, { 158,-77473 }, { 159,-77473 }, { 160,-77473 }, + + { 161,-77473 }, { 162,-77473 }, { 163,-77473 }, { 164,-77473 }, { 165,-77473 }, + { 166,-77473 }, { 167,-77473 }, { 168,-77473 }, { 169,-77473 }, { 170,-77473 }, + { 171,-77473 }, { 172,-77473 }, { 173,-77473 }, { 174,-77473 }, { 175,-77473 }, + { 176,-77473 }, { 177,-77473 }, { 178,-77473 }, { 179,-77473 }, { 180,-77473 }, + { 181,-77473 }, { 182,-77473 }, { 183,-77473 }, { 184,-77473 }, { 185,-77473 }, + { 186,-77473 }, { 187,-77473 }, { 188,-77473 }, { 189,-77473 }, { 190,-77473 }, + { 191,-77473 }, { 192,-77473 }, { 193,-77473 }, { 194,-77473 }, { 195,-77473 }, + { 196,-77473 }, { 197,-77473 }, { 198,-77473 }, { 199,-77473 }, { 200,-77473 }, + { 201,-77473 }, { 202,-77473 }, { 203,-77473 }, { 204,-77473 }, { 205,-77473 }, + { 206,-77473 }, { 207,-77473 }, { 208,-77473 }, { 209,-77473 }, { 210,-77473 }, + + { 211,-77473 }, { 212,-77473 }, { 213,-77473 }, { 214,-77473 }, { 215,-77473 }, + { 216,-77473 }, { 217,-77473 }, { 218,-77473 }, { 219,-77473 }, { 220,-77473 }, + { 221,-77473 }, { 222,-77473 }, { 223,-77473 }, { 224,-77473 }, { 225,-77473 }, + { 226,-77473 }, { 227,-77473 }, { 228,-77473 }, { 229,-77473 }, { 230,-77473 }, + { 231,-77473 }, { 232,-77473 }, { 233,-77473 }, { 234,-77473 }, { 235,-77473 }, + { 236,-77473 }, { 237,-77473 }, { 238,-77473 }, { 239,-77473 }, { 240,-77473 }, + { 241,-77473 }, { 242,-77473 }, { 243,-77473 }, { 244,-77473 }, { 245,-77473 }, + { 246,-77473 }, { 247,-77473 }, { 248,-77473 }, { 249,-77473 }, { 250,-77473 }, + { 251,-77473 }, { 252,-77473 }, { 253,-77473 }, { 254,-77473 }, { 255,-77473 }, + { 0, 131 }, { 0,14393 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-77730 }, + { 49,-77730 }, { 50,-77730 }, { 51,-77730 }, { 52,-77730 }, { 53,-77730 }, + + { 54,-77730 }, { 55,-77730 }, { 56,-77730 }, { 57,-77730 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-77730 }, { 66,-77730 }, { 67,-77730 }, { 68,-77730 }, + { 69,-77730 }, { 70,-77730 }, { 71,-77730 }, { 72,-77730 }, { 73,-77730 }, + { 74,-77730 }, { 75,-77730 }, { 76,-77730 }, { 77,-77730 }, { 78,-77730 }, + { 79,4883 }, { 80,-77730 }, { 81,-77730 }, { 82,-77730 }, { 83,-77730 }, + { 84,-77730 }, { 85,-77730 }, { 86,-77730 }, { 87,-77730 }, { 88,-77730 }, + { 89,-77730 }, { 90,-77730 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-77730 }, { 0, 0 }, { 97,-77730 }, { 98,-77730 }, + { 99,-77730 }, { 100,-77730 }, { 101,-77730 }, { 102,-77730 }, { 103,-77730 }, + + { 104,-77730 }, { 105,-77730 }, { 106,-77730 }, { 107,-77730 }, { 108,-77730 }, + { 109,-77730 }, { 110,-77730 }, { 111,4883 }, { 112,-77730 }, { 113,-77730 }, + { 114,-77730 }, { 115,-77730 }, { 116,-77730 }, { 117,-77730 }, { 118,-77730 }, + { 119,-77730 }, { 120,-77730 }, { 121,-77730 }, { 122,-77730 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-77730 }, { 128,-77730 }, + { 129,-77730 }, { 130,-77730 }, { 131,-77730 }, { 132,-77730 }, { 133,-77730 }, + { 134,-77730 }, { 135,-77730 }, { 136,-77730 }, { 137,-77730 }, { 138,-77730 }, + { 139,-77730 }, { 140,-77730 }, { 141,-77730 }, { 142,-77730 }, { 143,-77730 }, + { 144,-77730 }, { 145,-77730 }, { 146,-77730 }, { 147,-77730 }, { 148,-77730 }, + { 149,-77730 }, { 150,-77730 }, { 151,-77730 }, { 152,-77730 }, { 153,-77730 }, + + { 154,-77730 }, { 155,-77730 }, { 156,-77730 }, { 157,-77730 }, { 158,-77730 }, + { 159,-77730 }, { 160,-77730 }, { 161,-77730 }, { 162,-77730 }, { 163,-77730 }, + { 164,-77730 }, { 165,-77730 }, { 166,-77730 }, { 167,-77730 }, { 168,-77730 }, + { 169,-77730 }, { 170,-77730 }, { 171,-77730 }, { 172,-77730 }, { 173,-77730 }, + { 174,-77730 }, { 175,-77730 }, { 176,-77730 }, { 177,-77730 }, { 178,-77730 }, + { 179,-77730 }, { 180,-77730 }, { 181,-77730 }, { 182,-77730 }, { 183,-77730 }, + { 184,-77730 }, { 185,-77730 }, { 186,-77730 }, { 187,-77730 }, { 188,-77730 }, + { 189,-77730 }, { 190,-77730 }, { 191,-77730 }, { 192,-77730 }, { 193,-77730 }, + { 194,-77730 }, { 195,-77730 }, { 196,-77730 }, { 197,-77730 }, { 198,-77730 }, + { 199,-77730 }, { 200,-77730 }, { 201,-77730 }, { 202,-77730 }, { 203,-77730 }, + + { 204,-77730 }, { 205,-77730 }, { 206,-77730 }, { 207,-77730 }, { 208,-77730 }, + { 209,-77730 }, { 210,-77730 }, { 211,-77730 }, { 212,-77730 }, { 213,-77730 }, + { 214,-77730 }, { 215,-77730 }, { 216,-77730 }, { 217,-77730 }, { 218,-77730 }, + { 219,-77730 }, { 220,-77730 }, { 221,-77730 }, { 222,-77730 }, { 223,-77730 }, + { 224,-77730 }, { 225,-77730 }, { 226,-77730 }, { 227,-77730 }, { 228,-77730 }, + { 229,-77730 }, { 230,-77730 }, { 231,-77730 }, { 232,-77730 }, { 233,-77730 }, + { 234,-77730 }, { 235,-77730 }, { 236,-77730 }, { 237,-77730 }, { 238,-77730 }, + { 239,-77730 }, { 240,-77730 }, { 241,-77730 }, { 242,-77730 }, { 243,-77730 }, + { 244,-77730 }, { 245,-77730 }, { 246,-77730 }, { 247,-77730 }, { 248,-77730 }, + { 249,-77730 }, { 250,-77730 }, { 251,-77730 }, { 252,-77730 }, { 253,-77730 }, + + { 254,-77730 }, { 255,-77730 }, { 0, 131 }, { 0,14136 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-77987 }, { 49,-77987 }, { 50,-77987 }, { 51,-77987 }, + { 52,-77987 }, { 53,-77987 }, { 54,-77987 }, { 55,-77987 }, { 56,-77987 }, + { 57,-77987 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-77987 }, { 66,-77987 }, + { 67,-77987 }, { 68,-77987 }, { 69,-77987 }, { 70,-77987 }, { 71,-77987 }, + { 72,-77987 }, { 73,-77987 }, { 74,-77987 }, { 75,-77987 }, { 76,-77987 }, + { 77,-77987 }, { 78,-77987 }, { 79,4883 }, { 80,-77987 }, { 81,-77987 }, + { 82,-77987 }, { 83,-77987 }, { 84,-77987 }, { 85,-77987 }, { 86,-77987 }, + { 87,-77987 }, { 88,-77987 }, { 89,-77987 }, { 90,-77987 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-77987 }, { 0, 0 }, + + { 97,-77987 }, { 98,-77987 }, { 99,-77987 }, { 100,-77987 }, { 101,-77987 }, + { 102,-77987 }, { 103,-77987 }, { 104,-77987 }, { 105,-77987 }, { 106,-77987 }, + { 107,-77987 }, { 108,-77987 }, { 109,-77987 }, { 110,-77987 }, { 111,4883 }, + { 112,-77987 }, { 113,-77987 }, { 114,-77987 }, { 115,-77987 }, { 116,-77987 }, + { 117,-77987 }, { 118,-77987 }, { 119,-77987 }, { 120,-77987 }, { 121,-77987 }, + { 122,-77987 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-77987 }, { 128,-77987 }, { 129,-77987 }, { 130,-77987 }, { 131,-77987 }, + { 132,-77987 }, { 133,-77987 }, { 134,-77987 }, { 135,-77987 }, { 136,-77987 }, + { 137,-77987 }, { 138,-77987 }, { 139,-77987 }, { 140,-77987 }, { 141,-77987 }, + { 142,-77987 }, { 143,-77987 }, { 144,-77987 }, { 145,-77987 }, { 146,-77987 }, + + { 147,-77987 }, { 148,-77987 }, { 149,-77987 }, { 150,-77987 }, { 151,-77987 }, + { 152,-77987 }, { 153,-77987 }, { 154,-77987 }, { 155,-77987 }, { 156,-77987 }, + { 157,-77987 }, { 158,-77987 }, { 159,-77987 }, { 160,-77987 }, { 161,-77987 }, + { 162,-77987 }, { 163,-77987 }, { 164,-77987 }, { 165,-77987 }, { 166,-77987 }, + { 167,-77987 }, { 168,-77987 }, { 169,-77987 }, { 170,-77987 }, { 171,-77987 }, + { 172,-77987 }, { 173,-77987 }, { 174,-77987 }, { 175,-77987 }, { 176,-77987 }, + { 177,-77987 }, { 178,-77987 }, { 179,-77987 }, { 180,-77987 }, { 181,-77987 }, + { 182,-77987 }, { 183,-77987 }, { 184,-77987 }, { 185,-77987 }, { 186,-77987 }, + { 187,-77987 }, { 188,-77987 }, { 189,-77987 }, { 190,-77987 }, { 191,-77987 }, + { 192,-77987 }, { 193,-77987 }, { 194,-77987 }, { 195,-77987 }, { 196,-77987 }, + + { 197,-77987 }, { 198,-77987 }, { 199,-77987 }, { 200,-77987 }, { 201,-77987 }, + { 202,-77987 }, { 203,-77987 }, { 204,-77987 }, { 205,-77987 }, { 206,-77987 }, + { 207,-77987 }, { 208,-77987 }, { 209,-77987 }, { 210,-77987 }, { 211,-77987 }, + { 212,-77987 }, { 213,-77987 }, { 214,-77987 }, { 215,-77987 }, { 216,-77987 }, + { 217,-77987 }, { 218,-77987 }, { 219,-77987 }, { 220,-77987 }, { 221,-77987 }, + { 222,-77987 }, { 223,-77987 }, { 224,-77987 }, { 225,-77987 }, { 226,-77987 }, + { 227,-77987 }, { 228,-77987 }, { 229,-77987 }, { 230,-77987 }, { 231,-77987 }, + { 232,-77987 }, { 233,-77987 }, { 234,-77987 }, { 235,-77987 }, { 236,-77987 }, + { 237,-77987 }, { 238,-77987 }, { 239,-77987 }, { 240,-77987 }, { 241,-77987 }, + { 242,-77987 }, { 243,-77987 }, { 244,-77987 }, { 245,-77987 }, { 246,-77987 }, + + { 247,-77987 }, { 248,-77987 }, { 249,-77987 }, { 250,-77987 }, { 251,-77987 }, + { 252,-77987 }, { 253,-77987 }, { 254,-77987 }, { 255,-77987 }, { 0, 131 }, + { 0,13879 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-78244 }, { 49,-78244 }, + { 50,-78244 }, { 51,-78244 }, { 52,-78244 }, { 53,-78244 }, { 54,-78244 }, + { 55,-78244 }, { 56,-78244 }, { 57,-78244 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-78244 }, { 66,-78244 }, { 67,-78244 }, { 68,-78244 }, { 69,-78244 }, + { 70,4883 }, { 71,-78244 }, { 72,-78244 }, { 73,-78244 }, { 74,-78244 }, + { 75,-78244 }, { 76,-78244 }, { 77,-78244 }, { 78,-78244 }, { 79,-78244 }, + { 80,-78244 }, { 81,-78244 }, { 82,-78244 }, { 83,-78244 }, { 84,-78244 }, + { 85,-78244 }, { 86,-78244 }, { 87,-78244 }, { 88,-78244 }, { 89,-78244 }, + + { 90,-78244 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-78244 }, { 0, 0 }, { 97,-78244 }, { 98,-78244 }, { 99,-78244 }, + { 100,-78244 }, { 101,-78244 }, { 102,4883 }, { 103,-78244 }, { 104,-78244 }, + { 105,-78244 }, { 106,-78244 }, { 107,-78244 }, { 108,-78244 }, { 109,-78244 }, + { 110,-78244 }, { 111,-78244 }, { 112,-78244 }, { 113,-78244 }, { 114,-78244 }, + { 115,-78244 }, { 116,-78244 }, { 117,-78244 }, { 118,-78244 }, { 119,-78244 }, + { 120,-78244 }, { 121,-78244 }, { 122,-78244 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-78244 }, { 128,-78244 }, { 129,-78244 }, + { 130,-78244 }, { 131,-78244 }, { 132,-78244 }, { 133,-78244 }, { 134,-78244 }, + { 135,-78244 }, { 136,-78244 }, { 137,-78244 }, { 138,-78244 }, { 139,-78244 }, + + { 140,-78244 }, { 141,-78244 }, { 142,-78244 }, { 143,-78244 }, { 144,-78244 }, + { 145,-78244 }, { 146,-78244 }, { 147,-78244 }, { 148,-78244 }, { 149,-78244 }, + { 150,-78244 }, { 151,-78244 }, { 152,-78244 }, { 153,-78244 }, { 154,-78244 }, + { 155,-78244 }, { 156,-78244 }, { 157,-78244 }, { 158,-78244 }, { 159,-78244 }, + { 160,-78244 }, { 161,-78244 }, { 162,-78244 }, { 163,-78244 }, { 164,-78244 }, + { 165,-78244 }, { 166,-78244 }, { 167,-78244 }, { 168,-78244 }, { 169,-78244 }, + { 170,-78244 }, { 171,-78244 }, { 172,-78244 }, { 173,-78244 }, { 174,-78244 }, + { 175,-78244 }, { 176,-78244 }, { 177,-78244 }, { 178,-78244 }, { 179,-78244 }, + { 180,-78244 }, { 181,-78244 }, { 182,-78244 }, { 183,-78244 }, { 184,-78244 }, + { 185,-78244 }, { 186,-78244 }, { 187,-78244 }, { 188,-78244 }, { 189,-78244 }, + + { 190,-78244 }, { 191,-78244 }, { 192,-78244 }, { 193,-78244 }, { 194,-78244 }, + { 195,-78244 }, { 196,-78244 }, { 197,-78244 }, { 198,-78244 }, { 199,-78244 }, + { 200,-78244 }, { 201,-78244 }, { 202,-78244 }, { 203,-78244 }, { 204,-78244 }, + { 205,-78244 }, { 206,-78244 }, { 207,-78244 }, { 208,-78244 }, { 209,-78244 }, + { 210,-78244 }, { 211,-78244 }, { 212,-78244 }, { 213,-78244 }, { 214,-78244 }, + { 215,-78244 }, { 216,-78244 }, { 217,-78244 }, { 218,-78244 }, { 219,-78244 }, + { 220,-78244 }, { 221,-78244 }, { 222,-78244 }, { 223,-78244 }, { 224,-78244 }, + { 225,-78244 }, { 226,-78244 }, { 227,-78244 }, { 228,-78244 }, { 229,-78244 }, + { 230,-78244 }, { 231,-78244 }, { 232,-78244 }, { 233,-78244 }, { 234,-78244 }, + { 235,-78244 }, { 236,-78244 }, { 237,-78244 }, { 238,-78244 }, { 239,-78244 }, + + { 240,-78244 }, { 241,-78244 }, { 242,-78244 }, { 243,-78244 }, { 244,-78244 }, + { 245,-78244 }, { 246,-78244 }, { 247,-78244 }, { 248,-78244 }, { 249,-78244 }, + { 250,-78244 }, { 251,-78244 }, { 252,-78244 }, { 253,-78244 }, { 254,-78244 }, + { 255,-78244 }, { 0, 131 }, { 0,13622 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-78501 }, { 49,-78501 }, { 50,-78501 }, { 51,-78501 }, { 52,-78501 }, + { 53,-78501 }, { 54,-78501 }, { 55,-78501 }, { 56,-78501 }, { 57,-78501 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-78501 }, { 66,-78501 }, { 67,-78501 }, + { 68,-78501 }, { 69,4883 }, { 70,-78501 }, { 71,-78501 }, { 72,-78501 }, + { 73,-78501 }, { 74,-78501 }, { 75,-78501 }, { 76,-78501 }, { 77,-78501 }, + { 78,-78501 }, { 79,-78501 }, { 80,-78501 }, { 81,-78501 }, { 82,-78501 }, + + { 83,-78501 }, { 84,-78501 }, { 85,-78501 }, { 86,-78501 }, { 87,-78501 }, + { 88,-78501 }, { 89,-78501 }, { 90,-78501 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-78501 }, { 0, 0 }, { 97,-78501 }, + { 98,-78501 }, { 99,-78501 }, { 100,-78501 }, { 101,4883 }, { 102,-78501 }, + { 103,-78501 }, { 104,-78501 }, { 105,-78501 }, { 106,-78501 }, { 107,-78501 }, + { 108,-78501 }, { 109,-78501 }, { 110,-78501 }, { 111,-78501 }, { 112,-78501 }, + { 113,-78501 }, { 114,-78501 }, { 115,-78501 }, { 116,-78501 }, { 117,-78501 }, + { 118,-78501 }, { 119,-78501 }, { 120,-78501 }, { 121,-78501 }, { 122,-78501 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-78501 }, + { 128,-78501 }, { 129,-78501 }, { 130,-78501 }, { 131,-78501 }, { 132,-78501 }, + + { 133,-78501 }, { 134,-78501 }, { 135,-78501 }, { 136,-78501 }, { 137,-78501 }, + { 138,-78501 }, { 139,-78501 }, { 140,-78501 }, { 141,-78501 }, { 142,-78501 }, + { 143,-78501 }, { 144,-78501 }, { 145,-78501 }, { 146,-78501 }, { 147,-78501 }, + { 148,-78501 }, { 149,-78501 }, { 150,-78501 }, { 151,-78501 }, { 152,-78501 }, + { 153,-78501 }, { 154,-78501 }, { 155,-78501 }, { 156,-78501 }, { 157,-78501 }, + { 158,-78501 }, { 159,-78501 }, { 160,-78501 }, { 161,-78501 }, { 162,-78501 }, + { 163,-78501 }, { 164,-78501 }, { 165,-78501 }, { 166,-78501 }, { 167,-78501 }, + { 168,-78501 }, { 169,-78501 }, { 170,-78501 }, { 171,-78501 }, { 172,-78501 }, + { 173,-78501 }, { 174,-78501 }, { 175,-78501 }, { 176,-78501 }, { 177,-78501 }, + { 178,-78501 }, { 179,-78501 }, { 180,-78501 }, { 181,-78501 }, { 182,-78501 }, + + { 183,-78501 }, { 184,-78501 }, { 185,-78501 }, { 186,-78501 }, { 187,-78501 }, + { 188,-78501 }, { 189,-78501 }, { 190,-78501 }, { 191,-78501 }, { 192,-78501 }, + { 193,-78501 }, { 194,-78501 }, { 195,-78501 }, { 196,-78501 }, { 197,-78501 }, + { 198,-78501 }, { 199,-78501 }, { 200,-78501 }, { 201,-78501 }, { 202,-78501 }, + { 203,-78501 }, { 204,-78501 }, { 205,-78501 }, { 206,-78501 }, { 207,-78501 }, + { 208,-78501 }, { 209,-78501 }, { 210,-78501 }, { 211,-78501 }, { 212,-78501 }, + { 213,-78501 }, { 214,-78501 }, { 215,-78501 }, { 216,-78501 }, { 217,-78501 }, + { 218,-78501 }, { 219,-78501 }, { 220,-78501 }, { 221,-78501 }, { 222,-78501 }, + { 223,-78501 }, { 224,-78501 }, { 225,-78501 }, { 226,-78501 }, { 227,-78501 }, + { 228,-78501 }, { 229,-78501 }, { 230,-78501 }, { 231,-78501 }, { 232,-78501 }, + + { 233,-78501 }, { 234,-78501 }, { 235,-78501 }, { 236,-78501 }, { 237,-78501 }, + { 238,-78501 }, { 239,-78501 }, { 240,-78501 }, { 241,-78501 }, { 242,-78501 }, + { 243,-78501 }, { 244,-78501 }, { 245,-78501 }, { 246,-78501 }, { 247,-78501 }, + { 248,-78501 }, { 249,-78501 }, { 250,-78501 }, { 251,-78501 }, { 252,-78501 }, + { 253,-78501 }, { 254,-78501 }, { 255,-78501 }, { 0, 131 }, { 0,13365 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-78758 }, { 49,-78758 }, { 50,-78758 }, + { 51,-78758 }, { 52,-78758 }, { 53,-78758 }, { 54,-78758 }, { 55,-78758 }, + { 56,-78758 }, { 57,-78758 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-78758 }, + { 66,-78758 }, { 67,-78758 }, { 68,-78758 }, { 69,4883 }, { 70,-78758 }, + { 71,-78758 }, { 72,-78758 }, { 73,-78758 }, { 74,-78758 }, { 75,-78758 }, + + { 76,-78758 }, { 77,-78758 }, { 78,-78758 }, { 79,-78758 }, { 80,-78758 }, + { 81,-78758 }, { 82,-78758 }, { 83,-78758 }, { 84,-78758 }, { 85,-78758 }, + { 86,-78758 }, { 87,-78758 }, { 88,-78758 }, { 89,-78758 }, { 90,-78758 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-78758 }, + { 0, 0 }, { 97,-78758 }, { 98,-78758 }, { 99,-78758 }, { 100,-78758 }, + { 101,4883 }, { 102,-78758 }, { 103,-78758 }, { 104,-78758 }, { 105,-78758 }, + { 106,-78758 }, { 107,-78758 }, { 108,-78758 }, { 109,-78758 }, { 110,-78758 }, + { 111,-78758 }, { 112,-78758 }, { 113,-78758 }, { 114,-78758 }, { 115,-78758 }, + { 116,-78758 }, { 117,-78758 }, { 118,-78758 }, { 119,-78758 }, { 120,-78758 }, + { 121,-78758 }, { 122,-78758 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-78758 }, { 128,-78758 }, { 129,-78758 }, { 130,-78758 }, + { 131,-78758 }, { 132,-78758 }, { 133,-78758 }, { 134,-78758 }, { 135,-78758 }, + { 136,-78758 }, { 137,-78758 }, { 138,-78758 }, { 139,-78758 }, { 140,-78758 }, + { 141,-78758 }, { 142,-78758 }, { 143,-78758 }, { 144,-78758 }, { 145,-78758 }, + { 146,-78758 }, { 147,-78758 }, { 148,-78758 }, { 149,-78758 }, { 150,-78758 }, + { 151,-78758 }, { 152,-78758 }, { 153,-78758 }, { 154,-78758 }, { 155,-78758 }, + { 156,-78758 }, { 157,-78758 }, { 158,-78758 }, { 159,-78758 }, { 160,-78758 }, + { 161,-78758 }, { 162,-78758 }, { 163,-78758 }, { 164,-78758 }, { 165,-78758 }, + { 166,-78758 }, { 167,-78758 }, { 168,-78758 }, { 169,-78758 }, { 170,-78758 }, + { 171,-78758 }, { 172,-78758 }, { 173,-78758 }, { 174,-78758 }, { 175,-78758 }, + + { 176,-78758 }, { 177,-78758 }, { 178,-78758 }, { 179,-78758 }, { 180,-78758 }, + { 181,-78758 }, { 182,-78758 }, { 183,-78758 }, { 184,-78758 }, { 185,-78758 }, + { 186,-78758 }, { 187,-78758 }, { 188,-78758 }, { 189,-78758 }, { 190,-78758 }, + { 191,-78758 }, { 192,-78758 }, { 193,-78758 }, { 194,-78758 }, { 195,-78758 }, + { 196,-78758 }, { 197,-78758 }, { 198,-78758 }, { 199,-78758 }, { 200,-78758 }, + { 201,-78758 }, { 202,-78758 }, { 203,-78758 }, { 204,-78758 }, { 205,-78758 }, + { 206,-78758 }, { 207,-78758 }, { 208,-78758 }, { 209,-78758 }, { 210,-78758 }, + { 211,-78758 }, { 212,-78758 }, { 213,-78758 }, { 214,-78758 }, { 215,-78758 }, + { 216,-78758 }, { 217,-78758 }, { 218,-78758 }, { 219,-78758 }, { 220,-78758 }, + { 221,-78758 }, { 222,-78758 }, { 223,-78758 }, { 224,-78758 }, { 225,-78758 }, + + { 226,-78758 }, { 227,-78758 }, { 228,-78758 }, { 229,-78758 }, { 230,-78758 }, + { 231,-78758 }, { 232,-78758 }, { 233,-78758 }, { 234,-78758 }, { 235,-78758 }, + { 236,-78758 }, { 237,-78758 }, { 238,-78758 }, { 239,-78758 }, { 240,-78758 }, + { 241,-78758 }, { 242,-78758 }, { 243,-78758 }, { 244,-78758 }, { 245,-78758 }, + { 246,-78758 }, { 247,-78758 }, { 248,-78758 }, { 249,-78758 }, { 250,-78758 }, + { 251,-78758 }, { 252,-78758 }, { 253,-78758 }, { 254,-78758 }, { 255,-78758 }, + { 0, 131 }, { 0,13108 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-79015 }, + { 49,-79015 }, { 50,-79015 }, { 51,-79015 }, { 52,-79015 }, { 53,-79015 }, + { 54,-79015 }, { 55,-79015 }, { 56,-79015 }, { 57,-79015 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-79015 }, { 66,-79015 }, { 67,-79015 }, { 68,4883 }, + + { 69,-79015 }, { 70,-79015 }, { 71,-79015 }, { 72,-79015 }, { 73,-79015 }, + { 74,-79015 }, { 75,-79015 }, { 76,-79015 }, { 77,-79015 }, { 78,-79015 }, + { 79,-79015 }, { 80,-79015 }, { 81,-79015 }, { 82,-79015 }, { 83,-79015 }, + { 84,-79015 }, { 85,-79015 }, { 86,-79015 }, { 87,-79015 }, { 88,-79015 }, + { 89,-79015 }, { 90,-79015 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-79015 }, { 0, 0 }, { 97,-79015 }, { 98,-79015 }, + { 99,-79015 }, { 100,4883 }, { 101,-79015 }, { 102,-79015 }, { 103,-79015 }, + { 104,-79015 }, { 105,-79015 }, { 106,-79015 }, { 107,-79015 }, { 108,-79015 }, + { 109,-79015 }, { 110,-79015 }, { 111,-79015 }, { 112,-79015 }, { 113,-79015 }, + { 114,-79015 }, { 115,-79015 }, { 116,-79015 }, { 117,-79015 }, { 118,-79015 }, + + { 119,-79015 }, { 120,-79015 }, { 121,-79015 }, { 122,-79015 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-79015 }, { 128,-79015 }, + { 129,-79015 }, { 130,-79015 }, { 131,-79015 }, { 132,-79015 }, { 133,-79015 }, + { 134,-79015 }, { 135,-79015 }, { 136,-79015 }, { 137,-79015 }, { 138,-79015 }, + { 139,-79015 }, { 140,-79015 }, { 141,-79015 }, { 142,-79015 }, { 143,-79015 }, + { 144,-79015 }, { 145,-79015 }, { 146,-79015 }, { 147,-79015 }, { 148,-79015 }, + { 149,-79015 }, { 150,-79015 }, { 151,-79015 }, { 152,-79015 }, { 153,-79015 }, + { 154,-79015 }, { 155,-79015 }, { 156,-79015 }, { 157,-79015 }, { 158,-79015 }, + { 159,-79015 }, { 160,-79015 }, { 161,-79015 }, { 162,-79015 }, { 163,-79015 }, + { 164,-79015 }, { 165,-79015 }, { 166,-79015 }, { 167,-79015 }, { 168,-79015 }, + + { 169,-79015 }, { 170,-79015 }, { 171,-79015 }, { 172,-79015 }, { 173,-79015 }, + { 174,-79015 }, { 175,-79015 }, { 176,-79015 }, { 177,-79015 }, { 178,-79015 }, + { 179,-79015 }, { 180,-79015 }, { 181,-79015 }, { 182,-79015 }, { 183,-79015 }, + { 184,-79015 }, { 185,-79015 }, { 186,-79015 }, { 187,-79015 }, { 188,-79015 }, + { 189,-79015 }, { 190,-79015 }, { 191,-79015 }, { 192,-79015 }, { 193,-79015 }, + { 194,-79015 }, { 195,-79015 }, { 196,-79015 }, { 197,-79015 }, { 198,-79015 }, + { 199,-79015 }, { 200,-79015 }, { 201,-79015 }, { 202,-79015 }, { 203,-79015 }, + { 204,-79015 }, { 205,-79015 }, { 206,-79015 }, { 207,-79015 }, { 208,-79015 }, + { 209,-79015 }, { 210,-79015 }, { 211,-79015 }, { 212,-79015 }, { 213,-79015 }, + { 214,-79015 }, { 215,-79015 }, { 216,-79015 }, { 217,-79015 }, { 218,-79015 }, + + { 219,-79015 }, { 220,-79015 }, { 221,-79015 }, { 222,-79015 }, { 223,-79015 }, + { 224,-79015 }, { 225,-79015 }, { 226,-79015 }, { 227,-79015 }, { 228,-79015 }, + { 229,-79015 }, { 230,-79015 }, { 231,-79015 }, { 232,-79015 }, { 233,-79015 }, + { 234,-79015 }, { 235,-79015 }, { 236,-79015 }, { 237,-79015 }, { 238,-79015 }, + { 239,-79015 }, { 240,-79015 }, { 241,-79015 }, { 242,-79015 }, { 243,-79015 }, + { 244,-79015 }, { 245,-79015 }, { 246,-79015 }, { 247,-79015 }, { 248,-79015 }, + { 249,-79015 }, { 250,-79015 }, { 251,-79015 }, { 252,-79015 }, { 253,-79015 }, + { 254,-79015 }, { 255,-79015 }, { 0, 131 }, { 0,12851 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-79272 }, { 49,-79272 }, { 50,-79272 }, { 51,-79272 }, + { 52,-79272 }, { 53,-79272 }, { 54,-79272 }, { 55,-79272 }, { 56,-79272 }, + { 57,-79272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-79272 }, { 66,-79272 }, + { 67,-79272 }, { 68,-79272 }, { 69,-79272 }, { 70,-79272 }, { 71,-79272 }, + { 72,-79272 }, { 73,-79272 }, { 74,-79272 }, { 75,-79272 }, { 76,-79272 }, + { 77,-79272 }, { 78,-79272 }, { 79,4883 }, { 80,-79272 }, { 81,-79272 }, + { 82,-79272 }, { 83,-79272 }, { 84,-79272 }, { 85,-79272 }, { 86,-79272 }, + { 87,-79272 }, { 88,-79272 }, { 89,-79272 }, { 90,-79272 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-79272 }, { 0, 0 }, + { 97,-79272 }, { 98,-79272 }, { 99,-79272 }, { 100,-79272 }, { 101,-79272 }, + { 102,-79272 }, { 103,-79272 }, { 104,-79272 }, { 105,-79272 }, { 106,-79272 }, + { 107,-79272 }, { 108,-79272 }, { 109,-79272 }, { 110,-79272 }, { 111,4883 }, + + { 112,-79272 }, { 113,-79272 }, { 114,-79272 }, { 115,-79272 }, { 116,-79272 }, + { 117,-79272 }, { 118,-79272 }, { 119,-79272 }, { 120,-79272 }, { 121,-79272 }, + { 122,-79272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-79272 }, { 128,-79272 }, { 129,-79272 }, { 130,-79272 }, { 131,-79272 }, + { 132,-79272 }, { 133,-79272 }, { 134,-79272 }, { 135,-79272 }, { 136,-79272 }, + { 137,-79272 }, { 138,-79272 }, { 139,-79272 }, { 140,-79272 }, { 141,-79272 }, + { 142,-79272 }, { 143,-79272 }, { 144,-79272 }, { 145,-79272 }, { 146,-79272 }, + { 147,-79272 }, { 148,-79272 }, { 149,-79272 }, { 150,-79272 }, { 151,-79272 }, + { 152,-79272 }, { 153,-79272 }, { 154,-79272 }, { 155,-79272 }, { 156,-79272 }, + { 157,-79272 }, { 158,-79272 }, { 159,-79272 }, { 160,-79272 }, { 161,-79272 }, + + { 162,-79272 }, { 163,-79272 }, { 164,-79272 }, { 165,-79272 }, { 166,-79272 }, + { 167,-79272 }, { 168,-79272 }, { 169,-79272 }, { 170,-79272 }, { 171,-79272 }, + { 172,-79272 }, { 173,-79272 }, { 174,-79272 }, { 175,-79272 }, { 176,-79272 }, + { 177,-79272 }, { 178,-79272 }, { 179,-79272 }, { 180,-79272 }, { 181,-79272 }, + { 182,-79272 }, { 183,-79272 }, { 184,-79272 }, { 185,-79272 }, { 186,-79272 }, + { 187,-79272 }, { 188,-79272 }, { 189,-79272 }, { 190,-79272 }, { 191,-79272 }, + { 192,-79272 }, { 193,-79272 }, { 194,-79272 }, { 195,-79272 }, { 196,-79272 }, + { 197,-79272 }, { 198,-79272 }, { 199,-79272 }, { 200,-79272 }, { 201,-79272 }, + { 202,-79272 }, { 203,-79272 }, { 204,-79272 }, { 205,-79272 }, { 206,-79272 }, + { 207,-79272 }, { 208,-79272 }, { 209,-79272 }, { 210,-79272 }, { 211,-79272 }, + + { 212,-79272 }, { 213,-79272 }, { 214,-79272 }, { 215,-79272 }, { 216,-79272 }, + { 217,-79272 }, { 218,-79272 }, { 219,-79272 }, { 220,-79272 }, { 221,-79272 }, + { 222,-79272 }, { 223,-79272 }, { 224,-79272 }, { 225,-79272 }, { 226,-79272 }, + { 227,-79272 }, { 228,-79272 }, { 229,-79272 }, { 230,-79272 }, { 231,-79272 }, + { 232,-79272 }, { 233,-79272 }, { 234,-79272 }, { 235,-79272 }, { 236,-79272 }, + { 237,-79272 }, { 238,-79272 }, { 239,-79272 }, { 240,-79272 }, { 241,-79272 }, + { 242,-79272 }, { 243,-79272 }, { 244,-79272 }, { 245,-79272 }, { 246,-79272 }, + { 247,-79272 }, { 248,-79272 }, { 249,-79272 }, { 250,-79272 }, { 251,-79272 }, + { 252,-79272 }, { 253,-79272 }, { 254,-79272 }, { 255,-79272 }, { 0, 131 }, + { 0,12594 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-79529 }, { 49,-79529 }, + { 50,-79529 }, { 51,-79529 }, { 52,-79529 }, { 53,-79529 }, { 54,-79529 }, + + { 55,-79529 }, { 56,-79529 }, { 57,-79529 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-79529 }, { 66,-79529 }, { 67,-79529 }, { 68,-79529 }, { 69,-79529 }, + { 70,-79529 }, { 71,-79529 }, { 72,-79529 }, { 73,-79529 }, { 74,-79529 }, + { 75,-79529 }, { 76,-79529 }, { 77,-79529 }, { 78,-79529 }, { 79,-79529 }, + { 80,-79529 }, { 81,-79529 }, { 82,-79529 }, { 83,-79529 }, { 84,-79529 }, + { 85,-79529 }, { 86,-79529 }, { 87,-79529 }, { 88,-79529 }, { 89,-79529 }, + { 90,-79529 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4883 }, { 0, 0 }, { 97,-79529 }, { 98,-79529 }, { 99,-79529 }, + { 100,-79529 }, { 101,-79529 }, { 102,-79529 }, { 103,-79529 }, { 104,-79529 }, + + { 105,-79529 }, { 106,-79529 }, { 107,-79529 }, { 108,-79529 }, { 109,-79529 }, + { 110,-79529 }, { 111,-79529 }, { 112,-79529 }, { 113,-79529 }, { 114,-79529 }, + { 115,-79529 }, { 116,-79529 }, { 117,-79529 }, { 118,-79529 }, { 119,-79529 }, + { 120,-79529 }, { 121,-79529 }, { 122,-79529 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-79529 }, { 128,-79529 }, { 129,-79529 }, + { 130,-79529 }, { 131,-79529 }, { 132,-79529 }, { 133,-79529 }, { 134,-79529 }, + { 135,-79529 }, { 136,-79529 }, { 137,-79529 }, { 138,-79529 }, { 139,-79529 }, + { 140,-79529 }, { 141,-79529 }, { 142,-79529 }, { 143,-79529 }, { 144,-79529 }, + { 145,-79529 }, { 146,-79529 }, { 147,-79529 }, { 148,-79529 }, { 149,-79529 }, + { 150,-79529 }, { 151,-79529 }, { 152,-79529 }, { 153,-79529 }, { 154,-79529 }, + + { 155,-79529 }, { 156,-79529 }, { 157,-79529 }, { 158,-79529 }, { 159,-79529 }, + { 160,-79529 }, { 161,-79529 }, { 162,-79529 }, { 163,-79529 }, { 164,-79529 }, + { 165,-79529 }, { 166,-79529 }, { 167,-79529 }, { 168,-79529 }, { 169,-79529 }, + { 170,-79529 }, { 171,-79529 }, { 172,-79529 }, { 173,-79529 }, { 174,-79529 }, + { 175,-79529 }, { 176,-79529 }, { 177,-79529 }, { 178,-79529 }, { 179,-79529 }, + { 180,-79529 }, { 181,-79529 }, { 182,-79529 }, { 183,-79529 }, { 184,-79529 }, + { 185,-79529 }, { 186,-79529 }, { 187,-79529 }, { 188,-79529 }, { 189,-79529 }, + { 190,-79529 }, { 191,-79529 }, { 192,-79529 }, { 193,-79529 }, { 194,-79529 }, + { 195,-79529 }, { 196,-79529 }, { 197,-79529 }, { 198,-79529 }, { 199,-79529 }, + { 200,-79529 }, { 201,-79529 }, { 202,-79529 }, { 203,-79529 }, { 204,-79529 }, + + { 205,-79529 }, { 206,-79529 }, { 207,-79529 }, { 208,-79529 }, { 209,-79529 }, + { 210,-79529 }, { 211,-79529 }, { 212,-79529 }, { 213,-79529 }, { 214,-79529 }, + { 215,-79529 }, { 216,-79529 }, { 217,-79529 }, { 218,-79529 }, { 219,-79529 }, + { 220,-79529 }, { 221,-79529 }, { 222,-79529 }, { 223,-79529 }, { 224,-79529 }, + { 225,-79529 }, { 226,-79529 }, { 227,-79529 }, { 228,-79529 }, { 229,-79529 }, + { 230,-79529 }, { 231,-79529 }, { 232,-79529 }, { 233,-79529 }, { 234,-79529 }, + { 235,-79529 }, { 236,-79529 }, { 237,-79529 }, { 238,-79529 }, { 239,-79529 }, + { 240,-79529 }, { 241,-79529 }, { 242,-79529 }, { 243,-79529 }, { 244,-79529 }, + { 245,-79529 }, { 246,-79529 }, { 247,-79529 }, { 248,-79529 }, { 249,-79529 }, + { 250,-79529 }, { 251,-79529 }, { 252,-79529 }, { 253,-79529 }, { 254,-79529 }, + + { 255,-79529 }, { 0, 82 }, { 0,12337 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-79786 }, { 49,-79786 }, { 50,-79786 }, { 51,-79786 }, { 52,-79786 }, + { 53,-79786 }, { 54,-79786 }, { 55,-79786 }, { 56,-79786 }, { 57,-79786 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-79786 }, { 66,-79786 }, { 67,-79786 }, + { 68,-79786 }, { 69,-79786 }, { 70,-79786 }, { 71,-79786 }, { 72,-79786 }, + { 73,-79786 }, { 74,-79786 }, { 75,-79786 }, { 76,-79786 }, { 77,-79786 }, + { 78,-79786 }, { 79,-79786 }, { 80,-79786 }, { 81,-79786 }, { 82,-79786 }, + { 83,-79786 }, { 84,-79786 }, { 85,-79786 }, { 86,-79786 }, { 87,-79786 }, + { 88,-79786 }, { 89,-79786 }, { 90,-79786 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-79786 }, { 0, 0 }, { 97,-79786 }, + + { 98,-79786 }, { 99,-79786 }, { 100,-79786 }, { 101,-79786 }, { 102,-79786 }, + { 103,-79786 }, { 104,-79786 }, { 105,-79786 }, { 106,-79786 }, { 107,-79786 }, + { 108,-79786 }, { 109,-79786 }, { 110,-79786 }, { 111,-79786 }, { 112,-79786 }, + { 113,-79786 }, { 114,-79786 }, { 115,-79786 }, { 116,-79786 }, { 117,-79786 }, + { 118,-79786 }, { 119,-79786 }, { 120,-79786 }, { 121,-79786 }, { 122,-79786 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-79786 }, + { 128,-79786 }, { 129,-79786 }, { 130,-79786 }, { 131,-79786 }, { 132,-79786 }, + { 133,-79786 }, { 134,-79786 }, { 135,-79786 }, { 136,-79786 }, { 137,-79786 }, + { 138,-79786 }, { 139,-79786 }, { 140,-79786 }, { 141,-79786 }, { 142,-79786 }, + { 143,-79786 }, { 144,-79786 }, { 145,-79786 }, { 146,-79786 }, { 147,-79786 }, + + { 148,-79786 }, { 149,-79786 }, { 150,-79786 }, { 151,-79786 }, { 152,-79786 }, + { 153,-79786 }, { 154,-79786 }, { 155,-79786 }, { 156,-79786 }, { 157,-79786 }, + { 158,-79786 }, { 159,-79786 }, { 160,-79786 }, { 161,-79786 }, { 162,-79786 }, + { 163,-79786 }, { 164,-79786 }, { 165,-79786 }, { 166,-79786 }, { 167,-79786 }, + { 168,-79786 }, { 169,-79786 }, { 170,-79786 }, { 171,-79786 }, { 172,-79786 }, + { 173,-79786 }, { 174,-79786 }, { 175,-79786 }, { 176,-79786 }, { 177,-79786 }, + { 178,-79786 }, { 179,-79786 }, { 180,-79786 }, { 181,-79786 }, { 182,-79786 }, + { 183,-79786 }, { 184,-79786 }, { 185,-79786 }, { 186,-79786 }, { 187,-79786 }, + { 188,-79786 }, { 189,-79786 }, { 190,-79786 }, { 191,-79786 }, { 192,-79786 }, + { 193,-79786 }, { 194,-79786 }, { 195,-79786 }, { 196,-79786 }, { 197,-79786 }, + + { 198,-79786 }, { 199,-79786 }, { 200,-79786 }, { 201,-79786 }, { 202,-79786 }, + { 203,-79786 }, { 204,-79786 }, { 205,-79786 }, { 206,-79786 }, { 207,-79786 }, + { 208,-79786 }, { 209,-79786 }, { 210,-79786 }, { 211,-79786 }, { 212,-79786 }, + { 213,-79786 }, { 214,-79786 }, { 215,-79786 }, { 216,-79786 }, { 217,-79786 }, + { 218,-79786 }, { 219,-79786 }, { 220,-79786 }, { 221,-79786 }, { 222,-79786 }, + { 223,-79786 }, { 224,-79786 }, { 225,-79786 }, { 226,-79786 }, { 227,-79786 }, + { 228,-79786 }, { 229,-79786 }, { 230,-79786 }, { 231,-79786 }, { 232,-79786 }, + { 233,-79786 }, { 234,-79786 }, { 235,-79786 }, { 236,-79786 }, { 237,-79786 }, + { 238,-79786 }, { 239,-79786 }, { 240,-79786 }, { 241,-79786 }, { 242,-79786 }, + { 243,-79786 }, { 244,-79786 }, { 245,-79786 }, { 246,-79786 }, { 247,-79786 }, + + { 248,-79786 }, { 249,-79786 }, { 250,-79786 }, { 251,-79786 }, { 252,-79786 }, + { 253,-79786 }, { 254,-79786 }, { 255,-79786 }, { 0, 131 }, { 0,12080 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-80043 }, { 49,-80043 }, { 50,-80043 }, + { 51,-80043 }, { 52,-80043 }, { 53,-80043 }, { 54,-80043 }, { 55,-80043 }, + { 56,-80043 }, { 57,-80043 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-80043 }, + { 66,-80043 }, { 67,-80043 }, { 68,-80043 }, { 69,-80043 }, { 70,-80043 }, + { 71,-80043 }, { 72,-80043 }, { 73,-80043 }, { 74,-80043 }, { 75,-80043 }, + { 76,-80043 }, { 77,-80043 }, { 78,-80043 }, { 79,4626 }, { 80,-80043 }, + { 81,-80043 }, { 82,-80043 }, { 83,-80043 }, { 84,-80043 }, { 85,-80043 }, + { 86,-80043 }, { 87,-80043 }, { 88,-80043 }, { 89,-80043 }, { 90,-80043 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-80043 }, + { 0, 0 }, { 97,-80043 }, { 98,-80043 }, { 99,-80043 }, { 100,-80043 }, + { 101,-80043 }, { 102,-80043 }, { 103,-80043 }, { 104,-80043 }, { 105,-80043 }, + { 106,-80043 }, { 107,-80043 }, { 108,-80043 }, { 109,-80043 }, { 110,-80043 }, + { 111,4626 }, { 112,-80043 }, { 113,-80043 }, { 114,-80043 }, { 115,-80043 }, + { 116,-80043 }, { 117,-80043 }, { 118,-80043 }, { 119,-80043 }, { 120,-80043 }, + { 121,-80043 }, { 122,-80043 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-80043 }, { 128,-80043 }, { 129,-80043 }, { 130,-80043 }, + { 131,-80043 }, { 132,-80043 }, { 133,-80043 }, { 134,-80043 }, { 135,-80043 }, + { 136,-80043 }, { 137,-80043 }, { 138,-80043 }, { 139,-80043 }, { 140,-80043 }, + + { 141,-80043 }, { 142,-80043 }, { 143,-80043 }, { 144,-80043 }, { 145,-80043 }, + { 146,-80043 }, { 147,-80043 }, { 148,-80043 }, { 149,-80043 }, { 150,-80043 }, + { 151,-80043 }, { 152,-80043 }, { 153,-80043 }, { 154,-80043 }, { 155,-80043 }, + { 156,-80043 }, { 157,-80043 }, { 158,-80043 }, { 159,-80043 }, { 160,-80043 }, + { 161,-80043 }, { 162,-80043 }, { 163,-80043 }, { 164,-80043 }, { 165,-80043 }, + { 166,-80043 }, { 167,-80043 }, { 168,-80043 }, { 169,-80043 }, { 170,-80043 }, + { 171,-80043 }, { 172,-80043 }, { 173,-80043 }, { 174,-80043 }, { 175,-80043 }, + { 176,-80043 }, { 177,-80043 }, { 178,-80043 }, { 179,-80043 }, { 180,-80043 }, + { 181,-80043 }, { 182,-80043 }, { 183,-80043 }, { 184,-80043 }, { 185,-80043 }, + { 186,-80043 }, { 187,-80043 }, { 188,-80043 }, { 189,-80043 }, { 190,-80043 }, + + { 191,-80043 }, { 192,-80043 }, { 193,-80043 }, { 194,-80043 }, { 195,-80043 }, + { 196,-80043 }, { 197,-80043 }, { 198,-80043 }, { 199,-80043 }, { 200,-80043 }, + { 201,-80043 }, { 202,-80043 }, { 203,-80043 }, { 204,-80043 }, { 205,-80043 }, + { 206,-80043 }, { 207,-80043 }, { 208,-80043 }, { 209,-80043 }, { 210,-80043 }, + { 211,-80043 }, { 212,-80043 }, { 213,-80043 }, { 214,-80043 }, { 215,-80043 }, + { 216,-80043 }, { 217,-80043 }, { 218,-80043 }, { 219,-80043 }, { 220,-80043 }, + { 221,-80043 }, { 222,-80043 }, { 223,-80043 }, { 224,-80043 }, { 225,-80043 }, + { 226,-80043 }, { 227,-80043 }, { 228,-80043 }, { 229,-80043 }, { 230,-80043 }, + { 231,-80043 }, { 232,-80043 }, { 233,-80043 }, { 234,-80043 }, { 235,-80043 }, + { 236,-80043 }, { 237,-80043 }, { 238,-80043 }, { 239,-80043 }, { 240,-80043 }, + + { 241,-80043 }, { 242,-80043 }, { 243,-80043 }, { 244,-80043 }, { 245,-80043 }, + { 246,-80043 }, { 247,-80043 }, { 248,-80043 }, { 249,-80043 }, { 250,-80043 }, + { 251,-80043 }, { 252,-80043 }, { 253,-80043 }, { 254,-80043 }, { 255,-80043 }, + { 0, 131 }, { 0,11823 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-80300 }, + { 49,-80300 }, { 50,-80300 }, { 51,-80300 }, { 52,-80300 }, { 53,-80300 }, + { 54,-80300 }, { 55,-80300 }, { 56,-80300 }, { 57,-80300 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-80300 }, { 66,-80300 }, { 67,-80300 }, { 68,-80300 }, + { 69,-80300 }, { 70,-80300 }, { 71,-80300 }, { 72,-80300 }, { 73,-80300 }, + { 74,-80300 }, { 75,-80300 }, { 76,-80300 }, { 77,-80300 }, { 78,-80300 }, + { 79,4626 }, { 80,-80300 }, { 81,-80300 }, { 82,-80300 }, { 83,-80300 }, + + { 84,-80300 }, { 85,-80300 }, { 86,-80300 }, { 87,-80300 }, { 88,-80300 }, + { 89,-80300 }, { 90,-80300 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-80300 }, { 0, 0 }, { 97,-80300 }, { 98,-80300 }, + { 99,-80300 }, { 100,-80300 }, { 101,-80300 }, { 102,-80300 }, { 103,-80300 }, + { 104,-80300 }, { 105,-80300 }, { 106,-80300 }, { 107,-80300 }, { 108,-80300 }, + { 109,-80300 }, { 110,-80300 }, { 111,4626 }, { 112,-80300 }, { 113,-80300 }, + { 114,-80300 }, { 115,-80300 }, { 116,-80300 }, { 117,-80300 }, { 118,-80300 }, + { 119,-80300 }, { 120,-80300 }, { 121,-80300 }, { 122,-80300 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-80300 }, { 128,-80300 }, + { 129,-80300 }, { 130,-80300 }, { 131,-80300 }, { 132,-80300 }, { 133,-80300 }, + + { 134,-80300 }, { 135,-80300 }, { 136,-80300 }, { 137,-80300 }, { 138,-80300 }, + { 139,-80300 }, { 140,-80300 }, { 141,-80300 }, { 142,-80300 }, { 143,-80300 }, + { 144,-80300 }, { 145,-80300 }, { 146,-80300 }, { 147,-80300 }, { 148,-80300 }, + { 149,-80300 }, { 150,-80300 }, { 151,-80300 }, { 152,-80300 }, { 153,-80300 }, + { 154,-80300 }, { 155,-80300 }, { 156,-80300 }, { 157,-80300 }, { 158,-80300 }, + { 159,-80300 }, { 160,-80300 }, { 161,-80300 }, { 162,-80300 }, { 163,-80300 }, + { 164,-80300 }, { 165,-80300 }, { 166,-80300 }, { 167,-80300 }, { 168,-80300 }, + { 169,-80300 }, { 170,-80300 }, { 171,-80300 }, { 172,-80300 }, { 173,-80300 }, + { 174,-80300 }, { 175,-80300 }, { 176,-80300 }, { 177,-80300 }, { 178,-80300 }, + { 179,-80300 }, { 180,-80300 }, { 181,-80300 }, { 182,-80300 }, { 183,-80300 }, + + { 184,-80300 }, { 185,-80300 }, { 186,-80300 }, { 187,-80300 }, { 188,-80300 }, + { 189,-80300 }, { 190,-80300 }, { 191,-80300 }, { 192,-80300 }, { 193,-80300 }, + { 194,-80300 }, { 195,-80300 }, { 196,-80300 }, { 197,-80300 }, { 198,-80300 }, + { 199,-80300 }, { 200,-80300 }, { 201,-80300 }, { 202,-80300 }, { 203,-80300 }, + { 204,-80300 }, { 205,-80300 }, { 206,-80300 }, { 207,-80300 }, { 208,-80300 }, + { 209,-80300 }, { 210,-80300 }, { 211,-80300 }, { 212,-80300 }, { 213,-80300 }, + { 214,-80300 }, { 215,-80300 }, { 216,-80300 }, { 217,-80300 }, { 218,-80300 }, + { 219,-80300 }, { 220,-80300 }, { 221,-80300 }, { 222,-80300 }, { 223,-80300 }, + { 224,-80300 }, { 225,-80300 }, { 226,-80300 }, { 227,-80300 }, { 228,-80300 }, + { 229,-80300 }, { 230,-80300 }, { 231,-80300 }, { 232,-80300 }, { 233,-80300 }, + + { 234,-80300 }, { 235,-80300 }, { 236,-80300 }, { 237,-80300 }, { 238,-80300 }, + { 239,-80300 }, { 240,-80300 }, { 241,-80300 }, { 242,-80300 }, { 243,-80300 }, + { 244,-80300 }, { 245,-80300 }, { 246,-80300 }, { 247,-80300 }, { 248,-80300 }, + { 249,-80300 }, { 250,-80300 }, { 251,-80300 }, { 252,-80300 }, { 253,-80300 }, + { 254,-80300 }, { 255,-80300 }, { 0, 81 }, { 0,11566 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-80557 }, { 49,-80557 }, { 50,-80557 }, { 51,-80557 }, + { 52,-80557 }, { 53,-80557 }, { 54,-80557 }, { 55,-80557 }, { 56,-80557 }, + { 57,-80557 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-80557 }, { 66,-80557 }, + { 67,-80557 }, { 68,-80557 }, { 69,-80557 }, { 70,-80557 }, { 71,-80557 }, + { 72,-80557 }, { 73,-80557 }, { 74,-80557 }, { 75,-80557 }, { 76,-80557 }, + + { 77,-80557 }, { 78,-80557 }, { 79,-80557 }, { 80,-80557 }, { 81,-80557 }, + { 82,-80557 }, { 83,-80557 }, { 84,-80557 }, { 85,-80557 }, { 86,-80557 }, + { 87,-80557 }, { 88,-80557 }, { 89,-80557 }, { 90,-80557 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-80557 }, { 0, 0 }, + { 97,-80557 }, { 98,-80557 }, { 99,-80557 }, { 100,-80557 }, { 101,-80557 }, + { 102,-80557 }, { 103,-80557 }, { 104,-80557 }, { 105,-80557 }, { 106,-80557 }, + { 107,-80557 }, { 108,-80557 }, { 109,-80557 }, { 110,-80557 }, { 111,-80557 }, + { 112,-80557 }, { 113,-80557 }, { 114,-80557 }, { 115,-80557 }, { 116,-80557 }, + { 117,-80557 }, { 118,-80557 }, { 119,-80557 }, { 120,-80557 }, { 121,-80557 }, + { 122,-80557 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-80557 }, { 128,-80557 }, { 129,-80557 }, { 130,-80557 }, { 131,-80557 }, + { 132,-80557 }, { 133,-80557 }, { 134,-80557 }, { 135,-80557 }, { 136,-80557 }, + { 137,-80557 }, { 138,-80557 }, { 139,-80557 }, { 140,-80557 }, { 141,-80557 }, + { 142,-80557 }, { 143,-80557 }, { 144,-80557 }, { 145,-80557 }, { 146,-80557 }, + { 147,-80557 }, { 148,-80557 }, { 149,-80557 }, { 150,-80557 }, { 151,-80557 }, + { 152,-80557 }, { 153,-80557 }, { 154,-80557 }, { 155,-80557 }, { 156,-80557 }, + { 157,-80557 }, { 158,-80557 }, { 159,-80557 }, { 160,-80557 }, { 161,-80557 }, + { 162,-80557 }, { 163,-80557 }, { 164,-80557 }, { 165,-80557 }, { 166,-80557 }, + { 167,-80557 }, { 168,-80557 }, { 169,-80557 }, { 170,-80557 }, { 171,-80557 }, + { 172,-80557 }, { 173,-80557 }, { 174,-80557 }, { 175,-80557 }, { 176,-80557 }, + + { 177,-80557 }, { 178,-80557 }, { 179,-80557 }, { 180,-80557 }, { 181,-80557 }, + { 182,-80557 }, { 183,-80557 }, { 184,-80557 }, { 185,-80557 }, { 186,-80557 }, + { 187,-80557 }, { 188,-80557 }, { 189,-80557 }, { 190,-80557 }, { 191,-80557 }, + { 192,-80557 }, { 193,-80557 }, { 194,-80557 }, { 195,-80557 }, { 196,-80557 }, + { 197,-80557 }, { 198,-80557 }, { 199,-80557 }, { 200,-80557 }, { 201,-80557 }, + { 202,-80557 }, { 203,-80557 }, { 204,-80557 }, { 205,-80557 }, { 206,-80557 }, + { 207,-80557 }, { 208,-80557 }, { 209,-80557 }, { 210,-80557 }, { 211,-80557 }, + { 212,-80557 }, { 213,-80557 }, { 214,-80557 }, { 215,-80557 }, { 216,-80557 }, + { 217,-80557 }, { 218,-80557 }, { 219,-80557 }, { 220,-80557 }, { 221,-80557 }, + { 222,-80557 }, { 223,-80557 }, { 224,-80557 }, { 225,-80557 }, { 226,-80557 }, + + { 227,-80557 }, { 228,-80557 }, { 229,-80557 }, { 230,-80557 }, { 231,-80557 }, + { 232,-80557 }, { 233,-80557 }, { 234,-80557 }, { 235,-80557 }, { 236,-80557 }, + { 237,-80557 }, { 238,-80557 }, { 239,-80557 }, { 240,-80557 }, { 241,-80557 }, + { 242,-80557 }, { 243,-80557 }, { 244,-80557 }, { 245,-80557 }, { 246,-80557 }, + { 247,-80557 }, { 248,-80557 }, { 249,-80557 }, { 250,-80557 }, { 251,-80557 }, + { 252,-80557 }, { 253,-80557 }, { 254,-80557 }, { 255,-80557 }, { 0, 131 }, + { 0,11309 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-80814 }, { 49,-80814 }, + { 50,-80814 }, { 51,-80814 }, { 52,-80814 }, { 53,-80814 }, { 54,-80814 }, + { 55,-80814 }, { 56,-80814 }, { 57,-80814 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-80814 }, { 66,-80814 }, { 67,-80814 }, { 68,-80814 }, { 69,-80814 }, + + { 70,-80814 }, { 71,-80814 }, { 72,-80814 }, { 73,-80814 }, { 74,-80814 }, + { 75,-80814 }, { 76,-80814 }, { 77,-80814 }, { 78,-80814 }, { 79,-80814 }, + { 80,-80814 }, { 81,-80814 }, { 82,-80814 }, { 83,-80814 }, { 84,-80814 }, + { 85,-80814 }, { 86,-80814 }, { 87,-80814 }, { 88,-80814 }, { 89,-80814 }, + { 90,-80814 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4369 }, { 0, 0 }, { 97,-80814 }, { 98,-80814 }, { 99,-80814 }, + { 100,-80814 }, { 101,-80814 }, { 102,-80814 }, { 103,-80814 }, { 104,-80814 }, + { 105,-80814 }, { 106,-80814 }, { 107,-80814 }, { 108,-80814 }, { 109,-80814 }, + { 110,-80814 }, { 111,-80814 }, { 112,-80814 }, { 113,-80814 }, { 114,-80814 }, + { 115,-80814 }, { 116,-80814 }, { 117,-80814 }, { 118,-80814 }, { 119,-80814 }, + + { 120,-80814 }, { 121,-80814 }, { 122,-80814 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-80814 }, { 128,-80814 }, { 129,-80814 }, + { 130,-80814 }, { 131,-80814 }, { 132,-80814 }, { 133,-80814 }, { 134,-80814 }, + { 135,-80814 }, { 136,-80814 }, { 137,-80814 }, { 138,-80814 }, { 139,-80814 }, + { 140,-80814 }, { 141,-80814 }, { 142,-80814 }, { 143,-80814 }, { 144,-80814 }, + { 145,-80814 }, { 146,-80814 }, { 147,-80814 }, { 148,-80814 }, { 149,-80814 }, + { 150,-80814 }, { 151,-80814 }, { 152,-80814 }, { 153,-80814 }, { 154,-80814 }, + { 155,-80814 }, { 156,-80814 }, { 157,-80814 }, { 158,-80814 }, { 159,-80814 }, + { 160,-80814 }, { 161,-80814 }, { 162,-80814 }, { 163,-80814 }, { 164,-80814 }, + { 165,-80814 }, { 166,-80814 }, { 167,-80814 }, { 168,-80814 }, { 169,-80814 }, + + { 170,-80814 }, { 171,-80814 }, { 172,-80814 }, { 173,-80814 }, { 174,-80814 }, + { 175,-80814 }, { 176,-80814 }, { 177,-80814 }, { 178,-80814 }, { 179,-80814 }, + { 180,-80814 }, { 181,-80814 }, { 182,-80814 }, { 183,-80814 }, { 184,-80814 }, + { 185,-80814 }, { 186,-80814 }, { 187,-80814 }, { 188,-80814 }, { 189,-80814 }, + { 190,-80814 }, { 191,-80814 }, { 192,-80814 }, { 193,-80814 }, { 194,-80814 }, + { 195,-80814 }, { 196,-80814 }, { 197,-80814 }, { 198,-80814 }, { 199,-80814 }, + { 200,-80814 }, { 201,-80814 }, { 202,-80814 }, { 203,-80814 }, { 204,-80814 }, + { 205,-80814 }, { 206,-80814 }, { 207,-80814 }, { 208,-80814 }, { 209,-80814 }, + { 210,-80814 }, { 211,-80814 }, { 212,-80814 }, { 213,-80814 }, { 214,-80814 }, + { 215,-80814 }, { 216,-80814 }, { 217,-80814 }, { 218,-80814 }, { 219,-80814 }, + + { 220,-80814 }, { 221,-80814 }, { 222,-80814 }, { 223,-80814 }, { 224,-80814 }, + { 225,-80814 }, { 226,-80814 }, { 227,-80814 }, { 228,-80814 }, { 229,-80814 }, + { 230,-80814 }, { 231,-80814 }, { 232,-80814 }, { 233,-80814 }, { 234,-80814 }, + { 235,-80814 }, { 236,-80814 }, { 237,-80814 }, { 238,-80814 }, { 239,-80814 }, + { 240,-80814 }, { 241,-80814 }, { 242,-80814 }, { 243,-80814 }, { 244,-80814 }, + { 245,-80814 }, { 246,-80814 }, { 247,-80814 }, { 248,-80814 }, { 249,-80814 }, + { 250,-80814 }, { 251,-80814 }, { 252,-80814 }, { 253,-80814 }, { 254,-80814 }, + { 255,-80814 }, { 0, 131 }, { 0,11052 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-81071 }, { 49,-81071 }, { 50,-81071 }, { 51,-81071 }, { 52,-81071 }, + { 53,-81071 }, { 54,-81071 }, { 55,-81071 }, { 56,-81071 }, { 57,-81071 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,4369 }, { 66,-81071 }, { 67,-81071 }, + { 68,-81071 }, { 69,-81071 }, { 70,-81071 }, { 71,-81071 }, { 72,-81071 }, + { 73,-81071 }, { 74,-81071 }, { 75,-81071 }, { 76,-81071 }, { 77,-81071 }, + { 78,-81071 }, { 79,-81071 }, { 80,-81071 }, { 81,-81071 }, { 82,-81071 }, + { 83,-81071 }, { 84,-81071 }, { 85,-81071 }, { 86,-81071 }, { 87,-81071 }, + { 88,-81071 }, { 89,-81071 }, { 90,-81071 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-81071 }, { 0, 0 }, { 97,4369 }, + { 98,-81071 }, { 99,-81071 }, { 100,-81071 }, { 101,-81071 }, { 102,-81071 }, + { 103,-81071 }, { 104,-81071 }, { 105,-81071 }, { 106,-81071 }, { 107,-81071 }, + { 108,-81071 }, { 109,-81071 }, { 110,-81071 }, { 111,-81071 }, { 112,-81071 }, + + { 113,-81071 }, { 114,-81071 }, { 115,-81071 }, { 116,-81071 }, { 117,-81071 }, + { 118,-81071 }, { 119,-81071 }, { 120,-81071 }, { 121,-81071 }, { 122,-81071 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-81071 }, + { 128,-81071 }, { 129,-81071 }, { 130,-81071 }, { 131,-81071 }, { 132,-81071 }, + { 133,-81071 }, { 134,-81071 }, { 135,-81071 }, { 136,-81071 }, { 137,-81071 }, + { 138,-81071 }, { 139,-81071 }, { 140,-81071 }, { 141,-81071 }, { 142,-81071 }, + { 143,-81071 }, { 144,-81071 }, { 145,-81071 }, { 146,-81071 }, { 147,-81071 }, + { 148,-81071 }, { 149,-81071 }, { 150,-81071 }, { 151,-81071 }, { 152,-81071 }, + { 153,-81071 }, { 154,-81071 }, { 155,-81071 }, { 156,-81071 }, { 157,-81071 }, + { 158,-81071 }, { 159,-81071 }, { 160,-81071 }, { 161,-81071 }, { 162,-81071 }, + + { 163,-81071 }, { 164,-81071 }, { 165,-81071 }, { 166,-81071 }, { 167,-81071 }, + { 168,-81071 }, { 169,-81071 }, { 170,-81071 }, { 171,-81071 }, { 172,-81071 }, + { 173,-81071 }, { 174,-81071 }, { 175,-81071 }, { 176,-81071 }, { 177,-81071 }, + { 178,-81071 }, { 179,-81071 }, { 180,-81071 }, { 181,-81071 }, { 182,-81071 }, + { 183,-81071 }, { 184,-81071 }, { 185,-81071 }, { 186,-81071 }, { 187,-81071 }, + { 188,-81071 }, { 189,-81071 }, { 190,-81071 }, { 191,-81071 }, { 192,-81071 }, + { 193,-81071 }, { 194,-81071 }, { 195,-81071 }, { 196,-81071 }, { 197,-81071 }, + { 198,-81071 }, { 199,-81071 }, { 200,-81071 }, { 201,-81071 }, { 202,-81071 }, + { 203,-81071 }, { 204,-81071 }, { 205,-81071 }, { 206,-81071 }, { 207,-81071 }, + { 208,-81071 }, { 209,-81071 }, { 210,-81071 }, { 211,-81071 }, { 212,-81071 }, + + { 213,-81071 }, { 214,-81071 }, { 215,-81071 }, { 216,-81071 }, { 217,-81071 }, + { 218,-81071 }, { 219,-81071 }, { 220,-81071 }, { 221,-81071 }, { 222,-81071 }, + { 223,-81071 }, { 224,-81071 }, { 225,-81071 }, { 226,-81071 }, { 227,-81071 }, + { 228,-81071 }, { 229,-81071 }, { 230,-81071 }, { 231,-81071 }, { 232,-81071 }, + { 233,-81071 }, { 234,-81071 }, { 235,-81071 }, { 236,-81071 }, { 237,-81071 }, + { 238,-81071 }, { 239,-81071 }, { 240,-81071 }, { 241,-81071 }, { 242,-81071 }, + { 243,-81071 }, { 244,-81071 }, { 245,-81071 }, { 246,-81071 }, { 247,-81071 }, + { 248,-81071 }, { 249,-81071 }, { 250,-81071 }, { 251,-81071 }, { 252,-81071 }, + { 253,-81071 }, { 254,-81071 }, { 255,-81071 }, { 0, 131 }, { 0,10795 }, + { 0, 0 }, { 0,10793 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 9, 0 }, { 10, 0 }, { 0, 0 }, { 0, 0 }, { 13, 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 }, { 0, 0 }, { 32, 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 }, { 48,-81328 }, { 49,-81328 }, { 50,-81328 }, + { 51,-81328 }, { 52,-81328 }, { 53,-81328 }, { 54,-81328 }, { 55,-81328 }, + + { 56,-81328 }, { 57,-81328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 62,-81345 }, { 65,-81328 }, + { 66,-81328 }, { 67,-81328 }, { 68,-81328 }, { 69,-81328 }, { 70,-81328 }, + { 71,-81328 }, { 72,-81328 }, { 73,-81328 }, { 74,-81328 }, { 75,-81328 }, + { 76,-81328 }, { 77,-81328 }, { 78,-81328 }, { 79,-81328 }, { 80,-81328 }, + { 81,-81328 }, { 82,-81328 }, { 83,-81328 }, { 84,-81328 }, { 85,-81328 }, + { 86,-81328 }, { 87,-81328 }, { 88,-81328 }, { 89,-81328 }, { 90,-81328 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,4369 }, + { 0, 0 }, { 97,-81328 }, { 98,-81328 }, { 99,-81328 }, { 100,-81328 }, + { 101,-81328 }, { 102,-81328 }, { 103,-81328 }, { 104,-81328 }, { 105,-81328 }, + + { 106,-81328 }, { 107,-81328 }, { 108,-81328 }, { 109,-81328 }, { 110,-81328 }, + { 111,-81328 }, { 112,-81328 }, { 113,-81328 }, { 114,-81328 }, { 115,-81328 }, + { 116,-81328 }, { 117,-81328 }, { 118,-81328 }, { 119,-81328 }, { 120,-81328 }, + { 121,-81328 }, { 122,-81328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-81328 }, { 128,-81328 }, { 129,-81328 }, { 130,-81328 }, + { 131,-81328 }, { 132,-81328 }, { 133,-81328 }, { 134,-81328 }, { 135,-81328 }, + { 136,-81328 }, { 137,-81328 }, { 138,-81328 }, { 139,-81328 }, { 140,-81328 }, + { 141,-81328 }, { 142,-81328 }, { 143,-81328 }, { 144,-81328 }, { 145,-81328 }, + { 146,-81328 }, { 147,-81328 }, { 148,-81328 }, { 149,-81328 }, { 150,-81328 }, + { 151,-81328 }, { 152,-81328 }, { 153,-81328 }, { 154,-81328 }, { 155,-81328 }, + + { 156,-81328 }, { 157,-81328 }, { 158,-81328 }, { 159,-81328 }, { 160,-81328 }, + { 161,-81328 }, { 162,-81328 }, { 163,-81328 }, { 164,-81328 }, { 165,-81328 }, + { 166,-81328 }, { 167,-81328 }, { 168,-81328 }, { 169,-81328 }, { 170,-81328 }, + { 171,-81328 }, { 172,-81328 }, { 173,-81328 }, { 174,-81328 }, { 175,-81328 }, + { 176,-81328 }, { 177,-81328 }, { 178,-81328 }, { 179,-81328 }, { 180,-81328 }, + { 181,-81328 }, { 182,-81328 }, { 183,-81328 }, { 184,-81328 }, { 185,-81328 }, + { 186,-81328 }, { 187,-81328 }, { 188,-81328 }, { 189,-81328 }, { 190,-81328 }, + { 191,-81328 }, { 192,-81328 }, { 193,-81328 }, { 194,-81328 }, { 195,-81328 }, + { 196,-81328 }, { 197,-81328 }, { 198,-81328 }, { 199,-81328 }, { 200,-81328 }, + { 201,-81328 }, { 202,-81328 }, { 203,-81328 }, { 204,-81328 }, { 205,-81328 }, + + { 206,-81328 }, { 207,-81328 }, { 208,-81328 }, { 209,-81328 }, { 210,-81328 }, + { 211,-81328 }, { 212,-81328 }, { 213,-81328 }, { 214,-81328 }, { 215,-81328 }, + { 216,-81328 }, { 217,-81328 }, { 218,-81328 }, { 219,-81328 }, { 220,-81328 }, + { 221,-81328 }, { 222,-81328 }, { 223,-81328 }, { 224,-81328 }, { 225,-81328 }, + { 226,-81328 }, { 227,-81328 }, { 228,-81328 }, { 229,-81328 }, { 230,-81328 }, + { 231,-81328 }, { 232,-81328 }, { 233,-81328 }, { 234,-81328 }, { 235,-81328 }, + { 236,-81328 }, { 237,-81328 }, { 238,-81328 }, { 239,-81328 }, { 240,-81328 }, + { 241,-81328 }, { 242,-81328 }, { 243,-81328 }, { 244,-81328 }, { 245,-81328 }, + { 246,-81328 }, { 247,-81328 }, { 248,-81328 }, { 249,-81328 }, { 250,-81328 }, + { 251,-81328 }, { 252,-81328 }, { 253,-81328 }, { 254,-81328 }, { 255,-81328 }, + + { 0, 131 }, { 0,10538 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-81585 }, + + { 49,-81585 }, { 50,-81585 }, { 51,-81585 }, { 52,-81585 }, { 53,-81585 }, + { 54,-81585 }, { 55,-81585 }, { 56,-81585 }, { 57,-81585 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-81585 }, { 66,-81585 }, { 67,-81585 }, { 68,-81585 }, + { 69,4369 }, { 70,-81585 }, { 71,-81585 }, { 72,-81585 }, { 73,-81585 }, + { 74,-81585 }, { 75,-81585 }, { 76,-81585 }, { 77,-81585 }, { 78,-81585 }, + { 79,-81585 }, { 80,-81585 }, { 81,-81585 }, { 82,-81585 }, { 83,-81585 }, + { 84,-81585 }, { 85,-81585 }, { 86,-81585 }, { 87,-81585 }, { 88,-81585 }, + { 89,-81585 }, { 90,-81585 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-81585 }, { 0, 0 }, { 97,-81585 }, { 98,-81585 }, + + { 99,-81585 }, { 100,-81585 }, { 101,4369 }, { 102,-81585 }, { 103,-81585 }, + { 104,-81585 }, { 105,-81585 }, { 106,-81585 }, { 107,-81585 }, { 108,-81585 }, + { 109,-81585 }, { 110,-81585 }, { 111,-81585 }, { 112,-81585 }, { 113,-81585 }, + { 114,-81585 }, { 115,-81585 }, { 116,-81585 }, { 117,-81585 }, { 118,-81585 }, + { 119,-81585 }, { 120,-81585 }, { 121,-81585 }, { 122,-81585 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-81585 }, { 128,-81585 }, + { 129,-81585 }, { 130,-81585 }, { 131,-81585 }, { 132,-81585 }, { 133,-81585 }, + { 134,-81585 }, { 135,-81585 }, { 136,-81585 }, { 137,-81585 }, { 138,-81585 }, + { 139,-81585 }, { 140,-81585 }, { 141,-81585 }, { 142,-81585 }, { 143,-81585 }, + { 144,-81585 }, { 145,-81585 }, { 146,-81585 }, { 147,-81585 }, { 148,-81585 }, + + { 149,-81585 }, { 150,-81585 }, { 151,-81585 }, { 152,-81585 }, { 153,-81585 }, + { 154,-81585 }, { 155,-81585 }, { 156,-81585 }, { 157,-81585 }, { 158,-81585 }, + { 159,-81585 }, { 160,-81585 }, { 161,-81585 }, { 162,-81585 }, { 163,-81585 }, + { 164,-81585 }, { 165,-81585 }, { 166,-81585 }, { 167,-81585 }, { 168,-81585 }, + { 169,-81585 }, { 170,-81585 }, { 171,-81585 }, { 172,-81585 }, { 173,-81585 }, + { 174,-81585 }, { 175,-81585 }, { 176,-81585 }, { 177,-81585 }, { 178,-81585 }, + { 179,-81585 }, { 180,-81585 }, { 181,-81585 }, { 182,-81585 }, { 183,-81585 }, + { 184,-81585 }, { 185,-81585 }, { 186,-81585 }, { 187,-81585 }, { 188,-81585 }, + { 189,-81585 }, { 190,-81585 }, { 191,-81585 }, { 192,-81585 }, { 193,-81585 }, + { 194,-81585 }, { 195,-81585 }, { 196,-81585 }, { 197,-81585 }, { 198,-81585 }, + + { 199,-81585 }, { 200,-81585 }, { 201,-81585 }, { 202,-81585 }, { 203,-81585 }, + { 204,-81585 }, { 205,-81585 }, { 206,-81585 }, { 207,-81585 }, { 208,-81585 }, + { 209,-81585 }, { 210,-81585 }, { 211,-81585 }, { 212,-81585 }, { 213,-81585 }, + { 214,-81585 }, { 215,-81585 }, { 216,-81585 }, { 217,-81585 }, { 218,-81585 }, + { 219,-81585 }, { 220,-81585 }, { 221,-81585 }, { 222,-81585 }, { 223,-81585 }, + { 224,-81585 }, { 225,-81585 }, { 226,-81585 }, { 227,-81585 }, { 228,-81585 }, + { 229,-81585 }, { 230,-81585 }, { 231,-81585 }, { 232,-81585 }, { 233,-81585 }, + { 234,-81585 }, { 235,-81585 }, { 236,-81585 }, { 237,-81585 }, { 238,-81585 }, + { 239,-81585 }, { 240,-81585 }, { 241,-81585 }, { 242,-81585 }, { 243,-81585 }, + { 244,-81585 }, { 245,-81585 }, { 246,-81585 }, { 247,-81585 }, { 248,-81585 }, + + { 249,-81585 }, { 250,-81585 }, { 251,-81585 }, { 252,-81585 }, { 253,-81585 }, + { 254,-81585 }, { 255,-81585 }, { 0, 131 }, { 0,10281 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-81842 }, { 49,-81842 }, { 50,-81842 }, { 51,-81842 }, + { 52,-81842 }, { 53,-81842 }, { 54,-81842 }, { 55,-81842 }, { 56,-81842 }, + { 57,-81842 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-81842 }, { 66,-81842 }, + { 67,-81842 }, { 68,-81842 }, { 69,-81842 }, { 70,-81842 }, { 71,-81842 }, + { 72,4369 }, { 73,-81842 }, { 74,-81842 }, { 75,-81842 }, { 76,-81842 }, + { 77,-81842 }, { 78,-81842 }, { 79,-81842 }, { 80,-81842 }, { 81,-81842 }, + { 82,-81842 }, { 83,-81842 }, { 84,-81842 }, { 85,-81842 }, { 86,-81842 }, + { 87,-81842 }, { 88,-81842 }, { 89,-81842 }, { 90,-81842 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-81842 }, { 0, 0 }, + { 97,-81842 }, { 98,-81842 }, { 99,-81842 }, { 100,-81842 }, { 101,-81842 }, + { 102,-81842 }, { 103,-81842 }, { 104,4369 }, { 105,-81842 }, { 106,-81842 }, + { 107,-81842 }, { 108,-81842 }, { 109,-81842 }, { 110,-81842 }, { 111,-81842 }, + { 112,-81842 }, { 113,-81842 }, { 114,-81842 }, { 115,-81842 }, { 116,-81842 }, + { 117,-81842 }, { 118,-81842 }, { 119,-81842 }, { 120,-81842 }, { 121,-81842 }, + { 122,-81842 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-81842 }, { 128,-81842 }, { 129,-81842 }, { 130,-81842 }, { 131,-81842 }, + { 132,-81842 }, { 133,-81842 }, { 134,-81842 }, { 135,-81842 }, { 136,-81842 }, + { 137,-81842 }, { 138,-81842 }, { 139,-81842 }, { 140,-81842 }, { 141,-81842 }, + + { 142,-81842 }, { 143,-81842 }, { 144,-81842 }, { 145,-81842 }, { 146,-81842 }, + { 147,-81842 }, { 148,-81842 }, { 149,-81842 }, { 150,-81842 }, { 151,-81842 }, + { 152,-81842 }, { 153,-81842 }, { 154,-81842 }, { 155,-81842 }, { 156,-81842 }, + { 157,-81842 }, { 158,-81842 }, { 159,-81842 }, { 160,-81842 }, { 161,-81842 }, + { 162,-81842 }, { 163,-81842 }, { 164,-81842 }, { 165,-81842 }, { 166,-81842 }, + { 167,-81842 }, { 168,-81842 }, { 169,-81842 }, { 170,-81842 }, { 171,-81842 }, + { 172,-81842 }, { 173,-81842 }, { 174,-81842 }, { 175,-81842 }, { 176,-81842 }, + { 177,-81842 }, { 178,-81842 }, { 179,-81842 }, { 180,-81842 }, { 181,-81842 }, + { 182,-81842 }, { 183,-81842 }, { 184,-81842 }, { 185,-81842 }, { 186,-81842 }, + { 187,-81842 }, { 188,-81842 }, { 189,-81842 }, { 190,-81842 }, { 191,-81842 }, + + { 192,-81842 }, { 193,-81842 }, { 194,-81842 }, { 195,-81842 }, { 196,-81842 }, + { 197,-81842 }, { 198,-81842 }, { 199,-81842 }, { 200,-81842 }, { 201,-81842 }, + { 202,-81842 }, { 203,-81842 }, { 204,-81842 }, { 205,-81842 }, { 206,-81842 }, + { 207,-81842 }, { 208,-81842 }, { 209,-81842 }, { 210,-81842 }, { 211,-81842 }, + { 212,-81842 }, { 213,-81842 }, { 214,-81842 }, { 215,-81842 }, { 216,-81842 }, + { 217,-81842 }, { 218,-81842 }, { 219,-81842 }, { 220,-81842 }, { 221,-81842 }, + { 222,-81842 }, { 223,-81842 }, { 224,-81842 }, { 225,-81842 }, { 226,-81842 }, + { 227,-81842 }, { 228,-81842 }, { 229,-81842 }, { 230,-81842 }, { 231,-81842 }, + { 232,-81842 }, { 233,-81842 }, { 234,-81842 }, { 235,-81842 }, { 236,-81842 }, + { 237,-81842 }, { 238,-81842 }, { 239,-81842 }, { 240,-81842 }, { 241,-81842 }, + + { 242,-81842 }, { 243,-81842 }, { 244,-81842 }, { 245,-81842 }, { 246,-81842 }, + { 247,-81842 }, { 248,-81842 }, { 249,-81842 }, { 250,-81842 }, { 251,-81842 }, + { 252,-81842 }, { 253,-81842 }, { 254,-81842 }, { 255,-81842 }, { 0, 47 }, + { 0,10024 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-82099 }, { 49,-82099 }, + { 50,-82099 }, { 51,-82099 }, { 52,-82099 }, { 53,-82099 }, { 54,-82099 }, + { 55,-82099 }, { 56,-82099 }, { 57,-82099 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-82099 }, { 66,-82099 }, { 67,-82099 }, { 68,-82099 }, { 69,-82099 }, + { 70,-82099 }, { 71,-82099 }, { 72,-82099 }, { 73,-82099 }, { 74,-82099 }, + { 75,-82099 }, { 76,-82099 }, { 77,-82099 }, { 78,-82099 }, { 79,-82099 }, + { 80,-82099 }, { 81,-82099 }, { 82,-82099 }, { 83,-82099 }, { 84,-82099 }, + + { 85,-82099 }, { 86,-82099 }, { 87,-82099 }, { 88,-82099 }, { 89,-82099 }, + { 90,-82099 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-82099 }, { 0, 0 }, { 97,-82099 }, { 98,-82099 }, { 99,-82099 }, + { 100,-82099 }, { 101,-82099 }, { 102,-82099 }, { 103,-82099 }, { 104,-82099 }, + { 105,-82099 }, { 106,-82099 }, { 107,-82099 }, { 108,-82099 }, { 109,-82099 }, + { 110,-82099 }, { 111,-82099 }, { 112,-82099 }, { 113,-82099 }, { 114,-82099 }, + { 115,-82099 }, { 116,-82099 }, { 117,-82099 }, { 118,-82099 }, { 119,-82099 }, + { 120,-82099 }, { 121,-82099 }, { 122,-82099 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-82099 }, { 128,-82099 }, { 129,-82099 }, + { 130,-82099 }, { 131,-82099 }, { 132,-82099 }, { 133,-82099 }, { 134,-82099 }, + + { 135,-82099 }, { 136,-82099 }, { 137,-82099 }, { 138,-82099 }, { 139,-82099 }, + { 140,-82099 }, { 141,-82099 }, { 142,-82099 }, { 143,-82099 }, { 144,-82099 }, + { 145,-82099 }, { 146,-82099 }, { 147,-82099 }, { 148,-82099 }, { 149,-82099 }, + { 150,-82099 }, { 151,-82099 }, { 152,-82099 }, { 153,-82099 }, { 154,-82099 }, + { 155,-82099 }, { 156,-82099 }, { 157,-82099 }, { 158,-82099 }, { 159,-82099 }, + { 160,-82099 }, { 161,-82099 }, { 162,-82099 }, { 163,-82099 }, { 164,-82099 }, + { 165,-82099 }, { 166,-82099 }, { 167,-82099 }, { 168,-82099 }, { 169,-82099 }, + { 170,-82099 }, { 171,-82099 }, { 172,-82099 }, { 173,-82099 }, { 174,-82099 }, + { 175,-82099 }, { 176,-82099 }, { 177,-82099 }, { 178,-82099 }, { 179,-82099 }, + { 180,-82099 }, { 181,-82099 }, { 182,-82099 }, { 183,-82099 }, { 184,-82099 }, + + { 185,-82099 }, { 186,-82099 }, { 187,-82099 }, { 188,-82099 }, { 189,-82099 }, + { 190,-82099 }, { 191,-82099 }, { 192,-82099 }, { 193,-82099 }, { 194,-82099 }, + { 195,-82099 }, { 196,-82099 }, { 197,-82099 }, { 198,-82099 }, { 199,-82099 }, + { 200,-82099 }, { 201,-82099 }, { 202,-82099 }, { 203,-82099 }, { 204,-82099 }, + { 205,-82099 }, { 206,-82099 }, { 207,-82099 }, { 208,-82099 }, { 209,-82099 }, + { 210,-82099 }, { 211,-82099 }, { 212,-82099 }, { 213,-82099 }, { 214,-82099 }, + { 215,-82099 }, { 216,-82099 }, { 217,-82099 }, { 218,-82099 }, { 219,-82099 }, + { 220,-82099 }, { 221,-82099 }, { 222,-82099 }, { 223,-82099 }, { 224,-82099 }, + { 225,-82099 }, { 226,-82099 }, { 227,-82099 }, { 228,-82099 }, { 229,-82099 }, + { 230,-82099 }, { 231,-82099 }, { 232,-82099 }, { 233,-82099 }, { 234,-82099 }, + + { 235,-82099 }, { 236,-82099 }, { 237,-82099 }, { 238,-82099 }, { 239,-82099 }, + { 240,-82099 }, { 241,-82099 }, { 242,-82099 }, { 243,-82099 }, { 244,-82099 }, + { 245,-82099 }, { 246,-82099 }, { 247,-82099 }, { 248,-82099 }, { 249,-82099 }, + { 250,-82099 }, { 251,-82099 }, { 252,-82099 }, { 253,-82099 }, { 254,-82099 }, + { 255,-82099 }, { 0, 131 }, { 0,9767 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-82356 }, { 49,-82356 }, { 50,-82356 }, { 51,-82356 }, { 52,-82356 }, + { 53,-82356 }, { 54,-82356 }, { 55,-82356 }, { 56,-82356 }, { 57,-82356 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-82356 }, { 66,-82356 }, { 67,-82356 }, + { 68,-82356 }, { 69,-82356 }, { 70,-82356 }, { 71,-82356 }, { 72,-82356 }, + { 73,-82356 }, { 74,-82356 }, { 75,-82356 }, { 76,-82356 }, { 77,-82356 }, + + { 78,-82356 }, { 79,-82356 }, { 80,-82356 }, { 81,-82356 }, { 82,-82356 }, + { 83,4112 }, { 84,-82356 }, { 85,-82356 }, { 86,-82356 }, { 87,-82356 }, + { 88,-82356 }, { 89,-82356 }, { 90,-82356 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-82356 }, { 0, 0 }, { 97,-82356 }, + { 98,-82356 }, { 99,-82356 }, { 100,-82356 }, { 101,-82356 }, { 102,-82356 }, + { 103,-82356 }, { 104,-82356 }, { 105,-82356 }, { 106,-82356 }, { 107,-82356 }, + { 108,-82356 }, { 109,-82356 }, { 110,-82356 }, { 111,-82356 }, { 112,-82356 }, + { 113,-82356 }, { 114,-82356 }, { 115,4112 }, { 116,-82356 }, { 117,-82356 }, + { 118,-82356 }, { 119,-82356 }, { 120,-82356 }, { 121,-82356 }, { 122,-82356 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-82356 }, + + { 128,-82356 }, { 129,-82356 }, { 130,-82356 }, { 131,-82356 }, { 132,-82356 }, + { 133,-82356 }, { 134,-82356 }, { 135,-82356 }, { 136,-82356 }, { 137,-82356 }, + { 138,-82356 }, { 139,-82356 }, { 140,-82356 }, { 141,-82356 }, { 142,-82356 }, + { 143,-82356 }, { 144,-82356 }, { 145,-82356 }, { 146,-82356 }, { 147,-82356 }, + { 148,-82356 }, { 149,-82356 }, { 150,-82356 }, { 151,-82356 }, { 152,-82356 }, + { 153,-82356 }, { 154,-82356 }, { 155,-82356 }, { 156,-82356 }, { 157,-82356 }, + { 158,-82356 }, { 159,-82356 }, { 160,-82356 }, { 161,-82356 }, { 162,-82356 }, + { 163,-82356 }, { 164,-82356 }, { 165,-82356 }, { 166,-82356 }, { 167,-82356 }, + { 168,-82356 }, { 169,-82356 }, { 170,-82356 }, { 171,-82356 }, { 172,-82356 }, + { 173,-82356 }, { 174,-82356 }, { 175,-82356 }, { 176,-82356 }, { 177,-82356 }, + + { 178,-82356 }, { 179,-82356 }, { 180,-82356 }, { 181,-82356 }, { 182,-82356 }, + { 183,-82356 }, { 184,-82356 }, { 185,-82356 }, { 186,-82356 }, { 187,-82356 }, + { 188,-82356 }, { 189,-82356 }, { 190,-82356 }, { 191,-82356 }, { 192,-82356 }, + { 193,-82356 }, { 194,-82356 }, { 195,-82356 }, { 196,-82356 }, { 197,-82356 }, + { 198,-82356 }, { 199,-82356 }, { 200,-82356 }, { 201,-82356 }, { 202,-82356 }, + { 203,-82356 }, { 204,-82356 }, { 205,-82356 }, { 206,-82356 }, { 207,-82356 }, + { 208,-82356 }, { 209,-82356 }, { 210,-82356 }, { 211,-82356 }, { 212,-82356 }, + { 213,-82356 }, { 214,-82356 }, { 215,-82356 }, { 216,-82356 }, { 217,-82356 }, + { 218,-82356 }, { 219,-82356 }, { 220,-82356 }, { 221,-82356 }, { 222,-82356 }, + { 223,-82356 }, { 224,-82356 }, { 225,-82356 }, { 226,-82356 }, { 227,-82356 }, + + { 228,-82356 }, { 229,-82356 }, { 230,-82356 }, { 231,-82356 }, { 232,-82356 }, + { 233,-82356 }, { 234,-82356 }, { 235,-82356 }, { 236,-82356 }, { 237,-82356 }, + { 238,-82356 }, { 239,-82356 }, { 240,-82356 }, { 241,-82356 }, { 242,-82356 }, + { 243,-82356 }, { 244,-82356 }, { 245,-82356 }, { 246,-82356 }, { 247,-82356 }, + { 248,-82356 }, { 249,-82356 }, { 250,-82356 }, { 251,-82356 }, { 252,-82356 }, + { 253,-82356 }, { 254,-82356 }, { 255,-82356 }, { 0, 131 }, { 0,9510 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-82613 }, { 49,-82613 }, { 50,-82613 }, + { 51,-82613 }, { 52,-82613 }, { 53,-82613 }, { 54,-82613 }, { 55,-82613 }, + { 56,-82613 }, { 57,-82613 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-82613 }, + { 66,-82613 }, { 67,-82613 }, { 68,-82613 }, { 69,-82613 }, { 70,-82613 }, + + { 71,-82613 }, { 72,-82613 }, { 73,-82613 }, { 74,-82613 }, { 75,-82613 }, + { 76,-82613 }, { 77,-82613 }, { 78,4112 }, { 79,-82613 }, { 80,-82613 }, + { 81,-82613 }, { 82,-82613 }, { 83,-82613 }, { 84,-82613 }, { 85,-82613 }, + { 86,-82613 }, { 87,-82613 }, { 88,-82613 }, { 89,-82613 }, { 90,-82613 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-82613 }, + { 0, 0 }, { 97,-82613 }, { 98,-82613 }, { 99,-82613 }, { 100,-82613 }, + { 101,-82613 }, { 102,-82613 }, { 103,-82613 }, { 104,-82613 }, { 105,-82613 }, + { 106,-82613 }, { 107,-82613 }, { 108,-82613 }, { 109,-82613 }, { 110,4112 }, + { 111,-82613 }, { 112,-82613 }, { 113,-82613 }, { 114,-82613 }, { 115,-82613 }, + { 116,-82613 }, { 117,-82613 }, { 118,-82613 }, { 119,-82613 }, { 120,-82613 }, + + { 121,-82613 }, { 122,-82613 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-82613 }, { 128,-82613 }, { 129,-82613 }, { 130,-82613 }, + { 131,-82613 }, { 132,-82613 }, { 133,-82613 }, { 134,-82613 }, { 135,-82613 }, + { 136,-82613 }, { 137,-82613 }, { 138,-82613 }, { 139,-82613 }, { 140,-82613 }, + { 141,-82613 }, { 142,-82613 }, { 143,-82613 }, { 144,-82613 }, { 145,-82613 }, + { 146,-82613 }, { 147,-82613 }, { 148,-82613 }, { 149,-82613 }, { 150,-82613 }, + { 151,-82613 }, { 152,-82613 }, { 153,-82613 }, { 154,-82613 }, { 155,-82613 }, + { 156,-82613 }, { 157,-82613 }, { 158,-82613 }, { 159,-82613 }, { 160,-82613 }, + { 161,-82613 }, { 162,-82613 }, { 163,-82613 }, { 164,-82613 }, { 165,-82613 }, + { 166,-82613 }, { 167,-82613 }, { 168,-82613 }, { 169,-82613 }, { 170,-82613 }, + + { 171,-82613 }, { 172,-82613 }, { 173,-82613 }, { 174,-82613 }, { 175,-82613 }, + { 176,-82613 }, { 177,-82613 }, { 178,-82613 }, { 179,-82613 }, { 180,-82613 }, + { 181,-82613 }, { 182,-82613 }, { 183,-82613 }, { 184,-82613 }, { 185,-82613 }, + { 186,-82613 }, { 187,-82613 }, { 188,-82613 }, { 189,-82613 }, { 190,-82613 }, + { 191,-82613 }, { 192,-82613 }, { 193,-82613 }, { 194,-82613 }, { 195,-82613 }, + { 196,-82613 }, { 197,-82613 }, { 198,-82613 }, { 199,-82613 }, { 200,-82613 }, + { 201,-82613 }, { 202,-82613 }, { 203,-82613 }, { 204,-82613 }, { 205,-82613 }, + { 206,-82613 }, { 207,-82613 }, { 208,-82613 }, { 209,-82613 }, { 210,-82613 }, + { 211,-82613 }, { 212,-82613 }, { 213,-82613 }, { 214,-82613 }, { 215,-82613 }, + { 216,-82613 }, { 217,-82613 }, { 218,-82613 }, { 219,-82613 }, { 220,-82613 }, + + { 221,-82613 }, { 222,-82613 }, { 223,-82613 }, { 224,-82613 }, { 225,-82613 }, + { 226,-82613 }, { 227,-82613 }, { 228,-82613 }, { 229,-82613 }, { 230,-82613 }, + { 231,-82613 }, { 232,-82613 }, { 233,-82613 }, { 234,-82613 }, { 235,-82613 }, + { 236,-82613 }, { 237,-82613 }, { 238,-82613 }, { 239,-82613 }, { 240,-82613 }, + { 241,-82613 }, { 242,-82613 }, { 243,-82613 }, { 244,-82613 }, { 245,-82613 }, + { 246,-82613 }, { 247,-82613 }, { 248,-82613 }, { 249,-82613 }, { 250,-82613 }, + { 251,-82613 }, { 252,-82613 }, { 253,-82613 }, { 254,-82613 }, { 255,-82613 }, + { 0, 131 }, { 0,9253 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-82870 }, + { 49,-82870 }, { 50,-82870 }, { 51,-82870 }, { 52,-82870 }, { 53,-82870 }, + { 54,-82870 }, { 55,-82870 }, { 56,-82870 }, { 57,-82870 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-82870 }, { 66,-82870 }, { 67,-82870 }, { 68,-82870 }, + { 69,-82870 }, { 70,4112 }, { 71,-82870 }, { 72,-82870 }, { 73,-82870 }, + { 74,-82870 }, { 75,-82870 }, { 76,-82870 }, { 77,-82870 }, { 78,-82870 }, + { 79,-82870 }, { 80,-82870 }, { 81,-82870 }, { 82,-82870 }, { 83,-82870 }, + { 84,-82870 }, { 85,-82870 }, { 86,-82870 }, { 87,-82870 }, { 88,-82870 }, + { 89,-82870 }, { 90,-82870 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-82870 }, { 0, 0 }, { 97,-82870 }, { 98,-82870 }, + { 99,-82870 }, { 100,-82870 }, { 101,-82870 }, { 102,4112 }, { 103,-82870 }, + { 104,-82870 }, { 105,-82870 }, { 106,-82870 }, { 107,-82870 }, { 108,-82870 }, + { 109,-82870 }, { 110,-82870 }, { 111,-82870 }, { 112,-82870 }, { 113,-82870 }, + + { 114,-82870 }, { 115,-82870 }, { 116,-82870 }, { 117,-82870 }, { 118,-82870 }, + { 119,-82870 }, { 120,-82870 }, { 121,-82870 }, { 122,-82870 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-82870 }, { 128,-82870 }, + { 129,-82870 }, { 130,-82870 }, { 131,-82870 }, { 132,-82870 }, { 133,-82870 }, + { 134,-82870 }, { 135,-82870 }, { 136,-82870 }, { 137,-82870 }, { 138,-82870 }, + { 139,-82870 }, { 140,-82870 }, { 141,-82870 }, { 142,-82870 }, { 143,-82870 }, + { 144,-82870 }, { 145,-82870 }, { 146,-82870 }, { 147,-82870 }, { 148,-82870 }, + { 149,-82870 }, { 150,-82870 }, { 151,-82870 }, { 152,-82870 }, { 153,-82870 }, + { 154,-82870 }, { 155,-82870 }, { 156,-82870 }, { 157,-82870 }, { 158,-82870 }, + { 159,-82870 }, { 160,-82870 }, { 161,-82870 }, { 162,-82870 }, { 163,-82870 }, + + { 164,-82870 }, { 165,-82870 }, { 166,-82870 }, { 167,-82870 }, { 168,-82870 }, + { 169,-82870 }, { 170,-82870 }, { 171,-82870 }, { 172,-82870 }, { 173,-82870 }, + { 174,-82870 }, { 175,-82870 }, { 176,-82870 }, { 177,-82870 }, { 178,-82870 }, + { 179,-82870 }, { 180,-82870 }, { 181,-82870 }, { 182,-82870 }, { 183,-82870 }, + { 184,-82870 }, { 185,-82870 }, { 186,-82870 }, { 187,-82870 }, { 188,-82870 }, + { 189,-82870 }, { 190,-82870 }, { 191,-82870 }, { 192,-82870 }, { 193,-82870 }, + { 194,-82870 }, { 195,-82870 }, { 196,-82870 }, { 197,-82870 }, { 198,-82870 }, + { 199,-82870 }, { 200,-82870 }, { 201,-82870 }, { 202,-82870 }, { 203,-82870 }, + { 204,-82870 }, { 205,-82870 }, { 206,-82870 }, { 207,-82870 }, { 208,-82870 }, + { 209,-82870 }, { 210,-82870 }, { 211,-82870 }, { 212,-82870 }, { 213,-82870 }, + + { 214,-82870 }, { 215,-82870 }, { 216,-82870 }, { 217,-82870 }, { 218,-82870 }, + { 219,-82870 }, { 220,-82870 }, { 221,-82870 }, { 222,-82870 }, { 223,-82870 }, + { 224,-82870 }, { 225,-82870 }, { 226,-82870 }, { 227,-82870 }, { 228,-82870 }, + { 229,-82870 }, { 230,-82870 }, { 231,-82870 }, { 232,-82870 }, { 233,-82870 }, + { 234,-82870 }, { 235,-82870 }, { 236,-82870 }, { 237,-82870 }, { 238,-82870 }, + { 239,-82870 }, { 240,-82870 }, { 241,-82870 }, { 242,-82870 }, { 243,-82870 }, + { 244,-82870 }, { 245,-82870 }, { 246,-82870 }, { 247,-82870 }, { 248,-82870 }, + { 249,-82870 }, { 250,-82870 }, { 251,-82870 }, { 252,-82870 }, { 253,-82870 }, + { 254,-82870 }, { 255,-82870 }, { 0, 86 }, { 0,8996 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-83127 }, { 49,-83127 }, { 50,-83127 }, { 51,-83127 }, + { 52,-83127 }, { 53,-83127 }, { 54,-83127 }, { 55,-83127 }, { 56,-83127 }, + + { 57,-83127 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-83127 }, { 66,-83127 }, + { 67,-83127 }, { 68,-83127 }, { 69,-83127 }, { 70,-83127 }, { 71,-83127 }, + { 72,-83127 }, { 73,-83127 }, { 74,-83127 }, { 75,-83127 }, { 76,-83127 }, + { 77,-83127 }, { 78,-83127 }, { 79,-83127 }, { 80,-83127 }, { 81,-83127 }, + { 82,-83127 }, { 83,-83127 }, { 84,-83127 }, { 85,-83127 }, { 86,-83127 }, + { 87,-83127 }, { 88,-83127 }, { 89,-83127 }, { 90,-83127 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-83127 }, { 0, 0 }, + { 97,-83127 }, { 98,-83127 }, { 99,-83127 }, { 100,-83127 }, { 101,-83127 }, + { 102,-83127 }, { 103,-83127 }, { 104,-83127 }, { 105,-83127 }, { 106,-83127 }, + + { 107,-83127 }, { 108,-83127 }, { 109,-83127 }, { 110,-83127 }, { 111,-83127 }, + { 112,-83127 }, { 113,-83127 }, { 114,-83127 }, { 115,-83127 }, { 116,-83127 }, + { 117,-83127 }, { 118,-83127 }, { 119,-83127 }, { 120,-83127 }, { 121,-83127 }, + { 122,-83127 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-83127 }, { 128,-83127 }, { 129,-83127 }, { 130,-83127 }, { 131,-83127 }, + { 132,-83127 }, { 133,-83127 }, { 134,-83127 }, { 135,-83127 }, { 136,-83127 }, + { 137,-83127 }, { 138,-83127 }, { 139,-83127 }, { 140,-83127 }, { 141,-83127 }, + { 142,-83127 }, { 143,-83127 }, { 144,-83127 }, { 145,-83127 }, { 146,-83127 }, + { 147,-83127 }, { 148,-83127 }, { 149,-83127 }, { 150,-83127 }, { 151,-83127 }, + { 152,-83127 }, { 153,-83127 }, { 154,-83127 }, { 155,-83127 }, { 156,-83127 }, + + { 157,-83127 }, { 158,-83127 }, { 159,-83127 }, { 160,-83127 }, { 161,-83127 }, + { 162,-83127 }, { 163,-83127 }, { 164,-83127 }, { 165,-83127 }, { 166,-83127 }, + { 167,-83127 }, { 168,-83127 }, { 169,-83127 }, { 170,-83127 }, { 171,-83127 }, + { 172,-83127 }, { 173,-83127 }, { 174,-83127 }, { 175,-83127 }, { 176,-83127 }, + { 177,-83127 }, { 178,-83127 }, { 179,-83127 }, { 180,-83127 }, { 181,-83127 }, + { 182,-83127 }, { 183,-83127 }, { 184,-83127 }, { 185,-83127 }, { 186,-83127 }, + { 187,-83127 }, { 188,-83127 }, { 189,-83127 }, { 190,-83127 }, { 191,-83127 }, + { 192,-83127 }, { 193,-83127 }, { 194,-83127 }, { 195,-83127 }, { 196,-83127 }, + { 197,-83127 }, { 198,-83127 }, { 199,-83127 }, { 200,-83127 }, { 201,-83127 }, + { 202,-83127 }, { 203,-83127 }, { 204,-83127 }, { 205,-83127 }, { 206,-83127 }, + + { 207,-83127 }, { 208,-83127 }, { 209,-83127 }, { 210,-83127 }, { 211,-83127 }, + { 212,-83127 }, { 213,-83127 }, { 214,-83127 }, { 215,-83127 }, { 216,-83127 }, + { 217,-83127 }, { 218,-83127 }, { 219,-83127 }, { 220,-83127 }, { 221,-83127 }, + { 222,-83127 }, { 223,-83127 }, { 224,-83127 }, { 225,-83127 }, { 226,-83127 }, + { 227,-83127 }, { 228,-83127 }, { 229,-83127 }, { 230,-83127 }, { 231,-83127 }, + { 232,-83127 }, { 233,-83127 }, { 234,-83127 }, { 235,-83127 }, { 236,-83127 }, + { 237,-83127 }, { 238,-83127 }, { 239,-83127 }, { 240,-83127 }, { 241,-83127 }, + { 242,-83127 }, { 243,-83127 }, { 244,-83127 }, { 245,-83127 }, { 246,-83127 }, + { 247,-83127 }, { 248,-83127 }, { 249,-83127 }, { 250,-83127 }, { 251,-83127 }, + { 252,-83127 }, { 253,-83127 }, { 254,-83127 }, { 255,-83127 }, { 0, 73 }, + + { 0,8739 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-83384 }, { 49,-83384 }, + + { 50,-83384 }, { 51,-83384 }, { 52,-83384 }, { 53,-83384 }, { 54,-83384 }, + { 55,-83384 }, { 56,-83384 }, { 57,-83384 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-83384 }, { 66,-83384 }, { 67,-83384 }, { 68,-83384 }, { 69,-83384 }, + { 70,-83384 }, { 71,-83384 }, { 72,-83384 }, { 73,-83384 }, { 74,-83384 }, + { 75,-83384 }, { 76,-83384 }, { 77,-83384 }, { 78,-83384 }, { 79,-83384 }, + { 80,-83384 }, { 81,-83384 }, { 82,-83384 }, { 83,-83384 }, { 84,-83384 }, + { 85,-83384 }, { 86,-83384 }, { 87,-83384 }, { 88,-83384 }, { 89,-83384 }, + { 90,-83384 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-83384 }, { 0, 0 }, { 97,-83384 }, { 98,-83384 }, { 99,-83384 }, + + { 100,-83384 }, { 101,-83384 }, { 102,-83384 }, { 103,-83384 }, { 104,-83384 }, + { 105,-83384 }, { 106,-83384 }, { 107,-83384 }, { 108,-83384 }, { 109,-83384 }, + { 110,-83384 }, { 111,-83384 }, { 112,-83384 }, { 113,-83384 }, { 114,-83384 }, + { 115,-83384 }, { 116,-83384 }, { 117,-83384 }, { 118,-83384 }, { 119,-83384 }, + { 120,-83384 }, { 121,-83384 }, { 122,-83384 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-83384 }, { 128,-83384 }, { 129,-83384 }, + { 130,-83384 }, { 131,-83384 }, { 132,-83384 }, { 133,-83384 }, { 134,-83384 }, + { 135,-83384 }, { 136,-83384 }, { 137,-83384 }, { 138,-83384 }, { 139,-83384 }, + { 140,-83384 }, { 141,-83384 }, { 142,-83384 }, { 143,-83384 }, { 144,-83384 }, + { 145,-83384 }, { 146,-83384 }, { 147,-83384 }, { 148,-83384 }, { 149,-83384 }, + + { 150,-83384 }, { 151,-83384 }, { 152,-83384 }, { 153,-83384 }, { 154,-83384 }, + { 155,-83384 }, { 156,-83384 }, { 157,-83384 }, { 158,-83384 }, { 159,-83384 }, + { 160,-83384 }, { 161,-83384 }, { 162,-83384 }, { 163,-83384 }, { 164,-83384 }, + { 165,-83384 }, { 166,-83384 }, { 167,-83384 }, { 168,-83384 }, { 169,-83384 }, + { 170,-83384 }, { 171,-83384 }, { 172,-83384 }, { 173,-83384 }, { 174,-83384 }, + { 175,-83384 }, { 176,-83384 }, { 177,-83384 }, { 178,-83384 }, { 179,-83384 }, + { 180,-83384 }, { 181,-83384 }, { 182,-83384 }, { 183,-83384 }, { 184,-83384 }, + { 185,-83384 }, { 186,-83384 }, { 187,-83384 }, { 188,-83384 }, { 189,-83384 }, + { 190,-83384 }, { 191,-83384 }, { 192,-83384 }, { 193,-83384 }, { 194,-83384 }, + { 195,-83384 }, { 196,-83384 }, { 197,-83384 }, { 198,-83384 }, { 199,-83384 }, + + { 200,-83384 }, { 201,-83384 }, { 202,-83384 }, { 203,-83384 }, { 204,-83384 }, + { 205,-83384 }, { 206,-83384 }, { 207,-83384 }, { 208,-83384 }, { 209,-83384 }, + { 210,-83384 }, { 211,-83384 }, { 212,-83384 }, { 213,-83384 }, { 214,-83384 }, + { 215,-83384 }, { 216,-83384 }, { 217,-83384 }, { 218,-83384 }, { 219,-83384 }, + { 220,-83384 }, { 221,-83384 }, { 222,-83384 }, { 223,-83384 }, { 224,-83384 }, + { 225,-83384 }, { 226,-83384 }, { 227,-83384 }, { 228,-83384 }, { 229,-83384 }, + { 230,-83384 }, { 231,-83384 }, { 232,-83384 }, { 233,-83384 }, { 234,-83384 }, + { 235,-83384 }, { 236,-83384 }, { 237,-83384 }, { 238,-83384 }, { 239,-83384 }, + { 240,-83384 }, { 241,-83384 }, { 242,-83384 }, { 243,-83384 }, { 244,-83384 }, + { 245,-83384 }, { 246,-83384 }, { 247,-83384 }, { 248,-83384 }, { 249,-83384 }, + + { 250,-83384 }, { 251,-83384 }, { 252,-83384 }, { 253,-83384 }, { 254,-83384 }, + { 255,-83384 }, { 0, 83 }, { 0,8482 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-83641 }, { 49,-83641 }, { 50,-83641 }, { 51,-83641 }, { 52,-83641 }, + { 53,-83641 }, { 54,-83641 }, { 55,-83641 }, { 56,-83641 }, { 57,-83641 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-83641 }, { 66,-83641 }, { 67,-83641 }, + { 68,-83641 }, { 69,-83641 }, { 70,-83641 }, { 71,-83641 }, { 72,-83641 }, + { 73,-83641 }, { 74,-83641 }, { 75,-83641 }, { 76,-83641 }, { 77,-83641 }, + { 78,-83641 }, { 79,-83641 }, { 80,-83641 }, { 81,-83641 }, { 82,-83641 }, + { 83,-83641 }, { 84,-83641 }, { 85,-83641 }, { 86,-83641 }, { 87,-83641 }, + { 88,-83641 }, { 89,-83641 }, { 90,-83641 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-83641 }, { 0, 0 }, { 97,-83641 }, + { 98,-83641 }, { 99,-83641 }, { 100,-83641 }, { 101,-83641 }, { 102,-83641 }, + { 103,-83641 }, { 104,-83641 }, { 105,-83641 }, { 106,-83641 }, { 107,-83641 }, + { 108,-83641 }, { 109,-83641 }, { 110,-83641 }, { 111,-83641 }, { 112,-83641 }, + { 113,-83641 }, { 114,-83641 }, { 115,-83641 }, { 116,-83641 }, { 117,-83641 }, + { 118,-83641 }, { 119,-83641 }, { 120,-83641 }, { 121,-83641 }, { 122,-83641 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-83641 }, + { 128,-83641 }, { 129,-83641 }, { 130,-83641 }, { 131,-83641 }, { 132,-83641 }, + { 133,-83641 }, { 134,-83641 }, { 135,-83641 }, { 136,-83641 }, { 137,-83641 }, + { 138,-83641 }, { 139,-83641 }, { 140,-83641 }, { 141,-83641 }, { 142,-83641 }, + + { 143,-83641 }, { 144,-83641 }, { 145,-83641 }, { 146,-83641 }, { 147,-83641 }, + { 148,-83641 }, { 149,-83641 }, { 150,-83641 }, { 151,-83641 }, { 152,-83641 }, + { 153,-83641 }, { 154,-83641 }, { 155,-83641 }, { 156,-83641 }, { 157,-83641 }, + { 158,-83641 }, { 159,-83641 }, { 160,-83641 }, { 161,-83641 }, { 162,-83641 }, + { 163,-83641 }, { 164,-83641 }, { 165,-83641 }, { 166,-83641 }, { 167,-83641 }, + { 168,-83641 }, { 169,-83641 }, { 170,-83641 }, { 171,-83641 }, { 172,-83641 }, + { 173,-83641 }, { 174,-83641 }, { 175,-83641 }, { 176,-83641 }, { 177,-83641 }, + { 178,-83641 }, { 179,-83641 }, { 180,-83641 }, { 181,-83641 }, { 182,-83641 }, + { 183,-83641 }, { 184,-83641 }, { 185,-83641 }, { 186,-83641 }, { 187,-83641 }, + { 188,-83641 }, { 189,-83641 }, { 190,-83641 }, { 191,-83641 }, { 192,-83641 }, + + { 193,-83641 }, { 194,-83641 }, { 195,-83641 }, { 196,-83641 }, { 197,-83641 }, + { 198,-83641 }, { 199,-83641 }, { 200,-83641 }, { 201,-83641 }, { 202,-83641 }, + { 203,-83641 }, { 204,-83641 }, { 205,-83641 }, { 206,-83641 }, { 207,-83641 }, + { 208,-83641 }, { 209,-83641 }, { 210,-83641 }, { 211,-83641 }, { 212,-83641 }, + { 213,-83641 }, { 214,-83641 }, { 215,-83641 }, { 216,-83641 }, { 217,-83641 }, + { 218,-83641 }, { 219,-83641 }, { 220,-83641 }, { 221,-83641 }, { 222,-83641 }, + { 223,-83641 }, { 224,-83641 }, { 225,-83641 }, { 226,-83641 }, { 227,-83641 }, + { 228,-83641 }, { 229,-83641 }, { 230,-83641 }, { 231,-83641 }, { 232,-83641 }, + { 233,-83641 }, { 234,-83641 }, { 235,-83641 }, { 236,-83641 }, { 237,-83641 }, + { 238,-83641 }, { 239,-83641 }, { 240,-83641 }, { 241,-83641 }, { 242,-83641 }, + + { 243,-83641 }, { 244,-83641 }, { 245,-83641 }, { 246,-83641 }, { 247,-83641 }, + { 248,-83641 }, { 249,-83641 }, { 250,-83641 }, { 251,-83641 }, { 252,-83641 }, + { 253,-83641 }, { 254,-83641 }, { 255,-83641 }, { 0, 65 }, { 0,8225 }, + { 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, 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 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-83898 }, { 49,-83898 }, { 50,-83898 }, + { 51,-83898 }, { 52,-83898 }, { 53,-83898 }, { 54,-83898 }, { 55,-83898 }, + { 56,-83898 }, { 57,-83898 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-83898 }, + { 66,-83898 }, { 67,-83898 }, { 68,-83898 }, { 69,-83898 }, { 70,-83898 }, + { 71,-83898 }, { 72,-83898 }, { 73,-83898 }, { 74,-83898 }, { 75,-83898 }, + { 76,-83898 }, { 77,-83898 }, { 78,-83898 }, { 79,-83898 }, { 80,-83898 }, + { 81,-83898 }, { 82,-83898 }, { 83,-83898 }, { 84,-83898 }, { 85,-83898 }, + + { 86,-83898 }, { 87,-83898 }, { 88,-83898 }, { 89,-83898 }, { 90,-83898 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-83898 }, + { 0, 0 }, { 97,-83898 }, { 98,-83898 }, { 99,-83898 }, { 100,-83898 }, + { 101,-83898 }, { 102,-83898 }, { 103,-83898 }, { 104,-83898 }, { 105,-83898 }, + { 106,-83898 }, { 107,-83898 }, { 108,-83898 }, { 109,-83898 }, { 110,-83898 }, + { 111,-83898 }, { 112,-83898 }, { 113,-83898 }, { 114,-83898 }, { 115,-83898 }, + { 116,-83898 }, { 117,-83898 }, { 118,-83898 }, { 119,-83898 }, { 120,-83898 }, + { 121,-83898 }, { 122,-83898 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-83898 }, { 128,-83898 }, { 129,-83898 }, { 130,-83898 }, + { 131,-83898 }, { 132,-83898 }, { 133,-83898 }, { 134,-83898 }, { 135,-83898 }, + + { 136,-83898 }, { 137,-83898 }, { 138,-83898 }, { 139,-83898 }, { 140,-83898 }, + { 141,-83898 }, { 142,-83898 }, { 143,-83898 }, { 144,-83898 }, { 145,-83898 }, + { 146,-83898 }, { 147,-83898 }, { 148,-83898 }, { 149,-83898 }, { 150,-83898 }, + { 151,-83898 }, { 152,-83898 }, { 153,-83898 }, { 154,-83898 }, { 155,-83898 }, + { 156,-83898 }, { 157,-83898 }, { 158,-83898 }, { 159,-83898 }, { 160,-83898 }, + { 161,-83898 }, { 162,-83898 }, { 163,-83898 }, { 164,-83898 }, { 165,-83898 }, + { 166,-83898 }, { 167,-83898 }, { 168,-83898 }, { 169,-83898 }, { 170,-83898 }, + { 171,-83898 }, { 172,-83898 }, { 173,-83898 }, { 174,-83898 }, { 175,-83898 }, + { 176,-83898 }, { 177,-83898 }, { 178,-83898 }, { 179,-83898 }, { 180,-83898 }, + { 181,-83898 }, { 182,-83898 }, { 183,-83898 }, { 184,-83898 }, { 185,-83898 }, + + { 186,-83898 }, { 187,-83898 }, { 188,-83898 }, { 189,-83898 }, { 190,-83898 }, + { 191,-83898 }, { 192,-83898 }, { 193,-83898 }, { 194,-83898 }, { 195,-83898 }, + { 196,-83898 }, { 197,-83898 }, { 198,-83898 }, { 199,-83898 }, { 200,-83898 }, + { 201,-83898 }, { 202,-83898 }, { 203,-83898 }, { 204,-83898 }, { 205,-83898 }, + { 206,-83898 }, { 207,-83898 }, { 208,-83898 }, { 209,-83898 }, { 210,-83898 }, + { 211,-83898 }, { 212,-83898 }, { 213,-83898 }, { 214,-83898 }, { 215,-83898 }, + { 216,-83898 }, { 217,-83898 }, { 218,-83898 }, { 219,-83898 }, { 220,-83898 }, + { 221,-83898 }, { 222,-83898 }, { 223,-83898 }, { 224,-83898 }, { 225,-83898 }, + { 226,-83898 }, { 227,-83898 }, { 228,-83898 }, { 229,-83898 }, { 230,-83898 }, + { 231,-83898 }, { 232,-83898 }, { 233,-83898 }, { 234,-83898 }, { 235,-83898 }, + + { 236,-83898 }, { 237,-83898 }, { 238,-83898 }, { 239,-83898 }, { 240,-83898 }, + { 241,-83898 }, { 242,-83898 }, { 243,-83898 }, { 244,-83898 }, { 245,-83898 }, + { 246,-83898 }, { 247,-83898 }, { 248,-83898 }, { 249,-83898 }, { 250,-83898 }, + { 251,-83898 }, { 252,-83898 }, { 253,-83898 }, { 254,-83898 }, { 255,-83898 }, + { 0, 131 }, { 0,7968 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-84155 }, + { 49,-84155 }, { 50,-84155 }, { 51,-84155 }, { 52,-84155 }, { 53,-84155 }, + { 54,-84155 }, { 55,-84155 }, { 56,-84155 }, { 57,-84155 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-84155 }, { 66,-84155 }, { 67,-84155 }, { 68,-84155 }, + { 69,-84155 }, { 70,-84155 }, { 71,-84155 }, { 72,-84155 }, { 73,-84155 }, + { 74,-84155 }, { 75,-84155 }, { 76,-84155 }, { 77,-84155 }, { 78,3084 }, + + { 79,-84155 }, { 80,-84155 }, { 81,-84155 }, { 82,-84155 }, { 83,-84155 }, + { 84,-84155 }, { 85,-84155 }, { 86,-84155 }, { 87,-84155 }, { 88,-84155 }, + { 89,-84155 }, { 90,-84155 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-84155 }, { 0, 0 }, { 97,-84155 }, { 98,-84155 }, + { 99,-84155 }, { 100,-84155 }, { 101,-84155 }, { 102,-84155 }, { 103,-84155 }, + { 104,-84155 }, { 105,-84155 }, { 106,-84155 }, { 107,-84155 }, { 108,-84155 }, + { 109,-84155 }, { 110,3084 }, { 111,-84155 }, { 112,-84155 }, { 113,-84155 }, + { 114,-84155 }, { 115,-84155 }, { 116,-84155 }, { 117,-84155 }, { 118,-84155 }, + { 119,-84155 }, { 120,-84155 }, { 121,-84155 }, { 122,-84155 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-84155 }, { 128,-84155 }, + + { 129,-84155 }, { 130,-84155 }, { 131,-84155 }, { 132,-84155 }, { 133,-84155 }, + { 134,-84155 }, { 135,-84155 }, { 136,-84155 }, { 137,-84155 }, { 138,-84155 }, + { 139,-84155 }, { 140,-84155 }, { 141,-84155 }, { 142,-84155 }, { 143,-84155 }, + { 144,-84155 }, { 145,-84155 }, { 146,-84155 }, { 147,-84155 }, { 148,-84155 }, + { 149,-84155 }, { 150,-84155 }, { 151,-84155 }, { 152,-84155 }, { 153,-84155 }, + { 154,-84155 }, { 155,-84155 }, { 156,-84155 }, { 157,-84155 }, { 158,-84155 }, + { 159,-84155 }, { 160,-84155 }, { 161,-84155 }, { 162,-84155 }, { 163,-84155 }, + { 164,-84155 }, { 165,-84155 }, { 166,-84155 }, { 167,-84155 }, { 168,-84155 }, + { 169,-84155 }, { 170,-84155 }, { 171,-84155 }, { 172,-84155 }, { 173,-84155 }, + { 174,-84155 }, { 175,-84155 }, { 176,-84155 }, { 177,-84155 }, { 178,-84155 }, + + { 179,-84155 }, { 180,-84155 }, { 181,-84155 }, { 182,-84155 }, { 183,-84155 }, + { 184,-84155 }, { 185,-84155 }, { 186,-84155 }, { 187,-84155 }, { 188,-84155 }, + { 189,-84155 }, { 190,-84155 }, { 191,-84155 }, { 192,-84155 }, { 193,-84155 }, + { 194,-84155 }, { 195,-84155 }, { 196,-84155 }, { 197,-84155 }, { 198,-84155 }, + { 199,-84155 }, { 200,-84155 }, { 201,-84155 }, { 202,-84155 }, { 203,-84155 }, + { 204,-84155 }, { 205,-84155 }, { 206,-84155 }, { 207,-84155 }, { 208,-84155 }, + { 209,-84155 }, { 210,-84155 }, { 211,-84155 }, { 212,-84155 }, { 213,-84155 }, + { 214,-84155 }, { 215,-84155 }, { 216,-84155 }, { 217,-84155 }, { 218,-84155 }, + { 219,-84155 }, { 220,-84155 }, { 221,-84155 }, { 222,-84155 }, { 223,-84155 }, + { 224,-84155 }, { 225,-84155 }, { 226,-84155 }, { 227,-84155 }, { 228,-84155 }, + + { 229,-84155 }, { 230,-84155 }, { 231,-84155 }, { 232,-84155 }, { 233,-84155 }, + { 234,-84155 }, { 235,-84155 }, { 236,-84155 }, { 237,-84155 }, { 238,-84155 }, + { 239,-84155 }, { 240,-84155 }, { 241,-84155 }, { 242,-84155 }, { 243,-84155 }, + { 244,-84155 }, { 245,-84155 }, { 246,-84155 }, { 247,-84155 }, { 248,-84155 }, + { 249,-84155 }, { 250,-84155 }, { 251,-84155 }, { 252,-84155 }, { 253,-84155 }, + { 254,-84155 }, { 255,-84155 }, { 0, 78 }, { 0,7711 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-84412 }, { 49,-84412 }, { 50,-84412 }, { 51,-84412 }, + { 52,-84412 }, { 53,-84412 }, { 54,-84412 }, { 55,-84412 }, { 56,-84412 }, + { 57,-84412 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-84412 }, { 66,-84412 }, + { 67,-84412 }, { 68,-84412 }, { 69,-84412 }, { 70,-84412 }, { 71,-84412 }, + + { 72,-84412 }, { 73,-84412 }, { 74,-84412 }, { 75,-84412 }, { 76,-84412 }, + { 77,-84412 }, { 78,-84412 }, { 79,-84412 }, { 80,-84412 }, { 81,-84412 }, + { 82,-84412 }, { 83,-84412 }, { 84,-84412 }, { 85,-84412 }, { 86,-84412 }, + { 87,-84412 }, { 88,-84412 }, { 89,-84412 }, { 90,-84412 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-84412 }, { 0, 0 }, + { 97,-84412 }, { 98,-84412 }, { 99,-84412 }, { 100,-84412 }, { 101,-84412 }, + { 102,-84412 }, { 103,-84412 }, { 104,-84412 }, { 105,-84412 }, { 106,-84412 }, + { 107,-84412 }, { 108,-84412 }, { 109,-84412 }, { 110,-84412 }, { 111,-84412 }, + { 112,-84412 }, { 113,-84412 }, { 114,-84412 }, { 115,-84412 }, { 116,-84412 }, + { 117,-84412 }, { 118,-84412 }, { 119,-84412 }, { 120,-84412 }, { 121,-84412 }, + + { 122,-84412 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-84412 }, { 128,-84412 }, { 129,-84412 }, { 130,-84412 }, { 131,-84412 }, + { 132,-84412 }, { 133,-84412 }, { 134,-84412 }, { 135,-84412 }, { 136,-84412 }, + { 137,-84412 }, { 138,-84412 }, { 139,-84412 }, { 140,-84412 }, { 141,-84412 }, + { 142,-84412 }, { 143,-84412 }, { 144,-84412 }, { 145,-84412 }, { 146,-84412 }, + { 147,-84412 }, { 148,-84412 }, { 149,-84412 }, { 150,-84412 }, { 151,-84412 }, + { 152,-84412 }, { 153,-84412 }, { 154,-84412 }, { 155,-84412 }, { 156,-84412 }, + { 157,-84412 }, { 158,-84412 }, { 159,-84412 }, { 160,-84412 }, { 161,-84412 }, + { 162,-84412 }, { 163,-84412 }, { 164,-84412 }, { 165,-84412 }, { 166,-84412 }, + { 167,-84412 }, { 168,-84412 }, { 169,-84412 }, { 170,-84412 }, { 171,-84412 }, + + { 172,-84412 }, { 173,-84412 }, { 174,-84412 }, { 175,-84412 }, { 176,-84412 }, + { 177,-84412 }, { 178,-84412 }, { 179,-84412 }, { 180,-84412 }, { 181,-84412 }, + { 182,-84412 }, { 183,-84412 }, { 184,-84412 }, { 185,-84412 }, { 186,-84412 }, + { 187,-84412 }, { 188,-84412 }, { 189,-84412 }, { 190,-84412 }, { 191,-84412 }, + { 192,-84412 }, { 193,-84412 }, { 194,-84412 }, { 195,-84412 }, { 196,-84412 }, + { 197,-84412 }, { 198,-84412 }, { 199,-84412 }, { 200,-84412 }, { 201,-84412 }, + { 202,-84412 }, { 203,-84412 }, { 204,-84412 }, { 205,-84412 }, { 206,-84412 }, + { 207,-84412 }, { 208,-84412 }, { 209,-84412 }, { 210,-84412 }, { 211,-84412 }, + { 212,-84412 }, { 213,-84412 }, { 214,-84412 }, { 215,-84412 }, { 216,-84412 }, + { 217,-84412 }, { 218,-84412 }, { 219,-84412 }, { 220,-84412 }, { 221,-84412 }, + + { 222,-84412 }, { 223,-84412 }, { 224,-84412 }, { 225,-84412 }, { 226,-84412 }, + { 227,-84412 }, { 228,-84412 }, { 229,-84412 }, { 230,-84412 }, { 231,-84412 }, + { 232,-84412 }, { 233,-84412 }, { 234,-84412 }, { 235,-84412 }, { 236,-84412 }, + { 237,-84412 }, { 238,-84412 }, { 239,-84412 }, { 240,-84412 }, { 241,-84412 }, + { 242,-84412 }, { 243,-84412 }, { 244,-84412 }, { 245,-84412 }, { 246,-84412 }, + { 247,-84412 }, { 248,-84412 }, { 249,-84412 }, { 250,-84412 }, { 251,-84412 }, + { 252,-84412 }, { 253,-84412 }, { 254,-84412 }, { 255,-84412 }, { 0, 131 }, + { 0,7454 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-84669 }, { 49,-84669 }, + { 50,-84669 }, { 51,-84669 }, { 52,-84669 }, { 53,-84669 }, { 54,-84669 }, + { 55,-84669 }, { 56,-84669 }, { 57,-84669 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-84669 }, { 66,-84669 }, { 67,-84669 }, { 68,-84669 }, { 69,-84669 }, + { 70,-84669 }, { 71,-84669 }, { 72,-84669 }, { 73,-84669 }, { 74,-84669 }, + { 75,-84669 }, { 76,-84669 }, { 77,-84669 }, { 78,2827 }, { 79,-84669 }, + { 80,-84669 }, { 81,-84669 }, { 82,-84669 }, { 83,-84669 }, { 84,-84669 }, + { 85,-84669 }, { 86,-84669 }, { 87,-84669 }, { 88,-84669 }, { 89,-84669 }, + { 90,-84669 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-84669 }, { 0, 0 }, { 97,-84669 }, { 98,-84669 }, { 99,-84669 }, + { 100,-84669 }, { 101,-84669 }, { 102,-84669 }, { 103,-84669 }, { 104,-84669 }, + { 105,-84669 }, { 106,-84669 }, { 107,-84669 }, { 108,-84669 }, { 109,-84669 }, + { 110,2827 }, { 111,-84669 }, { 112,-84669 }, { 113,-84669 }, { 114,-84669 }, + + { 115,-84669 }, { 116,-84669 }, { 117,-84669 }, { 118,-84669 }, { 119,-84669 }, + { 120,-84669 }, { 121,-84669 }, { 122,-84669 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-84669 }, { 128,-84669 }, { 129,-84669 }, + { 130,-84669 }, { 131,-84669 }, { 132,-84669 }, { 133,-84669 }, { 134,-84669 }, + { 135,-84669 }, { 136,-84669 }, { 137,-84669 }, { 138,-84669 }, { 139,-84669 }, + { 140,-84669 }, { 141,-84669 }, { 142,-84669 }, { 143,-84669 }, { 144,-84669 }, + { 145,-84669 }, { 146,-84669 }, { 147,-84669 }, { 148,-84669 }, { 149,-84669 }, + { 150,-84669 }, { 151,-84669 }, { 152,-84669 }, { 153,-84669 }, { 154,-84669 }, + { 155,-84669 }, { 156,-84669 }, { 157,-84669 }, { 158,-84669 }, { 159,-84669 }, + { 160,-84669 }, { 161,-84669 }, { 162,-84669 }, { 163,-84669 }, { 164,-84669 }, + + { 165,-84669 }, { 166,-84669 }, { 167,-84669 }, { 168,-84669 }, { 169,-84669 }, + { 170,-84669 }, { 171,-84669 }, { 172,-84669 }, { 173,-84669 }, { 174,-84669 }, + { 175,-84669 }, { 176,-84669 }, { 177,-84669 }, { 178,-84669 }, { 179,-84669 }, + { 180,-84669 }, { 181,-84669 }, { 182,-84669 }, { 183,-84669 }, { 184,-84669 }, + { 185,-84669 }, { 186,-84669 }, { 187,-84669 }, { 188,-84669 }, { 189,-84669 }, + { 190,-84669 }, { 191,-84669 }, { 192,-84669 }, { 193,-84669 }, { 194,-84669 }, + { 195,-84669 }, { 196,-84669 }, { 197,-84669 }, { 198,-84669 }, { 199,-84669 }, + { 200,-84669 }, { 201,-84669 }, { 202,-84669 }, { 203,-84669 }, { 204,-84669 }, + { 205,-84669 }, { 206,-84669 }, { 207,-84669 }, { 208,-84669 }, { 209,-84669 }, + { 210,-84669 }, { 211,-84669 }, { 212,-84669 }, { 213,-84669 }, { 214,-84669 }, + + { 215,-84669 }, { 216,-84669 }, { 217,-84669 }, { 218,-84669 }, { 219,-84669 }, + { 220,-84669 }, { 221,-84669 }, { 222,-84669 }, { 223,-84669 }, { 224,-84669 }, + { 225,-84669 }, { 226,-84669 }, { 227,-84669 }, { 228,-84669 }, { 229,-84669 }, + { 230,-84669 }, { 231,-84669 }, { 232,-84669 }, { 233,-84669 }, { 234,-84669 }, + { 235,-84669 }, { 236,-84669 }, { 237,-84669 }, { 238,-84669 }, { 239,-84669 }, + { 240,-84669 }, { 241,-84669 }, { 242,-84669 }, { 243,-84669 }, { 244,-84669 }, + { 245,-84669 }, { 246,-84669 }, { 247,-84669 }, { 248,-84669 }, { 249,-84669 }, + { 250,-84669 }, { 251,-84669 }, { 252,-84669 }, { 253,-84669 }, { 254,-84669 }, + { 255,-84669 }, { 0, 131 }, { 0,7197 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-84926 }, { 49,-84926 }, { 50,-84926 }, { 51,-84926 }, { 52,-84926 }, + { 53,-84926 }, { 54,-84926 }, { 55,-84926 }, { 56,-84926 }, { 57,-84926 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-84926 }, { 66,-84926 }, { 67,-84926 }, + { 68,-84926 }, { 69,-84926 }, { 70,-84926 }, { 71,-84926 }, { 72,-84926 }, + { 73,-84926 }, { 74,-84926 }, { 75,-84926 }, { 76,-84926 }, { 77,2827 }, + { 78,-84926 }, { 79,-84926 }, { 80,-84926 }, { 81,-84926 }, { 82,-84926 }, + { 83,-84926 }, { 84,-84926 }, { 85,-84926 }, { 86,-84926 }, { 87,-84926 }, + { 88,-84926 }, { 89,-84926 }, { 90,-84926 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-84926 }, { 0, 0 }, { 97,-84926 }, + { 98,-84926 }, { 99,-84926 }, { 100,-84926 }, { 101,-84926 }, { 102,-84926 }, + { 103,-84926 }, { 104,-84926 }, { 105,-84926 }, { 106,-84926 }, { 107,-84926 }, + + { 108,-84926 }, { 109,2827 }, { 110,-84926 }, { 111,-84926 }, { 112,-84926 }, + { 113,-84926 }, { 114,-84926 }, { 115,-84926 }, { 116,-84926 }, { 117,-84926 }, + { 118,-84926 }, { 119,-84926 }, { 120,-84926 }, { 121,-84926 }, { 122,-84926 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-84926 }, + { 128,-84926 }, { 129,-84926 }, { 130,-84926 }, { 131,-84926 }, { 132,-84926 }, + { 133,-84926 }, { 134,-84926 }, { 135,-84926 }, { 136,-84926 }, { 137,-84926 }, + { 138,-84926 }, { 139,-84926 }, { 140,-84926 }, { 141,-84926 }, { 142,-84926 }, + { 143,-84926 }, { 144,-84926 }, { 145,-84926 }, { 146,-84926 }, { 147,-84926 }, + { 148,-84926 }, { 149,-84926 }, { 150,-84926 }, { 151,-84926 }, { 152,-84926 }, + { 153,-84926 }, { 154,-84926 }, { 155,-84926 }, { 156,-84926 }, { 157,-84926 }, + + { 158,-84926 }, { 159,-84926 }, { 160,-84926 }, { 161,-84926 }, { 162,-84926 }, + { 163,-84926 }, { 164,-84926 }, { 165,-84926 }, { 166,-84926 }, { 167,-84926 }, + { 168,-84926 }, { 169,-84926 }, { 170,-84926 }, { 171,-84926 }, { 172,-84926 }, + { 173,-84926 }, { 174,-84926 }, { 175,-84926 }, { 176,-84926 }, { 177,-84926 }, + { 178,-84926 }, { 179,-84926 }, { 180,-84926 }, { 181,-84926 }, { 182,-84926 }, + { 183,-84926 }, { 184,-84926 }, { 185,-84926 }, { 186,-84926 }, { 187,-84926 }, + { 188,-84926 }, { 189,-84926 }, { 190,-84926 }, { 191,-84926 }, { 192,-84926 }, + { 193,-84926 }, { 194,-84926 }, { 195,-84926 }, { 196,-84926 }, { 197,-84926 }, + { 198,-84926 }, { 199,-84926 }, { 200,-84926 }, { 201,-84926 }, { 202,-84926 }, + { 203,-84926 }, { 204,-84926 }, { 205,-84926 }, { 206,-84926 }, { 207,-84926 }, + + { 208,-84926 }, { 209,-84926 }, { 210,-84926 }, { 211,-84926 }, { 212,-84926 }, + { 213,-84926 }, { 214,-84926 }, { 215,-84926 }, { 216,-84926 }, { 217,-84926 }, + { 218,-84926 }, { 219,-84926 }, { 220,-84926 }, { 221,-84926 }, { 222,-84926 }, + { 223,-84926 }, { 224,-84926 }, { 225,-84926 }, { 226,-84926 }, { 227,-84926 }, + { 228,-84926 }, { 229,-84926 }, { 230,-84926 }, { 231,-84926 }, { 232,-84926 }, + { 233,-84926 }, { 234,-84926 }, { 235,-84926 }, { 236,-84926 }, { 237,-84926 }, + { 238,-84926 }, { 239,-84926 }, { 240,-84926 }, { 241,-84926 }, { 242,-84926 }, + { 243,-84926 }, { 244,-84926 }, { 245,-84926 }, { 246,-84926 }, { 247,-84926 }, + { 248,-84926 }, { 249,-84926 }, { 250,-84926 }, { 251,-84926 }, { 252,-84926 }, + { 253,-84926 }, { 254,-84926 }, { 255,-84926 }, { 0, 131 }, { 0,6940 }, + + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-85183 }, { 49,-85183 }, { 50,-85183 }, + + { 51,-85183 }, { 52,-85183 }, { 53,-85183 }, { 54,-85183 }, { 55,-85183 }, + { 56,-85183 }, { 57,-85183 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-85183 }, + { 66,-85183 }, { 67,-85183 }, { 68,-85183 }, { 69,-85183 }, { 70,-85183 }, + { 71,-85183 }, { 72,-85183 }, { 73,-85183 }, { 74,-85183 }, { 75,-85183 }, + { 76,-85183 }, { 77,-85183 }, { 78,-85183 }, { 79,-85183 }, { 80,-85183 }, + { 81,-85183 }, { 82,-85183 }, { 83,-85183 }, { 84,-85183 }, { 85,-85183 }, + { 86,-85183 }, { 87,-85183 }, { 88,-85183 }, { 89,-85183 }, { 90,-85183 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,2827 }, + { 0, 0 }, { 97,-85183 }, { 98,-85183 }, { 99,-85183 }, { 100,-85183 }, + + { 101,-85183 }, { 102,-85183 }, { 103,-85183 }, { 104,-85183 }, { 105,-85183 }, + { 106,-85183 }, { 107,-85183 }, { 108,-85183 }, { 109,-85183 }, { 110,-85183 }, + { 111,-85183 }, { 112,-85183 }, { 113,-85183 }, { 114,-85183 }, { 115,-85183 }, + { 116,-85183 }, { 117,-85183 }, { 118,-85183 }, { 119,-85183 }, { 120,-85183 }, + { 121,-85183 }, { 122,-85183 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-85183 }, { 128,-85183 }, { 129,-85183 }, { 130,-85183 }, + { 131,-85183 }, { 132,-85183 }, { 133,-85183 }, { 134,-85183 }, { 135,-85183 }, + { 136,-85183 }, { 137,-85183 }, { 138,-85183 }, { 139,-85183 }, { 140,-85183 }, + { 141,-85183 }, { 142,-85183 }, { 143,-85183 }, { 144,-85183 }, { 145,-85183 }, + { 146,-85183 }, { 147,-85183 }, { 148,-85183 }, { 149,-85183 }, { 150,-85183 }, + + { 151,-85183 }, { 152,-85183 }, { 153,-85183 }, { 154,-85183 }, { 155,-85183 }, + { 156,-85183 }, { 157,-85183 }, { 158,-85183 }, { 159,-85183 }, { 160,-85183 }, + { 161,-85183 }, { 162,-85183 }, { 163,-85183 }, { 164,-85183 }, { 165,-85183 }, + { 166,-85183 }, { 167,-85183 }, { 168,-85183 }, { 169,-85183 }, { 170,-85183 }, + { 171,-85183 }, { 172,-85183 }, { 173,-85183 }, { 174,-85183 }, { 175,-85183 }, + { 176,-85183 }, { 177,-85183 }, { 178,-85183 }, { 179,-85183 }, { 180,-85183 }, + { 181,-85183 }, { 182,-85183 }, { 183,-85183 }, { 184,-85183 }, { 185,-85183 }, + { 186,-85183 }, { 187,-85183 }, { 188,-85183 }, { 189,-85183 }, { 190,-85183 }, + { 191,-85183 }, { 192,-85183 }, { 193,-85183 }, { 194,-85183 }, { 195,-85183 }, + { 196,-85183 }, { 197,-85183 }, { 198,-85183 }, { 199,-85183 }, { 200,-85183 }, + + { 201,-85183 }, { 202,-85183 }, { 203,-85183 }, { 204,-85183 }, { 205,-85183 }, + { 206,-85183 }, { 207,-85183 }, { 208,-85183 }, { 209,-85183 }, { 210,-85183 }, + { 211,-85183 }, { 212,-85183 }, { 213,-85183 }, { 214,-85183 }, { 215,-85183 }, + { 216,-85183 }, { 217,-85183 }, { 218,-85183 }, { 219,-85183 }, { 220,-85183 }, + { 221,-85183 }, { 222,-85183 }, { 223,-85183 }, { 224,-85183 }, { 225,-85183 }, + { 226,-85183 }, { 227,-85183 }, { 228,-85183 }, { 229,-85183 }, { 230,-85183 }, + { 231,-85183 }, { 232,-85183 }, { 233,-85183 }, { 234,-85183 }, { 235,-85183 }, + { 236,-85183 }, { 237,-85183 }, { 238,-85183 }, { 239,-85183 }, { 240,-85183 }, + { 241,-85183 }, { 242,-85183 }, { 243,-85183 }, { 244,-85183 }, { 245,-85183 }, + { 246,-85183 }, { 247,-85183 }, { 248,-85183 }, { 249,-85183 }, { 250,-85183 }, + + { 251,-85183 }, { 252,-85183 }, { 253,-85183 }, { 254,-85183 }, { 255,-85183 }, + { 0, 131 }, { 0,6683 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-85440 }, + { 49,-85440 }, { 50,-85440 }, { 51,-85440 }, { 52,-85440 }, { 53,-85440 }, + { 54,-85440 }, { 55,-85440 }, { 56,-85440 }, { 57,-85440 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-85440 }, { 66,-85440 }, { 67,2827 }, { 68,-85440 }, + { 69,-85440 }, { 70,-85440 }, { 71,-85440 }, { 72,-85440 }, { 73,-85440 }, + { 74,-85440 }, { 75,-85440 }, { 76,-85440 }, { 77,-85440 }, { 78,-85440 }, + { 79,-85440 }, { 80,-85440 }, { 81,-85440 }, { 82,-85440 }, { 83,-85440 }, + { 84,-85440 }, { 85,-85440 }, { 86,-85440 }, { 87,-85440 }, { 88,-85440 }, + { 89,-85440 }, { 90,-85440 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-85440 }, { 0, 0 }, { 97,-85440 }, { 98,-85440 }, + { 99,2827 }, { 100,-85440 }, { 101,-85440 }, { 102,-85440 }, { 103,-85440 }, + { 104,-85440 }, { 105,-85440 }, { 106,-85440 }, { 107,-85440 }, { 108,-85440 }, + { 109,-85440 }, { 110,-85440 }, { 111,-85440 }, { 112,-85440 }, { 113,-85440 }, + { 114,-85440 }, { 115,-85440 }, { 116,-85440 }, { 117,-85440 }, { 118,-85440 }, + { 119,-85440 }, { 120,-85440 }, { 121,-85440 }, { 122,-85440 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-85440 }, { 128,-85440 }, + { 129,-85440 }, { 130,-85440 }, { 131,-85440 }, { 132,-85440 }, { 133,-85440 }, + { 134,-85440 }, { 135,-85440 }, { 136,-85440 }, { 137,-85440 }, { 138,-85440 }, + { 139,-85440 }, { 140,-85440 }, { 141,-85440 }, { 142,-85440 }, { 143,-85440 }, + + { 144,-85440 }, { 145,-85440 }, { 146,-85440 }, { 147,-85440 }, { 148,-85440 }, + { 149,-85440 }, { 150,-85440 }, { 151,-85440 }, { 152,-85440 }, { 153,-85440 }, + { 154,-85440 }, { 155,-85440 }, { 156,-85440 }, { 157,-85440 }, { 158,-85440 }, + { 159,-85440 }, { 160,-85440 }, { 161,-85440 }, { 162,-85440 }, { 163,-85440 }, + { 164,-85440 }, { 165,-85440 }, { 166,-85440 }, { 167,-85440 }, { 168,-85440 }, + { 169,-85440 }, { 170,-85440 }, { 171,-85440 }, { 172,-85440 }, { 173,-85440 }, + { 174,-85440 }, { 175,-85440 }, { 176,-85440 }, { 177,-85440 }, { 178,-85440 }, + { 179,-85440 }, { 180,-85440 }, { 181,-85440 }, { 182,-85440 }, { 183,-85440 }, + { 184,-85440 }, { 185,-85440 }, { 186,-85440 }, { 187,-85440 }, { 188,-85440 }, + { 189,-85440 }, { 190,-85440 }, { 191,-85440 }, { 192,-85440 }, { 193,-85440 }, + + { 194,-85440 }, { 195,-85440 }, { 196,-85440 }, { 197,-85440 }, { 198,-85440 }, + { 199,-85440 }, { 200,-85440 }, { 201,-85440 }, { 202,-85440 }, { 203,-85440 }, + { 204,-85440 }, { 205,-85440 }, { 206,-85440 }, { 207,-85440 }, { 208,-85440 }, + { 209,-85440 }, { 210,-85440 }, { 211,-85440 }, { 212,-85440 }, { 213,-85440 }, + { 214,-85440 }, { 215,-85440 }, { 216,-85440 }, { 217,-85440 }, { 218,-85440 }, + { 219,-85440 }, { 220,-85440 }, { 221,-85440 }, { 222,-85440 }, { 223,-85440 }, + { 224,-85440 }, { 225,-85440 }, { 226,-85440 }, { 227,-85440 }, { 228,-85440 }, + { 229,-85440 }, { 230,-85440 }, { 231,-85440 }, { 232,-85440 }, { 233,-85440 }, + { 234,-85440 }, { 235,-85440 }, { 236,-85440 }, { 237,-85440 }, { 238,-85440 }, + { 239,-85440 }, { 240,-85440 }, { 241,-85440 }, { 242,-85440 }, { 243,-85440 }, + + { 244,-85440 }, { 245,-85440 }, { 246,-85440 }, { 247,-85440 }, { 248,-85440 }, + { 249,-85440 }, { 250,-85440 }, { 251,-85440 }, { 252,-85440 }, { 253,-85440 }, + { 254,-85440 }, { 255,-85440 }, { 0, 89 }, { 0,6426 }, { 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, 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 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-85697 }, { 49,-85697 }, { 50,-85697 }, { 51,-85697 }, + { 52,-85697 }, { 53,-85697 }, { 54,-85697 }, { 55,-85697 }, { 56,-85697 }, + { 57,-85697 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-85697 }, { 66,-85697 }, + { 67,-85697 }, { 68,-85697 }, { 69,-85697 }, { 70,-85697 }, { 71,-85697 }, + { 72,-85697 }, { 73,-85697 }, { 74,-85697 }, { 75,-85697 }, { 76,-85697 }, + { 77,-85697 }, { 78,-85697 }, { 79,-85697 }, { 80,-85697 }, { 81,-85697 }, + { 82,-85697 }, { 83,-85697 }, { 84,-85697 }, { 85,-85697 }, { 86,-85697 }, + + { 87,-85697 }, { 88,-85697 }, { 89,-85697 }, { 90,-85697 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-85697 }, { 0, 0 }, + { 97,-85697 }, { 98,-85697 }, { 99,-85697 }, { 100,-85697 }, { 101,-85697 }, + { 102,-85697 }, { 103,-85697 }, { 104,-85697 }, { 105,-85697 }, { 106,-85697 }, + { 107,-85697 }, { 108,-85697 }, { 109,-85697 }, { 110,-85697 }, { 111,-85697 }, + { 112,-85697 }, { 113,-85697 }, { 114,-85697 }, { 115,-85697 }, { 116,-85697 }, + { 117,-85697 }, { 118,-85697 }, { 119,-85697 }, { 120,-85697 }, { 121,-85697 }, + { 122,-85697 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-85697 }, { 128,-85697 }, { 129,-85697 }, { 130,-85697 }, { 131,-85697 }, + { 132,-85697 }, { 133,-85697 }, { 134,-85697 }, { 135,-85697 }, { 136,-85697 }, + + { 137,-85697 }, { 138,-85697 }, { 139,-85697 }, { 140,-85697 }, { 141,-85697 }, + { 142,-85697 }, { 143,-85697 }, { 144,-85697 }, { 145,-85697 }, { 146,-85697 }, + { 147,-85697 }, { 148,-85697 }, { 149,-85697 }, { 150,-85697 }, { 151,-85697 }, + { 152,-85697 }, { 153,-85697 }, { 154,-85697 }, { 155,-85697 }, { 156,-85697 }, + { 157,-85697 }, { 158,-85697 }, { 159,-85697 }, { 160,-85697 }, { 161,-85697 }, + { 162,-85697 }, { 163,-85697 }, { 164,-85697 }, { 165,-85697 }, { 166,-85697 }, + { 167,-85697 }, { 168,-85697 }, { 169,-85697 }, { 170,-85697 }, { 171,-85697 }, + { 172,-85697 }, { 173,-85697 }, { 174,-85697 }, { 175,-85697 }, { 176,-85697 }, + { 177,-85697 }, { 178,-85697 }, { 179,-85697 }, { 180,-85697 }, { 181,-85697 }, + { 182,-85697 }, { 183,-85697 }, { 184,-85697 }, { 185,-85697 }, { 186,-85697 }, + + { 187,-85697 }, { 188,-85697 }, { 189,-85697 }, { 190,-85697 }, { 191,-85697 }, + { 192,-85697 }, { 193,-85697 }, { 194,-85697 }, { 195,-85697 }, { 196,-85697 }, + { 197,-85697 }, { 198,-85697 }, { 199,-85697 }, { 200,-85697 }, { 201,-85697 }, + { 202,-85697 }, { 203,-85697 }, { 204,-85697 }, { 205,-85697 }, { 206,-85697 }, + { 207,-85697 }, { 208,-85697 }, { 209,-85697 }, { 210,-85697 }, { 211,-85697 }, + { 212,-85697 }, { 213,-85697 }, { 214,-85697 }, { 215,-85697 }, { 216,-85697 }, + { 217,-85697 }, { 218,-85697 }, { 219,-85697 }, { 220,-85697 }, { 221,-85697 }, + { 222,-85697 }, { 223,-85697 }, { 224,-85697 }, { 225,-85697 }, { 226,-85697 }, + { 227,-85697 }, { 228,-85697 }, { 229,-85697 }, { 230,-85697 }, { 231,-85697 }, + { 232,-85697 }, { 233,-85697 }, { 234,-85697 }, { 235,-85697 }, { 236,-85697 }, + + { 237,-85697 }, { 238,-85697 }, { 239,-85697 }, { 240,-85697 }, { 241,-85697 }, + { 242,-85697 }, { 243,-85697 }, { 244,-85697 }, { 245,-85697 }, { 246,-85697 }, + { 247,-85697 }, { 248,-85697 }, { 249,-85697 }, { 250,-85697 }, { 251,-85697 }, + { 252,-85697 }, { 253,-85697 }, { 254,-85697 }, { 255,-85697 }, { 0, 44 }, + { 0,6169 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-85954 }, { 49,-85954 }, + { 50,-85954 }, { 51,-85954 }, { 52,-85954 }, { 53,-85954 }, { 54,-85954 }, + { 55,-85954 }, { 56,-85954 }, { 57,-85954 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-85954 }, { 66,-85954 }, { 67,-85954 }, { 68,-85954 }, { 69,-85954 }, + { 70,-85954 }, { 71,-85954 }, { 72,-85954 }, { 73,-85954 }, { 74,-85954 }, + { 75,-85954 }, { 76,-85954 }, { 77,-85954 }, { 78,-85954 }, { 79,-85954 }, + + { 80,-85954 }, { 81,-85954 }, { 82,-85954 }, { 83,-85954 }, { 84,-85954 }, + { 85,-85954 }, { 86,-85954 }, { 87,-85954 }, { 88,-85954 }, { 89,-85954 }, + { 90,-85954 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-85954 }, { 0, 0 }, { 97,-85954 }, { 98,-85954 }, { 99,-85954 }, + { 100,-85954 }, { 101,-85954 }, { 102,-85954 }, { 103,-85954 }, { 104,-85954 }, + { 105,-85954 }, { 106,-85954 }, { 107,-85954 }, { 108,-85954 }, { 109,-85954 }, + { 110,-85954 }, { 111,-85954 }, { 112,-85954 }, { 113,-85954 }, { 114,-85954 }, + { 115,-85954 }, { 116,-85954 }, { 117,-85954 }, { 118,-85954 }, { 119,-85954 }, + { 120,-85954 }, { 121,-85954 }, { 122,-85954 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-85954 }, { 128,-85954 }, { 129,-85954 }, + + { 130,-85954 }, { 131,-85954 }, { 132,-85954 }, { 133,-85954 }, { 134,-85954 }, + { 135,-85954 }, { 136,-85954 }, { 137,-85954 }, { 138,-85954 }, { 139,-85954 }, + { 140,-85954 }, { 141,-85954 }, { 142,-85954 }, { 143,-85954 }, { 144,-85954 }, + { 145,-85954 }, { 146,-85954 }, { 147,-85954 }, { 148,-85954 }, { 149,-85954 }, + { 150,-85954 }, { 151,-85954 }, { 152,-85954 }, { 153,-85954 }, { 154,-85954 }, + { 155,-85954 }, { 156,-85954 }, { 157,-85954 }, { 158,-85954 }, { 159,-85954 }, + { 160,-85954 }, { 161,-85954 }, { 162,-85954 }, { 163,-85954 }, { 164,-85954 }, + { 165,-85954 }, { 166,-85954 }, { 167,-85954 }, { 168,-85954 }, { 169,-85954 }, + { 170,-85954 }, { 171,-85954 }, { 172,-85954 }, { 173,-85954 }, { 174,-85954 }, + { 175,-85954 }, { 176,-85954 }, { 177,-85954 }, { 178,-85954 }, { 179,-85954 }, + + { 180,-85954 }, { 181,-85954 }, { 182,-85954 }, { 183,-85954 }, { 184,-85954 }, + { 185,-85954 }, { 186,-85954 }, { 187,-85954 }, { 188,-85954 }, { 189,-85954 }, + { 190,-85954 }, { 191,-85954 }, { 192,-85954 }, { 193,-85954 }, { 194,-85954 }, + { 195,-85954 }, { 196,-85954 }, { 197,-85954 }, { 198,-85954 }, { 199,-85954 }, + { 200,-85954 }, { 201,-85954 }, { 202,-85954 }, { 203,-85954 }, { 204,-85954 }, + { 205,-85954 }, { 206,-85954 }, { 207,-85954 }, { 208,-85954 }, { 209,-85954 }, + { 210,-85954 }, { 211,-85954 }, { 212,-85954 }, { 213,-85954 }, { 214,-85954 }, + { 215,-85954 }, { 216,-85954 }, { 217,-85954 }, { 218,-85954 }, { 219,-85954 }, + { 220,-85954 }, { 221,-85954 }, { 222,-85954 }, { 223,-85954 }, { 224,-85954 }, + { 225,-85954 }, { 226,-85954 }, { 227,-85954 }, { 228,-85954 }, { 229,-85954 }, + + { 230,-85954 }, { 231,-85954 }, { 232,-85954 }, { 233,-85954 }, { 234,-85954 }, + { 235,-85954 }, { 236,-85954 }, { 237,-85954 }, { 238,-85954 }, { 239,-85954 }, + { 240,-85954 }, { 241,-85954 }, { 242,-85954 }, { 243,-85954 }, { 244,-85954 }, + { 245,-85954 }, { 246,-85954 }, { 247,-85954 }, { 248,-85954 }, { 249,-85954 }, + { 250,-85954 }, { 251,-85954 }, { 252,-85954 }, { 253,-85954 }, { 254,-85954 }, + { 255,-85954 }, { 0, 42 }, { 0,5912 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-86211 }, { 49,-86211 }, { 50,-86211 }, { 51,-86211 }, { 52,-86211 }, + { 53,-86211 }, { 54,-86211 }, { 55,-86211 }, { 56,-86211 }, { 57,-86211 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-86211 }, { 66,-86211 }, { 67,-86211 }, + { 68,-86211 }, { 69,-86211 }, { 70,-86211 }, { 71,-86211 }, { 72,-86211 }, + + { 73,-86211 }, { 74,-86211 }, { 75,-86211 }, { 76,-86211 }, { 77,-86211 }, + { 78,-86211 }, { 79,-86211 }, { 80,-86211 }, { 81,-86211 }, { 82,-86211 }, + { 83,-86211 }, { 84,-86211 }, { 85,-86211 }, { 86,-86211 }, { 87,-86211 }, + { 88,-86211 }, { 89,-86211 }, { 90,-86211 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-86211 }, { 0, 0 }, { 97,-86211 }, + { 98,-86211 }, { 99,-86211 }, { 100,-86211 }, { 101,-86211 }, { 102,-86211 }, + { 103,-86211 }, { 104,-86211 }, { 105,-86211 }, { 106,-86211 }, { 107,-86211 }, + { 108,-86211 }, { 109,-86211 }, { 110,-86211 }, { 111,-86211 }, { 112,-86211 }, + { 113,-86211 }, { 114,-86211 }, { 115,-86211 }, { 116,-86211 }, { 117,-86211 }, + { 118,-86211 }, { 119,-86211 }, { 120,-86211 }, { 121,-86211 }, { 122,-86211 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-86211 }, + { 128,-86211 }, { 129,-86211 }, { 130,-86211 }, { 131,-86211 }, { 132,-86211 }, + { 133,-86211 }, { 134,-86211 }, { 135,-86211 }, { 136,-86211 }, { 137,-86211 }, + { 138,-86211 }, { 139,-86211 }, { 140,-86211 }, { 141,-86211 }, { 142,-86211 }, + { 143,-86211 }, { 144,-86211 }, { 145,-86211 }, { 146,-86211 }, { 147,-86211 }, + { 148,-86211 }, { 149,-86211 }, { 150,-86211 }, { 151,-86211 }, { 152,-86211 }, + { 153,-86211 }, { 154,-86211 }, { 155,-86211 }, { 156,-86211 }, { 157,-86211 }, + { 158,-86211 }, { 159,-86211 }, { 160,-86211 }, { 161,-86211 }, { 162,-86211 }, + { 163,-86211 }, { 164,-86211 }, { 165,-86211 }, { 166,-86211 }, { 167,-86211 }, + { 168,-86211 }, { 169,-86211 }, { 170,-86211 }, { 171,-86211 }, { 172,-86211 }, + + { 173,-86211 }, { 174,-86211 }, { 175,-86211 }, { 176,-86211 }, { 177,-86211 }, + { 178,-86211 }, { 179,-86211 }, { 180,-86211 }, { 181,-86211 }, { 182,-86211 }, + { 183,-86211 }, { 184,-86211 }, { 185,-86211 }, { 186,-86211 }, { 187,-86211 }, + { 188,-86211 }, { 189,-86211 }, { 190,-86211 }, { 191,-86211 }, { 192,-86211 }, + { 193,-86211 }, { 194,-86211 }, { 195,-86211 }, { 196,-86211 }, { 197,-86211 }, + { 198,-86211 }, { 199,-86211 }, { 200,-86211 }, { 201,-86211 }, { 202,-86211 }, + { 203,-86211 }, { 204,-86211 }, { 205,-86211 }, { 206,-86211 }, { 207,-86211 }, + { 208,-86211 }, { 209,-86211 }, { 210,-86211 }, { 211,-86211 }, { 212,-86211 }, + { 213,-86211 }, { 214,-86211 }, { 215,-86211 }, { 216,-86211 }, { 217,-86211 }, + { 218,-86211 }, { 219,-86211 }, { 220,-86211 }, { 221,-86211 }, { 222,-86211 }, + + { 223,-86211 }, { 224,-86211 }, { 225,-86211 }, { 226,-86211 }, { 227,-86211 }, + { 228,-86211 }, { 229,-86211 }, { 230,-86211 }, { 231,-86211 }, { 232,-86211 }, + { 233,-86211 }, { 234,-86211 }, { 235,-86211 }, { 236,-86211 }, { 237,-86211 }, + { 238,-86211 }, { 239,-86211 }, { 240,-86211 }, { 241,-86211 }, { 242,-86211 }, + { 243,-86211 }, { 244,-86211 }, { 245,-86211 }, { 246,-86211 }, { 247,-86211 }, + { 248,-86211 }, { 249,-86211 }, { 250,-86211 }, { 251,-86211 }, { 252,-86211 }, + { 253,-86211 }, { 254,-86211 }, { 255,-86211 }, { 0, 75 }, { 0,5655 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-86468 }, { 49,-86468 }, { 50,-86468 }, + { 51,-86468 }, { 52,-86468 }, { 53,-86468 }, { 54,-86468 }, { 55,-86468 }, + { 56,-86468 }, { 57,-86468 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-86468 }, + + { 66,-86468 }, { 67,-86468 }, { 68,-86468 }, { 69,-86468 }, { 70,-86468 }, + { 71,-86468 }, { 72,-86468 }, { 73,-86468 }, { 74,-86468 }, { 75,-86468 }, + { 76,-86468 }, { 77,-86468 }, { 78,-86468 }, { 79,-86468 }, { 80,-86468 }, + { 81,-86468 }, { 82,-86468 }, { 83,-86468 }, { 84,-86468 }, { 85,-86468 }, + { 86,-86468 }, { 87,-86468 }, { 88,-86468 }, { 89,-86468 }, { 90,-86468 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-86468 }, + { 0, 0 }, { 97,-86468 }, { 98,-86468 }, { 99,-86468 }, { 100,-86468 }, + { 101,-86468 }, { 102,-86468 }, { 103,-86468 }, { 104,-86468 }, { 105,-86468 }, + { 106,-86468 }, { 107,-86468 }, { 108,-86468 }, { 109,-86468 }, { 110,-86468 }, + { 111,-86468 }, { 112,-86468 }, { 113,-86468 }, { 114,-86468 }, { 115,-86468 }, + + { 116,-86468 }, { 117,-86468 }, { 118,-86468 }, { 119,-86468 }, { 120,-86468 }, + { 121,-86468 }, { 122,-86468 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-86468 }, { 128,-86468 }, { 129,-86468 }, { 130,-86468 }, + { 131,-86468 }, { 132,-86468 }, { 133,-86468 }, { 134,-86468 }, { 135,-86468 }, + { 136,-86468 }, { 137,-86468 }, { 138,-86468 }, { 139,-86468 }, { 140,-86468 }, + { 141,-86468 }, { 142,-86468 }, { 143,-86468 }, { 144,-86468 }, { 145,-86468 }, + { 146,-86468 }, { 147,-86468 }, { 148,-86468 }, { 149,-86468 }, { 150,-86468 }, + { 151,-86468 }, { 152,-86468 }, { 153,-86468 }, { 154,-86468 }, { 155,-86468 }, + { 156,-86468 }, { 157,-86468 }, { 158,-86468 }, { 159,-86468 }, { 160,-86468 }, + { 161,-86468 }, { 162,-86468 }, { 163,-86468 }, { 164,-86468 }, { 165,-86468 }, + + { 166,-86468 }, { 167,-86468 }, { 168,-86468 }, { 169,-86468 }, { 170,-86468 }, + { 171,-86468 }, { 172,-86468 }, { 173,-86468 }, { 174,-86468 }, { 175,-86468 }, + { 176,-86468 }, { 177,-86468 }, { 178,-86468 }, { 179,-86468 }, { 180,-86468 }, + { 181,-86468 }, { 182,-86468 }, { 183,-86468 }, { 184,-86468 }, { 185,-86468 }, + { 186,-86468 }, { 187,-86468 }, { 188,-86468 }, { 189,-86468 }, { 190,-86468 }, + { 191,-86468 }, { 192,-86468 }, { 193,-86468 }, { 194,-86468 }, { 195,-86468 }, + { 196,-86468 }, { 197,-86468 }, { 198,-86468 }, { 199,-86468 }, { 200,-86468 }, + { 201,-86468 }, { 202,-86468 }, { 203,-86468 }, { 204,-86468 }, { 205,-86468 }, + { 206,-86468 }, { 207,-86468 }, { 208,-86468 }, { 209,-86468 }, { 210,-86468 }, + { 211,-86468 }, { 212,-86468 }, { 213,-86468 }, { 214,-86468 }, { 215,-86468 }, + + { 216,-86468 }, { 217,-86468 }, { 218,-86468 }, { 219,-86468 }, { 220,-86468 }, + { 221,-86468 }, { 222,-86468 }, { 223,-86468 }, { 224,-86468 }, { 225,-86468 }, + { 226,-86468 }, { 227,-86468 }, { 228,-86468 }, { 229,-86468 }, { 230,-86468 }, + { 231,-86468 }, { 232,-86468 }, { 233,-86468 }, { 234,-86468 }, { 235,-86468 }, + { 236,-86468 }, { 237,-86468 }, { 238,-86468 }, { 239,-86468 }, { 240,-86468 }, + { 241,-86468 }, { 242,-86468 }, { 243,-86468 }, { 244,-86468 }, { 245,-86468 }, + { 246,-86468 }, { 247,-86468 }, { 248,-86468 }, { 249,-86468 }, { 250,-86468 }, + { 251,-86468 }, { 252,-86468 }, { 253,-86468 }, { 254,-86468 }, { 255,-86468 }, + { 0, 131 }, { 0,5398 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-86725 }, + { 49,-86725 }, { 50,-86725 }, { 51,-86725 }, { 52,-86725 }, { 53,-86725 }, + { 54,-86725 }, { 55,-86725 }, { 56,-86725 }, { 57,-86725 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-86725 }, { 66,-86725 }, { 67,1799 }, { 68,-86725 }, + { 69,-86725 }, { 70,-86725 }, { 71,-86725 }, { 72,-86725 }, { 73,-86725 }, + { 74,-86725 }, { 75,-86725 }, { 76,-86725 }, { 77,-86725 }, { 78,-86725 }, + { 79,-86725 }, { 80,-86725 }, { 81,-86725 }, { 82,-86725 }, { 83,-86725 }, + { 84,-86725 }, { 85,-86725 }, { 86,-86725 }, { 87,-86725 }, { 88,-86725 }, + { 89,-86725 }, { 90,-86725 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-86725 }, { 0, 0 }, { 97,-86725 }, { 98,-86725 }, + { 99,1799 }, { 100,-86725 }, { 101,-86725 }, { 102,-86725 }, { 103,-86725 }, + { 104,-86725 }, { 105,-86725 }, { 106,-86725 }, { 107,-86725 }, { 108,-86725 }, + + { 109,-86725 }, { 110,-86725 }, { 111,-86725 }, { 112,-86725 }, { 113,-86725 }, + { 114,-86725 }, { 115,-86725 }, { 116,-86725 }, { 117,-86725 }, { 118,-86725 }, + { 119,-86725 }, { 120,-86725 }, { 121,-86725 }, { 122,-86725 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-86725 }, { 128,-86725 }, + { 129,-86725 }, { 130,-86725 }, { 131,-86725 }, { 132,-86725 }, { 133,-86725 }, + { 134,-86725 }, { 135,-86725 }, { 136,-86725 }, { 137,-86725 }, { 138,-86725 }, + { 139,-86725 }, { 140,-86725 }, { 141,-86725 }, { 142,-86725 }, { 143,-86725 }, + { 144,-86725 }, { 145,-86725 }, { 146,-86725 }, { 147,-86725 }, { 148,-86725 }, + { 149,-86725 }, { 150,-86725 }, { 151,-86725 }, { 152,-86725 }, { 153,-86725 }, + { 154,-86725 }, { 155,-86725 }, { 156,-86725 }, { 157,-86725 }, { 158,-86725 }, + + { 159,-86725 }, { 160,-86725 }, { 161,-86725 }, { 162,-86725 }, { 163,-86725 }, + { 164,-86725 }, { 165,-86725 }, { 166,-86725 }, { 167,-86725 }, { 168,-86725 }, + { 169,-86725 }, { 170,-86725 }, { 171,-86725 }, { 172,-86725 }, { 173,-86725 }, + { 174,-86725 }, { 175,-86725 }, { 176,-86725 }, { 177,-86725 }, { 178,-86725 }, + { 179,-86725 }, { 180,-86725 }, { 181,-86725 }, { 182,-86725 }, { 183,-86725 }, + { 184,-86725 }, { 185,-86725 }, { 186,-86725 }, { 187,-86725 }, { 188,-86725 }, + { 189,-86725 }, { 190,-86725 }, { 191,-86725 }, { 192,-86725 }, { 193,-86725 }, + { 194,-86725 }, { 195,-86725 }, { 196,-86725 }, { 197,-86725 }, { 198,-86725 }, + { 199,-86725 }, { 200,-86725 }, { 201,-86725 }, { 202,-86725 }, { 203,-86725 }, + { 204,-86725 }, { 205,-86725 }, { 206,-86725 }, { 207,-86725 }, { 208,-86725 }, + + { 209,-86725 }, { 210,-86725 }, { 211,-86725 }, { 212,-86725 }, { 213,-86725 }, + { 214,-86725 }, { 215,-86725 }, { 216,-86725 }, { 217,-86725 }, { 218,-86725 }, + { 219,-86725 }, { 220,-86725 }, { 221,-86725 }, { 222,-86725 }, { 223,-86725 }, + { 224,-86725 }, { 225,-86725 }, { 226,-86725 }, { 227,-86725 }, { 228,-86725 }, + { 229,-86725 }, { 230,-86725 }, { 231,-86725 }, { 232,-86725 }, { 233,-86725 }, + { 234,-86725 }, { 235,-86725 }, { 236,-86725 }, { 237,-86725 }, { 238,-86725 }, + { 239,-86725 }, { 240,-86725 }, { 241,-86725 }, { 242,-86725 }, { 243,-86725 }, + { 244,-86725 }, { 245,-86725 }, { 246,-86725 }, { 247,-86725 }, { 248,-86725 }, + { 249,-86725 }, { 250,-86725 }, { 251,-86725 }, { 252,-86725 }, { 253,-86725 }, + { 254,-86725 }, { 255,-86725 }, { 0, 27 }, { 0,5141 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-86982 }, { 49,-86982 }, { 50,-86982 }, { 51,-86982 }, + + { 52,-86982 }, { 53,-86982 }, { 54,-86982 }, { 55,-86982 }, { 56,-86982 }, + { 57,-86982 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-86982 }, { 66,-86982 }, + { 67,-86982 }, { 68,-86982 }, { 69,-86982 }, { 70,-86982 }, { 71,-86982 }, + { 72,-86982 }, { 73,-86982 }, { 74,-86982 }, { 75,-86982 }, { 76,-86982 }, + { 77,-86982 }, { 78,-86982 }, { 79,-86982 }, { 80,-86982 }, { 81,-86982 }, + { 82,-86982 }, { 83,-86982 }, { 84,-86982 }, { 85,-86982 }, { 86,-86982 }, + { 87,-86982 }, { 88,-86982 }, { 89,-86982 }, { 90,-86982 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-86982 }, { 0, 0 }, + { 97,-86982 }, { 98,-86982 }, { 99,-86982 }, { 100,-86982 }, { 101,-86982 }, + + { 102,-86982 }, { 103,-86982 }, { 104,-86982 }, { 105,-86982 }, { 106,-86982 }, + { 107,-86982 }, { 108,-86982 }, { 109,-86982 }, { 110,-86982 }, { 111,-86982 }, + { 112,-86982 }, { 113,-86982 }, { 114,-86982 }, { 115,-86982 }, { 116,-86982 }, + { 117,-86982 }, { 118,-86982 }, { 119,-86982 }, { 120,-86982 }, { 121,-86982 }, + { 122,-86982 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-86982 }, { 128,-86982 }, { 129,-86982 }, { 130,-86982 }, { 131,-86982 }, + { 132,-86982 }, { 133,-86982 }, { 134,-86982 }, { 135,-86982 }, { 136,-86982 }, + { 137,-86982 }, { 138,-86982 }, { 139,-86982 }, { 140,-86982 }, { 141,-86982 }, + { 142,-86982 }, { 143,-86982 }, { 144,-86982 }, { 145,-86982 }, { 146,-86982 }, + { 147,-86982 }, { 148,-86982 }, { 149,-86982 }, { 150,-86982 }, { 151,-86982 }, + + { 152,-86982 }, { 153,-86982 }, { 154,-86982 }, { 155,-86982 }, { 156,-86982 }, + { 157,-86982 }, { 158,-86982 }, { 159,-86982 }, { 160,-86982 }, { 161,-86982 }, + { 162,-86982 }, { 163,-86982 }, { 164,-86982 }, { 165,-86982 }, { 166,-86982 }, + { 167,-86982 }, { 168,-86982 }, { 169,-86982 }, { 170,-86982 }, { 171,-86982 }, + { 172,-86982 }, { 173,-86982 }, { 174,-86982 }, { 175,-86982 }, { 176,-86982 }, + { 177,-86982 }, { 178,-86982 }, { 179,-86982 }, { 180,-86982 }, { 181,-86982 }, + { 182,-86982 }, { 183,-86982 }, { 184,-86982 }, { 185,-86982 }, { 186,-86982 }, + { 187,-86982 }, { 188,-86982 }, { 189,-86982 }, { 190,-86982 }, { 191,-86982 }, + { 192,-86982 }, { 193,-86982 }, { 194,-86982 }, { 195,-86982 }, { 196,-86982 }, + { 197,-86982 }, { 198,-86982 }, { 199,-86982 }, { 200,-86982 }, { 201,-86982 }, + + { 202,-86982 }, { 203,-86982 }, { 204,-86982 }, { 205,-86982 }, { 206,-86982 }, + { 207,-86982 }, { 208,-86982 }, { 209,-86982 }, { 210,-86982 }, { 211,-86982 }, + { 212,-86982 }, { 213,-86982 }, { 214,-86982 }, { 215,-86982 }, { 216,-86982 }, + { 217,-86982 }, { 218,-86982 }, { 219,-86982 }, { 220,-86982 }, { 221,-86982 }, + { 222,-86982 }, { 223,-86982 }, { 224,-86982 }, { 225,-86982 }, { 226,-86982 }, + { 227,-86982 }, { 228,-86982 }, { 229,-86982 }, { 230,-86982 }, { 231,-86982 }, + { 232,-86982 }, { 233,-86982 }, { 234,-86982 }, { 235,-86982 }, { 236,-86982 }, + { 237,-86982 }, { 238,-86982 }, { 239,-86982 }, { 240,-86982 }, { 241,-86982 }, + { 242,-86982 }, { 243,-86982 }, { 244,-86982 }, { 245,-86982 }, { 246,-86982 }, + { 247,-86982 }, { 248,-86982 }, { 249,-86982 }, { 250,-86982 }, { 251,-86982 }, + + { 252,-86982 }, { 253,-86982 }, { 254,-86982 }, { 255,-86982 }, { 0, 131 }, + { 0,4884 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-87239 }, { 49,-87239 }, + { 50,-87239 }, { 51,-87239 }, { 52,-87239 }, { 53,-87239 }, { 54,-87239 }, + { 55,-87239 }, { 56,-87239 }, { 57,-87239 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-87239 }, { 66,-87239 }, { 67,1542 }, { 68,-87239 }, { 69,-87239 }, + { 70,-87239 }, { 71,-87239 }, { 72,-87239 }, { 73,-87239 }, { 74,-87239 }, + { 75,-87239 }, { 76,-87239 }, { 77,-87239 }, { 78,-87239 }, { 79,-87239 }, + { 80,-87239 }, { 81,-87239 }, { 82,-87239 }, { 83,-87239 }, { 84,-87239 }, + { 85,-87239 }, { 86,-87239 }, { 87,-87239 }, { 88,-87239 }, { 89,-87239 }, + { 90,-87239 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-87239 }, { 0, 0 }, { 97,-87239 }, { 98,-87239 }, { 99,1542 }, + { 100,-87239 }, { 101,-87239 }, { 102,-87239 }, { 103,-87239 }, { 104,-87239 }, + { 105,-87239 }, { 106,-87239 }, { 107,-87239 }, { 108,-87239 }, { 109,-87239 }, + { 110,-87239 }, { 111,-87239 }, { 112,-87239 }, { 113,-87239 }, { 114,-87239 }, + { 115,-87239 }, { 116,-87239 }, { 117,-87239 }, { 118,-87239 }, { 119,-87239 }, + { 120,-87239 }, { 121,-87239 }, { 122,-87239 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-87239 }, { 128,-87239 }, { 129,-87239 }, + { 130,-87239 }, { 131,-87239 }, { 132,-87239 }, { 133,-87239 }, { 134,-87239 }, + { 135,-87239 }, { 136,-87239 }, { 137,-87239 }, { 138,-87239 }, { 139,-87239 }, + { 140,-87239 }, { 141,-87239 }, { 142,-87239 }, { 143,-87239 }, { 144,-87239 }, + + { 145,-87239 }, { 146,-87239 }, { 147,-87239 }, { 148,-87239 }, { 149,-87239 }, + { 150,-87239 }, { 151,-87239 }, { 152,-87239 }, { 153,-87239 }, { 154,-87239 }, + { 155,-87239 }, { 156,-87239 }, { 157,-87239 }, { 158,-87239 }, { 159,-87239 }, + { 160,-87239 }, { 161,-87239 }, { 162,-87239 }, { 163,-87239 }, { 164,-87239 }, + { 165,-87239 }, { 166,-87239 }, { 167,-87239 }, { 168,-87239 }, { 169,-87239 }, + { 170,-87239 }, { 171,-87239 }, { 172,-87239 }, { 173,-87239 }, { 174,-87239 }, + { 175,-87239 }, { 176,-87239 }, { 177,-87239 }, { 178,-87239 }, { 179,-87239 }, + { 180,-87239 }, { 181,-87239 }, { 182,-87239 }, { 183,-87239 }, { 184,-87239 }, + { 185,-87239 }, { 186,-87239 }, { 187,-87239 }, { 188,-87239 }, { 189,-87239 }, + { 190,-87239 }, { 191,-87239 }, { 192,-87239 }, { 193,-87239 }, { 194,-87239 }, + + { 195,-87239 }, { 196,-87239 }, { 197,-87239 }, { 198,-87239 }, { 199,-87239 }, + { 200,-87239 }, { 201,-87239 }, { 202,-87239 }, { 203,-87239 }, { 204,-87239 }, + { 205,-87239 }, { 206,-87239 }, { 207,-87239 }, { 208,-87239 }, { 209,-87239 }, + { 210,-87239 }, { 211,-87239 }, { 212,-87239 }, { 213,-87239 }, { 214,-87239 }, + { 215,-87239 }, { 216,-87239 }, { 217,-87239 }, { 218,-87239 }, { 219,-87239 }, + { 220,-87239 }, { 221,-87239 }, { 222,-87239 }, { 223,-87239 }, { 224,-87239 }, + { 225,-87239 }, { 226,-87239 }, { 227,-87239 }, { 228,-87239 }, { 229,-87239 }, + { 230,-87239 }, { 231,-87239 }, { 232,-87239 }, { 233,-87239 }, { 234,-87239 }, + { 235,-87239 }, { 236,-87239 }, { 237,-87239 }, { 238,-87239 }, { 239,-87239 }, + { 240,-87239 }, { 241,-87239 }, { 242,-87239 }, { 243,-87239 }, { 244,-87239 }, + + { 245,-87239 }, { 246,-87239 }, { 247,-87239 }, { 248,-87239 }, { 249,-87239 }, + { 250,-87239 }, { 251,-87239 }, { 252,-87239 }, { 253,-87239 }, { 254,-87239 }, + { 255,-87239 }, { 0, 131 }, { 0,4627 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-87496 }, { 49,-87496 }, { 50,-87496 }, { 51,-87496 }, { 52,-87496 }, + { 53,-87496 }, { 54,-87496 }, { 55,-87496 }, { 56,-87496 }, { 57,-87496 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-87496 }, { 66,-87496 }, { 67,-87496 }, + { 68,-87496 }, { 69,-87496 }, { 70,-87496 }, { 71,-87496 }, { 72,-87496 }, + { 73,-87496 }, { 74,-87496 }, { 75,-87496 }, { 76,-87496 }, { 77,-87496 }, + { 78,-87496 }, { 79,-87496 }, { 80,-87496 }, { 81,-87496 }, { 82,-87496 }, + { 83,-87496 }, { 84,-87496 }, { 85,-87496 }, { 86,-87496 }, { 87,-87496 }, + + { 88,-87496 }, { 89,-87496 }, { 90,-87496 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,1542 }, { 0, 0 }, { 97,-87496 }, + { 98,-87496 }, { 99,-87496 }, { 100,-87496 }, { 101,-87496 }, { 102,-87496 }, + { 103,-87496 }, { 104,-87496 }, { 105,-87496 }, { 106,-87496 }, { 107,-87496 }, + { 108,-87496 }, { 109,-87496 }, { 110,-87496 }, { 111,-87496 }, { 112,-87496 }, + { 113,-87496 }, { 114,-87496 }, { 115,-87496 }, { 116,-87496 }, { 117,-87496 }, + { 118,-87496 }, { 119,-87496 }, { 120,-87496 }, { 121,-87496 }, { 122,-87496 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-87496 }, + { 128,-87496 }, { 129,-87496 }, { 130,-87496 }, { 131,-87496 }, { 132,-87496 }, + { 133,-87496 }, { 134,-87496 }, { 135,-87496 }, { 136,-87496 }, { 137,-87496 }, + + { 138,-87496 }, { 139,-87496 }, { 140,-87496 }, { 141,-87496 }, { 142,-87496 }, + { 143,-87496 }, { 144,-87496 }, { 145,-87496 }, { 146,-87496 }, { 147,-87496 }, + { 148,-87496 }, { 149,-87496 }, { 150,-87496 }, { 151,-87496 }, { 152,-87496 }, + { 153,-87496 }, { 154,-87496 }, { 155,-87496 }, { 156,-87496 }, { 157,-87496 }, + { 158,-87496 }, { 159,-87496 }, { 160,-87496 }, { 161,-87496 }, { 162,-87496 }, + { 163,-87496 }, { 164,-87496 }, { 165,-87496 }, { 166,-87496 }, { 167,-87496 }, + { 168,-87496 }, { 169,-87496 }, { 170,-87496 }, { 171,-87496 }, { 172,-87496 }, + { 173,-87496 }, { 174,-87496 }, { 175,-87496 }, { 176,-87496 }, { 177,-87496 }, + { 178,-87496 }, { 179,-87496 }, { 180,-87496 }, { 181,-87496 }, { 182,-87496 }, + { 183,-87496 }, { 184,-87496 }, { 185,-87496 }, { 186,-87496 }, { 187,-87496 }, + + { 188,-87496 }, { 189,-87496 }, { 190,-87496 }, { 191,-87496 }, { 192,-87496 }, + { 193,-87496 }, { 194,-87496 }, { 195,-87496 }, { 196,-87496 }, { 197,-87496 }, + { 198,-87496 }, { 199,-87496 }, { 200,-87496 }, { 201,-87496 }, { 202,-87496 }, + { 203,-87496 }, { 204,-87496 }, { 205,-87496 }, { 206,-87496 }, { 207,-87496 }, + { 208,-87496 }, { 209,-87496 }, { 210,-87496 }, { 211,-87496 }, { 212,-87496 }, + { 213,-87496 }, { 214,-87496 }, { 215,-87496 }, { 216,-87496 }, { 217,-87496 }, + { 218,-87496 }, { 219,-87496 }, { 220,-87496 }, { 221,-87496 }, { 222,-87496 }, + { 223,-87496 }, { 224,-87496 }, { 225,-87496 }, { 226,-87496 }, { 227,-87496 }, + { 228,-87496 }, { 229,-87496 }, { 230,-87496 }, { 231,-87496 }, { 232,-87496 }, + { 233,-87496 }, { 234,-87496 }, { 235,-87496 }, { 236,-87496 }, { 237,-87496 }, + + { 238,-87496 }, { 239,-87496 }, { 240,-87496 }, { 241,-87496 }, { 242,-87496 }, + { 243,-87496 }, { 244,-87496 }, { 245,-87496 }, { 246,-87496 }, { 247,-87496 }, + { 248,-87496 }, { 249,-87496 }, { 250,-87496 }, { 251,-87496 }, { 252,-87496 }, + { 253,-87496 }, { 254,-87496 }, { 255,-87496 }, { 0, 131 }, { 0,4370 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-87753 }, { 49,-87753 }, { 50,-87753 }, + { 51,-87753 }, { 52,-87753 }, { 53,-87753 }, { 54,-87753 }, { 55,-87753 }, + { 56,-87753 }, { 57,-87753 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-87753 }, + { 66,-87753 }, { 67,-87753 }, { 68,-87753 }, { 69,-87753 }, { 70,-87753 }, + { 71,-87753 }, { 72,-87753 }, { 73,-87753 }, { 74,-87753 }, { 75,-87753 }, + { 76,-87753 }, { 77,-87753 }, { 78,-87753 }, { 79,-87753 }, { 80,1542 }, + + { 81,-87753 }, { 82,-87753 }, { 83,-87753 }, { 84,-87753 }, { 85,-87753 }, + { 86,-87753 }, { 87,-87753 }, { 88,-87753 }, { 89,-87753 }, { 90,-87753 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-87753 }, + { 0, 0 }, { 97,-87753 }, { 98,-87753 }, { 99,-87753 }, { 100,-87753 }, + { 101,-87753 }, { 102,-87753 }, { 103,-87753 }, { 104,-87753 }, { 105,-87753 }, + { 106,-87753 }, { 107,-87753 }, { 108,-87753 }, { 109,-87753 }, { 110,-87753 }, + { 111,-87753 }, { 112,1542 }, { 113,-87753 }, { 114,-87753 }, { 115,-87753 }, + { 116,-87753 }, { 117,-87753 }, { 118,-87753 }, { 119,-87753 }, { 120,-87753 }, + { 121,-87753 }, { 122,-87753 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-87753 }, { 128,-87753 }, { 129,-87753 }, { 130,-87753 }, + + { 131,-87753 }, { 132,-87753 }, { 133,-87753 }, { 134,-87753 }, { 135,-87753 }, + { 136,-87753 }, { 137,-87753 }, { 138,-87753 }, { 139,-87753 }, { 140,-87753 }, + { 141,-87753 }, { 142,-87753 }, { 143,-87753 }, { 144,-87753 }, { 145,-87753 }, + { 146,-87753 }, { 147,-87753 }, { 148,-87753 }, { 149,-87753 }, { 150,-87753 }, + { 151,-87753 }, { 152,-87753 }, { 153,-87753 }, { 154,-87753 }, { 155,-87753 }, + { 156,-87753 }, { 157,-87753 }, { 158,-87753 }, { 159,-87753 }, { 160,-87753 }, + { 161,-87753 }, { 162,-87753 }, { 163,-87753 }, { 164,-87753 }, { 165,-87753 }, + { 166,-87753 }, { 167,-87753 }, { 168,-87753 }, { 169,-87753 }, { 170,-87753 }, + { 171,-87753 }, { 172,-87753 }, { 173,-87753 }, { 174,-87753 }, { 175,-87753 }, + { 176,-87753 }, { 177,-87753 }, { 178,-87753 }, { 179,-87753 }, { 180,-87753 }, + + { 181,-87753 }, { 182,-87753 }, { 183,-87753 }, { 184,-87753 }, { 185,-87753 }, + { 186,-87753 }, { 187,-87753 }, { 188,-87753 }, { 189,-87753 }, { 190,-87753 }, + { 191,-87753 }, { 192,-87753 }, { 193,-87753 }, { 194,-87753 }, { 195,-87753 }, + { 196,-87753 }, { 197,-87753 }, { 198,-87753 }, { 199,-87753 }, { 200,-87753 }, + { 201,-87753 }, { 202,-87753 }, { 203,-87753 }, { 204,-87753 }, { 205,-87753 }, + { 206,-87753 }, { 207,-87753 }, { 208,-87753 }, { 209,-87753 }, { 210,-87753 }, + { 211,-87753 }, { 212,-87753 }, { 213,-87753 }, { 214,-87753 }, { 215,-87753 }, + { 216,-87753 }, { 217,-87753 }, { 218,-87753 }, { 219,-87753 }, { 220,-87753 }, + { 221,-87753 }, { 222,-87753 }, { 223,-87753 }, { 224,-87753 }, { 225,-87753 }, + { 226,-87753 }, { 227,-87753 }, { 228,-87753 }, { 229,-87753 }, { 230,-87753 }, + + { 231,-87753 }, { 232,-87753 }, { 233,-87753 }, { 234,-87753 }, { 235,-87753 }, + { 236,-87753 }, { 237,-87753 }, { 238,-87753 }, { 239,-87753 }, { 240,-87753 }, + { 241,-87753 }, { 242,-87753 }, { 243,-87753 }, { 244,-87753 }, { 245,-87753 }, + { 246,-87753 }, { 247,-87753 }, { 248,-87753 }, { 249,-87753 }, { 250,-87753 }, + { 251,-87753 }, { 252,-87753 }, { 253,-87753 }, { 254,-87753 }, { 255,-87753 }, + { 0, 79 }, { 0,4113 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-88010 }, + { 49,-88010 }, { 50,-88010 }, { 51,-88010 }, { 52,-88010 }, { 53,-88010 }, + { 54,-88010 }, { 55,-88010 }, { 56,-88010 }, { 57,-88010 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-88010 }, { 66,-88010 }, { 67,-88010 }, { 68,-88010 }, + { 69,-88010 }, { 70,-88010 }, { 71,-88010 }, { 72,-88010 }, { 73,-88010 }, + + { 74,-88010 }, { 75,-88010 }, { 76,-88010 }, { 77,-88010 }, { 78,-88010 }, + { 79,-88010 }, { 80,-88010 }, { 81,-88010 }, { 82,-88010 }, { 83,-88010 }, + { 84,-88010 }, { 85,-88010 }, { 86,-88010 }, { 87,-88010 }, { 88,-88010 }, + { 89,-88010 }, { 90,-88010 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-88010 }, { 0, 0 }, { 97,-88010 }, { 98,-88010 }, + { 99,-88010 }, { 100,-88010 }, { 101,-88010 }, { 102,-88010 }, { 103,-88010 }, + { 104,-88010 }, { 105,-88010 }, { 106,-88010 }, { 107,-88010 }, { 108,-88010 }, + { 109,-88010 }, { 110,-88010 }, { 111,-88010 }, { 112,-88010 }, { 113,-88010 }, + { 114,-88010 }, { 115,-88010 }, { 116,-88010 }, { 117,-88010 }, { 118,-88010 }, + { 119,-88010 }, { 120,-88010 }, { 121,-88010 }, { 122,-88010 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-88010 }, { 128,-88010 }, + { 129,-88010 }, { 130,-88010 }, { 131,-88010 }, { 132,-88010 }, { 133,-88010 }, + { 134,-88010 }, { 135,-88010 }, { 136,-88010 }, { 137,-88010 }, { 138,-88010 }, + { 139,-88010 }, { 140,-88010 }, { 141,-88010 }, { 142,-88010 }, { 143,-88010 }, + { 144,-88010 }, { 145,-88010 }, { 146,-88010 }, { 147,-88010 }, { 148,-88010 }, + { 149,-88010 }, { 150,-88010 }, { 151,-88010 }, { 152,-88010 }, { 153,-88010 }, + { 154,-88010 }, { 155,-88010 }, { 156,-88010 }, { 157,-88010 }, { 158,-88010 }, + { 159,-88010 }, { 160,-88010 }, { 161,-88010 }, { 162,-88010 }, { 163,-88010 }, + { 164,-88010 }, { 165,-88010 }, { 166,-88010 }, { 167,-88010 }, { 168,-88010 }, + { 169,-88010 }, { 170,-88010 }, { 171,-88010 }, { 172,-88010 }, { 173,-88010 }, + + { 174,-88010 }, { 175,-88010 }, { 176,-88010 }, { 177,-88010 }, { 178,-88010 }, + { 179,-88010 }, { 180,-88010 }, { 181,-88010 }, { 182,-88010 }, { 183,-88010 }, + { 184,-88010 }, { 185,-88010 }, { 186,-88010 }, { 187,-88010 }, { 188,-88010 }, + { 189,-88010 }, { 190,-88010 }, { 191,-88010 }, { 192,-88010 }, { 193,-88010 }, + { 194,-88010 }, { 195,-88010 }, { 196,-88010 }, { 197,-88010 }, { 198,-88010 }, + { 199,-88010 }, { 200,-88010 }, { 201,-88010 }, { 202,-88010 }, { 203,-88010 }, + { 204,-88010 }, { 205,-88010 }, { 206,-88010 }, { 207,-88010 }, { 208,-88010 }, + { 209,-88010 }, { 210,-88010 }, { 211,-88010 }, { 212,-88010 }, { 213,-88010 }, + { 214,-88010 }, { 215,-88010 }, { 216,-88010 }, { 217,-88010 }, { 218,-88010 }, + { 219,-88010 }, { 220,-88010 }, { 221,-88010 }, { 222,-88010 }, { 223,-88010 }, + + { 224,-88010 }, { 225,-88010 }, { 226,-88010 }, { 227,-88010 }, { 228,-88010 }, + { 229,-88010 }, { 230,-88010 }, { 231,-88010 }, { 232,-88010 }, { 233,-88010 }, + { 234,-88010 }, { 235,-88010 }, { 236,-88010 }, { 237,-88010 }, { 238,-88010 }, + { 239,-88010 }, { 240,-88010 }, { 241,-88010 }, { 242,-88010 }, { 243,-88010 }, + { 244,-88010 }, { 245,-88010 }, { 246,-88010 }, { 247,-88010 }, { 248,-88010 }, + { 249,-88010 }, { 250,-88010 }, { 251,-88010 }, { 252,-88010 }, { 253,-88010 }, + { 254,-88010 }, { 255,-88010 }, { 0, 131 }, { 0,3856 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-88267 }, { 49,-88267 }, { 50,-88267 }, { 51,-88267 }, + { 52,-88267 }, { 53,-88267 }, { 54,-88267 }, { 55,-88267 }, { 56,-88267 }, + { 57,-88267 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-88267 }, { 66,-88267 }, + + { 67,-88267 }, { 68,-88267 }, { 69,1285 }, { 70,-88267 }, { 71,-88267 }, + { 72,-88267 }, { 73,-88267 }, { 74,-88267 }, { 75,-88267 }, { 76,-88267 }, + { 77,-88267 }, { 78,-88267 }, { 79,-88267 }, { 80,-88267 }, { 81,-88267 }, + { 82,-88267 }, { 83,-88267 }, { 84,-88267 }, { 85,-88267 }, { 86,-88267 }, + { 87,-88267 }, { 88,-88267 }, { 89,-88267 }, { 90,-88267 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-88267 }, { 0, 0 }, + { 97,-88267 }, { 98,-88267 }, { 99,-88267 }, { 100,-88267 }, { 101,1285 }, + { 102,-88267 }, { 103,-88267 }, { 104,-88267 }, { 105,-88267 }, { 106,-88267 }, + { 107,-88267 }, { 108,-88267 }, { 109,-88267 }, { 110,-88267 }, { 111,-88267 }, + { 112,-88267 }, { 113,-88267 }, { 114,-88267 }, { 115,-88267 }, { 116,-88267 }, + + { 117,-88267 }, { 118,-88267 }, { 119,-88267 }, { 120,-88267 }, { 121,-88267 }, + { 122,-88267 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-88267 }, { 128,-88267 }, { 129,-88267 }, { 130,-88267 }, { 131,-88267 }, + { 132,-88267 }, { 133,-88267 }, { 134,-88267 }, { 135,-88267 }, { 136,-88267 }, + { 137,-88267 }, { 138,-88267 }, { 139,-88267 }, { 140,-88267 }, { 141,-88267 }, + { 142,-88267 }, { 143,-88267 }, { 144,-88267 }, { 145,-88267 }, { 146,-88267 }, + { 147,-88267 }, { 148,-88267 }, { 149,-88267 }, { 150,-88267 }, { 151,-88267 }, + { 152,-88267 }, { 153,-88267 }, { 154,-88267 }, { 155,-88267 }, { 156,-88267 }, + { 157,-88267 }, { 158,-88267 }, { 159,-88267 }, { 160,-88267 }, { 161,-88267 }, + { 162,-88267 }, { 163,-88267 }, { 164,-88267 }, { 165,-88267 }, { 166,-88267 }, + + { 167,-88267 }, { 168,-88267 }, { 169,-88267 }, { 170,-88267 }, { 171,-88267 }, + { 172,-88267 }, { 173,-88267 }, { 174,-88267 }, { 175,-88267 }, { 176,-88267 }, + { 177,-88267 }, { 178,-88267 }, { 179,-88267 }, { 180,-88267 }, { 181,-88267 }, + { 182,-88267 }, { 183,-88267 }, { 184,-88267 }, { 185,-88267 }, { 186,-88267 }, + { 187,-88267 }, { 188,-88267 }, { 189,-88267 }, { 190,-88267 }, { 191,-88267 }, + { 192,-88267 }, { 193,-88267 }, { 194,-88267 }, { 195,-88267 }, { 196,-88267 }, + { 197,-88267 }, { 198,-88267 }, { 199,-88267 }, { 200,-88267 }, { 201,-88267 }, + { 202,-88267 }, { 203,-88267 }, { 204,-88267 }, { 205,-88267 }, { 206,-88267 }, + { 207,-88267 }, { 208,-88267 }, { 209,-88267 }, { 210,-88267 }, { 211,-88267 }, + { 212,-88267 }, { 213,-88267 }, { 214,-88267 }, { 215,-88267 }, { 216,-88267 }, + + { 217,-88267 }, { 218,-88267 }, { 219,-88267 }, { 220,-88267 }, { 221,-88267 }, + { 222,-88267 }, { 223,-88267 }, { 224,-88267 }, { 225,-88267 }, { 226,-88267 }, + { 227,-88267 }, { 228,-88267 }, { 229,-88267 }, { 230,-88267 }, { 231,-88267 }, + { 232,-88267 }, { 233,-88267 }, { 234,-88267 }, { 235,-88267 }, { 236,-88267 }, + { 237,-88267 }, { 238,-88267 }, { 239,-88267 }, { 240,-88267 }, { 241,-88267 }, + { 242,-88267 }, { 243,-88267 }, { 244,-88267 }, { 245,-88267 }, { 246,-88267 }, + { 247,-88267 }, { 248,-88267 }, { 249,-88267 }, { 250,-88267 }, { 251,-88267 }, + { 252,-88267 }, { 253,-88267 }, { 254,-88267 }, { 255,-88267 }, { 0, 131 }, + { 0,3599 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-88524 }, { 49,-88524 }, + { 50,-88524 }, { 51,-88524 }, { 52,-88524 }, { 53,-88524 }, { 54,-88524 }, + { 55,-88524 }, { 56,-88524 }, { 57,-88524 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-88524 }, { 66,-88524 }, { 67,-88524 }, { 68,-88524 }, { 69,1285 }, + { 70,-88524 }, { 71,-88524 }, { 72,-88524 }, { 73,-88524 }, { 74,-88524 }, + { 75,-88524 }, { 76,-88524 }, { 77,-88524 }, { 78,-88524 }, { 79,-88524 }, + { 80,-88524 }, { 81,-88524 }, { 82,-88524 }, { 83,-88524 }, { 84,-88524 }, + { 85,-88524 }, { 86,-88524 }, { 87,-88524 }, { 88,-88524 }, { 89,-88524 }, + { 90,-88524 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-88524 }, { 0, 0 }, { 97,-88524 }, { 98,-88524 }, { 99,-88524 }, + { 100,-88524 }, { 101,1285 }, { 102,-88524 }, { 103,-88524 }, { 104,-88524 }, + { 105,-88524 }, { 106,-88524 }, { 107,-88524 }, { 108,-88524 }, { 109,-88524 }, + + { 110,-88524 }, { 111,-88524 }, { 112,-88524 }, { 113,-88524 }, { 114,-88524 }, + { 115,-88524 }, { 116,-88524 }, { 117,-88524 }, { 118,-88524 }, { 119,-88524 }, + { 120,-88524 }, { 121,-88524 }, { 122,-88524 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-88524 }, { 128,-88524 }, { 129,-88524 }, + { 130,-88524 }, { 131,-88524 }, { 132,-88524 }, { 133,-88524 }, { 134,-88524 }, + { 135,-88524 }, { 136,-88524 }, { 137,-88524 }, { 138,-88524 }, { 139,-88524 }, + { 140,-88524 }, { 141,-88524 }, { 142,-88524 }, { 143,-88524 }, { 144,-88524 }, + { 145,-88524 }, { 146,-88524 }, { 147,-88524 }, { 148,-88524 }, { 149,-88524 }, + { 150,-88524 }, { 151,-88524 }, { 152,-88524 }, { 153,-88524 }, { 154,-88524 }, + { 155,-88524 }, { 156,-88524 }, { 157,-88524 }, { 158,-88524 }, { 159,-88524 }, + + { 160,-88524 }, { 161,-88524 }, { 162,-88524 }, { 163,-88524 }, { 164,-88524 }, + { 165,-88524 }, { 166,-88524 }, { 167,-88524 }, { 168,-88524 }, { 169,-88524 }, + { 170,-88524 }, { 171,-88524 }, { 172,-88524 }, { 173,-88524 }, { 174,-88524 }, + { 175,-88524 }, { 176,-88524 }, { 177,-88524 }, { 178,-88524 }, { 179,-88524 }, + { 180,-88524 }, { 181,-88524 }, { 182,-88524 }, { 183,-88524 }, { 184,-88524 }, + { 185,-88524 }, { 186,-88524 }, { 187,-88524 }, { 188,-88524 }, { 189,-88524 }, + { 190,-88524 }, { 191,-88524 }, { 192,-88524 }, { 193,-88524 }, { 194,-88524 }, + { 195,-88524 }, { 196,-88524 }, { 197,-88524 }, { 198,-88524 }, { 199,-88524 }, + { 200,-88524 }, { 201,-88524 }, { 202,-88524 }, { 203,-88524 }, { 204,-88524 }, + { 205,-88524 }, { 206,-88524 }, { 207,-88524 }, { 208,-88524 }, { 209,-88524 }, + + { 210,-88524 }, { 211,-88524 }, { 212,-88524 }, { 213,-88524 }, { 214,-88524 }, + { 215,-88524 }, { 216,-88524 }, { 217,-88524 }, { 218,-88524 }, { 219,-88524 }, + { 220,-88524 }, { 221,-88524 }, { 222,-88524 }, { 223,-88524 }, { 224,-88524 }, + { 225,-88524 }, { 226,-88524 }, { 227,-88524 }, { 228,-88524 }, { 229,-88524 }, + { 230,-88524 }, { 231,-88524 }, { 232,-88524 }, { 233,-88524 }, { 234,-88524 }, + { 235,-88524 }, { 236,-88524 }, { 237,-88524 }, { 238,-88524 }, { 239,-88524 }, + { 240,-88524 }, { 241,-88524 }, { 242,-88524 }, { 243,-88524 }, { 244,-88524 }, + { 245,-88524 }, { 246,-88524 }, { 247,-88524 }, { 248,-88524 }, { 249,-88524 }, + { 250,-88524 }, { 251,-88524 }, { 252,-88524 }, { 253,-88524 }, { 254,-88524 }, + { 255,-88524 }, { 0, 131 }, { 0,3342 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-88781 }, { 49,-88781 }, { 50,-88781 }, { 51,-88781 }, { 52,-88781 }, + + { 53,-88781 }, { 54,-88781 }, { 55,-88781 }, { 56,-88781 }, { 57,-88781 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-88781 }, { 66,-88781 }, { 67,-88781 }, + { 68,-88781 }, { 69,1285 }, { 70,-88781 }, { 71,-88781 }, { 72,-88781 }, + { 73,-88781 }, { 74,-88781 }, { 75,-88781 }, { 76,-88781 }, { 77,-88781 }, + { 78,-88781 }, { 79,-88781 }, { 80,-88781 }, { 81,-88781 }, { 82,-88781 }, + { 83,-88781 }, { 84,-88781 }, { 85,-88781 }, { 86,-88781 }, { 87,-88781 }, + { 88,-88781 }, { 89,-88781 }, { 90,-88781 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-88781 }, { 0, 0 }, { 97,-88781 }, + { 98,-88781 }, { 99,-88781 }, { 100,-88781 }, { 101,1285 }, { 102,-88781 }, + + { 103,-88781 }, { 104,-88781 }, { 105,-88781 }, { 106,-88781 }, { 107,-88781 }, + { 108,-88781 }, { 109,-88781 }, { 110,-88781 }, { 111,-88781 }, { 112,-88781 }, + { 113,-88781 }, { 114,-88781 }, { 115,-88781 }, { 116,-88781 }, { 117,-88781 }, + { 118,-88781 }, { 119,-88781 }, { 120,-88781 }, { 121,-88781 }, { 122,-88781 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-88781 }, + { 128,-88781 }, { 129,-88781 }, { 130,-88781 }, { 131,-88781 }, { 132,-88781 }, + { 133,-88781 }, { 134,-88781 }, { 135,-88781 }, { 136,-88781 }, { 137,-88781 }, + { 138,-88781 }, { 139,-88781 }, { 140,-88781 }, { 141,-88781 }, { 142,-88781 }, + { 143,-88781 }, { 144,-88781 }, { 145,-88781 }, { 146,-88781 }, { 147,-88781 }, + { 148,-88781 }, { 149,-88781 }, { 150,-88781 }, { 151,-88781 }, { 152,-88781 }, + + { 153,-88781 }, { 154,-88781 }, { 155,-88781 }, { 156,-88781 }, { 157,-88781 }, + { 158,-88781 }, { 159,-88781 }, { 160,-88781 }, { 161,-88781 }, { 162,-88781 }, + { 163,-88781 }, { 164,-88781 }, { 165,-88781 }, { 166,-88781 }, { 167,-88781 }, + { 168,-88781 }, { 169,-88781 }, { 170,-88781 }, { 171,-88781 }, { 172,-88781 }, + { 173,-88781 }, { 174,-88781 }, { 175,-88781 }, { 176,-88781 }, { 177,-88781 }, + { 178,-88781 }, { 179,-88781 }, { 180,-88781 }, { 181,-88781 }, { 182,-88781 }, + { 183,-88781 }, { 184,-88781 }, { 185,-88781 }, { 186,-88781 }, { 187,-88781 }, + { 188,-88781 }, { 189,-88781 }, { 190,-88781 }, { 191,-88781 }, { 192,-88781 }, + { 193,-88781 }, { 194,-88781 }, { 195,-88781 }, { 196,-88781 }, { 197,-88781 }, + { 198,-88781 }, { 199,-88781 }, { 200,-88781 }, { 201,-88781 }, { 202,-88781 }, + + { 203,-88781 }, { 204,-88781 }, { 205,-88781 }, { 206,-88781 }, { 207,-88781 }, + { 208,-88781 }, { 209,-88781 }, { 210,-88781 }, { 211,-88781 }, { 212,-88781 }, + { 213,-88781 }, { 214,-88781 }, { 215,-88781 }, { 216,-88781 }, { 217,-88781 }, + { 218,-88781 }, { 219,-88781 }, { 220,-88781 }, { 221,-88781 }, { 222,-88781 }, + { 223,-88781 }, { 224,-88781 }, { 225,-88781 }, { 226,-88781 }, { 227,-88781 }, + { 228,-88781 }, { 229,-88781 }, { 230,-88781 }, { 231,-88781 }, { 232,-88781 }, + { 233,-88781 }, { 234,-88781 }, { 235,-88781 }, { 236,-88781 }, { 237,-88781 }, + { 238,-88781 }, { 239,-88781 }, { 240,-88781 }, { 241,-88781 }, { 242,-88781 }, + { 243,-88781 }, { 244,-88781 }, { 245,-88781 }, { 246,-88781 }, { 247,-88781 }, + { 248,-88781 }, { 249,-88781 }, { 250,-88781 }, { 251,-88781 }, { 252,-88781 }, + + { 253,-88781 }, { 254,-88781 }, { 255,-88781 }, { 0, 131 }, { 0,3085 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-89038 }, { 49,-89038 }, { 50,-89038 }, + { 51,-89038 }, { 52,-89038 }, { 53,-89038 }, { 54,-89038 }, { 55,-89038 }, + { 56,-89038 }, { 57,-89038 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-89038 }, + { 66,-89038 }, { 67,-89038 }, { 68,-89038 }, { 69,-89038 }, { 70,-89038 }, + { 71,-89038 }, { 72,-89038 }, { 73,-89038 }, { 74,-89038 }, { 75,-89038 }, + { 76,-89038 }, { 77,-89038 }, { 78,-89038 }, { 79,-89038 }, { 80,-89038 }, + { 81,-89038 }, { 82,-89038 }, { 83,-89038 }, { 84,-89038 }, { 85,-89038 }, + { 86,-89038 }, { 87,-89038 }, { 88,-89038 }, { 89,-89038 }, { 90,-89038 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,1285 }, + + { 0, 0 }, { 97,-89038 }, { 98,-89038 }, { 99,-89038 }, { 100,-89038 }, + { 101,-89038 }, { 102,-89038 }, { 103,-89038 }, { 104,-89038 }, { 105,-89038 }, + { 106,-89038 }, { 107,-89038 }, { 108,-89038 }, { 109,-89038 }, { 110,-89038 }, + { 111,-89038 }, { 112,-89038 }, { 113,-89038 }, { 114,-89038 }, { 115,-89038 }, + { 116,-89038 }, { 117,-89038 }, { 118,-89038 }, { 119,-89038 }, { 120,-89038 }, + { 121,-89038 }, { 122,-89038 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-89038 }, { 128,-89038 }, { 129,-89038 }, { 130,-89038 }, + { 131,-89038 }, { 132,-89038 }, { 133,-89038 }, { 134,-89038 }, { 135,-89038 }, + { 136,-89038 }, { 137,-89038 }, { 138,-89038 }, { 139,-89038 }, { 140,-89038 }, + { 141,-89038 }, { 142,-89038 }, { 143,-89038 }, { 144,-89038 }, { 145,-89038 }, + + { 146,-89038 }, { 147,-89038 }, { 148,-89038 }, { 149,-89038 }, { 150,-89038 }, + { 151,-89038 }, { 152,-89038 }, { 153,-89038 }, { 154,-89038 }, { 155,-89038 }, + { 156,-89038 }, { 157,-89038 }, { 158,-89038 }, { 159,-89038 }, { 160,-89038 }, + { 161,-89038 }, { 162,-89038 }, { 163,-89038 }, { 164,-89038 }, { 165,-89038 }, + { 166,-89038 }, { 167,-89038 }, { 168,-89038 }, { 169,-89038 }, { 170,-89038 }, + { 171,-89038 }, { 172,-89038 }, { 173,-89038 }, { 174,-89038 }, { 175,-89038 }, + { 176,-89038 }, { 177,-89038 }, { 178,-89038 }, { 179,-89038 }, { 180,-89038 }, + { 181,-89038 }, { 182,-89038 }, { 183,-89038 }, { 184,-89038 }, { 185,-89038 }, + { 186,-89038 }, { 187,-89038 }, { 188,-89038 }, { 189,-89038 }, { 190,-89038 }, + { 191,-89038 }, { 192,-89038 }, { 193,-89038 }, { 194,-89038 }, { 195,-89038 }, + + { 196,-89038 }, { 197,-89038 }, { 198,-89038 }, { 199,-89038 }, { 200,-89038 }, + { 201,-89038 }, { 202,-89038 }, { 203,-89038 }, { 204,-89038 }, { 205,-89038 }, + { 206,-89038 }, { 207,-89038 }, { 208,-89038 }, { 209,-89038 }, { 210,-89038 }, + { 211,-89038 }, { 212,-89038 }, { 213,-89038 }, { 214,-89038 }, { 215,-89038 }, + { 216,-89038 }, { 217,-89038 }, { 218,-89038 }, { 219,-89038 }, { 220,-89038 }, + { 221,-89038 }, { 222,-89038 }, { 223,-89038 }, { 224,-89038 }, { 225,-89038 }, + { 226,-89038 }, { 227,-89038 }, { 228,-89038 }, { 229,-89038 }, { 230,-89038 }, + { 231,-89038 }, { 232,-89038 }, { 233,-89038 }, { 234,-89038 }, { 235,-89038 }, + { 236,-89038 }, { 237,-89038 }, { 238,-89038 }, { 239,-89038 }, { 240,-89038 }, + { 241,-89038 }, { 242,-89038 }, { 243,-89038 }, { 244,-89038 }, { 245,-89038 }, + + { 246,-89038 }, { 247,-89038 }, { 248,-89038 }, { 249,-89038 }, { 250,-89038 }, + { 251,-89038 }, { 252,-89038 }, { 253,-89038 }, { 254,-89038 }, { 255,-89038 }, + { 0, 131 }, { 0,2828 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-89295 }, + { 49,-89295 }, { 50,-89295 }, { 51,-89295 }, { 52,-89295 }, { 53,-89295 }, + { 54,-89295 }, { 55,-89295 }, { 56,-89295 }, { 57,-89295 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-89295 }, { 66,-89295 }, { 67,-89295 }, { 68,-89295 }, + { 69,-89295 }, { 70,-89295 }, { 71,-89295 }, { 72,-89295 }, { 73,1285 }, + { 74,-89295 }, { 75,-89295 }, { 76,-89295 }, { 77,-89295 }, { 78,-89295 }, + { 79,-89295 }, { 80,-89295 }, { 81,-89295 }, { 82,-89295 }, { 83,-89295 }, + { 84,-89295 }, { 85,-89295 }, { 86,-89295 }, { 87,-89295 }, { 88,-89295 }, + + { 89,-89295 }, { 90,-89295 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-89295 }, { 0, 0 }, { 97,-89295 }, { 98,-89295 }, + { 99,-89295 }, { 100,-89295 }, { 101,-89295 }, { 102,-89295 }, { 103,-89295 }, + { 104,-89295 }, { 105,1285 }, { 106,-89295 }, { 107,-89295 }, { 108,-89295 }, + { 109,-89295 }, { 110,-89295 }, { 111,-89295 }, { 112,-89295 }, { 113,-89295 }, + { 114,-89295 }, { 115,-89295 }, { 116,-89295 }, { 117,-89295 }, { 118,-89295 }, + { 119,-89295 }, { 120,-89295 }, { 121,-89295 }, { 122,-89295 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-89295 }, { 128,-89295 }, + { 129,-89295 }, { 130,-89295 }, { 131,-89295 }, { 132,-89295 }, { 133,-89295 }, + { 134,-89295 }, { 135,-89295 }, { 136,-89295 }, { 137,-89295 }, { 138,-89295 }, + + { 139,-89295 }, { 140,-89295 }, { 141,-89295 }, { 142,-89295 }, { 143,-89295 }, + { 144,-89295 }, { 145,-89295 }, { 146,-89295 }, { 147,-89295 }, { 148,-89295 }, + { 149,-89295 }, { 150,-89295 }, { 151,-89295 }, { 152,-89295 }, { 153,-89295 }, + { 154,-89295 }, { 155,-89295 }, { 156,-89295 }, { 157,-89295 }, { 158,-89295 }, + { 159,-89295 }, { 160,-89295 }, { 161,-89295 }, { 162,-89295 }, { 163,-89295 }, + { 164,-89295 }, { 165,-89295 }, { 166,-89295 }, { 167,-89295 }, { 168,-89295 }, + { 169,-89295 }, { 170,-89295 }, { 171,-89295 }, { 172,-89295 }, { 173,-89295 }, + { 174,-89295 }, { 175,-89295 }, { 176,-89295 }, { 177,-89295 }, { 178,-89295 }, + { 179,-89295 }, { 180,-89295 }, { 181,-89295 }, { 182,-89295 }, { 183,-89295 }, + { 184,-89295 }, { 185,-89295 }, { 186,-89295 }, { 187,-89295 }, { 188,-89295 }, + + { 189,-89295 }, { 190,-89295 }, { 191,-89295 }, { 192,-89295 }, { 193,-89295 }, + { 194,-89295 }, { 195,-89295 }, { 196,-89295 }, { 197,-89295 }, { 198,-89295 }, + { 199,-89295 }, { 200,-89295 }, { 201,-89295 }, { 202,-89295 }, { 203,-89295 }, + { 204,-89295 }, { 205,-89295 }, { 206,-89295 }, { 207,-89295 }, { 208,-89295 }, + { 209,-89295 }, { 210,-89295 }, { 211,-89295 }, { 212,-89295 }, { 213,-89295 }, + { 214,-89295 }, { 215,-89295 }, { 216,-89295 }, { 217,-89295 }, { 218,-89295 }, + { 219,-89295 }, { 220,-89295 }, { 221,-89295 }, { 222,-89295 }, { 223,-89295 }, + { 224,-89295 }, { 225,-89295 }, { 226,-89295 }, { 227,-89295 }, { 228,-89295 }, + { 229,-89295 }, { 230,-89295 }, { 231,-89295 }, { 232,-89295 }, { 233,-89295 }, + { 234,-89295 }, { 235,-89295 }, { 236,-89295 }, { 237,-89295 }, { 238,-89295 }, + + { 239,-89295 }, { 240,-89295 }, { 241,-89295 }, { 242,-89295 }, { 243,-89295 }, + { 244,-89295 }, { 245,-89295 }, { 246,-89295 }, { 247,-89295 }, { 248,-89295 }, + { 249,-89295 }, { 250,-89295 }, { 251,-89295 }, { 252,-89295 }, { 253,-89295 }, + { 254,-89295 }, { 255,-89295 }, { 0, 131 }, { 0,2571 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-89552 }, { 49,-89552 }, { 50,-89552 }, { 51,-89552 }, + { 52,-89552 }, { 53,-89552 }, { 54,-89552 }, { 55,-89552 }, { 56,-89552 }, + { 57,-89552 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-89552 }, { 66,-89552 }, + { 67,-89552 }, { 68,-89552 }, { 69,-89552 }, { 70,-89552 }, { 71,-89552 }, + { 72,-89552 }, { 73,-89552 }, { 74,-89552 }, { 75,-89552 }, { 76,-89552 }, + { 77,-89552 }, { 78,-89552 }, { 79,-89552 }, { 80,-89552 }, { 81,-89552 }, + + { 82,-89552 }, { 83,-89552 }, { 84,-89552 }, { 85,-89552 }, { 86,-89552 }, + { 87,-89552 }, { 88,-89552 }, { 89,-89552 }, { 90,-89552 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,1285 }, { 0, 0 }, + { 97,-89552 }, { 98,-89552 }, { 99,-89552 }, { 100,-89552 }, { 101,-89552 }, + { 102,-89552 }, { 103,-89552 }, { 104,-89552 }, { 105,-89552 }, { 106,-89552 }, + { 107,-89552 }, { 108,-89552 }, { 109,-89552 }, { 110,-89552 }, { 111,-89552 }, + { 112,-89552 }, { 113,-89552 }, { 114,-89552 }, { 115,-89552 }, { 116,-89552 }, + { 117,-89552 }, { 118,-89552 }, { 119,-89552 }, { 120,-89552 }, { 121,-89552 }, + { 122,-89552 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-89552 }, { 128,-89552 }, { 129,-89552 }, { 130,-89552 }, { 131,-89552 }, + + { 132,-89552 }, { 133,-89552 }, { 134,-89552 }, { 135,-89552 }, { 136,-89552 }, + { 137,-89552 }, { 138,-89552 }, { 139,-89552 }, { 140,-89552 }, { 141,-89552 }, + { 142,-89552 }, { 143,-89552 }, { 144,-89552 }, { 145,-89552 }, { 146,-89552 }, + { 147,-89552 }, { 148,-89552 }, { 149,-89552 }, { 150,-89552 }, { 151,-89552 }, + { 152,-89552 }, { 153,-89552 }, { 154,-89552 }, { 155,-89552 }, { 156,-89552 }, + { 157,-89552 }, { 158,-89552 }, { 159,-89552 }, { 160,-89552 }, { 161,-89552 }, + { 162,-89552 }, { 163,-89552 }, { 164,-89552 }, { 165,-89552 }, { 166,-89552 }, + { 167,-89552 }, { 168,-89552 }, { 169,-89552 }, { 170,-89552 }, { 171,-89552 }, + { 172,-89552 }, { 173,-89552 }, { 174,-89552 }, { 175,-89552 }, { 176,-89552 }, + { 177,-89552 }, { 178,-89552 }, { 179,-89552 }, { 180,-89552 }, { 181,-89552 }, + + { 182,-89552 }, { 183,-89552 }, { 184,-89552 }, { 185,-89552 }, { 186,-89552 }, + { 187,-89552 }, { 188,-89552 }, { 189,-89552 }, { 190,-89552 }, { 191,-89552 }, + { 192,-89552 }, { 193,-89552 }, { 194,-89552 }, { 195,-89552 }, { 196,-89552 }, + { 197,-89552 }, { 198,-89552 }, { 199,-89552 }, { 200,-89552 }, { 201,-89552 }, + { 202,-89552 }, { 203,-89552 }, { 204,-89552 }, { 205,-89552 }, { 206,-89552 }, + { 207,-89552 }, { 208,-89552 }, { 209,-89552 }, { 210,-89552 }, { 211,-89552 }, + { 212,-89552 }, { 213,-89552 }, { 214,-89552 }, { 215,-89552 }, { 216,-89552 }, + { 217,-89552 }, { 218,-89552 }, { 219,-89552 }, { 220,-89552 }, { 221,-89552 }, + { 222,-89552 }, { 223,-89552 }, { 224,-89552 }, { 225,-89552 }, { 226,-89552 }, + { 227,-89552 }, { 228,-89552 }, { 229,-89552 }, { 230,-89552 }, { 231,-89552 }, + + { 232,-89552 }, { 233,-89552 }, { 234,-89552 }, { 235,-89552 }, { 236,-89552 }, + { 237,-89552 }, { 238,-89552 }, { 239,-89552 }, { 240,-89552 }, { 241,-89552 }, + { 242,-89552 }, { 243,-89552 }, { 244,-89552 }, { 245,-89552 }, { 246,-89552 }, + { 247,-89552 }, { 248,-89552 }, { 249,-89552 }, { 250,-89552 }, { 251,-89552 }, + { 252,-89552 }, { 253,-89552 }, { 254,-89552 }, { 255,-89552 }, { 0, 19 }, + { 0,2314 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-89809 }, { 49,-89809 }, + { 50,-89809 }, { 51,-89809 }, { 52,-89809 }, { 53,-89809 }, { 54,-89809 }, + { 55,-89809 }, { 56,-89809 }, { 57,-89809 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-89809 }, { 66,-89809 }, { 67,-89809 }, { 68,-89809 }, { 69,-89809 }, + { 70,-89809 }, { 71,-89809 }, { 72,-89809 }, { 73,-89809 }, { 74,-89809 }, + + { 75,-89809 }, { 76,-89809 }, { 77,-89809 }, { 78,-89809 }, { 79,-89809 }, + { 80,-89809 }, { 81,-89809 }, { 82,-89809 }, { 83,-89809 }, { 84,-89809 }, + { 85,-89809 }, { 86,-89809 }, { 87,-89809 }, { 88,-89809 }, { 89,-89809 }, + { 90,-89809 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-89809 }, { 0, 0 }, { 97,-89809 }, { 98,-89809 }, { 99,-89809 }, + { 100,-89809 }, { 101,-89809 }, { 102,-89809 }, { 103,-89809 }, { 104,-89809 }, + { 105,-89809 }, { 106,-89809 }, { 107,-89809 }, { 108,-89809 }, { 109,-89809 }, + { 110,-89809 }, { 111,-89809 }, { 112,-89809 }, { 113,-89809 }, { 114,-89809 }, + { 115,-89809 }, { 116,-89809 }, { 117,-89809 }, { 118,-89809 }, { 119,-89809 }, + { 120,-89809 }, { 121,-89809 }, { 122,-89809 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-89809 }, { 128,-89809 }, { 129,-89809 }, + { 130,-89809 }, { 131,-89809 }, { 132,-89809 }, { 133,-89809 }, { 134,-89809 }, + { 135,-89809 }, { 136,-89809 }, { 137,-89809 }, { 138,-89809 }, { 139,-89809 }, + { 140,-89809 }, { 141,-89809 }, { 142,-89809 }, { 143,-89809 }, { 144,-89809 }, + { 145,-89809 }, { 146,-89809 }, { 147,-89809 }, { 148,-89809 }, { 149,-89809 }, + { 150,-89809 }, { 151,-89809 }, { 152,-89809 }, { 153,-89809 }, { 154,-89809 }, + { 155,-89809 }, { 156,-89809 }, { 157,-89809 }, { 158,-89809 }, { 159,-89809 }, + { 160,-89809 }, { 161,-89809 }, { 162,-89809 }, { 163,-89809 }, { 164,-89809 }, + { 165,-89809 }, { 166,-89809 }, { 167,-89809 }, { 168,-89809 }, { 169,-89809 }, + { 170,-89809 }, { 171,-89809 }, { 172,-89809 }, { 173,-89809 }, { 174,-89809 }, + + { 175,-89809 }, { 176,-89809 }, { 177,-89809 }, { 178,-89809 }, { 179,-89809 }, + { 180,-89809 }, { 181,-89809 }, { 182,-89809 }, { 183,-89809 }, { 184,-89809 }, + { 185,-89809 }, { 186,-89809 }, { 187,-89809 }, { 188,-89809 }, { 189,-89809 }, + { 190,-89809 }, { 191,-89809 }, { 192,-89809 }, { 193,-89809 }, { 194,-89809 }, + { 195,-89809 }, { 196,-89809 }, { 197,-89809 }, { 198,-89809 }, { 199,-89809 }, + { 200,-89809 }, { 201,-89809 }, { 202,-89809 }, { 203,-89809 }, { 204,-89809 }, + { 205,-89809 }, { 206,-89809 }, { 207,-89809 }, { 208,-89809 }, { 209,-89809 }, + { 210,-89809 }, { 211,-89809 }, { 212,-89809 }, { 213,-89809 }, { 214,-89809 }, + { 215,-89809 }, { 216,-89809 }, { 217,-89809 }, { 218,-89809 }, { 219,-89809 }, + { 220,-89809 }, { 221,-89809 }, { 222,-89809 }, { 223,-89809 }, { 224,-89809 }, + + { 225,-89809 }, { 226,-89809 }, { 227,-89809 }, { 228,-89809 }, { 229,-89809 }, + { 230,-89809 }, { 231,-89809 }, { 232,-89809 }, { 233,-89809 }, { 234,-89809 }, + { 235,-89809 }, { 236,-89809 }, { 237,-89809 }, { 238,-89809 }, { 239,-89809 }, + { 240,-89809 }, { 241,-89809 }, { 242,-89809 }, { 243,-89809 }, { 244,-89809 }, + { 245,-89809 }, { 246,-89809 }, { 247,-89809 }, { 248,-89809 }, { 249,-89809 }, + { 250,-89809 }, { 251,-89809 }, { 252,-89809 }, { 253,-89809 }, { 254,-89809 }, + { 255,-89809 }, { 0, 22 }, { 0,2057 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-90066 }, { 49,-90066 }, { 50,-90066 }, { 51,-90066 }, { 52,-90066 }, + { 53,-90066 }, { 54,-90066 }, { 55,-90066 }, { 56,-90066 }, { 57,-90066 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-90066 }, { 66,-90066 }, { 67,-90066 }, + + { 68,-90066 }, { 69,-90066 }, { 70,-90066 }, { 71,-90066 }, { 72,-90066 }, + { 73,-90066 }, { 74,-90066 }, { 75,-90066 }, { 76,-90066 }, { 77,-90066 }, + { 78,-90066 }, { 79,-90066 }, { 80,-90066 }, { 81,-90066 }, { 82,-90066 }, + { 83,-90066 }, { 84,-90066 }, { 85,-90066 }, { 86,-90066 }, { 87,-90066 }, + { 88,-90066 }, { 89,-90066 }, { 90,-90066 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-90066 }, { 0, 0 }, { 97,-90066 }, + { 98,-90066 }, { 99,-90066 }, { 100,-90066 }, { 101,-90066 }, { 102,-90066 }, + { 103,-90066 }, { 104,-90066 }, { 105,-90066 }, { 106,-90066 }, { 107,-90066 }, + { 108,-90066 }, { 109,-90066 }, { 110,-90066 }, { 111,-90066 }, { 112,-90066 }, + { 113,-90066 }, { 114,-90066 }, { 115,-90066 }, { 116,-90066 }, { 117,-90066 }, + + { 118,-90066 }, { 119,-90066 }, { 120,-90066 }, { 121,-90066 }, { 122,-90066 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-90066 }, + { 128,-90066 }, { 129,-90066 }, { 130,-90066 }, { 131,-90066 }, { 132,-90066 }, + { 133,-90066 }, { 134,-90066 }, { 135,-90066 }, { 136,-90066 }, { 137,-90066 }, + { 138,-90066 }, { 139,-90066 }, { 140,-90066 }, { 141,-90066 }, { 142,-90066 }, + { 143,-90066 }, { 144,-90066 }, { 145,-90066 }, { 146,-90066 }, { 147,-90066 }, + { 148,-90066 }, { 149,-90066 }, { 150,-90066 }, { 151,-90066 }, { 152,-90066 }, + { 153,-90066 }, { 154,-90066 }, { 155,-90066 }, { 156,-90066 }, { 157,-90066 }, + { 158,-90066 }, { 159,-90066 }, { 160,-90066 }, { 161,-90066 }, { 162,-90066 }, + { 163,-90066 }, { 164,-90066 }, { 165,-90066 }, { 166,-90066 }, { 167,-90066 }, + + { 168,-90066 }, { 169,-90066 }, { 170,-90066 }, { 171,-90066 }, { 172,-90066 }, + { 173,-90066 }, { 174,-90066 }, { 175,-90066 }, { 176,-90066 }, { 177,-90066 }, + { 178,-90066 }, { 179,-90066 }, { 180,-90066 }, { 181,-90066 }, { 182,-90066 }, + { 183,-90066 }, { 184,-90066 }, { 185,-90066 }, { 186,-90066 }, { 187,-90066 }, + { 188,-90066 }, { 189,-90066 }, { 190,-90066 }, { 191,-90066 }, { 192,-90066 }, + { 193,-90066 }, { 194,-90066 }, { 195,-90066 }, { 196,-90066 }, { 197,-90066 }, + { 198,-90066 }, { 199,-90066 }, { 200,-90066 }, { 201,-90066 }, { 202,-90066 }, + { 203,-90066 }, { 204,-90066 }, { 205,-90066 }, { 206,-90066 }, { 207,-90066 }, + { 208,-90066 }, { 209,-90066 }, { 210,-90066 }, { 211,-90066 }, { 212,-90066 }, + { 213,-90066 }, { 214,-90066 }, { 215,-90066 }, { 216,-90066 }, { 217,-90066 }, + + { 218,-90066 }, { 219,-90066 }, { 220,-90066 }, { 221,-90066 }, { 222,-90066 }, + { 223,-90066 }, { 224,-90066 }, { 225,-90066 }, { 226,-90066 }, { 227,-90066 }, + { 228,-90066 }, { 229,-90066 }, { 230,-90066 }, { 231,-90066 }, { 232,-90066 }, + { 233,-90066 }, { 234,-90066 }, { 235,-90066 }, { 236,-90066 }, { 237,-90066 }, + { 238,-90066 }, { 239,-90066 }, { 240,-90066 }, { 241,-90066 }, { 242,-90066 }, + { 243,-90066 }, { 244,-90066 }, { 245,-90066 }, { 246,-90066 }, { 247,-90066 }, + { 248,-90066 }, { 249,-90066 }, { 250,-90066 }, { 251,-90066 }, { 252,-90066 }, + { 253,-90066 }, { 254,-90066 }, { 255,-90066 }, { 0, 80 }, { 0,1800 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-90323 }, { 49,-90323 }, { 50,-90323 }, + { 51,-90323 }, { 52,-90323 }, { 53,-90323 }, { 54,-90323 }, { 55,-90323 }, + { 56,-90323 }, { 57,-90323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-90323 }, + { 66,-90323 }, { 67,-90323 }, { 68,-90323 }, { 69,-90323 }, { 70,-90323 }, + { 71,-90323 }, { 72,-90323 }, { 73,-90323 }, { 74,-90323 }, { 75,-90323 }, + { 76,-90323 }, { 77,-90323 }, { 78,-90323 }, { 79,-90323 }, { 80,-90323 }, + { 81,-90323 }, { 82,-90323 }, { 83,-90323 }, { 84,-90323 }, { 85,-90323 }, + { 86,-90323 }, { 87,-90323 }, { 88,-90323 }, { 89,-90323 }, { 90,-90323 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-90323 }, + { 0, 0 }, { 97,-90323 }, { 98,-90323 }, { 99,-90323 }, { 100,-90323 }, + { 101,-90323 }, { 102,-90323 }, { 103,-90323 }, { 104,-90323 }, { 105,-90323 }, + { 106,-90323 }, { 107,-90323 }, { 108,-90323 }, { 109,-90323 }, { 110,-90323 }, + + { 111,-90323 }, { 112,-90323 }, { 113,-90323 }, { 114,-90323 }, { 115,-90323 }, + { 116,-90323 }, { 117,-90323 }, { 118,-90323 }, { 119,-90323 }, { 120,-90323 }, + { 121,-90323 }, { 122,-90323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-90323 }, { 128,-90323 }, { 129,-90323 }, { 130,-90323 }, + { 131,-90323 }, { 132,-90323 }, { 133,-90323 }, { 134,-90323 }, { 135,-90323 }, + { 136,-90323 }, { 137,-90323 }, { 138,-90323 }, { 139,-90323 }, { 140,-90323 }, + { 141,-90323 }, { 142,-90323 }, { 143,-90323 }, { 144,-90323 }, { 145,-90323 }, + { 146,-90323 }, { 147,-90323 }, { 148,-90323 }, { 149,-90323 }, { 150,-90323 }, + { 151,-90323 }, { 152,-90323 }, { 153,-90323 }, { 154,-90323 }, { 155,-90323 }, + { 156,-90323 }, { 157,-90323 }, { 158,-90323 }, { 159,-90323 }, { 160,-90323 }, + + { 161,-90323 }, { 162,-90323 }, { 163,-90323 }, { 164,-90323 }, { 165,-90323 }, + { 166,-90323 }, { 167,-90323 }, { 168,-90323 }, { 169,-90323 }, { 170,-90323 }, + { 171,-90323 }, { 172,-90323 }, { 173,-90323 }, { 174,-90323 }, { 175,-90323 }, + { 176,-90323 }, { 177,-90323 }, { 178,-90323 }, { 179,-90323 }, { 180,-90323 }, + { 181,-90323 }, { 182,-90323 }, { 183,-90323 }, { 184,-90323 }, { 185,-90323 }, + { 186,-90323 }, { 187,-90323 }, { 188,-90323 }, { 189,-90323 }, { 190,-90323 }, + { 191,-90323 }, { 192,-90323 }, { 193,-90323 }, { 194,-90323 }, { 195,-90323 }, + { 196,-90323 }, { 197,-90323 }, { 198,-90323 }, { 199,-90323 }, { 200,-90323 }, + { 201,-90323 }, { 202,-90323 }, { 203,-90323 }, { 204,-90323 }, { 205,-90323 }, + { 206,-90323 }, { 207,-90323 }, { 208,-90323 }, { 209,-90323 }, { 210,-90323 }, + + { 211,-90323 }, { 212,-90323 }, { 213,-90323 }, { 214,-90323 }, { 215,-90323 }, + { 216,-90323 }, { 217,-90323 }, { 218,-90323 }, { 219,-90323 }, { 220,-90323 }, + { 221,-90323 }, { 222,-90323 }, { 223,-90323 }, { 224,-90323 }, { 225,-90323 }, + { 226,-90323 }, { 227,-90323 }, { 228,-90323 }, { 229,-90323 }, { 230,-90323 }, + { 231,-90323 }, { 232,-90323 }, { 233,-90323 }, { 234,-90323 }, { 235,-90323 }, + { 236,-90323 }, { 237,-90323 }, { 238,-90323 }, { 239,-90323 }, { 240,-90323 }, + { 241,-90323 }, { 242,-90323 }, { 243,-90323 }, { 244,-90323 }, { 245,-90323 }, + { 246,-90323 }, { 247,-90323 }, { 248,-90323 }, { 249,-90323 }, { 250,-90323 }, + { 251,-90323 }, { 252,-90323 }, { 253,-90323 }, { 254,-90323 }, { 255,-90323 }, + { 0, 131 }, { 0,1543 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-90580 }, + { 49,-90580 }, { 50,-90580 }, { 51,-90580 }, { 52,-90580 }, { 53,-90580 }, + + { 54,-90580 }, { 55,-90580 }, { 56,-90580 }, { 57,-90580 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-90580 }, { 66,-90580 }, { 67,-90580 }, { 68,-90580 }, + { 69,-90580 }, { 70,-90580 }, { 71,-90580 }, { 72,-90580 }, { 73,-90580 }, + { 74,-90580 }, { 75,-90580 }, { 76, 514 }, { 77,-90580 }, { 78,-90580 }, + { 79,-90580 }, { 80,-90580 }, { 81,-90580 }, { 82,-90580 }, { 83,-90580 }, + { 84,-90580 }, { 85,-90580 }, { 86,-90580 }, { 87,-90580 }, { 88,-90580 }, + { 89,-90580 }, { 90,-90580 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-90580 }, { 0, 0 }, { 97,-90580 }, { 98,-90580 }, + { 99,-90580 }, { 100,-90580 }, { 101,-90580 }, { 102,-90580 }, { 103,-90580 }, + + { 104,-90580 }, { 105,-90580 }, { 106,-90580 }, { 107,-90580 }, { 108, 514 }, + { 109,-90580 }, { 110,-90580 }, { 111,-90580 }, { 112,-90580 }, { 113,-90580 }, + { 114,-90580 }, { 115,-90580 }, { 116,-90580 }, { 117,-90580 }, { 118,-90580 }, + { 119,-90580 }, { 120,-90580 }, { 121,-90580 }, { 122,-90580 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-90580 }, { 128,-90580 }, + { 129,-90580 }, { 130,-90580 }, { 131,-90580 }, { 132,-90580 }, { 133,-90580 }, + { 134,-90580 }, { 135,-90580 }, { 136,-90580 }, { 137,-90580 }, { 138,-90580 }, + { 139,-90580 }, { 140,-90580 }, { 141,-90580 }, { 142,-90580 }, { 143,-90580 }, + { 144,-90580 }, { 145,-90580 }, { 146,-90580 }, { 147,-90580 }, { 148,-90580 }, + { 149,-90580 }, { 150,-90580 }, { 151,-90580 }, { 152,-90580 }, { 153,-90580 }, + + { 154,-90580 }, { 155,-90580 }, { 156,-90580 }, { 157,-90580 }, { 158,-90580 }, + { 159,-90580 }, { 160,-90580 }, { 161,-90580 }, { 162,-90580 }, { 163,-90580 }, + { 164,-90580 }, { 165,-90580 }, { 166,-90580 }, { 167,-90580 }, { 168,-90580 }, + { 169,-90580 }, { 170,-90580 }, { 171,-90580 }, { 172,-90580 }, { 173,-90580 }, + { 174,-90580 }, { 175,-90580 }, { 176,-90580 }, { 177,-90580 }, { 178,-90580 }, + { 179,-90580 }, { 180,-90580 }, { 181,-90580 }, { 182,-90580 }, { 183,-90580 }, + { 184,-90580 }, { 185,-90580 }, { 186,-90580 }, { 187,-90580 }, { 188,-90580 }, + { 189,-90580 }, { 190,-90580 }, { 191,-90580 }, { 192,-90580 }, { 193,-90580 }, + { 194,-90580 }, { 195,-90580 }, { 196,-90580 }, { 197,-90580 }, { 198,-90580 }, + { 199,-90580 }, { 200,-90580 }, { 201,-90580 }, { 202,-90580 }, { 203,-90580 }, + + { 204,-90580 }, { 205,-90580 }, { 206,-90580 }, { 207,-90580 }, { 208,-90580 }, + { 209,-90580 }, { 210,-90580 }, { 211,-90580 }, { 212,-90580 }, { 213,-90580 }, + { 214,-90580 }, { 215,-90580 }, { 216,-90580 }, { 217,-90580 }, { 218,-90580 }, + { 219,-90580 }, { 220,-90580 }, { 221,-90580 }, { 222,-90580 }, { 223,-90580 }, + { 224,-90580 }, { 225,-90580 }, { 226,-90580 }, { 227,-90580 }, { 228,-90580 }, + { 229,-90580 }, { 230,-90580 }, { 231,-90580 }, { 232,-90580 }, { 233,-90580 }, + { 234,-90580 }, { 235,-90580 }, { 236,-90580 }, { 237,-90580 }, { 238,-90580 }, + { 239,-90580 }, { 240,-90580 }, { 241,-90580 }, { 242,-90580 }, { 243,-90580 }, + { 244,-90580 }, { 245,-90580 }, { 246,-90580 }, { 247,-90580 }, { 248,-90580 }, + { 249,-90580 }, { 250,-90580 }, { 251,-90580 }, { 252,-90580 }, { 253,-90580 }, + + { 254,-90580 }, { 255,-90580 }, { 0, 131 }, { 0,1286 }, { 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, 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 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-90837 }, { 49,-90837 }, { 50,-90837 }, { 51,-90837 }, + { 52,-90837 }, { 53,-90837 }, { 54,-90837 }, { 55,-90837 }, { 56,-90837 }, + { 57,-90837 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-90837 }, { 66,-90837 }, + { 67,-90837 }, { 68,-90837 }, { 69,-90837 }, { 70,-90837 }, { 71,-90837 }, + { 72,-90837 }, { 73,-90837 }, { 74,-90837 }, { 75,-90837 }, { 76,-90837 }, + { 77,-90837 }, { 78,-90837 }, { 79,-90837 }, { 80,-90837 }, { 81,-90837 }, + { 82,-90837 }, { 83,-90837 }, { 84,-90837 }, { 85,-90837 }, { 86,-90837 }, + { 87,-90837 }, { 88,-90837 }, { 89,-90837 }, { 90,-90837 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 514 }, { 0, 0 }, + + { 97,-90837 }, { 98,-90837 }, { 99,-90837 }, { 100,-90837 }, { 101,-90837 }, + { 102,-90837 }, { 103,-90837 }, { 104,-90837 }, { 105,-90837 }, { 106,-90837 }, + { 107,-90837 }, { 108,-90837 }, { 109,-90837 }, { 110,-90837 }, { 111,-90837 }, + { 112,-90837 }, { 113,-90837 }, { 114,-90837 }, { 115,-90837 }, { 116,-90837 }, + { 117,-90837 }, { 118,-90837 }, { 119,-90837 }, { 120,-90837 }, { 121,-90837 }, + { 122,-90837 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-90837 }, { 128,-90837 }, { 129,-90837 }, { 130,-90837 }, { 131,-90837 }, + { 132,-90837 }, { 133,-90837 }, { 134,-90837 }, { 135,-90837 }, { 136,-90837 }, + { 137,-90837 }, { 138,-90837 }, { 139,-90837 }, { 140,-90837 }, { 141,-90837 }, + { 142,-90837 }, { 143,-90837 }, { 144,-90837 }, { 145,-90837 }, { 146,-90837 }, + + { 147,-90837 }, { 148,-90837 }, { 149,-90837 }, { 150,-90837 }, { 151,-90837 }, + { 152,-90837 }, { 153,-90837 }, { 154,-90837 }, { 155,-90837 }, { 156,-90837 }, + { 157,-90837 }, { 158,-90837 }, { 159,-90837 }, { 160,-90837 }, { 161,-90837 }, + { 162,-90837 }, { 163,-90837 }, { 164,-90837 }, { 165,-90837 }, { 166,-90837 }, + { 167,-90837 }, { 168,-90837 }, { 169,-90837 }, { 170,-90837 }, { 171,-90837 }, + { 172,-90837 }, { 173,-90837 }, { 174,-90837 }, { 175,-90837 }, { 176,-90837 }, + { 177,-90837 }, { 178,-90837 }, { 179,-90837 }, { 180,-90837 }, { 181,-90837 }, + { 182,-90837 }, { 183,-90837 }, { 184,-90837 }, { 185,-90837 }, { 186,-90837 }, + { 187,-90837 }, { 188,-90837 }, { 189,-90837 }, { 190,-90837 }, { 191,-90837 }, + { 192,-90837 }, { 193,-90837 }, { 194,-90837 }, { 195,-90837 }, { 196,-90837 }, + + { 197,-90837 }, { 198,-90837 }, { 199,-90837 }, { 200,-90837 }, { 201,-90837 }, + { 202,-90837 }, { 203,-90837 }, { 204,-90837 }, { 205,-90837 }, { 206,-90837 }, + { 207,-90837 }, { 208,-90837 }, { 209,-90837 }, { 210,-90837 }, { 211,-90837 }, + { 212,-90837 }, { 213,-90837 }, { 214,-90837 }, { 215,-90837 }, { 216,-90837 }, + { 217,-90837 }, { 218,-90837 }, { 219,-90837 }, { 220,-90837 }, { 221,-90837 }, + { 222,-90837 }, { 223,-90837 }, { 224,-90837 }, { 225,-90837 }, { 226,-90837 }, + { 227,-90837 }, { 228,-90837 }, { 229,-90837 }, { 230,-90837 }, { 231,-90837 }, + { 232,-90837 }, { 233,-90837 }, { 234,-90837 }, { 235,-90837 }, { 236,-90837 }, + { 237,-90837 }, { 238,-90837 }, { 239,-90837 }, { 240,-90837 }, { 241,-90837 }, + { 242,-90837 }, { 243,-90837 }, { 244,-90837 }, { 245,-90837 }, { 246,-90837 }, + + { 247,-90837 }, { 248,-90837 }, { 249,-90837 }, { 250,-90837 }, { 251,-90837 }, + { 252,-90837 }, { 253,-90837 }, { 254,-90837 }, { 255,-90837 }, { 0, 131 }, + { 0,1029 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-91094 }, { 49,-91094 }, + { 50,-91094 }, { 51,-91094 }, { 52,-91094 }, { 53,-91094 }, { 54,-91094 }, + { 55,-91094 }, { 56,-91094 }, { 57,-91094 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-91094 }, { 66,-91094 }, { 67,-91094 }, { 68,-91094 }, { 69, 514 }, + { 70,-91094 }, { 71,-91094 }, { 72,-91094 }, { 73,-91094 }, { 74,-91094 }, + { 75,-91094 }, { 76,-91094 }, { 77,-91094 }, { 78,-91094 }, { 79,-91094 }, + { 80,-91094 }, { 81,-91094 }, { 82,-91094 }, { 83,-91094 }, { 84,-91094 }, + { 85,-91094 }, { 86,-91094 }, { 87,-91094 }, { 88,-91094 }, { 89,-91094 }, + + { 90,-91094 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-91094 }, { 0, 0 }, { 97,-91094 }, { 98,-91094 }, { 99,-91094 }, + { 100,-91094 }, { 101, 514 }, { 102,-91094 }, { 103,-91094 }, { 104,-91094 }, + { 105,-91094 }, { 106,-91094 }, { 107,-91094 }, { 108,-91094 }, { 109,-91094 }, + { 110,-91094 }, { 111,-91094 }, { 112,-91094 }, { 113,-91094 }, { 114,-91094 }, + { 115,-91094 }, { 116,-91094 }, { 117,-91094 }, { 118,-91094 }, { 119,-91094 }, + { 120,-91094 }, { 121,-91094 }, { 122,-91094 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-91094 }, { 128,-91094 }, { 129,-91094 }, + { 130,-91094 }, { 131,-91094 }, { 132,-91094 }, { 133,-91094 }, { 134,-91094 }, + { 135,-91094 }, { 136,-91094 }, { 137,-91094 }, { 138,-91094 }, { 139,-91094 }, + + { 140,-91094 }, { 141,-91094 }, { 142,-91094 }, { 143,-91094 }, { 144,-91094 }, + { 145,-91094 }, { 146,-91094 }, { 147,-91094 }, { 148,-91094 }, { 149,-91094 }, + { 150,-91094 }, { 151,-91094 }, { 152,-91094 }, { 153,-91094 }, { 154,-91094 }, + { 155,-91094 }, { 156,-91094 }, { 157,-91094 }, { 158,-91094 }, { 159,-91094 }, + { 160,-91094 }, { 161,-91094 }, { 162,-91094 }, { 163,-91094 }, { 164,-91094 }, + { 165,-91094 }, { 166,-91094 }, { 167,-91094 }, { 168,-91094 }, { 169,-91094 }, + { 170,-91094 }, { 171,-91094 }, { 172,-91094 }, { 173,-91094 }, { 174,-91094 }, + { 175,-91094 }, { 176,-91094 }, { 177,-91094 }, { 178,-91094 }, { 179,-91094 }, + { 180,-91094 }, { 181,-91094 }, { 182,-91094 }, { 183,-91094 }, { 184,-91094 }, + { 185,-91094 }, { 186,-91094 }, { 187,-91094 }, { 188,-91094 }, { 189,-91094 }, + + { 190,-91094 }, { 191,-91094 }, { 192,-91094 }, { 193,-91094 }, { 194,-91094 }, + { 195,-91094 }, { 196,-91094 }, { 197,-91094 }, { 198,-91094 }, { 199,-91094 }, + { 200,-91094 }, { 201,-91094 }, { 202,-91094 }, { 203,-91094 }, { 204,-91094 }, + { 205,-91094 }, { 206,-91094 }, { 207,-91094 }, { 208,-91094 }, { 209,-91094 }, + { 210,-91094 }, { 211,-91094 }, { 212,-91094 }, { 213,-91094 }, { 214,-91094 }, + { 215,-91094 }, { 216,-91094 }, { 217,-91094 }, { 218,-91094 }, { 219,-91094 }, + { 220,-91094 }, { 221,-91094 }, { 222,-91094 }, { 223,-91094 }, { 224,-91094 }, + { 225,-91094 }, { 226,-91094 }, { 227,-91094 }, { 228,-91094 }, { 229,-91094 }, + { 230,-91094 }, { 231,-91094 }, { 232,-91094 }, { 233,-91094 }, { 234,-91094 }, + { 235,-91094 }, { 236,-91094 }, { 237,-91094 }, { 238,-91094 }, { 239,-91094 }, + + { 240,-91094 }, { 241,-91094 }, { 242,-91094 }, { 243,-91094 }, { 244,-91094 }, + { 245,-91094 }, { 246,-91094 }, { 247,-91094 }, { 248,-91094 }, { 249,-91094 }, + { 250,-91094 }, { 251,-91094 }, { 252,-91094 }, { 253,-91094 }, { 254,-91094 }, + { 255,-91094 }, { 0, 84 }, { 0, 772 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-91351 }, { 49,-91351 }, { 50,-91351 }, { 51,-91351 }, { 52,-91351 }, + { 53,-91351 }, { 54,-91351 }, { 55,-91351 }, { 56,-91351 }, { 57,-91351 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-91351 }, { 66,-91351 }, { 67,-91351 }, + { 68,-91351 }, { 69,-91351 }, { 70,-91351 }, { 71,-91351 }, { 72,-91351 }, + { 73,-91351 }, { 74,-91351 }, { 75,-91351 }, { 76,-91351 }, { 77,-91351 }, + { 78,-91351 }, { 79,-91351 }, { 80,-91351 }, { 81,-91351 }, { 82,-91351 }, + + { 83,-91351 }, { 84,-91351 }, { 85,-91351 }, { 86,-91351 }, { 87,-91351 }, + { 88,-91351 }, { 89,-91351 }, { 90,-91351 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-91351 }, { 0, 0 }, { 97,-91351 }, + { 98,-91351 }, { 99,-91351 }, { 100,-91351 }, { 101,-91351 }, { 102,-91351 }, + { 103,-91351 }, { 104,-91351 }, { 105,-91351 }, { 106,-91351 }, { 107,-91351 }, + { 108,-91351 }, { 109,-91351 }, { 110,-91351 }, { 111,-91351 }, { 112,-91351 }, + { 113,-91351 }, { 114,-91351 }, { 115,-91351 }, { 116,-91351 }, { 117,-91351 }, + { 118,-91351 }, { 119,-91351 }, { 120,-91351 }, { 121,-91351 }, { 122,-91351 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-91351 }, + { 128,-91351 }, { 129,-91351 }, { 130,-91351 }, { 131,-91351 }, { 132,-91351 }, + + { 133,-91351 }, { 134,-91351 }, { 135,-91351 }, { 136,-91351 }, { 137,-91351 }, + { 138,-91351 }, { 139,-91351 }, { 140,-91351 }, { 141,-91351 }, { 142,-91351 }, + { 143,-91351 }, { 144,-91351 }, { 145,-91351 }, { 146,-91351 }, { 147,-91351 }, + { 148,-91351 }, { 149,-91351 }, { 150,-91351 }, { 151,-91351 }, { 152,-91351 }, + { 153,-91351 }, { 154,-91351 }, { 155,-91351 }, { 156,-91351 }, { 157,-91351 }, + { 158,-91351 }, { 159,-91351 }, { 160,-91351 }, { 161,-91351 }, { 162,-91351 }, + { 163,-91351 }, { 164,-91351 }, { 165,-91351 }, { 166,-91351 }, { 167,-91351 }, + { 168,-91351 }, { 169,-91351 }, { 170,-91351 }, { 171,-91351 }, { 172,-91351 }, + { 173,-91351 }, { 174,-91351 }, { 175,-91351 }, { 176,-91351 }, { 177,-91351 }, + { 178,-91351 }, { 179,-91351 }, { 180,-91351 }, { 181,-91351 }, { 182,-91351 }, + + { 183,-91351 }, { 184,-91351 }, { 185,-91351 }, { 186,-91351 }, { 187,-91351 }, + { 188,-91351 }, { 189,-91351 }, { 190,-91351 }, { 191,-91351 }, { 192,-91351 }, + { 193,-91351 }, { 194,-91351 }, { 195,-91351 }, { 196,-91351 }, { 197,-91351 }, + { 198,-91351 }, { 199,-91351 }, { 200,-91351 }, { 201,-91351 }, { 202,-91351 }, + { 203,-91351 }, { 204,-91351 }, { 205,-91351 }, { 206,-91351 }, { 207,-91351 }, + { 208,-91351 }, { 209,-91351 }, { 210,-91351 }, { 211,-91351 }, { 212,-91351 }, + { 213,-91351 }, { 214,-91351 }, { 215,-91351 }, { 216,-91351 }, { 217,-91351 }, + { 218,-91351 }, { 219,-91351 }, { 220,-91351 }, { 221,-91351 }, { 222,-91351 }, + { 223,-91351 }, { 224,-91351 }, { 225,-91351 }, { 226,-91351 }, { 227,-91351 }, + { 228,-91351 }, { 229,-91351 }, { 230,-91351 }, { 231,-91351 }, { 232,-91351 }, + + { 233,-91351 }, { 234,-91351 }, { 235,-91351 }, { 236,-91351 }, { 237,-91351 }, + { 238,-91351 }, { 239,-91351 }, { 240,-91351 }, { 241,-91351 }, { 242,-91351 }, + { 243,-91351 }, { 244,-91351 }, { 245,-91351 }, { 246,-91351 }, { 247,-91351 }, + { 248,-91351 }, { 249,-91351 }, { 250,-91351 }, { 251,-91351 }, { 252,-91351 }, + { 253,-91351 }, { 254,-91351 }, { 255,-91351 }, { 0, 131 }, { 0, 515 }, + { 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, 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 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-91608 }, { 49,-91608 }, { 50,-91608 }, + { 51,-91608 }, { 52,-91608 }, { 53,-91608 }, { 54,-91608 }, { 55,-91608 }, + { 56,-91608 }, { 57,-91608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-91608 }, + { 66,-91608 }, { 67,-91608 }, { 68,-91608 }, { 69,-91608 }, { 70,-91608 }, + { 71,-91608 }, { 72,-91608 }, { 73,-91608 }, { 74,-91608 }, { 75,-91608 }, + + { 76,-91608 }, { 77,-91608 }, { 78,-91608 }, { 79,-91608 }, { 80,-91608 }, + { 81,-91608 }, { 82, 257 }, { 83,-91608 }, { 84,-91608 }, { 85,-91608 }, + { 86,-91608 }, { 87,-91608 }, { 88,-91608 }, { 89,-91608 }, { 90,-91608 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-91608 }, + { 0, 0 }, { 97,-91608 }, { 98,-91608 }, { 99,-91608 }, { 100,-91608 }, + { 101,-91608 }, { 102,-91608 }, { 103,-91608 }, { 104,-91608 }, { 105,-91608 }, + { 106,-91608 }, { 107,-91608 }, { 108,-91608 }, { 109,-91608 }, { 110,-91608 }, + { 111,-91608 }, { 112,-91608 }, { 113,-91608 }, { 114, 257 }, { 115,-91608 }, + { 116,-91608 }, { 117,-91608 }, { 118,-91608 }, { 119,-91608 }, { 120,-91608 }, + { 121,-91608 }, { 122,-91608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-91608 }, { 128,-91608 }, { 129,-91608 }, { 130,-91608 }, + { 131,-91608 }, { 132,-91608 }, { 133,-91608 }, { 134,-91608 }, { 135,-91608 }, + { 136,-91608 }, { 137,-91608 }, { 138,-91608 }, { 139,-91608 }, { 140,-91608 }, + { 141,-91608 }, { 142,-91608 }, { 143,-91608 }, { 144,-91608 }, { 145,-91608 }, + { 146,-91608 }, { 147,-91608 }, { 148,-91608 }, { 149,-91608 }, { 150,-91608 }, + { 151,-91608 }, { 152,-91608 }, { 153,-91608 }, { 154,-91608 }, { 155,-91608 }, + { 156,-91608 }, { 157,-91608 }, { 158,-91608 }, { 159,-91608 }, { 160,-91608 }, + { 161,-91608 }, { 162,-91608 }, { 163,-91608 }, { 164,-91608 }, { 165,-91608 }, + { 166,-91608 }, { 167,-91608 }, { 168,-91608 }, { 169,-91608 }, { 170,-91608 }, + { 171,-91608 }, { 172,-91608 }, { 173,-91608 }, { 174,-91608 }, { 175,-91608 }, + + { 176,-91608 }, { 177,-91608 }, { 178,-91608 }, { 179,-91608 }, { 180,-91608 }, + { 181,-91608 }, { 182,-91608 }, { 183,-91608 }, { 184,-91608 }, { 185,-91608 }, + { 186,-91608 }, { 187,-91608 }, { 188,-91608 }, { 189,-91608 }, { 190,-91608 }, + { 191,-91608 }, { 192,-91608 }, { 193,-91608 }, { 194,-91608 }, { 195,-91608 }, + { 196,-91608 }, { 197,-91608 }, { 198,-91608 }, { 199,-91608 }, { 200,-91608 }, + { 201,-91608 }, { 202,-91608 }, { 203,-91608 }, { 204,-91608 }, { 205,-91608 }, + { 206,-91608 }, { 207,-91608 }, { 208,-91608 }, { 209,-91608 }, { 210,-91608 }, + { 211,-91608 }, { 212,-91608 }, { 213,-91608 }, { 214,-91608 }, { 215,-91608 }, + { 216,-91608 }, { 217,-91608 }, { 218,-91608 }, { 219,-91608 }, { 220,-91608 }, + { 221,-91608 }, { 222,-91608 }, { 223,-91608 }, { 224,-91608 }, { 225,-91608 }, + + { 226,-91608 }, { 227,-91608 }, { 228,-91608 }, { 229,-91608 }, { 230,-91608 }, + { 231,-91608 }, { 232,-91608 }, { 233,-91608 }, { 234,-91608 }, { 235,-91608 }, + { 236,-91608 }, { 237,-91608 }, { 238,-91608 }, { 239,-91608 }, { 240,-91608 }, + { 241,-91608 }, { 242,-91608 }, { 243,-91608 }, { 244,-91608 }, { 245,-91608 }, + { 246,-91608 }, { 247,-91608 }, { 248,-91608 }, { 249,-91608 }, { 250,-91608 }, + { 251,-91608 }, { 252,-91608 }, { 253,-91608 }, { 254,-91608 }, { 255,-91608 }, + { 0, 71 }, { 0, 258 }, { 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, 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 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-91865 }, + { 49,-91865 }, { 50,-91865 }, { 51,-91865 }, { 52,-91865 }, { 53,-91865 }, + { 54,-91865 }, { 55,-91865 }, { 56,-91865 }, { 57,-91865 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-91865 }, { 66,-91865 }, { 67,-91865 }, { 68,-91865 }, + + { 69,-91865 }, { 70,-91865 }, { 71,-91865 }, { 72,-91865 }, { 73,-91865 }, + { 74,-91865 }, { 75,-91865 }, { 76,-91865 }, { 77,-91865 }, { 78,-91865 }, + { 79,-91865 }, { 80,-91865 }, { 81,-91865 }, { 82,-91865 }, { 83,-91865 }, + { 84,-91865 }, { 85,-91865 }, { 86,-91865 }, { 87,-91865 }, { 88,-91865 }, + { 89,-91865 }, { 90,-91865 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-91865 }, { 0, 0 }, { 97,-91865 }, { 98,-91865 }, + { 99,-91865 }, { 100,-91865 }, { 101,-91865 }, { 102,-91865 }, { 103,-91865 }, + { 104,-91865 }, { 105,-91865 }, { 106,-91865 }, { 107,-91865 }, { 108,-91865 }, + { 109,-91865 }, { 110,-91865 }, { 111,-91865 }, { 112,-91865 }, { 113,-91865 }, + { 114,-91865 }, { 115,-91865 }, { 116,-91865 }, { 117,-91865 }, { 118,-91865 }, + + { 119,-91865 }, { 120,-91865 }, { 121,-91865 }, { 122,-91865 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-91865 }, { 128,-91865 }, + { 129,-91865 }, { 130,-91865 }, { 131,-91865 }, { 132,-91865 }, { 133,-91865 }, + { 134,-91865 }, { 135,-91865 }, { 136,-91865 }, { 137,-91865 }, { 138,-91865 }, + { 139,-91865 }, { 140,-91865 }, { 141,-91865 }, { 142,-91865 }, { 143,-91865 }, + { 144,-91865 }, { 145,-91865 }, { 146,-91865 }, { 147,-91865 }, { 148,-91865 }, + { 149,-91865 }, { 150,-91865 }, { 151,-91865 }, { 152,-91865 }, { 153,-91865 }, + { 154,-91865 }, { 155,-91865 }, { 156,-91865 }, { 157,-91865 }, { 158,-91865 }, + { 159,-91865 }, { 160,-91865 }, { 161,-91865 }, { 162,-91865 }, { 163,-91865 }, + { 164,-91865 }, { 165,-91865 }, { 166,-91865 }, { 167,-91865 }, { 168,-91865 }, + + { 169,-91865 }, { 170,-91865 }, { 171,-91865 }, { 172,-91865 }, { 173,-91865 }, + { 174,-91865 }, { 175,-91865 }, { 176,-91865 }, { 177,-91865 }, { 178,-91865 }, + { 179,-91865 }, { 180,-91865 }, { 181,-91865 }, { 182,-91865 }, { 183,-91865 }, + { 184,-91865 }, { 185,-91865 }, { 186,-91865 }, { 187,-91865 }, { 188,-91865 }, + { 189,-91865 }, { 190,-91865 }, { 191,-91865 }, { 192,-91865 }, { 193,-91865 }, + { 194,-91865 }, { 195,-91865 }, { 196,-91865 }, { 197,-91865 }, { 198,-91865 }, + { 199,-91865 }, { 200,-91865 }, { 201,-91865 }, { 202,-91865 }, { 203,-91865 }, + { 204,-91865 }, { 205,-91865 }, { 206,-91865 }, { 207,-91865 }, { 208,-91865 }, + { 209,-91865 }, { 210,-91865 }, { 211,-91865 }, { 212,-91865 }, { 213,-91865 }, + { 214,-91865 }, { 215,-91865 }, { 216,-91865 }, { 217,-91865 }, { 218,-91865 }, + + { 219,-91865 }, { 220,-91865 }, { 221,-91865 }, { 222,-91865 }, { 223,-91865 }, + { 224,-91865 }, { 225,-91865 }, { 226,-91865 }, { 227,-91865 }, { 228,-91865 }, + { 229,-91865 }, { 230,-91865 }, { 231,-91865 }, { 232,-91865 }, { 233,-91865 }, + { 234,-91865 }, { 235,-91865 }, { 236,-91865 }, { 237,-91865 }, { 238,-91865 }, + { 239,-91865 }, { 240,-91865 }, { 241,-91865 }, { 242,-91865 }, { 243,-91865 }, + { 244,-91865 }, { 245,-91865 }, { 246,-91865 }, { 247,-91865 }, { 248,-91865 }, + { 249,-91865 }, { 250,-91865 }, { 251,-91865 }, { 252,-91865 }, { 253,-91865 }, + { 254,-91865 }, { 255,-91865 }, { 0, 0 }, { 257, 144 }, { 1, 0 }, + }; + +static const struct yy_trans_info *yy_start_state_list[23] = + { + &yy_transition[1], + &yy_transition[3], + &yy_transition[261], + &yy_transition[519], + &yy_transition[777], + &yy_transition[1035], + &yy_transition[1293], + &yy_transition[1551], + &yy_transition[1809], + &yy_transition[2067], + &yy_transition[2325], + &yy_transition[2583], + &yy_transition[2841], + &yy_transition[3099], + &yy_transition[3357], + &yy_transition[3615], + &yy_transition[3873], + &yy_transition[4131], + &yy_transition[4389], + &yy_transition[4647], + &yy_transition[4905], + &yy_transition[5163], + &yy_transition[5421], + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() (yyg->yy_more_flag = 1) +#define YY_MORE_ADJ yyg->yy_more_len +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "scanner.l" +#line 2 "scanner.l" +#include "ast.hpp" +#define push_state(s) xhp_new_push_state(s, yyg) +#define pop_state() xhp_new_pop_state(yyg) +#define set_state(s) xhp_set_state(s, yyg) + +#define pttok(t, txt) \ + yyextra->token_list.push_back( \ + new xhpast::Token(t, txt, yyextra->list_size++)); \ + *yylval = new xhpast::Node(0, yyextra->list_size - 1); +#define ptok(t) \ + pttok(t, yytext); +#define tok(t) \ + ptok(t); \ + return yy_token(t, yyg) +#define YY_USER_INIT \ + if (yyextra->insert_token) { \ + yyg->yy_init = 0; \ + int ft = yyextra->insert_token; \ + yyextra->insert_token = 0; \ + return yy_token(ft, yyg); \ + } + +using namespace std; + +const char* yytokname(int tok); +static int yy_token(int tok, struct yyguts_t* yyg); +static void yy_scan_newlines(const char* text, struct yyguts_t* yyg); + +#line 24629 "scanner.lex.cpp" +#line 35 "scanner.l" + /* PHP allows IF or if */ + /* The different lexing states. Note that the transitions are done either + * in the lex actions, or in a generic manner in yy_token(). */ + + + + + + + + + + +#line 24644 "scanner.lex.cpp" + +#define INITIAL 0 +#define PHP 1 +#define PHP_COMMENT 2 +#define PHP_EOL_COMMENT 3 +#define PHP_DOC_COMMENT 4 +#define PHP_HEREDOC_START 5 +#define PHP_HEREDOC_NSTART 6 +#define PHP_HEREDOC_NEWLINE 7 +#define PHP_NO_RESERVED_WORDS 8 +#define PHP_NO_RESERVED_WORDS_PERSIST 9 +#define PHP_ 10 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + YYSTYPE * yylval_r; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + + /* This must go here because YYSTYPE and YYLTYPE are included + * from bison output in section 1.*/ + # define yylval yyg->yylval_r + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +YYSTYPE * yyget_lval ( yyscan_t yyscanner ); + +void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + + static void yy_push_state ( int _new_state , yyscan_t yyscanner); + + static void yy_pop_state ( yyscan_t yyscanner ); + + static int yy_top_state ( yyscan_t yyscanner ); + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner); + +#define YY_DECL int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yylval = yylval_param; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 68 "scanner.l" + + + /* Open / close PHP + inline HTML */ +#line 24922 "scanner.lex.cpp" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yyg->yy_more_len = 0; + if ( yyg->yy_more_flag ) + { + yyg->yy_more_len = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yyg->yy_more_flag = 0; + } + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yy_start_state_list[yyg->yy_start]; +yy_match: + { + const struct yy_trans_info *yy_trans_info; + + YY_CHAR yy_c; + + for ( yy_c = YY_SC_TO_UI(*yy_cp); + (yy_trans_info = &yy_current_state[yy_c])-> + yy_verify == yy_c; + yy_c = YY_SC_TO_UI(*++yy_cp) ) + { + yy_current_state += yy_trans_info->yy_nxt; + + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + } + +yy_find_action: + yy_act = yy_current_state[-1].yy_nxt; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +YY_LINENO_REWIND_TO(yy_bp + 5); +yyg->yy_c_buf_p = yy_cp = yy_bp + 5; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 72 "scanner.l" +{ + yy_scan_newlines(yytext + 5, yyg); + // the state transition will be done in yy_token() + tok(T_OPEN_TAG); + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 77 "scanner.l" +{ + tok(T_OPEN_TAG); + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 80 "scanner.l" +{ + tok(T_OPEN_TAG_WITH_ECHO); + } + YY_BREAK +case 4: +/* rule 4 can match eol */ +YY_RULE_SETUP +#line 83 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_INLINE_HTML); + } + YY_BREAK + + +case 5: +/* rule 5 can match eol */ +YY_RULE_SETUP +#line 89 "scanner.l" +{ + yy_scan_newlines(yytext + 2, yyg); + tok(T_CLOSE_TAG); + } + YY_BREAK + +/* Comments and whitespace */ + +case 6: +YY_RULE_SETUP +#line 97 "scanner.l" +{ + push_state(PHP_EOL_COMMENT); + yymore(); + } + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 101 "scanner.l" +{ + yy_scan_newlines(yytext + 3, yyg); + push_state(PHP_DOC_COMMENT); + yymore(); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 106 "scanner.l" +{ + push_state(PHP_COMMENT); + yymore(); + } + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 110 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + ptok(T_WHITESPACE); + } + YY_BREAK + +case YY_STATE_EOF(PHP_EOL_COMMENT): +#line 115 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK + +case 10: +/* rule 10 can match eol */ +YY_RULE_SETUP +#line 120 "scanner.l" +{ + ++yyextra->lineno; + ptok(T_COMMENT); + pop_state(); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 125 "scanner.l" +yymore(); + YY_BREAK +case 12: +YY_RULE_SETUP +#line 126 "scanner.l" +{ + yyless(yyleng - 2); + ptok(T_COMMENT); + pop_state(); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 131 "scanner.l" +yymore(); + YY_BREAK + + +case 14: +/* rule 14 can match eol */ +YY_RULE_SETUP +#line 134 "scanner.l" +{ + ++yyextra->lineno; + yymore(); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 138 "scanner.l" +yymore(); + YY_BREAK + +case 16: +YY_RULE_SETUP +#line 140 "scanner.l" +{ + ptok(T_DOC_COMMENT); + pop_state(); +} + YY_BREAK +case YY_STATE_EOF(PHP_DOC_COMMENT): +#line 144 "scanner.l" +{ + ptok(T_DOC_COMMENT); + pop_state(); +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 148 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK +case YY_STATE_EOF(PHP_COMMENT): +#line 152 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK +/* Reserved words */ + +case 18: +YY_RULE_SETUP +#line 159 "scanner.l" +tok(T_INCLUDE); + YY_BREAK +case 19: +YY_RULE_SETUP +#line 160 "scanner.l" +tok(T_INCLUDE_ONCE); + YY_BREAK +case 20: +YY_RULE_SETUP +#line 161 "scanner.l" +tok(T_EVAL); + YY_BREAK +case 21: +YY_RULE_SETUP +#line 162 "scanner.l" +tok(T_REQUIRE); + YY_BREAK +case 22: +YY_RULE_SETUP +#line 163 "scanner.l" +tok(T_REQUIRE_ONCE); + YY_BREAK +case 23: +YY_RULE_SETUP +#line 164 "scanner.l" +tok(T_LOGICAL_OR); + YY_BREAK +case 24: +YY_RULE_SETUP +#line 165 "scanner.l" +tok(T_LOGICAL_XOR); + YY_BREAK +case 25: +YY_RULE_SETUP +#line 166 "scanner.l" +tok(T_LOGICAL_AND); + YY_BREAK +case 26: +YY_RULE_SETUP +#line 167 "scanner.l" +tok(T_PRINT); + YY_BREAK +case 27: +YY_RULE_SETUP +#line 168 "scanner.l" +tok(T_INSTANCEOF); + YY_BREAK +case 28: +YY_RULE_SETUP +#line 169 "scanner.l" +tok(T_NEW); + YY_BREAK +case 29: +YY_RULE_SETUP +#line 170 "scanner.l" +tok(T_CLONE); + YY_BREAK +case 30: +YY_RULE_SETUP +#line 171 "scanner.l" +tok(T_EXIT); + YY_BREAK +case 31: +YY_RULE_SETUP +#line 172 "scanner.l" +tok(T_IF); + YY_BREAK +case 32: +YY_RULE_SETUP +#line 173 "scanner.l" +tok(T_ELSEIF); + YY_BREAK +case 33: +YY_RULE_SETUP +#line 174 "scanner.l" +tok(T_ELSE); + YY_BREAK +case 34: +YY_RULE_SETUP +#line 175 "scanner.l" +tok(T_ENDIF); + YY_BREAK +case 35: +YY_RULE_SETUP +#line 176 "scanner.l" +tok(T_ECHO); + YY_BREAK +case 36: +YY_RULE_SETUP +#line 177 "scanner.l" +tok(T_DO); + YY_BREAK +case 37: +YY_RULE_SETUP +#line 178 "scanner.l" +tok(T_WHILE); + YY_BREAK +case 38: +YY_RULE_SETUP +#line 179 "scanner.l" +tok(T_ENDWHILE); + YY_BREAK +case 39: +YY_RULE_SETUP +#line 180 "scanner.l" +tok(T_FOR); + YY_BREAK +case 40: +YY_RULE_SETUP +#line 181 "scanner.l" +tok(T_ENDFOR); + YY_BREAK +case 41: +YY_RULE_SETUP +#line 182 "scanner.l" +tok(T_FOREACH); + YY_BREAK +case 42: +YY_RULE_SETUP +#line 183 "scanner.l" +tok(T_ENDFOREACH); + YY_BREAK +case 43: +YY_RULE_SETUP +#line 184 "scanner.l" +tok(T_DECLARE); + YY_BREAK +case 44: +YY_RULE_SETUP +#line 185 "scanner.l" +tok(T_ENDDECLARE); + YY_BREAK +case 45: +YY_RULE_SETUP +#line 186 "scanner.l" +tok(T_AS); + YY_BREAK +case 46: +YY_RULE_SETUP +#line 187 "scanner.l" +tok(T_SWITCH); + YY_BREAK +case 47: +YY_RULE_SETUP +#line 188 "scanner.l" +tok(T_ENDSWITCH); + YY_BREAK +case 48: +YY_RULE_SETUP +#line 189 "scanner.l" +tok(T_CASE); + YY_BREAK +case 49: +YY_RULE_SETUP +#line 190 "scanner.l" +tok(T_DEFAULT); + YY_BREAK +case 50: +YY_RULE_SETUP +#line 191 "scanner.l" +tok(T_BREAK); + YY_BREAK +case 51: +YY_RULE_SETUP +#line 192 "scanner.l" +tok(T_CONTINUE); + YY_BREAK +case 52: +YY_RULE_SETUP +#line 193 "scanner.l" +tok(T_GOTO); + YY_BREAK +case 53: +YY_RULE_SETUP +#line 194 "scanner.l" +tok(T_FUNCTION); + YY_BREAK +case 54: +YY_RULE_SETUP +#line 195 "scanner.l" +tok(T_CONST); + YY_BREAK +case 55: +YY_RULE_SETUP +#line 196 "scanner.l" +tok(T_RETURN); + YY_BREAK +case 56: +YY_RULE_SETUP +#line 197 "scanner.l" +tok(T_TRY); + YY_BREAK +case 57: +YY_RULE_SETUP +#line 198 "scanner.l" +tok(T_CATCH); + YY_BREAK +case 58: +YY_RULE_SETUP +#line 199 "scanner.l" +tok(T_THROW); + YY_BREAK +case 59: +YY_RULE_SETUP +#line 200 "scanner.l" +tok(T_USE); + YY_BREAK +case 60: +YY_RULE_SETUP +#line 201 "scanner.l" +tok(T_GLOBAL); + YY_BREAK +case 61: +YY_RULE_SETUP +#line 202 "scanner.l" +tok(T_STATIC); + YY_BREAK +case 62: +YY_RULE_SETUP +#line 203 "scanner.l" +tok(T_ABSTRACT); + YY_BREAK +case 63: +YY_RULE_SETUP +#line 204 "scanner.l" +tok(T_FINAL); + YY_BREAK +case 64: +YY_RULE_SETUP +#line 205 "scanner.l" +tok(T_PRIVATE); + YY_BREAK +case 65: +YY_RULE_SETUP +#line 206 "scanner.l" +tok(T_PROTECTED); + YY_BREAK +case 66: +YY_RULE_SETUP +#line 207 "scanner.l" +tok(T_PUBLIC); + YY_BREAK +case 67: +YY_RULE_SETUP +#line 208 "scanner.l" +tok(T_VAR); + YY_BREAK +case 68: +YY_RULE_SETUP +#line 209 "scanner.l" +tok(T_UNSET); + YY_BREAK +case 69: +YY_RULE_SETUP +#line 210 "scanner.l" +tok(T_ISSET); + YY_BREAK +case 70: +YY_RULE_SETUP +#line 211 "scanner.l" +tok(T_EMPTY); + YY_BREAK +case 71: +YY_RULE_SETUP +#line 212 "scanner.l" +tok(T_HALT_COMPILER); + YY_BREAK +case 72: +YY_RULE_SETUP +#line 213 "scanner.l" +tok(T_CLASS); + YY_BREAK +case 73: +YY_RULE_SETUP +#line 214 "scanner.l" +tok(T_INTERFACE); + YY_BREAK +case 74: +YY_RULE_SETUP +#line 215 "scanner.l" +tok(T_EXTENDS); + YY_BREAK +case 75: +YY_RULE_SETUP +#line 216 "scanner.l" +tok(T_IMPLEMENTS); + YY_BREAK +case 76: +YY_RULE_SETUP +#line 217 "scanner.l" +tok(T_LIST); + YY_BREAK +case 77: +YY_RULE_SETUP +#line 218 "scanner.l" +tok(T_ARRAY); + YY_BREAK +case 78: +YY_RULE_SETUP +#line 219 "scanner.l" +tok(T_CLASS_C); + YY_BREAK +case 79: +YY_RULE_SETUP +#line 220 "scanner.l" +tok(T_METHOD_C); + YY_BREAK +case 80: +YY_RULE_SETUP +#line 221 "scanner.l" +tok(T_FUNC_C); + YY_BREAK +case 81: +YY_RULE_SETUP +#line 222 "scanner.l" +tok(T_LINE); + YY_BREAK +case 82: +YY_RULE_SETUP +#line 223 "scanner.l" +tok(T_FILE); + YY_BREAK +case 83: +YY_RULE_SETUP +#line 224 "scanner.l" +tok(T_NAMESPACE); + YY_BREAK +case 84: +YY_RULE_SETUP +#line 225 "scanner.l" +tok(T_NS_C); + YY_BREAK +case 85: +YY_RULE_SETUP +#line 226 "scanner.l" +tok(T_DIR); + YY_BREAK +case 86: +YY_RULE_SETUP +#line 227 "scanner.l" +tok(T_INSTEADOF); + YY_BREAK +case 87: +YY_RULE_SETUP +#line 228 "scanner.l" +tok(T_CALLABLE); + YY_BREAK +case 88: +YY_RULE_SETUP +#line 229 "scanner.l" +tok(T_TRAIT); + YY_BREAK +case 89: +YY_RULE_SETUP +#line 230 "scanner.l" +tok(T_TRAIT_C); + YY_BREAK +case 90: +YY_RULE_SETUP +#line 231 "scanner.l" +tok(T_YIELD); + YY_BREAK +case 91: +YY_RULE_SETUP +#line 232 "scanner.l" +tok(T_FINALLY); + YY_BREAK + +/* Operators */ + +case 92: +YY_RULE_SETUP +#line 237 "scanner.l" +tok(T_PLUS_EQUAL); + YY_BREAK +case 93: +YY_RULE_SETUP +#line 238 "scanner.l" +tok(T_MINUS_EQUAL); + YY_BREAK +case 94: +YY_RULE_SETUP +#line 239 "scanner.l" +tok(T_MUL_EQUAL); + YY_BREAK +case 95: +YY_RULE_SETUP +#line 240 "scanner.l" +tok(T_DIV_EQUAL); + YY_BREAK +case 96: +YY_RULE_SETUP +#line 241 "scanner.l" +tok(T_CONCAT_EQUAL); + YY_BREAK +case 97: +YY_RULE_SETUP +#line 242 "scanner.l" +tok(T_MOD_EQUAL); + YY_BREAK +case 98: +YY_RULE_SETUP +#line 243 "scanner.l" +tok(T_AND_EQUAL); + YY_BREAK +case 99: +YY_RULE_SETUP +#line 244 "scanner.l" +tok(T_OR_EQUAL); + YY_BREAK +case 100: +YY_RULE_SETUP +#line 245 "scanner.l" +tok(T_XOR_EQUAL); + YY_BREAK +case 101: +YY_RULE_SETUP +#line 246 "scanner.l" +tok(T_SL_EQUAL); + YY_BREAK +case 102: +YY_RULE_SETUP +#line 247 "scanner.l" +tok(T_SR_EQUAL); + YY_BREAK +case 103: +YY_RULE_SETUP +#line 248 "scanner.l" +tok(T_BOOLEAN_OR); + YY_BREAK +case 104: +YY_RULE_SETUP +#line 249 "scanner.l" +tok(T_BOOLEAN_AND); + YY_BREAK +case 105: +YY_RULE_SETUP +#line 250 "scanner.l" +tok(T_IS_EQUAL); + YY_BREAK +case 106: +YY_RULE_SETUP +#line 251 "scanner.l" +tok(T_IS_NOT_EQUAL); + YY_BREAK +case 107: +YY_RULE_SETUP +#line 252 "scanner.l" +tok(T_IS_IDENTICAL); + YY_BREAK +case 108: +YY_RULE_SETUP +#line 253 "scanner.l" +tok(T_IS_NOT_IDENTICAL); + YY_BREAK +case 109: +YY_RULE_SETUP +#line 254 "scanner.l" +tok(T_IS_SMALLER_OR_EQUAL); + YY_BREAK +case 110: +YY_RULE_SETUP +#line 255 "scanner.l" +tok(T_IS_GREATER_OR_EQUAL); + YY_BREAK +case 111: +YY_RULE_SETUP +#line 256 "scanner.l" +tok(T_SL); + YY_BREAK +case 112: +YY_RULE_SETUP +#line 257 "scanner.l" +tok(T_SR); + YY_BREAK +case 113: +YY_RULE_SETUP +#line 258 "scanner.l" +tok(T_INC); + YY_BREAK +case 114: +YY_RULE_SETUP +#line 259 "scanner.l" +tok(T_DEC); + YY_BREAK +case 115: +YY_RULE_SETUP +#line 260 "scanner.l" +tok(T_OBJECT_OPERATOR); + YY_BREAK +case 116: +YY_RULE_SETUP +#line 261 "scanner.l" +tok(T_DOUBLE_ARROW); + YY_BREAK +case 117: +YY_RULE_SETUP +#line 262 "scanner.l" +tok(T_PAAMAYIM_NEKUDOTAYIM); + YY_BREAK +case 118: +YY_RULE_SETUP +#line 263 "scanner.l" +tok(T_NS_SEPARATOR); + YY_BREAK +case 119: +YY_RULE_SETUP +#line 264 "scanner.l" +tok(T_ELLIPSIS); + YY_BREAK +case 120: +YY_RULE_SETUP +#line 265 "scanner.l" +tok(T_COALESCE); + YY_BREAK +case 121: +YY_RULE_SETUP +#line 266 "scanner.l" +tok(T_SPACESHIP); + YY_BREAK + +/* Casts */ + +case 122: +YY_RULE_SETUP +#line 271 "scanner.l" +tok(T_INT_CAST); + YY_BREAK +case 123: +YY_RULE_SETUP +#line 272 "scanner.l" +tok(T_DOUBLE_CAST); + YY_BREAK +case 124: +YY_RULE_SETUP +#line 273 "scanner.l" +tok(T_STRING_CAST); + YY_BREAK +case 125: +YY_RULE_SETUP +#line 274 "scanner.l" +tok(T_ARRAY_CAST); + YY_BREAK +case 126: +YY_RULE_SETUP +#line 275 "scanner.l" +tok(T_OBJECT_CAST); + YY_BREAK +case 127: +YY_RULE_SETUP +#line 276 "scanner.l" +tok(T_BOOL_CAST); + YY_BREAK +case 128: +YY_RULE_SETUP +#line 277 "scanner.l" +tok(T_UNSET_CAST); + YY_BREAK + +/* Scalars (parsing these doesn't really matter since we just pass them + through literally) */ + +case 129: +YY_RULE_SETUP +#line 283 "scanner.l" +tok(T_LNUMBER); + YY_BREAK +case 130: +YY_RULE_SETUP +#line 284 "scanner.l" +tok(T_DNUMBER); + YY_BREAK +case 131: +YY_RULE_SETUP +#line 285 "scanner.l" +tok(T_STRING); + YY_BREAK +case 132: +YY_RULE_SETUP +#line 286 "scanner.l" +tok(T_VARIABLE); + YY_BREAK +case 133: +/* rule 133 can match eol */ +YY_RULE_SETUP +#line 287 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_CONSTANT_ENCAPSED_STRING); + } + YY_BREAK +case 134: +/* rule 134 can match eol */ +YY_RULE_SETUP +#line 291 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_BACKTICKS_EXPR); + } + YY_BREAK + +/* (HERE|NOW)DOC's */ +case 135: +YY_RULE_SETUP +#line 298 "scanner.l" +{ + push_state(PHP_HEREDOC_START); + yyextra->heredoc_yyleng = yyleng; + yymore(); +} + YY_BREAK + +case 136: +YY_RULE_SETUP +#line 304 "scanner.l" +{ + // Create a new string for the heredoc label. Since we're using yymore above + // yytext will actually start at the "<<<" and not the label. Use of + // heredoc_yyleng jumps past that. Then we add 1 to get past the " or '. The + // match is similar to calculate length. + yyextra->heredoc_label = string( + yytext + yyextra->heredoc_yyleng + 1, + yyleng - yyextra->heredoc_yyleng - 2); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 137: +YY_RULE_SETUP +#line 316 "scanner.l" +{ + yyextra->heredoc_label = string(yytext + yyextra->heredoc_yyleng); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK + +case 138: +/* rule 138 can match eol */ +YY_RULE_SETUP +#line 323 "scanner.l" +{ + yyextra->heredoc_yyleng = yyleng; + set_state(PHP_HEREDOC_NEWLINE); + yymore(); +} + YY_BREAK + +case 139: +/* rule 139 can match eol */ +YY_RULE_SETUP +#line 329 "scanner.l" +{ + if (strncmp( + yyextra->heredoc_label.c_str(), + yytext + yyextra->heredoc_yyleng, yyextra->heredoc_label.size()) == 0) { + + switch (yytext[yyextra->heredoc_yyleng + yyextra->heredoc_label.size()]) { + case ';': case '\n': case '\r': + yyless( + yyleng - ( + yyleng - + yyextra->heredoc_yyleng - + yyextra->heredoc_label.size())); + pop_state(); + tok(T_HEREDOC); + } + } + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 349 "scanner.l" +{ + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 141: +/* rule 141 can match eol */ +YY_RULE_SETUP +#line 353 "scanner.l" +{ + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK + +/* Other */ +case 142: +/* rule 142 can match eol */ +YY_RULE_SETUP +#line 361 "scanner.l" +{ + tok(yytext[0]); + // fix unused function warnings + yy_top_state(NULL); + yyunput(0, 0, NULL); +} + YY_BREAK +case 143: +YY_RULE_SETUP +#line 368 "scanner.l" +YY_FATAL_ERROR( "flex scanner jammed" ); + YY_BREAK +#line 25867 "scanner.lex.cpp" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(PHP): +case YY_STATE_EOF(PHP_HEREDOC_START): +case YY_STATE_EOF(PHP_HEREDOC_NSTART): +case YY_STATE_EOF(PHP_HEREDOC_NEWLINE): +case YY_STATE_EOF(PHP_NO_RESERVED_WORDS): +case YY_STATE_EOF(PHP_NO_RESERVED_WORDS_PERSIST): +case YY_STATE_EOF(PHP_): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yy_start_state_list[yyg->yy_start]; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + yy_current_state += yy_current_state[(*yy_cp ? YY_SC_TO_UI(*yy_cp) : 256)].yy_nxt; + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + int yy_c = 256; + const struct yy_trans_info *yy_trans_info; + + yy_trans_info = &yy_current_state[(unsigned int) yy_c]; + yy_current_state += yy_trans_info->yy_nxt; + yy_is_jam = (yy_trans_info->yy_verify != yy_c); + + if ( ! yy_is_jam ) + { + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + + static void yy_push_state (int _new_state , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth ) + { + yy_size_t new_size; + + yyg->yy_start_stack_depth += YY_START_STACK_INCR; + new_size = (yy_size_t) yyg->yy_start_stack_depth * sizeof( int ); + + if ( ! yyg->yy_start_stack ) + yyg->yy_start_stack = (int *) yyalloc( new_size , yyscanner ); + + else + yyg->yy_start_stack = (int *) yyrealloc( + (void *) yyg->yy_start_stack, new_size , yyscanner ); + + if ( ! yyg->yy_start_stack ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START; + + BEGIN(_new_state); +} + + static void yy_pop_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( --yyg->yy_start_stack_ptr < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]); +} + + static int yy_top_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +YYSTYPE * yyget_lval (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yylval; +} + +void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yylval = yylval_param; +} + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 368 "scanner.l" + + +#ifdef DEBUG +static const char* yy_state_name(int state) { + switch (state) { + case INITIAL: + return "INITIAL"; + case PHP: + return "PHP"; + case PHP_COMMENT: + return "PHP_COMMENT"; + case PHP_EOL_COMMENT: + return "PHP_EOL_COMMENT"; + case PHP_DOC_COMMENT: + return "PHP_DOC_COMMENT"; + case PHP_HEREDOC_START: + return "PHP_HEREDOC_START"; + case PHP_HEREDOC_NSTART: + return "PHP_HEREDOC_NSTART"; + case PHP_HEREDOC_NEWLINE: + return "PHP_HEREDOC_NEWLINE"; + case PHP_NO_RESERVED_WORDS: + return "PHP_NO_RESERVED_WORDS"; + case PHP_NO_RESERVED_WORDS_PERSIST: + return "PHP_NO_RESERVED_WORDS_PERSIST"; + default: + return "???"; + } +} + +static void yy_log_token(int tok) { + const char* tokname = yytokname(tok); + if (tokname) { + fprintf(stderr, "--> %s\n", tokname); + } else { + fprintf(stderr, "--> '%c'\n", tok); + } +} +#endif + +static int yy_token(int tok, yyguts_t* yyg) { + if (YY_START == PHP_NO_RESERVED_WORDS) { + pop_state(); + } + + switch (tok) { + case T_OPEN_TAG: + case T_OPEN_TAG_WITH_ECHO: + case T_OPEN_TAG_FAKE: + push_state(PHP); + break; + + case T_CLOSE_TAG: + pop_state(); + // We need to return a ';', not a T_CLOSE_TAG, because a construct like + // "" is valid and there are about a billion parser rules + // which terminate with ';' so making a new rule like + // "semicolon_or_close_tag" would be hard. The token in yylval has the + // correct type and value, we just don't generate a node. + return ';'; + + // In PHP it's ok to use keywords such as 'if' as field names + // or function names. + case T_OBJECT_OPERATOR: + case T_FUNCTION: + push_state(PHP_NO_RESERVED_WORDS); + break; + + case T_PAAMAYIM_NEKUDOTAYIM: + push_state(PHP_NO_RESERVED_WORDS); + break; + } +#ifdef DEBUG + yy_log_token(tok); +#endif + return yyextra->last_token = tok; +} + +static inline void yy_scan_newlines(const char* text, struct yyguts_t* yyg) { + for (; *text; ++text) { + if (*text == '\r') { + if (text[1] == '\n') { + ++text; + } + ++yyextra->lineno; + } else if (*text == '\n') { + ++yyextra->lineno; + } + } +} + +void xhp_new_push_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf( + stderr, + "--> PUSH(%s -> %s)\n", + yy_state_name(YY_START), + yy_state_name(s)); +#endif + yy_push_state(s, yyg); +} + +void xhp_new_pop_state(struct yyguts_t* yyg) { +#ifdef DEBUG + int s = YY_START; +#endif + yy_pop_state(yyg); +#ifdef DEBUG + fprintf( + stderr, + "--> POP(%s -> %s)\n", + yy_state_name(s), + yy_state_name(YY_START)); +#endif +} + +void xhp_set_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf(stderr, "--> SET(%s)\n", yy_state_name(s)); +#endif + BEGIN(s); +} + +/* @generated */ diff --git a/support/xhpast/scanner.lex.hpp b/support/xhpast/scanner.lex.hpp new file mode 100644 index 00000000..d2150518 --- /dev/null +++ b/support/xhpast/scanner.lex.hpp @@ -0,0 +1,731 @@ +#ifndef xhpastHEADER_H +#define xhpastHEADER_H 1 +#define xhpastIN_HEADER 1 + +#line 6 "scanner.lex.hpp" + +#line 8 "scanner.lex.hpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define xhpast_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer xhpast_create_buffer +#endif + +#ifdef yy_delete_buffer +#define xhpast_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer xhpast_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define xhpast_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer xhpast_scan_buffer +#endif + +#ifdef yy_scan_string +#define xhpast_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string xhpast_scan_string +#endif + +#ifdef yy_scan_bytes +#define xhpast_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes xhpast_scan_bytes +#endif + +#ifdef yy_init_buffer +#define xhpast_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer xhpast_init_buffer +#endif + +#ifdef yy_flush_buffer +#define xhpast_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer xhpast_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define xhpast_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state xhpast_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define xhpast_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer xhpast_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define xhpastpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state xhpastpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define xhpastpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state xhpastpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define xhpastensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack xhpastensure_buffer_stack +#endif + +#ifdef yylex +#define xhpastlex_ALREADY_DEFINED +#else +#define yylex xhpastlex +#endif + +#ifdef yyrestart +#define xhpastrestart_ALREADY_DEFINED +#else +#define yyrestart xhpastrestart +#endif + +#ifdef yylex_init +#define xhpastlex_init_ALREADY_DEFINED +#else +#define yylex_init xhpastlex_init +#endif + +#ifdef yylex_init_extra +#define xhpastlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra xhpastlex_init_extra +#endif + +#ifdef yylex_destroy +#define xhpastlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy xhpastlex_destroy +#endif + +#ifdef yyget_debug +#define xhpastget_debug_ALREADY_DEFINED +#else +#define yyget_debug xhpastget_debug +#endif + +#ifdef yyset_debug +#define xhpastset_debug_ALREADY_DEFINED +#else +#define yyset_debug xhpastset_debug +#endif + +#ifdef yyget_extra +#define xhpastget_extra_ALREADY_DEFINED +#else +#define yyget_extra xhpastget_extra +#endif + +#ifdef yyset_extra +#define xhpastset_extra_ALREADY_DEFINED +#else +#define yyset_extra xhpastset_extra +#endif + +#ifdef yyget_in +#define xhpastget_in_ALREADY_DEFINED +#else +#define yyget_in xhpastget_in +#endif + +#ifdef yyset_in +#define xhpastset_in_ALREADY_DEFINED +#else +#define yyset_in xhpastset_in +#endif + +#ifdef yyget_out +#define xhpastget_out_ALREADY_DEFINED +#else +#define yyget_out xhpastget_out +#endif + +#ifdef yyset_out +#define xhpastset_out_ALREADY_DEFINED +#else +#define yyset_out xhpastset_out +#endif + +#ifdef yyget_leng +#define xhpastget_leng_ALREADY_DEFINED +#else +#define yyget_leng xhpastget_leng +#endif + +#ifdef yyget_text +#define xhpastget_text_ALREADY_DEFINED +#else +#define yyget_text xhpastget_text +#endif + +#ifdef yyget_lineno +#define xhpastget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno xhpastget_lineno +#endif + +#ifdef yyset_lineno +#define xhpastset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno xhpastset_lineno +#endif + +#ifdef yyget_column +#define xhpastget_column_ALREADY_DEFINED +#else +#define yyget_column xhpastget_column +#endif + +#ifdef yyset_column +#define xhpastset_column_ALREADY_DEFINED +#else +#define yyset_column xhpastset_column +#endif + +#ifdef yywrap +#define xhpastwrap_ALREADY_DEFINED +#else +#define yywrap xhpastwrap +#endif + +#ifdef yyget_lval +#define xhpastget_lval_ALREADY_DEFINED +#else +#define yyget_lval xhpastget_lval +#endif + +#ifdef yyset_lval +#define xhpastset_lval_ALREADY_DEFINED +#else +#define yyset_lval xhpastset_lval +#endif + +#ifdef yyalloc +#define xhpastalloc_ALREADY_DEFINED +#else +#define yyalloc xhpastalloc +#endif + +#ifdef yyrealloc +#define xhpastrealloc_ALREADY_DEFINED +#else +#define yyrealloc xhpastrealloc +#endif + +#ifdef yyfree +#define xhpastfree_ALREADY_DEFINED +#else +#define yyfree xhpastfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define xhpastwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define PHP 1 +#define PHP_COMMENT 2 +#define PHP_EOL_COMMENT 3 +#define PHP_DOC_COMMENT 4 +#define PHP_HEREDOC_START 5 +#define PHP_HEREDOC_NSTART 6 +#define PHP_HEREDOC_NEWLINE 7 +#define PHP_NO_RESERVED_WORDS 8 +#define PHP_NO_RESERVED_WORDS_PERSIST 9 +#define PHP_ 10 + +#endif + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +YYSTYPE * yyget_lval ( yyscan_t yyscanner ); + +void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner); + +#define YY_DECL int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#ifndef xhpast_create_buffer_ALREADY_DEFINED +#undef yy_create_buffer +#endif +#ifndef xhpast_delete_buffer_ALREADY_DEFINED +#undef yy_delete_buffer +#endif +#ifndef xhpast_scan_buffer_ALREADY_DEFINED +#undef yy_scan_buffer +#endif +#ifndef xhpast_scan_string_ALREADY_DEFINED +#undef yy_scan_string +#endif +#ifndef xhpast_scan_bytes_ALREADY_DEFINED +#undef yy_scan_bytes +#endif +#ifndef xhpast_init_buffer_ALREADY_DEFINED +#undef yy_init_buffer +#endif +#ifndef xhpast_flush_buffer_ALREADY_DEFINED +#undef yy_flush_buffer +#endif +#ifndef xhpast_load_buffer_state_ALREADY_DEFINED +#undef yy_load_buffer_state +#endif +#ifndef xhpast_switch_to_buffer_ALREADY_DEFINED +#undef yy_switch_to_buffer +#endif +#ifndef xhpastpush_buffer_state_ALREADY_DEFINED +#undef yypush_buffer_state +#endif +#ifndef xhpastpop_buffer_state_ALREADY_DEFINED +#undef yypop_buffer_state +#endif +#ifndef xhpastensure_buffer_stack_ALREADY_DEFINED +#undef yyensure_buffer_stack +#endif +#ifndef xhpastlex_ALREADY_DEFINED +#undef yylex +#endif +#ifndef xhpastrestart_ALREADY_DEFINED +#undef yyrestart +#endif +#ifndef xhpastlex_init_ALREADY_DEFINED +#undef yylex_init +#endif +#ifndef xhpastlex_init_extra_ALREADY_DEFINED +#undef yylex_init_extra +#endif +#ifndef xhpastlex_destroy_ALREADY_DEFINED +#undef yylex_destroy +#endif +#ifndef xhpastget_debug_ALREADY_DEFINED +#undef yyget_debug +#endif +#ifndef xhpastset_debug_ALREADY_DEFINED +#undef yyset_debug +#endif +#ifndef xhpastget_extra_ALREADY_DEFINED +#undef yyget_extra +#endif +#ifndef xhpastset_extra_ALREADY_DEFINED +#undef yyset_extra +#endif +#ifndef xhpastget_in_ALREADY_DEFINED +#undef yyget_in +#endif +#ifndef xhpastset_in_ALREADY_DEFINED +#undef yyset_in +#endif +#ifndef xhpastget_out_ALREADY_DEFINED +#undef yyget_out +#endif +#ifndef xhpastset_out_ALREADY_DEFINED +#undef yyset_out +#endif +#ifndef xhpastget_leng_ALREADY_DEFINED +#undef yyget_leng +#endif +#ifndef xhpastget_text_ALREADY_DEFINED +#undef yyget_text +#endif +#ifndef xhpastget_lineno_ALREADY_DEFINED +#undef yyget_lineno +#endif +#ifndef xhpastset_lineno_ALREADY_DEFINED +#undef yyset_lineno +#endif +#ifndef xhpastget_column_ALREADY_DEFINED +#undef yyget_column +#endif +#ifndef xhpastset_column_ALREADY_DEFINED +#undef yyset_column +#endif +#ifndef xhpastwrap_ALREADY_DEFINED +#undef yywrap +#endif +#ifndef xhpastget_lval_ALREADY_DEFINED +#undef yyget_lval +#endif +#ifndef xhpastset_lval_ALREADY_DEFINED +#undef yyset_lval +#endif +#ifndef xhpastget_lloc_ALREADY_DEFINED +#undef yyget_lloc +#endif +#ifndef xhpastset_lloc_ALREADY_DEFINED +#undef yyset_lloc +#endif +#ifndef xhpastalloc_ALREADY_DEFINED +#undef yyalloc +#endif +#ifndef xhpastrealloc_ALREADY_DEFINED +#undef yyrealloc +#endif +#ifndef xhpastfree_ALREADY_DEFINED +#undef yyfree +#endif +#ifndef xhpasttext_ALREADY_DEFINED +#undef yytext +#endif +#ifndef xhpastleng_ALREADY_DEFINED +#undef yyleng +#endif +#ifndef xhpastin_ALREADY_DEFINED +#undef yyin +#endif +#ifndef xhpastout_ALREADY_DEFINED +#undef yyout +#endif +#ifndef xhpast_flex_debug_ALREADY_DEFINED +#undef yy_flex_debug +#endif +#ifndef xhpastlineno_ALREADY_DEFINED +#undef yylineno +#endif +#ifndef xhpasttables_fload_ALREADY_DEFINED +#undef yytables_fload +#endif +#ifndef xhpasttables_destroy_ALREADY_DEFINED +#undef yytables_destroy +#endif +#ifndef xhpastTABLES_NAME_ALREADY_DEFINED +#undef yyTABLES_NAME +#endif + +#line 368 "scanner.l" + + +#line 729 "scanner.lex.hpp" +#undef xhpastIN_HEADER +#endif /* xhpastHEADER_H */ +/* @generated */ diff --git a/support/xhpast/xhpast.cpp b/support/xhpast/xhpast.cpp new file mode 100644 index 00000000..b5e72fa0 --- /dev/null +++ b/support/xhpast/xhpast.cpp @@ -0,0 +1,121 @@ +#include "ast.hpp" +#include +#include +#include +using namespace std; + +int xhpastparse(void*, xhpast::Node **); + +int xhpast_process(std::string &in); +void print_node(xhpast::Node *node); + +int main(int argc, char* argv[]) { + if (argc != 1) { + // Coupling: modify also src/parser/xhpast/bin/PhutilXHPASTBinary.php + cout << "7.1.4\n"; + return 0; + } + + ifstream inputFile; + istream *inputStream; + inputStream = &cin; + + std::stringbuf sb; + *inputStream >> noskipws >> &sb; + std::string buffer = sb.str(); + inputFile.close(); + + return xhpast_process(buffer); +} + +int xhpast_process(std::string &in) { + + char *buffer; + in.reserve(in.size() + 1); + buffer = const_cast(in.c_str()); + buffer[in.size() + 1] = 0; // need double NULL for scan_buffer + + void* scanner; + yy_extra_type extra; + extra.insert_token = 0;//flags.eval ? T_OPEN_TAG_FAKE : 0; + + xhpast::Node *root = NULL; + + xhpastlex_init(&scanner); + xhpastset_extra(&extra, scanner); + xhpast_scan_buffer(buffer, in.size() + 2, scanner); + xhpastparse(scanner, &root); + xhpastlex_destroy(scanner); + + if (extra.terminated) { + fprintf( + stderr, + "XHPAST Parse Error: %s on line %d\n", + extra.error.c_str(), + (int)extra.lineno); + return 1; + } + + printf("{"); + printf("\"tree\":"); + if (root) { + // Extend the right token for the root node to the end of the concrete + // token stream. This ensure all tokens appear in the tree. If we don't + // do this and the file ends in tokens which don't go to the parser (like + // comments and whitespace) they won't be represented in the tree. + root->r_tok = (extra.token_list.size() - 1); + print_node(root); + } else { + printf("null"); + } + printf(","); + printf("\"stream\":"); + printf("["); + + if (!extra.token_list.empty()) { + for (xhpast::token_list_t::iterator ii = extra.token_list.begin();;) { + printf("[%d, %d]", (*ii)->type, (int)(*ii)->value.length()); + if (++ii != extra.token_list.end()) { + printf(","); + } else { + break; + } + } + } + printf("]"); + printf("}\n"); + + return 0; +} + +void print_node(xhpast::Node *node) { + int l = -1; + if (node->l_tok != -1) { + l = node->l_tok; + } + + if (l == -1) { + printf("[%u]", node->type); + } else { + int r = -1; + + if (node->r_tok != -1) { + r = node->r_tok; + } + + printf("[%u, %d, %d", node->type, l, r); + if (!node->children.empty()) { + printf(", ["); + for (xhpast::node_list_t::iterator ii = node->children.begin();;) { + print_node(*ii); + if (++ii != node->children.end()) { + printf(","); + } else { + break; + } + } + printf("]"); + } + printf("]"); + } +}